为了解释基因算法是怎么运用于此的,想象一下产生了100个随机的比特串,每个长2 048个比特。从每一个比特串我们可以构造一个相应的神经网络。对于每一个网络都采用同样的初始信号来让网络的信号传输启动。提取其中的某些输出信号并且使用它们,比如,通过控制构成棍形腿的4个线条的角度来让棍形腿走路。我们可以测出在一定时间内腿的走动距离。
那些走更长距离的神经网络的比特串,可以存活到下一代。那些走的距离短一些的比特串则会死亡,这就是所谓的达尔文定律,即“适者生存”。比特串越适应,即具有更高性能分数或“高适应值”的就越会复制自己,产生所谓的“孩子”或后代。然后,这些孩子和它们的父辈一起被“变异”,也就是说,每一个比特有一个很小的概率来改变相应的值(0变成1,1变成0)。两个比特串可以“交配”,即一个称为“特征交换”的过程。它有很多方式。一个简单的方式就是,选取两个父比特串或者通常所谓的“染色体”,在同样的位置把它们分成两部分,然后交换相应的部分。这等价于性,基本上来说就是混合来自父辈的基因来产生后代。
越适应的父辈就拥有越多的后代。每一代基因算法拥有一定的总体数量,例如100。大多数的变异和特征交换会让染色体拥有更低的适应值,所以它们将被从总体中清除。偶尔的一次变异或一次特征交换则会增加一点染色体的适应值,以至于在某个时候它会把自己的父亲或者其他低适应值的染色体挤出总体。通过对这样的过程循环几百次,就有可能进化出性能更好的神经网络,或者任何需要进化的目标。
神经系统进化
当我在布鲁塞尔攻读博士学位的时候,研究如何进化出可以随时间变化输出信号的神经网络。据我所知,在此之前没有任何人做这样的事情。在此之前,曾经有人把基因算法应用到神经网络进化中,但这些应用都是静态的,也就是说,输出的信号不会随着时间而改变。我觉得这些限制是不必要的。基因算法应该能够解决随时间改变信号的问题。当我想通了这一点后,就开始研制可以让棍形腿走路的神经网络。我成功了。这需要一些小技巧来让它进化,它确实实现了。
这个发现,说明动态进化(和静态相对应)的神经网络是可以实现的,这个发现给我打开了一个崭新的世界,并且产生了一个新的被称作“神经系统进化”的研究领域。我开始考虑下一步的工作。我产生了一个新想法,那就是如果我用一个神经网络进化出一种行为,那么我就可以用第二个神经网络,也就是说,用一套不同的权值,进化出一个不同的行为。权值设置决定输出信号的动态性。
于是我充满信心,不再局限于二维平面的简单的棍形腿试验,而是开始进行我称作“Lizzy”的三维生物模拟行为。如果我能成功地进化出一种行为,那么就可以进化出一系列的行为,而每一个神经网络对应于一个行为。现在我就可以更换行为,让Lizzy先走,然后改变方向。为了使行为转换更平缓,唯一必要的就是先停止“向前走”行为生成网络(或者是我所称作的模块)的输入,然后输入行走模块。模拟试验显示动作转化很平缓,这非常好。现在我知道我可以让类似四脚生物的Lizzy展示行为库里的所有行为。
现在产生的问题就是:什么时候改变行为。也许这样的决定来源于环境的刺激。我开始试验是否可以进化出探测器模块,例如,信号强度探测器、频率检测器、信号强度差异探测器,等等。是的,这是可能的。另一个逻辑步骤就是试着进化决策类型模块,例如这样的类型——“如果输入1的信号强度大于S1,并且输入2的信号强度小于S2,那么采取An 行为”,也就是说,刺激信号可以传送到执行An行为的模块。
综合所有的三种模块,也就是行为产生(或行为模块)、探测模块和决策模块,看起来好像可以开始制造人工神经系统的工作了。如果有很多这样的模块,那么我认为可以很合适地称这样的集合为一个“人工大脑”。就是在这样的阶段上,我信心满满,开始朝着人工大脑先驱者的方向前进。