讀古今文學網 > 發現的樂趣:費曼演講、訪談集 > 2 未來的計算機 >

2 未來的計算機

長崎原子彈爆炸整整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的總比分獲勝。——譯者