有没有一种有效的方法来实现存储在矩阵中的个体的随机交叉?

人工智能 神经网络 机器学习 遗传算法 交叉运营商 变异算子
2021-11-16 08:23:33

我正在使用 GA 来优化 Matlab 中的 ANN。这个 ANN 非常基本(输入、隐藏、输出),但输入大小非常大(10,000),输出大小为 2,因为我必须对要分类的图像类别。

权重采用 2 个矩阵 (10,000*m) 和 (m * 2) 的形式。我现在正试图用突变进行基因交叉。

由于权重在矩阵中,是否有一种有效的方法来实现随机交叉(带有突变)而不以逐点方式进行?

1个回答

首先,在我们开始之前,我建议您参考网络上的类似问题https://stackoverflow.com/questions/828486/neural-net-optimize-w-genetic-algorithm

大多数 ML 研究都集中在梯度算法上,通常是反向传播的一种变体,以获得模型的权重。

然而,由于遗传算法是强大的搜索算法,它们可以用来调整和优化神经网络的结构和参数。

遗传算法是一种随机搜索技术,它利用进化和自然遗传学的原理引导一群解决方案达到最佳状态。

遗传算法尤其能够处理目标函数不连续/不可微、非凸、多模态或嘈杂的问题。(达密沙 D)

结合遗传算法和误差反向传播的算法已被证明比纯反向传播具有更好的收敛性。

为了促进两个父母之间信息交换的交叉操作,我们需要在遗传算法中定义四个组件。

  • 一种编码解决染色体问题的方法;
  • 一个适应度函数,它为给它的每个染色体返回一个值;
  • 一种初始化染色体种群的方法;
  • 可应用于父母以改变其遗传组成(即突变)的运算符。

在这些混合系统中,网络不同层的权重使用遗传算法进行优化。实验结果表明,在某些情况下,遗传算法可以比手动调整模型更好地优化 ANN 的超参数。

关于实现随机交叉的有效方法,这里有一些东西可以帮助您入门(代码由 Dan Golding 2013 提供)

%Randomly choose 2 individuals

n = size(new_pop, 1);
l = size(new_pop, 2);

breeders = new_pop(randperm(n,2),:);

%Choose a crossover point

cp = randperm(l, 1);

%Crossover

b1 = [breeders(1, 1:cp), breeders(2, cp+1:end)];
b2 = [breeders(2, 1:cp), breeders(1, cp+1:end)];

如需进一步参考,我建议您查看以下链接

Matlab交叉遗传算法

https://stackoverflow.com/questions/17696323/matlab-crossover-genetic-algorithm

matlab中的单点有序交叉

https://stackoverflow.com/questions/16302382/single-point-ordered-crossover-in-matlab

使用遗传算法优化多个输入的神经网络。

https://www.mathworks.com/matlabcentral/answers/180513-to-optimize-a-neural-network-of-multiple-inputs-using-a-genetic-algorithm?s_tid=gn_loc_drop

如何使用遗传算法 (GA) 在神经网络工具箱中训练神经网络

https://www.mathworks.com/matlabcentral/answers/100323-how-can-i-use-the-genetic-algorithm-ga-to-train-a-neural-network-in-neural-network-toolbox