先说点什么
这应该是我第三次读这本书,一本改自冯·诺依曼讲稿,并且一点都算不上厚的小书。第一次看这本书的时候恰逢高考之后无聊闲读随手翻一翻,全然不知所云。第二次翻看已经是大二学期,当时的水平也仅仅是勉强读完全书。当初自以为是任务很多事情就如长辈所说“长大后你就明白了”这样,后来才明白知识水品不尽是随着年龄就能自然而然的提高。所以即便是现在再读这本书,依然感到有太多自己水平难以触及的深度。
一点点的前言
《计算机与人脑》这本书与1958年出版,而在一年前冯诺依曼已经病逝。正如书名,整本书分为计算机和人脑两个部分。提到冯诺依曼和计算机,就不得不说到经典的冯诺依曼体系结构,即便如今的计算机进步在某些程度上已经步入非冯结构,冯氏的计算机理论依然存在着相当的影响,当然这种影响除了优势性,难免存在着局限性。而关于人脑,冯诺依曼本人也坦然说自己是站在一个数学家的立场上,对人脑可能的工作概念进行一点描述,虽然如今对于人脑的认识已经突破了冯诺依曼引入的脉冲概念和逻辑概念,可惜随着历史的发展,人们对于脑的研究进展却没有那么迅速,对于各种脑机制仍然处于通过表象验证可能性猜测。
读后感一样的读书笔记
从计算机开始说起
从传统意义上来说,计算机实际上不过是计算工具的一种,而计算工具这个概念就非常模糊了。所以现在我们所称之为计算机的计算工具,仅仅算得上是当前时期的高级计算工具。
在冯诺依曼那个时代,计算机这种高级计算工具分为有“模拟计算机”和“数字计算机”两类。如果你完全不熟悉第一类,模拟计算机,那很正常,因为现如今随着数字计算机发展进步表现的更加高效,模拟计算机几乎很难见到了。你可能听计算机老师讲过,早期的计算机一台几乎占地学校半个机房教室那么大,或者关于那些需要转动齿轮才能运转计算机的故事,那所讲的大概就是早期的模拟计算机。模拟计算机的“模拟”在于,每一个数都需要用适当的物理量来表示,电流强度、电压大小、齿轮转动角度等等。而你更熟悉的数字计算机,则采用了一种虽然看起来不那么直观,反而更加高效的表达和储存方式符号与组合。也就是说,在数字计算机中,机器只考虑是否有电脉冲,分别用0和1来表示,于是,由戈特弗里德·莱布尼茨提出的二进制计算方式,在数字计算机的发现下实现了其应用。
基本运算是计算机功能的基础,常见的基本运算——加减乘除,相比于模拟计算机通过物理量实现的基本运算,数学计算机则需要严格的逻辑规则,尤其是数字计算机中二进制的乘除运算。比如模拟计算机的加减运算,通过物理量的叠加即可得出结果,数字计算机的加减运算则基于代替脉冲的0/1符号,通过二进制,得出和数字与进位数,再相应地组合起来,光是听起来就感觉到逻辑规则带来的复杂感。逻辑在一方面对运算进行了限制,在另一方面也保证了运算的实际作用——取得问题的答案,所以除了基本运算,计算机还要有对应运算的逻辑控制。这点对于模拟计算机可以表现的更加直观,因为输入与输出是通过“轴”关联起来。想想一下一台由齿轮构成的计算机,当你转动输入端的齿轮,各个齿轮间通过轴的联动,使得输出端的齿轮转动。就是说,设置好的固定装置,就定下了逻辑控制。其进一步的逻辑控制——插入式控制,现在我们所用的插入式继电器正是发挥的这种功能。相对于模拟计算机的这种固定装置,依靠符号的数字计算机要实现逻辑控制,就没那么直观了。在数字计算机中,每一基本运算只需要一个器官(比如仅仅一条电路的通电与闭合两种状态),那么就需要大量的储存器官来储存运算的部分结果和结果。比如你要通过数字计算机实现简单的1+1,在电路中,第一次通电符号1代表的数字1要储存到一个储存器官中,在下一个1输入进来后,再提取出来进行1+1的运算。当计算更加复杂,参与计算的数更多的时候,就需要更多的储存器官——储存寄存器,同时在提取所储存的数值时,需要指定在哪一个寄存器中提取,这就是记忆存储控制。回顾一下冯诺依曼体系结构,由运算器、控制器、存储器、输入设备和输出设备构成的计算系统,把程序本身当做数据一样储存,很好的解决了运算的执行模式问题(似乎同时带来了一定局限性,比如程序本身作为数据储存所避免不了的BUG问题)。
那么为什么看似更加复杂的数字计算机却发展更快并且运用更为广泛?这就牵扯到精确度的问题。相比于模拟计算机,数字计算机有更高的精确度,并且对其提升具有更高的可行性。拿书中的例子说明,想想一下在模拟计算机中,1:10ⁿ的精确度,要求在一个时间内间隔中,有10ⁿ个脉冲,假设n=2,机器的速度就要减少100倍,这种情况对于一个计算工具来说无疑是相当不妙的。而数字计算机中1:10ⁿ的精确度,不过是需要n位数字,假设将n=12提高到n=13,不过是在12位数字后再加一位。
当然,抛开严格的定义,模拟方法和数字方法并非是完全冲突,冯诺依曼也在书中提及模拟原则与数字原则同时存在的计算机模式。对于现代的计算机而言,我们所考虑的是一台计算机组成元件的工作效率问题,当然这个问题是在冯诺依曼体系结构下考虑的,所以有个非常值得关注的问题,就是在运算过程中,计算机不得不把一部分时间花费在“数据”存储与读取这个来来回回的过程上。当计算机在解决一个问题时,输入进来的数据一个个保存在寄存器中,然后每用到一个数据再去读取(或者说是寄存器“复述”这个数据),存入时间和存取时间在运算过程中就会增加整个运算所用的时间,这种结构在硬件上实现似乎是相当没有经济性,哪怕是现在纳米级的真空管元件构成的计算机处理器,性能的提升也是避免不了这种瓶颈。对于这个问题,很多研究正朝向非冯体系结构,不过不得不说冯·诺依曼个人对于计算机的构想和展望,仍然会在未来相当的时间内,发挥着其固有的优势,并且另一方面给我们当下的发展带来一定的局限。
还有人脑这部分
如果简单翻阅一下近些年来关于人脑的研究,你也会像我一样感叹,为什么科学界对于人脑的研究进展如此缓慢,虽不至于原地踏步,但也是新的发现近乎寥寥。人脑是一个人身上最重要的器官,重要到在临床上只有脑死亡才可以被认定为个体死亡。
大脑是神经系统最高级部分,其中含有丰富的神经细胞,也就是神经系统的基本“元件”——神经元,而其工作方式也颇为简单,承载电信号、化学信号。当一个刺激输入进来,电信号或者说神经脉冲沿着神经细胞的轴突传导。这个过程在生物结构上实现是相当复杂的,脉冲传导在轴突经过时细胞膜的电化学性变化,离子渗透率发生变化,细胞液发生变化,直到轴突末端,电信号转化为化学信号,神经递质释放,下一个神经细胞接受刺激,如此。要知道,当一个刺激发生时,往往是一簇神经共同发起反应,由此对比一下人造计算机上,一个刺激唤醒一簇神经细胞工作,脉冲出现时表示一个值,无脉冲表示另一个值,那么神经脉冲也可以看作是两值符号。冯·诺依曼对于神经工作特点从生物学方面进行了考虑,那就是当一个神经细胞接受刺激产生脉冲之后,它需要一定的时间恢复到可以产生下一次神经脉冲的状态,相比于当时的人造元件,神经细胞就显得没那么高效了(冯诺依曼也指出神经元疲乏的恢复是逐渐的)。
有一点需要注意的是,神经细胞响应各种刺激并非单纯的无或有的模式,并且遗憾的是即使今天也没有一个确切的结论。不过有神经科学家认为,神经系统对于刺激的响应,在一定程度上是采取少数服从多数原则,神经系统是以统计的方法接纳神经元的信息。通过这个观点,神经系统的逻辑功能也会因为刺激的变化而发生一定的改变。比如当你看到一个微弱的亮点,视网膜上的神经细胞对微弱的光刺激发生反映,对于不那么大的刺激量,视网膜上的神经细胞可能仅仅有一小部分被激活工作,而当一束强光从面前照过来,视网膜上的神经细胞会大量被激活工作,仔细想想这种理论下神经系统非常具有经济性,并且在这样的过程中,模拟原则和数字原则都发挥了其相对的作用。这样“阈值”这个概念也得到了很好的解释。
如果神经系统中神经元的工作方式按照上述理论,那么神经系统就需要一个发挥“记忆功能”的元件,冯诺依曼本人对于记忆表示“我们对记忆的本质及其位置,现在仍然是无知的”,至今也是一样。如果把记忆当作是神经系统形成的固定运算方式,以某些固定神经细胞功能为基础,就很难解释为什么随着细胞的代谢更替和记忆消退,我们仍然会保留部分的原有记忆内容。假设在神经系统确实存在记忆功能元件,继而考虑记忆容量问题,如果说神经系统中记忆元件在工作时是像数字计算机那样,通过对输入信息编码再次储存然后再提取,你可以想想我们日常生活将是各种大脑短路现象。事实上人脑对于信息加工的质量远远高于对信息保存的质量,并且这个加工过程十分具有经济性。如果让Alpha-go以人脑的功率运转,恐怕在人机围棋对抗中,机器的优势就没那么显而易见了。
自己的一点总结
按照我个人的理解,冯诺依曼本人也未曾表达出将计算机和人脑直接联系起来的观点,而是表达了两点:1.按照计算机的理论来设想人脑是如何工作的? 2.基于人脑的功能来思考机械能否产生思维? 冯诺依曼本人也不能给我们一个准确的答案。幸运的是随着历史的进步与发展,大量研究者继续在思考和尝试回答这两个问题,诸如对实现人工智能(AI)的大胆尝试等等。对于当前的计算机发展方向来看,似乎有必要批评一下冯诺依曼两值符号观点的局限性,这也是量子计算机着力应对的问题。
尽管十分不愿意承认,但书中依然有很多知识深度对我这种水平的读者造成了相当大的阻碍,例如对于运算逻辑深度的问题。抛开个人水平问题,对于计算机爱好者和极客玩家来说,这本书无疑是一本非常解闷又过瘾的科普读物。