我的工作
在这一节里,我将对我这些年所从事的工作进行更详细的阐述,重点介绍近十年的,因为这些和本书的主体最有联系。
早在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个权值。
如果我知道2048个比特的值(0或者1),我将可以计算所有的256个权值,并且可以通过它们建立一个完全连接的神经网络。相反,如果知道所有的权值,并且知道输入信号的初始值,我们就可以计算出每一个神经元发射时候的信号强度。如果知道了每一个神经元是怎么发射的,就会知道整个神经网络是怎么发射信号的或是怎么运转的。我们可以提取某些神经元的信号,并且把这些信号当作控制信号,来控制一些活动,比如说,通过控制机器人腿的角度来让它行走。
为了解释基因算法是怎么运用于此的,想象一下产生了100个随机的比特串,每个长2 048个比特。从每一个比特串我们可以构造一个相应的神经网络。对于每一个网络都采用同样的初始信号来让网络的信号传输启动。提取其中的某些输出信号并且使用它们,比如,通过控制构成棍形腿的4个线条的角度来让棍形腿走路。我们可以测出在一定时间内腿的走动距离。
那些走更长距离的神经网络的比特串,可以存活到下一代。那些走的距离短一些的比特串则会死亡,这就是所谓的达尔文定律,即“适者生存”。比特串越适应,即具有更高性能分数或“高适应值”的就越会复制自己,产生所谓的“孩子”或后代。然后,这些孩子和它们的父辈一起被“变异”,也就是说,每一个比特有一个很小的概率来改变相应的值(0变成1,1变成0)。两个比特串可以“交配”,即一个称为“特征交换”的过程。它有很多方式。一个简单的方式就是,选取两个父比特串或者通常所谓的“染色体”,在同样的位置把它们分成两部分,然后交换相应的部分。这等价于性,基本上来说就是混合来自父辈的基因来产生后代。
越适应的父辈就拥有越多的后代。每一代基因算法拥有一定的总体数量,例如100。大多数的变异和特征交换会让染色体拥有更低的适应值,所以它们将被从总体中清除。偶尔的一次变异或一次特征交换则会增加一点染色体的适应值,以至于在某个时候它会把自己的父亲或者其他低适应值的染色体挤出总体。通过对这样的过程循环几百次,就有可能进化出性能更好的神经网络,或者任何需要进化的目标。
神经系统进化
当我在布鲁塞尔攻读博士学位的时候,研究如何进化出可以随时间变化输出信号的神经网络。据我所知,在此之前没有任何人做这样的事情。在此之前,曾经有人把基因算法应用到神经网络进化中,但这些应用都是静态的,也就是说,输出的信号不会随着时间而改变。我觉得这些限制是不必要的。基因算法应该能够解决随时间改变信号的问题。当我想通了这一点后,就开始研制可以让棍形腿走路的神经网络。我成功了。这需要一些小技巧来让它进化,它确实实现了。
这个发现,说明动态进化(和静态相对应)的神经网络是可以实现的,这个发现给我打开了一个崭新的世界,并且产生了一个新的被称作“神经系统进化”的研究领域。我开始考虑下一步的工作。我产生了一个新想法,那就是如果我用一个神经网络进化出一种行为,那么我就可以用第二个神经网络,也就是说,用一套不同的权值,进化出一个不同的行为。权值设置决定输出信号的动态性。
于是我充满信心,不再局限于二维平面的简单的棍形腿试验,而是开始进行我称作“Lizzy”的三维生物模拟行为。如果我能成功地进化出一种行为,那么就可以进化出一系列的行为,而每一个神经网络对应于一个行为。现在我就可以更换行为,让Lizzy先走,然后改变方向。为了使行为转换更平缓,唯一必要的就是先停止“向前走”行为生成网络(或者是我所称作的模块)的输入,然后输入行走模块。模拟试验显示动作转化很平缓,这非常好。现在我知道我可以让类似四脚生物的Lizzy展示行为库里的所有行为。
现在产生的问题就是:什么时候改变行为。也许这样的决定来源于环境的刺激。我开始试验是否可以进化出探测器模块,例如,信号强度探测器、频率检测器、信号强度差异探测器,等等。是的,这是可能的。另一个逻辑步骤就是试着进化决策类型模块,例如这样的类型——“如果输入1的信号强度大于S1,并且输入2的信号强度小于S2,那么采取An 行为”,也就是说,刺激信号可以传送到执行An行为的模块。
综合所有的三种模块,也就是行为产生(或行为模块)、探测模块和决策模块,看起来好像可以开始制造人工神经系统的工作了。如果有很多这样的模块,那么我认为可以很合适地称这样的集合为一个“人工大脑”。就是在这样的阶段上,我信心满满,开始朝着人工大脑先驱者的方向前进。
FPGA技术的应用
困难依然存在,我在20世纪80年代晚期和90年代初期所使用的计算机对于我所构想的任务来说简直慢得“不可救药”。当我开始试用十几个进化的模块时,Lizzy在计算机屏幕上的模拟速度显著变慢。每当我加上另一个模块的权值后,模拟速度就会变得更慢一些。很显然,这不是一条正确的路。怎样才能解决这个问题呢?
这个时候,也就是1992年,我已经完成了博士学位,开始了在日本的博士后工作。那年夏天,我和我所合作的、在维吉尼亚的乔治·梅森大学的一个电子工程师朋友进行了一次交谈。我问这位熟人怎样才能使我的神经网络模块的进化速度通过电子技术得到提升。讨论了半个小时后,他提到了一个称作FPGA(Field Programmable Gate Array可编程门电路序列)的技术。因为我不是电子工程师,所以我从来没有听过这样的东西。“什么是FPGA?”我问。他告诉我这是一种可编程的特殊芯片,也就是说,我们可以用一个比特串来指令芯片里的电路怎样去自我连接(或者用术语来说,就是自我“设置”)。
我顿时兴奋无比。一个构想闪过我的脑海。既然在过去的几年里我一直利用基因算法来进化神经网络,我现在的倾向是把设置比特串想象成基因算法里的染色体,因此,在芯片里进化硬件的想法看起来是可行的了。我开始不断地“拷问”我的朋友,问这些设置比特串可以无数次的发送吗?他想了一会,回答说,如果芯片是基于RAM(就是计算机内存)的话,那么就像任何计算机里的普通内存一样,可编程芯片可以被无限制地重新编程。
我非常高兴,因为这意味着可以通过发送随机的比特串,来随机地设置或者连接可编程芯片,并产生复杂的随机电路。如果有另外一个被编程的用来测试随机程序芯片的性能电路,那么就可能在硬件上以硬件速度执行基因算法。
我为这个构想而激动不已,以至于我一回到日本的研究组就马上为我的想法作了一次研讨会,并且开创了所谓的“可进化硬件”的研究领域。并发表关于这个想法的论文,向同事宣扬,在会议上作演讲,等等。可进化硬件(Evolutionary Hardware 或者 EH),现在已经是个确立的研究领域了,每年都会在美国、欧洲和日本举行研讨会并出版相关的学术期刊。作为该领域的先驱,我常常在自己的日常工作中试用它的基本思想。
紧接的那一年,即1993年,我转到日本京都的研究实验室从事人工大脑的制造工作。我相信,可进化硬件是一个使人工大脑制造变为可能的有效工具。
我开始写论文,声称我打算在2001年前制造一个拥有10亿神经元的人工大脑。在1993年,宣布这样的计划常常会招来不信任的眼光。因为在那时,大部分的神经网络研究者仅仅使用几十个或者上百个神经元。就像我早几年一样,突然听到某个人说要使用上十亿个神经元,简直是非常可笑的。为此我被嘲笑、奚落。
但是,我坚信我的想法是可行的。如果某个人制造一种基于可进化硬件原理的特殊计算机,那么,其电子性的进化速度将会使大脑制造成为可能。我用数学进行了推理,证明在2001年前制造出拥有十亿个神经元的人工大脑是可行的。我和日本实验室有一个7~8年的合同,因此,我想我有足够的时间来实现我的梦想。
我的第一个任务就是选择一种可以设计和进化神经网络的媒介。我选择使用胞腔自动机(Cellular Automata 或者简称为CA)。在二维胞腔自动机上的每一个细胞都类似于棋盘上的一个方格,但是有两个不同。一个是这个棋盘有无限个方格,另一个是方格的颜色不仅限于黑色或白色,而可以是有限集合里的任何颜色。每个方格在每个单位时间里可以改变其颜色而成为集合中其他的任何一种颜色。一个特定方格所要改变的颜色决定于它现在的颜色和其邻接方格的颜色。举个例子,如果北边方格是红色,东边方格是黄色,南边方格是蓝色,西边方格是绿色,并且中间的方格是棕色,那么在下一个时刻,中心方格将变为紫色。
通过适当地选取几千个这样的规则,我就可能让这些胞腔自动机像神经网络一样生长和进化。举个例子,我可以生成一个三个细胞宽的路径,通过它我可以发送生长细胞,让它们在路径的中间向前移。当生长信号到达生长路径的尽头时,它可以让路径向前延伸、左转、右转、分裂,等等,这些决定于生长信号的颜色。通过改变胞腔自动机路径中间生长信号的顺序,我能够进化基于胞腔自动机的神经网络。
这个过程有两个步骤。第一个是生长阶段。经过几百个单位时间后,生长达到饱和。再没有三个细胞宽的胞腔自动机路径会生长了。这些路径就是神经网络的轴突和树突。当生长阶段一完成,也就是说生长控制细胞从网络里被清除后,生长的神经网络可以被随后的信令阶段所使用。输入信号会被施加,并且会扩散到整个网络。这些信号就像我早些年进化出的神经网络中的信号一样。它们可以在输出点被提取出来,并且可用来控制那些适应值(fitness)或性能可以被测量的过程。这个适应值就是整个网络的适应值,而网络是依次产生于一系列生长指令的,也就是一个含有6个(所有的数字)整数的随机串。
我所做的就是让神经网络和胞腔自动机结合起来。这些据我所知没有前人做过。之所以这么做是因为我认为胞腔自动机是一个可以拥有几十亿个胞腔自动机细胞的合适媒介,归于十亿个神经元是足够了。这对我来说是可实现的。当时的工作站(比个人电脑强大一些的计算机)的内存大概有十亿字节。内存是很便宜的,因此,既然我可以在一个字节(8位)上存储胞腔自动机细胞的状态或颜色,并且我的工作站可以拥有十亿字节的内存,那么我将可以存储十亿个胞腔自动机细胞的颜色,十亿个!这是很多的,足够在其中放入一个拥有大量神经元的人工大脑。空间将不会是问题。那时候的技术允许这样做,这是可实现的。
我花费了一年的时间去写所有的这些规则(北-东-南-西-中的类型规则)来证明二维版本的基于胞腔自动机的神经网络是可以运行,可以进化的。我不得不手工编写(有软件工具来帮助我)大概11 000个这样的命令来让它工作,结果它工作了。我成功地进化了振荡器电路、信号强度探测电路、直线运动探测电路,等等。是时候去研究拥有完全不同拓扑结构的三维版本了。在二维结构里,电路会相互碰到,它们不能跨过另一个电路。然而在三维结构里,胞腔自动机路径可以通过第三维相互交叉。三维电路的动态性和进化性比二维电路要丰富很多。仅仅两年后我就让三维版本开始工作了,这个版本有大概60 000个命令。
但是,这个时候我在日本过得非常郁闷。我们组的顶头上司有一个政策,就是每一个人负责一个项目,这让我觉得非常孤独和智力空虚。我没有一个可以真正交谈的人。在给他们施加了一些压力后,我终于在1996年得到了一个硕士生助手—— 一个年轻的德国人。
我向我的助手解释,三维版本已经基本上完工了,并且我对一直使用的胞腔自动机模型已经越来越清楚。我向他介绍了我想直接在电路上以电子速度产生和进化基于胞腔自动机的神经网络的梦想。我觉得应该简化胞腔自动机模型,让它可以适应于当时的新想法,即1996年的电子技术。他聆听了我的一系列愿望,然后消失了两个星期。当他回来的时候,带来了一个崭新的、更加简化的神经网络模型,它保持了我的旧模型里的大部分特征,但是加了一些新特征,使它变得可以直接实现于电子装置。这个新模型被称为“CoDi”。
大概在这段时间,也就是1996年下半年,一个美国电子工程师和我联系。他认为我的论文很有意思并且想与我合作。我把新模型的一些细节发送给他,问他能否用当时市场上特殊的FPGA板在硬件上实现它,他说应该可以。我的日本老板同意了这个想法并给予资助。这位在美国的新同事开始与我密切合作,不幸的是,一年后失去了我的德国同事。他回到欧洲攻读博士学位。我的日本老板又回到了“一人负责一个项目”的老路上,我比以前变得更郁闷了。
我开始想着离开,但是还不能,因为刚刚批准制造新机器。我和我的小组经理关系也越来越紧张,特别是我发现他有这样的一个政策,那就是把自己的名字加到他下属写的而他一点贡献都没有的学术期刊论文上。他让我把他的名字加到我的一篇学术论文上,我拒绝了,告诉他这在西方被认为是很令人厌恶的,是滥用权利和腐败。之后,我们的关系急剧恶化。我被允许留到1999年年底,然后我将不得不离开。日本的经济在20世纪90年代表现是如此之差,被称为是“迷失的十年”,以至于整个研究机构被认为是前景黯淡、没有希望的,因而不需要在经济萎靡时期给予资助。所以,我和部门里大多数人在千禧年离开了日本。后来我得到了另一份工作,又是在布鲁塞尔,并且是做和日本实验室一样的工作。
在1996到2000年之间,我在美国负责硬件的同事为了建造能够实现我制造人工大脑理想的特殊硬件,一直孜孜不倦地工作着。对他来说,进展缓慢。他从我的日本老板那儿只得到了有限的资助,他只请得起一个全职助手和少数几个兼职助手。
在他工作的过程中,制造FPGA芯片的美国公司决定把这些板子从市场上撤下。我的美国同事不得不和公司争取剩下的一些芯片。这耽误了好几个月。这些芯片最终还是得到了,但是没有被测试。因此,他不得不自己测试,因为没有公司的细致测试,导致了更多的延迟。
直到2000年中期,我所谓的CAM-大脑机器(CBMs)才被充分测试,真正的进化试验可以开始了。CAM即Cellular Automata Machines(胞腔自动机),早期的人工大脑是以胞腔自动机来实现的。
第一个CBM在1999年被送到我的日本实验室,它仍然有缺陷。因为只有未测试的芯片和很少的人力资源,工作进展缓慢。但这些都并不令人沮丧,因为其他的一些人开始对CBM感兴趣。到了2001年,世界上有四台这样的机器。第一台留在我原先的日本京都实验室。第二台被比利时的一个语音处理实验室购买,后来转移到了一个生物信息公司,同样也是在比利时。第三台被我的比利时实验室购买,第四台由我开发硬件的同事所拥有。因为比利时拥有了当时世界上四台CBM中的两台,从某种意义上来说,比利时在这个领域处于世界领先地位。在2000年,我成功地从布鲁塞尔政府获得了100万美元的研究资金,用来制造人工大脑,来控制一个像小猫一样的机器人,使它拥有数百个行为能力。所有这些20世纪90年代的工作都是我80年代博士工作的一些延伸。
“CBM”大脑制造机器,日本,1999年CBM到底能够做些什么呢?我相信它在那个时候是一台真正的神奇机器,当人们意识到它的重要性后,将会在计算机历史上占据重要地位。它直接用电子技术实现基于CoDi胞腔自动机的神经网络模型。它可以在几秒内进化成一个神经网络,也就是说,它可以在此时间内进行一次遗传算法的完整运算,也就是几万个神经电路模块的生成和适应性的计算。它可以以每秒1 300亿次的速度改变胞腔自动机细胞的颜色;它可以处理将近一亿个人工神经元;它的计算能力相当于10 000台个人电脑,因此,绝对是一个值得花费500 000美元的超级计算机。
CBM内部构造
CBM拥有两个主要的任务。第一个是去进化一些单个的神经电路模块或者是我所说的模块。一个神经网络是在拥有24×24×24个细胞或小立方体的三维胞腔自动机中生长或进化的。这个空间可以容纳1 000个神经元。像枝节一样的树突或轴突在这个空间里随机的生长。一个被编程的FPGA用来计算生长的网络神经信号的质量,其基本思想和我在1996年之前所做的工作是类似的。当一个模块进化完成后,它被下载到一个拥有10亿字节的内存中。64 000个这样的模块将被进化,每次一个,每一个都拥有自己的被人类“进化工程师” (Evolutionary Engineers,EE)指定的适应值定义(任务或功能),然后被下载到内存中。然后,“大脑建筑师”(Brain Architects,BA)用软件把这些下载的模块相互连接来形成人工指定的人工大脑结构,用来执行人们需要的命令。
重要的日子—— 神经元在CBM
机器上第一次被演化出来,日本东京,1999年
布鲁塞尔实验室在信息灾难(Dotcom Crash)中破产之后,我转到一所美国大学(Utah State University,犹他州立大学)工作,被迫重新思考。因为我在布鲁塞尔工作的实验室无法向我负责硬件开发的同事支付从其手中购买的CBM机器的资金,这致使他损失了30万美元,迫使他退出了整个项目。因为他对CBM的具体结构有垄断性的认识,这让工作出现了令人惊愕的停顿。我的美国大学付不起50万美元来购买第五台CBM,因此我只好空手来到这所大学。我花了2年多时间去学会怎样去教学和撰写关于可进化硬件和量子计算的论文,直到我意识到我可以再制造人工大脑,多亏了摩尔定律,这次可以便宜得多。
一家英国公司开发了一种能够将普通的计算机软件代码(计算机C语言)翻译成能够设置可编程芯片(FPGA)比特串指令的方法,在得知这个消息后,我构思了一个新的大脑制造研究项目。这种新的途径就是用FPGA电子电路板(花费少于1 000美元)编写基因算法来进化神经网络。这种板子进化一个神经网络电路模块要比个人电脑利用软件(后者需要几个小时甚至几天来进化一个模块)快几十倍。
这些模块一个接一个地在硬件上被进化,所得结果被下载到电脑上。每一个模块都有自己的进化功能,是被“大脑建筑师”(BA)明确说明的。当几万个这样的模块被下载到PC上,将需要一种特殊的软件来连接这些模块,例如,模块M3728的输出将会被连接到模块M9356的第二个输入口。然后用PC来进行整个人工大脑的实时(平均每秒每个神经元25个神经信号)神经信令活动。如今的PC可以实时模拟10 000个模块的神经信令活动。整个我所谓的“便宜的大脑制造”方法花费低于2 000美元,因此,我希望这个概念可以扩展到其他的大学和研究所里。理所当然,如果我真的可以在近几年里制造出一个这样的大脑并且证明它可以控制机器人完成一些任务的话,这对于我的同事们和资助者来说将会更有说服力。
本书评论