我对人工神经网络和NeuroEvolution算法都很陌生。我正在尝试实现名为NEAT (增广拓扑的NeuroEvolution)的算法,但是原版公文中的描述忽略了如何进化网络权重的方法。
连接权在任何NE系统中都会发生变异,每一次连接都会受到干扰或不受影响。
我已经做了一些关于如何在NE系统中变异权重的搜索,但不幸的是,我找不到任何详细的描述。
我知道,在训练神经网络时,通常使用反向传播算法来校正权值,但只有在经过世代固定的拓扑(结构)并且知道问题的答案时,它才能起作用。在NeuroEvolution中,您不知道答案,您只有适应度函数,所以这里不可能使用反向传播。
发布于 2015-07-30 19:17:05
我有使用遗传算法训练固定拓扑神经网络的经验(本文称之为“传统的NE方法”)。我们使用了几种不同的突变和复制算子,我们随机选择了这些操作。
在父母两人的情况下,我们的复制操作人员(也可以称为这些交叉操作)包括:
我们的变异操作人员在一个网络上运行,并选择一个随机权重,或者:
你当然可以通过变异操作符获得创造性,你可能会发现一些更适合你特定问题的东西。
IIRC在随机比例选择的基础上,从种群中选择双亲,然后对每个父本进行突变操作,再通过繁殖操作运行这些变异的父本,通过适应度函数对两个后代进行运行,选择最合适的一个进入下一代种群。
当然,在您的情况下,因为您也在进化拓扑,所以上面的一些复制操作没有什么意义,因为两个选定的父母可能有完全不同的拓扑结构。在整洁的网络中(据我理解),你可以在网络的非连续层之间建立联系,例如,你可以在第四层有一个第一层神经元,而不是直接喂给第二层。这使得涉及一个神经元所有权重的交换操作变得更加困难--你可以尝试在网络中选择两个重量相同的神经元,或者坚持在网络中交换单个权重。
我知道,在训练NE时,通常使用反向传播算法来校正权重。
实际上,在NE中没有用过。正是遗传算法所做的突变训练了网络,使其成为后备的替代方案。在我们的例子中,由于网络中的一些“非正统”的添加,我不想再深入,所以后备支持是有问题的。然而,如果支持是可能的话,我也会同意的。用遗传学的方法训练NNs,似乎比后盾可能要慢得多。此外,当使用进化方法调整网络的权重时,您需要调整GA的各种参数,如交叉和变异率。
发布于 2015-07-30 07:37:46
整整齐齐地说,一切都是通过基因操作者来完成的。正如您已经知道的,拓扑是通过交叉和变异事件来进化的。
权重是通过突变事件来进化的。就像在任何进化算法中一样,存在着随机改变权重的可能性(您可以生成一个全新的数字,也可以向原始权重添加一个正态分布的随机数)。
实现整洁似乎是一项简单的任务,但是有很多小的细节使得它最终变得相当复杂。您可能希望查看现有的实现并使用其中之一,或者至少受到它们的启发。所有重要的东西都可以在整洁的用户页面找到。
https://stackoverflow.com/questions/31708478
复制相似问题