在这一节里,我将对我这些年所从事的工作进行更详细的阐述,重点介绍近十年的,因为这些和本书的主体最有联系。
早在20世纪80年代晚期,我就开始利用一种模拟达尔文进化的软件形式,所谓的基因算法(Genetic Algorithm)来设计神经网络,并开始发表一系列的科学研究论文。到我获得博士学位时,我已经发表了20篇论文。
神经网络可以被想象成由像枝节一样的纤维(叫做轴突(axon)和树突(dendrite))连接起来的三维大脑细胞矩阵。来自神经元的信号由轴突发送出去。树突将信号传入神经元。当一个轴突和一个树突相连,形成的联系叫做神经键(synapse)。
在一个真正的生物大脑中,每一个神经元或者大脑细胞拥有上万个神经键。也就是说,它可以被上万个来自其他神经元的信号所影响。这些神经信号同时到达一个神经元,被加强或者加权,然后相加。如果总的信号大于神经元激活阀值,神经元就会被激活,也就是说,它会顺着自己的轴突发送电子脉冲信号,信号的频率决定于总的信号强度大于阀值多少。轴突的脉冲发送到神经键,进一步影响其他的神经元。
一系列神经元图片
神经元(人脑细胞)有许多不同的存在方式。
这种生物神经网络可以用程序模拟。在20世纪80—90年代,一个典型的神经网络里的神经元数目大概有10余个到100个不等。当时我的博士研究工作,每个神经网络通常最多拥有16个神经元。这和我现在工作中使用近1亿个神经元形成了强烈的对比。
下面几页对我的工作进行了更为详细的描述,并且技术性更强。我希望你能够坚持下去,但是如果理解起来确实有困难的话,跳过此节也不会太影响对本书总体的了解。同时在这里提醒您一下,本书最后有一个术语表,可能会对阅读有所帮助。
神经网络,许多神经元相互连接起来形成复杂的神经网络,也就是人脑
CBM演化出来的神经网络的二维图像
基因算法
基因算法(Genetic Algorithm)是一种达尔文进化的程序模拟形式,用来优化任何被进化的性能。实际应用中,我把基因算法用于神经网络的进化。具体通过以下的方式来模拟神经网络的运行。首先要考虑如何描述神经网络本身。我使用16个神经元并且让它们和自身以及其他神经元连接,因此,总共有16×16=256个连接。输入信号的强度,以普通的十进制数字来表示,例如,再乘以一个权值,例如,然后相加。作为这个概念的一个例子,想象一个非常简单的只有两个神经元的网络,因此,有4个连接。神经元1输出的信号通过连接或形成神经突起C11发送到自身,并且通过连接或形成神经突起C12发送到神经元2。 神经元2输出的信号通过连接或形成神经突起C22发送到自身,并且通过连接或形成神经突起C21发送到神经元1。假设在某个时刻的强度是S1和S2(例如,和)。
每一个连接Cij(或者形成神经突起)拥有一个相应的权值Wij,用来和通过该连接输入的信号强度相乘。因此,输送到神经元2的信号总强度应该是(W12* S1 + W22* S2 )。对于神经元1计算也类似。总共有4个这样的权值。假设每一个权值的范围在–1到+1之间。因此,每一个权值可以用二进制小数来表示,比如说8个比特(二进制数字,0或者1)。4个这样的数字可以用4×8=32个比特来表示,可以排列成有32个比特的一行。对于16个神经元,我们将用一个有16×16×8=2 048个比特的行或串来表示我将用来进化的神经网络的16×16个权值。
如果我知道2 048个比特的值(0或者1),我将可以计算所有的256个权值,并且可以通过它们建立一个完全连接的神经网络。相反,如果知道所有的权值,并且知道输入信号的初始值,我们就可以计算出每一个神经元发射时候的信号强度。如果知道了每一个神经元是怎么发射的,就会知道整个神经网络是怎么发射信号的或是怎么运转的。我们可以提取某些神经元的信号,并且把这些信号当作控制信号,来控制一些活动,比如说,通过控制机器人腿的角度来让它行走。