Neural network 如何防止程序陷入局部最大值(前馈人工神经网络和遗传算法)

Neural network 如何防止程序陷入局部最大值(前馈人工神经网络和遗传算法),neural-network,artificial-intelligence,genetic-algorithm,Neural Network,Artificial Intelligence,Genetic Algorithm,我正在研究一个前馈人工神经网络(ffann),它将以简单计算的形式接收输入并返回结果(充当袖珍计算器)。结果并不准确。 利用遗传算法对网络权值进行训练 目前,我的程序在以下位置停留在本地最大值: 回答正确率为5-6%,误差为1% 回答正确率为30%,错误率为10% 回答正确率为40%,错误率为20% 回答正确率为45%,错误率为30% 回答正确率为60%,错误率为40% 我目前使用两种不同的遗传算法: 第一个是基本的选择,从我的人群中随机挑选两个,把身体状况最好的一个命名为赢家,另一个命名为

我正在研究一个前馈人工神经网络(ffann),它将以简单计算的形式接收输入并返回结果(充当袖珍计算器)。结果并不准确。
利用遗传算法对网络权值进行训练

目前,我的程序在以下位置停留在本地最大值:

  • 回答正确率为5-6%,误差为1%
  • 回答正确率为30%,错误率为10%
  • 回答正确率为40%,错误率为20%
  • 回答正确率为45%,错误率为30%
  • 回答正确率为60%,错误率为40%
我目前使用两种不同的遗传算法:
第一个是基本的选择,从我的人群中随机挑选两个,把身体状况最好的一个命名为赢家,另一个命名为输家。失败者从胜利者那里得到一个砝码

第二种是变异,来自选择的失败者根据产生的错误数量接受轻微的修改。(适用性由正确答案和错误答案决定)。 因此,如果网络输出大量错误,它将收到一个大的修改,如果它有许多正确的答案,我们接近一个可接受的目标,修改将更小

那么问题是:我有什么方法可以防止我的ffann陷入局部最大值?
我是否应该将我当前的遗传算法修改为更高级、变量更多的算法?
我应该创建额外的变异还是交叉?
或者我应该尝试将我的变异变量修改为更大/更小的变量吗

这是一个大话题,如果我遗漏了任何可能需要的信息,请留下评论

编辑: 将变异数调整到一个更合适的值可以获得更好的回答率,但还远远没有得到认可:

  • 回答正确率为10%,误差率为1%
  • 33%的答案正确,10%的误差
  • 回答正确率为43%,错误率为20%
  • 回答正确率为65%,错误率为30%
  • 答案正确率为73%,错误率为40%
该网络目前是一个非常简单的3层结构,有3个输入,2个神经元位于唯一的隐藏层,一个神经元位于输出层。
使用的激活函数是Tanh,将值置于-1和1之间。
选择型交叉非常简单,如下所示:

[a1, b1, c1, d1] // Selected as winner due to most correct answers
[a2, b2, c2, d2] // Loser
失败者最终会从胜利者那里得到一个值,将该值直接向下移动,因为我认为数组(权重)中的位置关系到它的性能

突变非常简单,在失败者权重数组中的随机权重上增加一个非常小的值(目前大约在0.01和0.001之间),50/50的概率为负值

以下是一些培训数据示例:

1, 8, -7 // the -7 represents + (1+8)
3, 7, -3 // -3 represents - (3-7)
7, 7, 3  // 3 represents * (7*7)
3, 8, 7  // 7 represents / (3/8)

当使用GAs训练ANN时,一个常见的问题是种群变得高度相关 随着培训的进展。 随着误差变化的减少,您可以尝试增加突变的机会和/或效果。
用英语。当接近局部极小值时,由于交叉和适应度选择,种群在遗传上变得相似。你可以通过增加突变的机会来引入变异。

在遗传算法中使用小生境技术。小生境是一种有用的替代方法。考虑到整个群体的相似性,每个解的分数(我认为是某种形式的二次误差)都会改变。这保持了种群内部的多样性,避免了过早收敛和陷入局部最优

请看这里:


您可以对选择方案做一个简单的修改:可以将总体视为具有一维空间结构-一个圆(考虑第一个和最后一个位置相邻)

位置i的个体生产允许仅涉及i本地邻居的父母,其中邻居定义为i距离R内的所有个体。除此之外,遗传系统没有任何变化

它只有一行或几行代码,可以帮助避免过早收敛

参考资料:
(2005)-Lee Spector,Jon Klein

神经网络不是遗传算法。你用的是哪一种?哦,我想我当时真的不清楚这一点。我使用一个神经网络,它使用遗传算法进化权重,每次都从随机权重开始。我将更新我的问题。@PontusMagnusson您可以添加一些关于网络必须解决的计算(示例训练数据)和一些关于您使用的网络拓扑(激活器功能、隐藏层、输入/输出)的内容。你也会改变网络结构吗?我添加了更多关于网络及其结构的信息。现在,我只需要改变权重,使其符合程序。我担心的是,仅仅为袖珍计算器这样一个广泛的问题调整权重是不够的,我希望我必须对这个问题采取稍微不同的方法,或者对非常高的公认错误率的结果感到满意。研究的重点是尝试一些东西,看看什么是有效的。唯一能回答你问题的人是你。你的想法是合理的。试试看它们是否管用。