先說點什么
??這應該是我第三次讀這本書,一本改自馮·諾依曼講稿,并且一點都算不上厚的小書。第一次看這本書的時候恰逢高考之后無聊閑讀隨手翻一翻,全然不知所云。第二次翻看已經是大二學期,當時的水平也僅僅是勉強讀完全書。當初自以為是任務很多事情就如長輩所說“長大后你就明白了”這樣,后來才明白知識水品不盡是隨著年齡就能自然而然的提高。所以即便是現在再讀這本書,依然感到有太多自己水平難以觸及的深度。
一點點的前言
??《計算機與人腦》這本書與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)的大膽嘗試等等。對于當前的計算機發展方向來看,似乎有必要批評一下馮諾依曼兩值符號觀點的局限性,這也是量子計算機著力應對的問題。
??盡管十分不愿意承認,但書中依然有很多知識深度對我這種水平的讀者造成了相當大的阻礙,例如對于運算邏輯深度的問題。拋開個人水平問題,對于計算機愛好者和極客玩家來說,這本書無疑是一本非常解悶又過癮的科普讀物。