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

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

有帮助吗?

解决方案

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

遗传算法永远不会是最有效的,但是当你几乎不知道使用什么数字时,它们通常会被使用。

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

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

通过优化培训数量,您的意思是什么?如果你的意思是纪元的数量,那就没关系,只要记住训练在某种程度上取决于起始重量而且它们通常是随机的,所以用于GA的适应度函数实际上并不是函数。

其他提示

神经网络和遗传编程的一个很好的例子是NEAT架构(增强拓扑的神经演化)。这是一种发现最佳拓扑的遗传算法。它也被称为擅长保持隐藏节点的数量。

他们还使用这个叫做Nero的游戏。非常独特且非常惊人的实际结果。

博士。斯坦利的主页:

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

在这里你会找到与NEAT相关的所有东西,因为他是发明它的人。

遗传算法可以有效地应用于优化神经网络,但你必须考虑一下你想做什么。

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

使用改进的遗传算法的另一种技术可用于克服反向传播的问题。反向传播通常可以找到局部最小值,但它可以准确,快速地找到它们。将遗传算法与反向传播相结合,例如在Lamarckian GA中,给出了两者的优点。在 GAUL教程中简要介绍了这种技术

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

我不确定你是否应该使用遗传算法。

我认为遗传算法的初始解决方案群体将包含用于神经网络的训练集(给定特定的训练方法)。通常,初始解决方案群体包含针对您的问题的随机解决方案但是,随机训练集不能真正训练你的神经网络。

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

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

或者你在考虑一种完全不同的方法吗?

我不完全确定你正在使用什么样的问题,但GA在这里听起来有点过分。根据您正在使用的参数范围,可能会进行详尽的(或非智能的)搜索。尝试根据前几个值隐藏节点的数量绘制NN的性能,从较小的开始并以较大和较大的增量跳跃。根据我的经验,许多NN在性能方面的表现出人意料地早;您可以很好地了解隐藏节点数的范围最有意义。

对于NN的训练迭代,情况也是如此。更多的培训可以帮助网络达到一定程度,但很快就会停止产生很大影响。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top