长崎原子弹爆炸整整40年后,全程参与了曼哈顿计划的费曼先生在日本做了一次演讲,不过演讲的主题与战争无关——时至今日,这个问题仍然让最聪明的那些人颇费脑筋,那就是计算机的未来,其中包括计算机可能的最小尺寸这一问题——这个问题使费曼看起来像个计算机领域的预言家。本章内容对某些读者而言可能会有难度,但是它在费曼的计算机理论中占据如此重要的地位,所以我希望他们能花点时间读读,即使不得不跳过那些技术相关的部分。本章结尾部分简要探讨了一下费曼钟爱的一个技术问题——它开启了目前的纳米技术革命。
能在纪念仁科芳雄[1]教授的大会上发表演讲,我感到很高兴,也很荣幸。他是我很敬重和仰慕的一位科学家。到日本来谈计算机,真是有点班门弄斧了。不过最近我都在思考计算机的问题,所以,收到演讲邀请时,我能想到的只有计算机。
我首先声明,今天不打算谈论的内容有哪些。今天演讲的主题是计算机的未来发展趋势,但是未来计算机可能的发展趋势中最重要的那些内容,正是我今天不打算讲的。比如,现在人们投入大量精力去研发更智能的计算机,这种机器的人机交互性能更好,所以这种计算机在输入和输出方面要省事得多,不像现在我们必须编写复杂的程序。人们通常把这称为“人工智能”,但是我不喜欢这个名字。也许非智能计算机比智能计算机工作效率更高。
还有就是编程语言的标准化问题。现在的计算机语言种类太多了,从中选择一种作为标准也许是个好主意。(在日本提出这个问题,我有点犹豫,也许这样做的后果是:又出来一种计算机语言!你们现在已经有四种计算机编程语言了,如果我在这里妄谈什么标准化的问题,很明显,只会导致标准越来越多,而不是变少!)
另外一个有意思的问题,是自动修复程序。这个问题值得研究,但是我今天不谈这个。修复的意思,是纠正一个程序或机器里的错误,但是当程序和机器变得越来越复杂的时候,修复也就变得异常困难。
另一个发展方向,是制造立体芯片取代平面芯片。这要逐步实现,不可能一步到位。你可以先铺设几层,然后再逐渐增加层数。另一个重要的装置,它可以自动探测芯片上有缺陷的地方,有了它,芯片就能够避开有问题的地方重新连接。现在我们在做大型芯片时,芯片上经常会出现裂缝或损坏的区域,我们只好忍痛把整个芯片扔掉。如果我们能造出这种自动探测装置,那么我们就可以利用芯片上完好无损的区域,这样效率就高多了。我之所以提到这些,是想告诉你们,我很清楚未来计算机发展面临的真正难题。但是,我今天要谈的问题比较简单,就是一些小的技术性问题,按照物理学规律基本能够做到的一些事情。换句话说,我想要讨论的是机器本身,而不是如何使用机器。
我想探讨计算机制造技术方面的一些可能性。我要谈三个问题:一个是并行处理计算机,目前正在研发过程中,不久的将来,或许马上就要面世。第二个问题是计算机的能量消耗问题。这个问题现在看来有瓶颈,解决不了,但事实并非如此。最后,我想谈谈计算机的大小问题。计算机当然越小越好,问题是:在自然规律作用下,我们能制造出来的计算机理论上还能小到什么程度?我不打算探讨哪种技术在未来可能成为现实,这要取决于经济和社会发展的程度,我不想做这种预测。
并行计算机
第一个问题是并行计算机。目前,几乎所有的计算机,传统的计算机,其工作的原理都是冯·诺依曼体系[2]:机器里面有一个很大的存储器,用来储存所有的信息,还有一个中央区域,执行简单的计算。我们从存储器的这个地方提取一个数据,又从存储器的另一个地方提取一个数据,把这两个数据送到中央算术单元进行相加,然后把计算结果传送到存储器的另一个地方。这样来看,计算机有一个高效运转的中央处理器,工作十分卖力,速度也很快。相比之下,整个存储器从头到尾待在一旁,很清闲,就像是一个卡片档案柜,除了偶尔翻找几张卡片,档案柜大多数时间都闲置着。显然,如果有更多的处理器同时工作的话,我们的计算速度就能更快一些。问题是当你使用这个处理器时,可能要用到存储器的某个信息,而同时另一个处理器也需要这个信息,机器就会陷入一片混乱中。出于这些原因,大家普遍认为让很多处理器同时工作是个难题。
人们在这个问题上进行了一些探索,并给大型的传统计算机装上了“向量处理器”。这样一来,当你需要很多不同的部件同时做某一项计算,也许你就可以同时处理它们。人们希望,正常程序能够写成普通的格式,然后一个解释程序可以自动发现使用这种向量功能的合适时机。美国的超级计算机Cray和日本的超级计算机都采用了这种方法。另一种方法是把大量相对简单(但也不是很简单)的计算机用某种形式连起来,这样它们就可以分开对付一个问题的一小部分。事实上,每一台计算机都是独立工作的,但是在需要的时候它们之间可以互相传递信息。这种方案应用在了加州理工学院的“宇宙魔方”这台计算机上——举个例子,这个尝试只是很多可能的方案中的一种。现在,很多人在制造这样的机器。还有一种方法是把大量非常简单的中央处理器分布在整个存储器上,每个中央处理器只与存储器的一小部分打交道,它们之间有一套精巧的连接系统。麻省理工学院研制的线路连接计算机,就是这样一种机器。它有64000个处理器和一个路由系统,其中每16个处理器为一组,每组之间可以相互传递信息,因此总共有4000种可能的路由连接方式。
这样看来,有些科学问题,比如波在某些介质中的传播问题,用并行处理的方法,可能很容易就解决了。这是因为,任何一个特定空间在任何一个时刻的状态,都是可以计算出来的——只要知道相邻空间的压力和应力就可以了。每个空间的压力和应力可以同时计算出来,而这些数值又可以帮助计算出其他所有空间的压力和应力,这就是并行处理设计方案可以解决这类问题的原因。事实已经证明,大量的、各种类型的问题是可以被并行处理的。当一个问题足够大,需要进行大量的计算时,并行运算能够极大地加快解决问题的速度,这个原理不仅仅适用于科学问题。
两年前认为并行程序设计很困难的那种偏见,现在人们看法有变化了吗?事实证明,当时大家认为并行程序设计很困难,甚至几乎是不可能的,是出于这样一种解决思路:选用一个普通程序,然后在这个普通程序的基础上想办法实现高效的并行计算。实际上,在这个问题上,我们必须从头来过:我们要认识到并行运算是有可能的,我们必须对计算机的内部结构有个新的理解,并在此基础上重新编写整个程序。想要高效使用旧的程序,这是不可能的——程序必须重新编写。对于大多数工业应用程序来说,这是一个很不利的因素,目前已经遭遇了相当大的阻力。但是,通常大型程序的开发者是科学家或其他非官方的、才华横溢的程序员,他们热爱计算机科学,如果能提高计算机的工作效率,他们愿意从头开始编写程序。所以,将来的情况可能是这样:首先,这些程序专家用新路子重新编写难度很高、超大型的程序;渐渐地,大家不得不都跟上来,然后越来越多的程序都会用这套新方法来编写;最后,广大程序员也不得不学习如何编写这样的程序了。
减少能量损耗
我想说的第二个问题,是计算机的能量损耗问题。限制巨型计算机发展的一个明显的瓶颈就是它们需要冷却——大量的精力都花在了冷却装置上。我想说明一下,问题就在于工程技术跟不上,但这绝对不是什么大问题。在计算机内部,很小量的一部分信息由一根电线控制——这根电线的电压不是A值就是B值,这叫作“一比特”。我们必须把这根电线的电压从A变到B值,也就是说要充电或者放电。我拿水来打个比方:这就好比我们要往一个容器里注水,使水面升到一个位置(相当于充电);或者把水放掉,使水面降到另一个位置(相当于放电)。这仅仅是一个类比——如果你更喜欢电学,你可以从电学的角度做更精准的思考。我们现在只是拿水打个比方,为了把容器装满水,我们就把水从高处倒进容器(图1),为了降低水位,我们还可以把容器底部的阀门打开,让水全部流出来。由于水位的突然降低,注水和放水这两个过程中都有能量损耗:在放水时,水从容器顶端的高水位突然降到底部的低水位;同样的道理,你把水倒进去重新把容器装满时也有能量损失。对于电压和电荷来说,情况也是一样的。
图1
正如班尼特(Bennett)先生解释的那样,这就像开汽车,开动汽车时,你要打火发动引擎,停车时你要踩刹车。每次发动引擎和踩刹车,都会损耗能量。对于汽车来说,现在已经有一种解决能量损耗的办法了,就是把车轮和飞轮连接起来。汽车停下来时,飞轮还在飞转,这样就可以储存能量——之后它还可以和车轮重新连上,让汽车再次开动。在水位调节问题上,我们也可以用一个U形管——在管道底部中间的位置放上一个阀门来连接U形管的两臂(图2)。一开始,阀门关闭,我们在U形管的右臂装满水,让左臂空着。现在,如果我们打开阀门,水就会流向U形管左臂,然后我们把握好时机关上阀门,那样全部的水就会留在U形管左臂里。现在,如果我们想让水再流到U形管右臂,我们就可以再次打开阀门,于是,水就流了回去,然后我们赶紧把阀门关上。当然,这过程中会有一些能量损耗,所以水不可能再爬升到原来的高度,但是我们只需要加一点点水来补充损失的能量就可以了——与图1所示的直接从高处倒水的模式相比,用这种方法能量损失要少得多。这种方法利用的是水的惯性,电学中与之相应的是电感。当然,在芯片上用我们现在使用的硅晶体管制造电感,这很困难。所以就目前的技术水平而言,这个方法不是很切合实际。
图2
还有一种方法,是使用这样一种装置:注水口的位置仅高于水面一点点,而且随着水位的上升,这个装置也会随之上升(图3),这样,在整个注水过程中,水的落差一直比较小。同样地,我们在距水面下方一点点的地方设置一个出水口,这样放出去的水只限于接近水平面的那一部分水,并且在放水过程中还要(随着水位的下降)不停降低出水口的位置。照这样推理,(电学上)晶体管就不会有热量损失,或者热量损失很小。实际能耗的大小取决于注水时注水装置与水面的距离。这种方法要求灵活改变电压供应,所以,如果我们有一个随时间变化的电压供应,我们就可以采用这种方法。当然,供电过程也会有能量损失,但是电压供应装置是固定在某个地方的,在那里生成一个大的电感是一件很容易的事。人们把这个方法称为“热钟”,因为供压装置是和计时钟同步工作的。另外,跟传统设计不同,它不需要时钟信号为电路计时。
图3
如果水位变化慢的话,后面两种方案需要的能量都会少一些。如果注水太快的话,水位落差就会很大。所以,为了确保这种方案有效运行,我必须放慢注水速度。同样地,在U形管方案中,只有中央阀门开关的速度比U形管里水流左右流动的速度快一些,这个方案才有可行性。所以我必须让机器慢一些——节约了能耗,但是减慢了机器的速度。其实,能耗和电路启动所需的时间,二者相乘的结果是个常量。尽管如此,事实表明这个方案有很强的可行性,因为用时钟计时得到的时间通常要比晶体管的电路开关时间长得多,我们可以利用这一点来降低能耗。照这样计算,如果实际速度比我们的计算速度慢——比如说慢3倍,那么需要的时间就是原先的3倍,而我们只需要用1/3的能量,所需消耗的功率是原先的1/9。也许这是值得一试的。通过重新设计,也许我们可以使用并行计算或其他方法,花的时间比实现最快的电路速度时间稍微多一点,制造一个既实用又可以进一步减少能耗的更大的机器。
对于晶体管来说,能耗与其启动时间相乘的结果取决于以下几个因素(图4):
图4
1.与温度成比例的热能kT;
2.源漏之间的晶体管的长度除以其中电子的速度(热速度);
3.晶体管长度,以晶体管中电子碰撞的平均自由程为单位;
4.运行时晶体管内部的电子总数。
把相关数值代入公式,计算结果显示,现在使用的晶体管消耗的能量区间是热能kT的10亿倍到100亿倍或更多。在晶体管开启或关闭时,消耗的能量更大。能量消耗确实很大。减小晶体管的尺寸是个好主意。缩短源漏之间的距离,再减少电子的数目,这样需要用到的能量就少得多了。事实证明,尺寸小一些的晶体管运转的速度快得多,因为电子可以更快地通过晶体管,从而更快地启动或关闭晶体管。无论从哪个方面讲,制造更小的晶体管都是一个很好的思路,大家一直在朝这个目标努力。
但是设想一下这种情况:平均自由程比晶体管还长。这种情况下晶体管就不能正常工作了——它不能按照我们预期的方式工作。这让我想起,多年前曾经有个所谓的声障问题。当时人们认为飞机的速度不可能超过声速,因为如果你按照正常的方法设计飞机,然后把音速代入方程,你就会发现发动机会失灵,机翼不能抬起,整架飞机都不能正常工作。然而,飞机的速度其实是可以突破音速的,问题在于:你要知道什么样的条件下遵循什么样的物理定律,你得依据相应的定律去设计飞机。你不能指望旧的设计会适用于新的环境。可是,新的设计却可能适用于新的环境,我坚信我们完全可以造出小于自由程的晶体管系统——或者,更准确地说,开关系统和计算装置。当然,我只是说“原则上”可以这样做,而不是说去生产这些元件。所以下面我们来讨论,如果我们想制造尽可能小的元件,会是什么样的情况。
缩小尺寸
我要讲的第三个问题就是计算元件的尺寸,而且我是在纯理论层面来讲这个问题。如果一个东西非常小,你担心的第一件事就是布朗运动[3]——所有的粒子都在震颤,没有一个粒子会停留在同一个地方。那样的话,你怎么控制电路呢?再进一步说,就算是这个电路能正常运行了,会不会中间出意外,粒子自己又跳了回去?在我们用2伏电压为这个电路提供能量——这是我们通常的用量(图5)——这个能量相当于室温下热能的80倍(1kT=1/40伏特);在这种条件下,粒子跳回去的概率是e-80(e是自然对数的底数)或10-43。这是什么意思呢?这意味着,如果一个计算机内有10亿个晶体管(我们现在还没有这样的计算机),一秒钟内它们的开关转换的总次数为1010次(一次开关转换的时间是百亿分之一秒);如果它们定时开关,运行109秒——那相当于30年——那么这个计算机的(晶体管)开关转换的总次数为1028次。而每个晶体管跳回去的概率只有10-43,也就是说30年内都不会出现由热震荡造成的任何错误。如果你还不满意,我们可以用2.5伏的电压供电,这样出错的可能性就更小了。然而,我们也不能排除这种可能性,30年的期限还远远未到,而宇宙射线有可能意外穿过晶体管,导致它发生故障,所以在这方面我们就不用再考虑得太周详了。
图5
然而现实中,这种可能性要大得多,我想给你们推荐最近一期《科学美国人》里的一篇文章,那是班尼特和兰道尔合写的《计算的基本物理限制》。我们可以造这样一台计算机,它里面的每一个元件、每一个晶体管可以往前走,然后又意外地逆转,但计算机仍然可以正常运转。计算机的每个操作都可以往前走或往后走,计算的进程往前推进一段时间,然后又往回走取消自己的计算结果——那是“解算”,然后又往前走,周而复始。如果我们能把计算进程往前推一点点,使它往前走的可能性比往后走的可能性稍微大一点点,我们就可以让计算机挺过去,完成整个计算过程。
人们都知道,我们可以完成所有可能的计算,做法是:把一些简单的元件都放在一起——比如晶体管,或者逻辑上更抽象一点的说法,一种叫“NAND门”(与非门)的东西(NAND是“NOT-AND”的组合词)。一个NAND门有两条输入“线”和一条输出“线”(图6)。
图6
我们先把“NOT”放一边——什么是AND门呢?AND门(与门)是这样一种装置:只有当两个输入值都是1时,它的输出值才是1,其他情况下它的输出值都是0。NOT-AND门正好相反,只要两个输入值不同时为1,输出值都是1(也就是电压值为1),如果两个输入值同时为1,那么输出值为0(也就是电压值为0)。图6显示的就是这样一个NAND门的输入和输出的关系图。A和B是输入,C是输出。如果A和B都是1,则输出为0,否则输出均为1。但是这种装置是不可逆的:信息会丢失。如果我只知道输出结果,我无法知道具体的输入值。我们不能指望这种装置往前进一步又蹦回来,而且还能正确计算。举个例子,如果我们知道输出结果是1,我们也无法判断它的输入是哪一种组合:A=0、B=1,还是A=1、B=0,或是A=0、B=0?而且这个过程它回不去。这样的装置是一个不可逆的门。不过,我们可以用一种不同的基本门比特——也就是一个可逆门——来进行计算,这个伟大的发现是班尼特和弗雷德金(Fredkin)各自独立完成的。我在前面已经用一个被我称作“可逆的NAND门的比特”解释了他们的想法。它有3个输入和3个输出(图7)。
图7
输出端的A′和B′和输入端的A和B一一对应,数值相同。但是第三个输入端情况不一样:除了A和B同时都是1的情况之外,C′和C数值保持相同;而在A和B同为1时,不管C是什么,C′都会变化。比如,如果C为1,C′就变为0;如果C为0,C′就变为1——只有在A和B都是1时才会有这种变化。如果你把两个这样的装置连接在一起,通过输入端A和B,如果C经过两个装置数值都不变,那么C′=C。如果C发生变化,那么在经过两次变化后,C′数值也和原先的C一样。所以这个装置能够进行自我逆转,信息也不会丢失。这样一来,我们只要知道输出情况,就可以了解输入的情况。
如果所有物体都往前移动,那么一个完全用这种装置制造的机器是可以进行计算的。如果前前后后移动了一阵子,但最终还是往前移动了,这台装置还是可以正常运行的。如果它往后蹦了蹦,后来又往前移动,那它仍旧没有问题。这很像气体里的一个小粒子,身边的原子接连不断地碰撞它,通常情况下这个粒子的运动是毫无目标的,但是假如你稍微拉一下它,给它一个方向,使它有机会朝某个方向运动,这样它就会慢慢向前漂移,从一端到另一端,而不会像之前那样做布朗运动。所以,只要我们提供一点动力把这些粒子拉过那道门槛,我们的计算机就能够工作了。尽管它不是很顺畅地做运算,而是这样来来回回地折腾,但它最终还是完成了运算工作。就像是气体中的粒子,如果我们轻轻地拨动它一下,我们只用了很小的一点能量,可是它要花费很长时间从一端运动到另一端。如果我们着急了,用力去拨它一下,这时我们消耗的能量也就比较多。对计算机来说也是这样。如果我们有耐心,让它慢慢运行,我们就能够让计算机几乎不消耗能耗就能运行,每一步的能耗甚至不到一个kT;如果你有足够多的时间,能量消耗可以降到任意小。但是如果你着急了,那就必须消耗能量,那时候,你为了推动运算继续进行,因而损耗的能量乘以完成这个运算所需要的时间,其计算结果是一个常量。
先记住这些可能性,然后我们再来看看造出来的计算机可以小到什么程度以及数字必须大到什么程度。我们都知道,数字可以用二进制书写,写成一串串的“比特”,每个比特非1即0。另外,一个原子可以代表1或0,这样的一个原子当作一个比特,一小串原子完全可以代表一个数字。(事实上,虽然每个原子有两个以上的状态——我们需要的原子完全可以更少,不过每比特一个原子已经足够小了!)好,来做一个智力游戏,我们考虑一下,是否能够造这样一台计算机——它的书写比特是原子大小的,比如说,在原子自旋中,是否可以这么做:把向上记作1,把向下记作0?还有我们的“晶体管”,在不同地方它的比特也不一样,这就像原子之间的某种相互作用力,它会改变原子的状态。最简单的一个例子就是:一种3个原子的相互作用模型是否能成为这样一台计算机的基本元素或门。同样地,我们还要注意,如果我们依据适用于常规物体的定律来设计这台机器的话,它是不会正常运转的。我们必须运用新的物理定律——适用于描述原子运动的量子力学定律(图8)。
图8
因此,我们必须接着追问:量子力学的原理是否允许数目如此少的原子的排列——其数目是能让一台计算机完成计算任务的门的数目的几倍?人们已经做过理论上的研究,而且已经发现了这样的原子组合。既然量子力学定律是可逆的,我们就必须用班尼特和弗雷德金发明的可逆逻辑门。而对量子力学的研究表明,除了班尼特先生从热力学角度所说的那些问题,量子力学对它没有其他任何限制。当然,也有一个限制——是个应用方面的限制——也就是,比特必须是1个原子的大小,1个晶体管是3个或4个原子大小。我使用的量子力学的门有3个原子。(我现在不考虑把比特缩小到原子核级别上,我要等技术发展到原子级别之后再向前进一步!)这就要求:(a)大小限制在原子级别;(b)能量需求取决于班尼特计算出来的时间;(c)我没有提到的一个特殊的特点,它与光速有关——我们不可能以快于光的速度发送信号。这些是我所知的计算机的物理学限制。
如果我们设法造一台原子级别的计算机,这将意味着它的尺寸(图9),也就是线性尺寸,比我们现有的极小的芯片还要小1000到10000倍。而这意味着那种计算机的体积只有现在计算机体积的千亿分之一,也就是10-11,因为那种计算机的“晶体管”的体积是我们现在造出来的晶体管的体积的10-11,而且那种“晶体管”开关一次所需的能量,也就是今天的晶体管开关一次所需的能量的10-11,还有,前者每步运算所需的转换时间至少要快1万倍。所以说计算机有很大的发展空间,我把这个奋斗目标留给你们——做计算机硬件研究的人们。我没想惠泽先生翻译我的讲话需要这么长的时间,我要讲的都已经讲完了。谢谢大家!如果你们有什么问题要问,我很乐意回答。
图9
问答环节
问:您提到一个比特的信息可以存储在一个原子里,我想知道的是,您能否把等量的信息存储在一个夸克里?
答:是。但是我们控制不了夸克,所以这个想法确实不可行。你也许认为我刚才讲的那些也不切实际,但是我不这么认为。在我谈到原子时,我相信有一天我们有能力处理和控制单个原子。而夸克的相互作用涉及很高的能量,再加上放射性等原因,所以处理它们是很危险的。但是,我现在说的原子能对我们来说是很熟悉的,我们在化学能和电能里面都接触过它,我认为,原子能的数量级都在现实范围之内,尽管在目前看来还有点怪异。
问:您说计算的元件越小越好。但是我觉得设备必须大一些,因为……
答:你的意思是你的手指太大了,按不了那么小的按钮?是这个意思吗?
问:是的。
答:当然,你是对的。我现在说的是放置在机器人或其他装置内部的计算机。我没有谈到输入和输出的问题,输入的方式或者是看图片、听声音,或者是按按钮。我是在理论的层面上探讨计算过程是怎么完成的,而不是讨论输出应该是哪种形式的。毫无疑问,大多数情况下,输入和输出不能急剧缩小,超出人的操控范围。现在有些计算机上的按钮,对于我们的手指来说已经太难操作了。但是那些复杂的、需要花费很长很长时间的计算,它们能在非常小的机器上很快地完成,而且只消耗很少的能量。我考虑的正是这么一种机器。它们处理的是复杂运算,而不是把两个数字进行相加那种简单的应用。
问:我想知道您如何把信息从一个原子大小的元件传输到另一个原子大小的元件。如果您运用的是两个元件之间量子力学的相互作用力或自然作用力,那么这样一种装置就和“自然”本身十分接近了。比如,如果我们做一个计算机模拟,一个用来研究临界现象的蒙特卡罗(Monte Carlo)磁体模拟,那么您的原子级计算机就需要和磁体本身很接近。您怎么看待这个问题?
答:是的。我们做的东西都是“自然”的。出于某种目的,我们用某种方式安排它,我们为了这个目的进行运算。按照这个思路,如果你愿意,在磁体内部也有某种联系,那里也正在进行某些形式的运算,就像太阳系里的情况一样。但是,也许那不是我们现在想要做的运算。我们想要做的这种装置,它里面的计算程序可以随着我们想要解决的问题改变,而不是计算自身的磁体问题——那是它自己要解决的问题。除非碰巧某人给我的问题是研究行星的运动,否则我不可能把太阳系当作一台计算机看待。在那种情形下,我能做的只是观察而已。以前有一篇有趣的文章,曾经被人当作笑话。这篇“文章”展望了在遥远的未来开展空气动力学运算的一种新方法:不需要用当时那种复杂的计算机,作者发明了一种简单的装置——鼓动空气吹过机翼。(他重新发明了风洞!)
问:我最近在报纸上读到一篇文章,说大脑里神经系统的运转速度比目前的计算机慢得多,而神经系统中的单元却(比计算机的元件)小得多。您觉得您今天谈的计算机和大脑神经系统是不是有些相同?
答:大脑和计算机有一点类似,那就是它们内部有些单元显然可以在其他单元的控制下进行转换。神经冲动控制或刺激其他神经,具体方式取决于是否有超过一个的刺激进入大脑——有点像AND或这一类的东西。这样一次传输,大脑细胞需要消耗多少能量?我不知道这个数据。可是,大脑完成一次转换所需的时间,即使和今天的计算机相比,也要长得多,更不用说将来更奇妙的原子计算机。但是大脑的内部连接系统远比计算机复杂,它的每个神经元连接着数千个神经元,而我们的一个晶体管只连接两个或三个晶体管。
有人关注活动中大脑的活跃程度,他们看到,在许多方面,大脑性能超过今天的计算机,而在其他很多方面,计算机又超过我们。这激励人们去设计能做更多事情的计算机。一般情况是,工程师对大脑如何工作有了一个认识(他自己的观点),然后他就设计一个也有这种功能的机器。这种新机器也许真的做得很好,但是我要提醒你们,它并不能告诉我们大脑到底是怎么工作的,也不意味着为了制造功能很强大的计算机,我们就必须真的要了解大脑如何工作。这就好比说,我们制造飞行器,并不一定要先知道鸟如何拍翅膀、羽毛的结构如何有利于飞行;我们要制造速度很快的汽车,也不一定非要模仿印度豹的腿的杠杆系统不可——印度豹跑得很快。因此,要设计出在很多方面超过自然力量的装置,我们也不是一定要在细节上模仿自然的行为模式。这是一个有趣的话题,我很乐意展开来谈谈。
和计算机相比,你的大脑非常脆弱。我给你一串数字:1、3、7……或者更难一些,ichi、san、shichi、san、ni、go、ni、go、ichi、hachi、ichi、ku、san、go。现在我要你重复一遍。(你做不到!)然而计算机能够记住几万个数字,并且能够一一背出来,还能把它们加起来,或者用它们做很多我们做不到的事情。另一方面,如果让我看一张人脸,只要看一眼我就能告诉你他是谁——如果我认识这个人的话,或者我会告诉你我不认识这个人。但是我们现在还不知道怎么设计这样一个计算机系统:我们给它看一张人脸的图片,它就能够把这些信息告诉我们。(它做不到这点,)尽管它已经看过很多人脸,而且我们也教过它(怎么去识别人脸)。
另外一个有趣的例子,是能下国际象棋的机器。我们能够造出这样一台机器,它几乎比在座的所有人下象棋下得都好,这真的很神奇。但是,它们是衡量比较了很多种可能性才做到这一点的。如果它走到这里,那么我可以走这儿,然后它再走到那里,人机对局就这样继续下去。每走一步,它们都会仔细考虑每一种可能的下法,然后选择最佳的落子点。计算机的程序储存了上百万种可能的走法,而一个国际象棋大师,作为一个人,他应对的方式就不一样——他辨识的是图形。在决定每一步怎么走之前,他只能比较30到40个可以落子的地方。因此,虽然围棋的规则简单,可是下围棋的计算机表现不是很好,因为每走一步都有太多的可能性、有太多的事情需要再三考虑,而机器显然不具备这种思考能力。所以,如何让计算机辨识图形以及在这种情况下应该如何应对,这些问题对于计算机工程师(他们喜欢自称计算机科学家)来说,仍然是一件非常困难的事。对于研发未来的计算机来说,这当然是一件重要的事情,也许比我说到的其他事情还重要。造一个能够把围棋下得更好的机器吧![4]
问:我觉得,任何一种计算方法——除非它能提供一种编写程序的方法,否则不会有太大的用处。我曾经认为弗雷德金关于保守逻辑的论文很有启发性,但是当我想要用这种方法写一个简单程序时,我就傻眼了,因为设计这样一套程序要比利用它写出来的程序复杂很多。我想,我们可能很容易就进入一种无穷倒退的境地,因为设计一套特定程序的过程,会比根据它写出的程序本身复杂,而如果想要让设计过程自动化,这自动化程序将会更为复杂,特别是这种情况:这个程序是硬连线的,而不是像软件那样是可以分离的。
答:我们在这个问题上的体验不同。没有什么无穷倒退性:复杂性到了一定程度就会停止下来。弗雷德金归根到底要谈论的机器和我刚才谈到的量子计算机都是通用的计算机,因为它们都可以在我们编写的程序指挥下去做各种各样的工作。这不是一个硬连线程序。就程序的固定不变性而言,它们和那些可以把信息输进去的普通计算机也没有太大的不同——这个程序也是信息输入的一部分——然后机器就执行你给的任务。它是硬连线的,但是它和普通的计算机一样,也是通用的计算机。这些事情还很不确定,但是我发现了一个运算法则。如果一个不可逆的机器装了一个普通程序,那么我可以利用一个直接翻译的工具把它转变成一个可逆机器的程序,不过翻译转换的效率很低,而且还需要更多的步骤。然而,在实际操作中,步骤可以少得多。不过至少我知道,我可以把不可逆机器上的一个2n步骤的程序,转变为应用于可逆机器上的一个3n步骤的程序。步骤确实是增加了不少。因为我没有试图去找实现这种转变的最少步骤,所以我完成这种转变的效率很低——这只是完成这个转变的一种方法而已。我真的认为,我们不会遇到你说的那种倒退,但是也许你是对的,我不能确定。
问:那些可逆机器运行这么慢,我们是不是会牺牲掉我们原本希望这种装置拥有的很多优点?对这一点我非常悲观。
答:它们运行会慢一些,但是它们的尺寸要小得多。除非需要,一般情况下我不让它变成可逆的。因为能耗仅仅在80kT的情况下,不可逆机器就已经工作得很完美了,所以没有必要让机器变得可逆,除非你努力大幅度降低能耗——其实是多此一举了。与目前的109kT或1010kT相比,80 kT要小得多,所以在能量方面我至少还有107的改进空间,所以我用不可逆的机器还是没有问题的!这是真的。目前来讲,这是一个正确的发展方向。我只是跟自己玩个智力游戏,才会去探究在理论上我们还可以走多远——而不是付诸实践,结果我发现能量消耗最小可以达到一个kT能量的几分之一,我还可以把机器造得极小——原子级别的微型机器。但是,要做到这一点,我必须运用可逆物理定律。之所以会出现不可逆性,是因为热量扩散到了大量原子,不能再聚拢过来。要把机器做得非常小,除非要用到由很多原子组成的冷却元件,否则我不得不把它做成可逆的机器。在现实中,也许永远不会有那么一天,我们会很不情愿地把一台小计算机跟一个有1010个原子的大铅片连在一起(这个尺寸实际上还是很小),让它变得根本不可逆。因此,我同意你的看法,在实践中,很长时期内——也许是永远,我们都将使用不可逆门。但是另一方面,力图在各方面都找到极限状态,让人类的想象力尽可能在每个领域都发挥得淋漓尽致,这是科学探险的一个部分。尽管这种努力在每个发展阶段看似荒唐而且无用,但是结果常常证明,至少它是有用的。
问:不确定原理对它有限制吗?在你的可逆机器方案里,对能量和时间有没有一些基本的限制?
答:那正是我要说的。这里不存在量子力学对它的进一步限制。你一定要仔细区分以下两种能量:一是丢失的能量或者说是消耗的、不可逆的能量,那是机器在工作过程中产生的热量,二是包含在运动部件中、可以被再次吸取的能量。时间和可以被再次吸取的能量之间有某种关系。但是那种可以被再次吸取的能量无关紧要,或者说我们不必关注它,这好比问我们要不要加上静止能量,即装置中所有原子的mc2。我只说到消耗的能量乘以时间,这里没有什么限制。不过,如果你想用超高速进行运算的话,你就得给机器配备移动快而且有能量的部件,这是肯定的。但是这些能量不是在运算的每一个步骤都会有损失,它可以靠惯性运行下去。
【无提问】
费曼:关于“没有用”这个问题,请允许我说几句,我想再补充一点。我一直在等你们问我这个问题,但你们没有问,所以我就主动来说说这个问题。我们怎样去造这么小的一个机器,小到我们要把原子放在某些特殊的位置上?虽然我们现在还没有这样的机器——它的可移动的部件小得出奇,只有几个到几百个原子的大小,但是机器制造朝这个方向发展,这也没有什么物理限制。今天我们已经开始使用硅了,我们也没有理由不把它们做成一个个独立的小部件,方便它们活动。我们还可以装上小喷嘴,在特定的区域喷上不同的化学品。我们能制造超级小的机器,这些机器很容易用我们造的这些计算机的电路来控制。最后,还是为了好玩,开动脑筋聊以自娱,我们可以想象机器只有几个微米大,所有的轮子和线路都通过电路和硅连接。于是这整个东西是一个大元件,它运行起来不像我们现在这些机器那么笨拙、生硬,而像天鹅转动脖子那样优雅灵活——归根到底,天鹅脖子也像是由很多小机器构成,是由一些细胞交织在一起,被一些指令有条不紊地控制着。我们为什么不能做到这个程度呢?
[1]仁科芳雄(Yoshio Nishina 1890—1951),主要从事原子核物理学理论及实验研究,以及对宇宙射线的研究,是日本原子物理学的开拓者,他培养出了以汤川秀树、朝永振一郎为首的多名世界知名的理论物理学家。——译者
[2]冯·诺依曼(John von Neumann 1903—1957),匈牙利裔美国数学家,被尊为计算机之父冯诺依曼体系是现代计算机的通用架构。主要特点是:(1)数据和指令不加区分的都用二进制表示;(2)指令一条一条地顺序执行;(3)由运算器、控制器、存储器、输入和输出设备五部分组成。——译者
[3]布朗运动:由于分子不断随机撞击造成的粒子的无规则运动。1828年,该名称首次在植物学家罗伯特·布朗的文章中出现。1905年,阿尔伯特·爱因斯坦在《物理学年鉴》撰文中对布朗运动的原理做了解释。——编者
[4]今天,这样的机器已经被发明出来。阿尔法围棋(AlphaGo)是一款围棋人工智能程序,由谷歌开发,这个程序利用“价值网络”去计算局面,用“策略网络”去选择下子。2016年3月阿尔法围棋对战世界围棋冠军、职业九段选手李世乭,并以4:1的总比分获胜。——译者