神经网络优化 w/ 遗传算法

Posted

技术标签:

【中文标题】神经网络优化 w/ 遗传算法【英文标题】:Neural Net Optimize w/ Genetic Algorithm 【发布时间】:2010-10-24 03:08:06 【问题描述】:

遗传算法是优化隐藏节点数量和人工神经网络训练量的最有效方法吗?

我正在使用 Matlab 中的 NNToolbox 对神经网络进行编码。我对任何其他优化技术建议持开放态度,但我最熟悉 GA。

【问题讨论】:

【参考方案1】:

我不确定您是否应该为此使用遗传算法。

我想您的遗传算法的初始解决方案群体将包括您的神经网络的训练集(给定特定的训练方法)。通常,初始解决方案群体由您的问题的随机解决方案组成。但是,随机训练集并不能真正训练您的神经网络。

遗传算法的评估算法将是所需训练量、神经网络解决特定问题的质量以及隐藏节点数量的加权平均值。

因此,如果您运行此程序,您将获得在神经网络质量(= 训练时间、隐藏节点数、网络的问题解决能力)方面提供最佳结果的训练集。

或者您正在考虑采用完全不同的方法?

【讨论】:

【参考方案2】:

实际上,您可以使用 GA 对 NN 进行多项优化。 您可以优化结构(节点数、层数、激活函数等)。 您也可以使用 GA 进行训练,即设置权重。

遗传算法永远不会是最有效的,但它们通常在您不知道要使用什么数字时使用。

对于训练,您可以使用其他算法,包括反向传播、nelder-mead 等。

您说您想优化隐藏节点的数量,为此,遗传算法可能就足够了,尽管远非“最佳”。您正在搜索的空间可能太小而无法使用遗传算法,但它们仍然可以工作并且 afaik,它们已经在 matlab 中实现,所以没什么大不了的。

优化完成的训练量是什么意思?如果您指的是 epoch 数,那很好,只要记住训练在某种程度上依赖于起始权重,而且它们通常是随机的,因此用于 GA 的适应度函数实际上并不是一个函数。

【讨论】:

使用 GA 训练 ANN 比仅使用 GP 有什么好处?人工神经网络的好处是它们模仿了大脑,并且它们可以使用方法以智能的方式更新权重,例如反向传播,以确保网络朝着正确的方向发展(就像在大脑中一样)。但是当使用 GA 更新权重时,你会失去所有这些,而且在我看来,你似乎不再比 GP 有任何真正的优势,因为现在网络是否会改善取决于机会。您对此有何看法?【参考方案3】:

我不完全确定您正在处理什么样的问题,但 GA 在这里听起来有点矫枉过正。根据您使用的参数范围,详尽的(或其他不智能的)搜索可能会起作用。尝试绘制关于前几个值的隐藏节点数量的 NN 性能,从小处开始并以越来越大的增量跳跃。根据我的经验,许多神经网络的性能出乎意料地早到了平台期。您也许能够很好地了解隐藏节点编号的范围最有意义。

神经网络的训练迭代通常也是如此。更多的训练在一定程度上有助于网络,但很快就不再有太大的效果了。

在大多数情况下,这些 NN 参数不会以非常复杂的方式影响性能。一般来说,增加它们会在一段时间内提高性能,但随后会出现收益递减。在这种简单的曲线上找到一个好的值并不是真正需要 GA 的。如果隐藏节点(或训练迭代)的数量确实导致性能以复杂的方式波动,那么像 GA 这样的元启发式算法可能是合适的。但在采取这条路线之前,请先尝试一下蛮力方法。

【讨论】:

蛮力对我的应用程序不起作用,因为我的数据非常嘈杂(想想 EEG 数据)。【参考方案4】:

我倾向于说遗传算法是一个好主意,因为您可以从最小解决方案开始并增加神经元的数量。您想要为其找到最佳点的“质量函数”很可能是平滑的并且只有很少的颠簸。

如果您必须经常找到此最佳 NN,我建议您使用优化算法,并在您的情况下使用数值配方中描述的准牛顿,这对于函数评估成本高昂的问题是最佳的。

【讨论】:

【参考方案5】:

遗传算法可用于优化神经网络,但您必须考虑一下您想要做什么。

大多数“经典”神经网络训练算法,例如反向传播,只优化神经元的权重。遗传算法可以优化权重,但这通常效率低下。但是,正如您所问的,它们可以优化网络的拓扑结构以及您的训练算法的参数。但是,您必须特别警惕创建“过度训练”的网络。

采用改进的遗传算法的另一种技术可用于克服反向传播问题。反向传播通常会找到局部最小值,但它可以准确快速地找到它们。将遗传算法与反向传播相结合,例如,在拉马克 GA 中,具有两者的优点。在GAUL tutorial

【讨论】:

【参考方案6】:

神经网络和遗传编程的一个很好的例子是 NEAT 架构(增强拓扑的神经进化)。这是一种寻找最优拓扑的遗传算法。它还擅长减少隐藏节点的数量。

他们还用它制作了一款名为 Nero 的游戏。非常独特且非常惊人的有形结果。

博士。斯坦利的主页:

http://www.cs.ucf.edu/~kstanley/

在这里,您可以找到与 NEAT 相关的几乎所有内容,因为他是发明者。

【讨论】:

还有一个用于此的 C# 库 --> SHARPNEAT sharpneat.sourceforge.net【参考方案7】:

当您的目标函数不连续时,使用遗传算法训练神经网络有时很有用。

【讨论】:

在这种情况下为什么不直接使用 GP?如果您使用 GA 来更新神经网络中的权重,而不是使用某种智能方法来确保所有权重都在正确的方向上更新,那么与仅使用 GP 相比,您似乎失去了使用神经网络的优势。

以上是关于神经网络优化 w/ 遗传算法的主要内容,如果未能解决你的问题,请参考以下文章

优化预测基于matlab遗传算法优化BP神经网络预测含Matlab源码 1376期

优化预测基于matlab遗传算法优化BP神经网络预测含Matlab源码 1376期

优化预测基于matlab遗传算法优化BP神经网络预测含Matlab源码 1376期

找大神求助,我想用遗传算法优化神经网,程序如下,但出现了后面的问题:

优化预测基于matlab遗传优化BP神经网络预测股价含Matlab源码 1250期

电力负荷预测基于matlab遗传算法优化BP神经网络电力负荷预测含Matlab源码 1524期