The Art of Doing Science and Engineering 閱讀筆記
Luck favors the prepared mind.
封面含義:偉大的發現往往不是線性的;人們的思維會不斷嘗試各種點子與探索,直到收斂到某個「偉大」的成果。
介紹#
這本書是 Richard Hamming 在 1995 年在美國海軍研究生院所給的課程所彙總成的一本書。它的核心出發點在「一個沒有努力使自己卓越的奮鬥人生,幾乎不值得過」,核心主張是「Luck favors the prepared mind」,核心內容則是作者透過對自身卓越科研事業的內省,以及對貝爾實驗室著名的同事 (Claude Shannon, John Tukey 等) 的觀察,回答如何成為 prepared mind (style of thinking)。
作者的另一個核心目的是希望啟發你去尋找自己的思維風格,設立一個使命和前進的方向。你必須要思考,必須要成就一些超越自己的、有意義的事情。舉例而言,一個醉酒的水手隨機遊走最終的走的平均距離是 ,而如果一個漂亮的女孩站在某個方向,那麼水手最終走的平均距離會和 成正比。Hamming 另外觀察到,最開始的 vision 是否正確無關緊要,指向卓越的道路很多條,任意一條都比隨波逐流更好。
換句話說,這本書在嘗試 prepare you for your future。作者在 1995 年講課的時候,他已經觀察到人類的科技進展速度在加速、知識迭代的速度越來越快,十五年前學的技術知識到現在可能已經一半都已經過時了。但未來仍有無限多的機會等著你去發現,因此他向你展示他是如何從第一行原理關注和預測當時的顯學 (Fiber Optics)、如何透過對二進制數學的深入理解發明改變世界的科技 (Error-correcting-code)、如何在不完全理解的情況下進行有效研究 (quantum mechanics)、如何用系統工程的角度去做事、如何利用計算模擬中發現設計啟示 (NIKE missile)等等。應對科技快速變遷的唯一方法是學會學習 (learning to learn),也就是本書的副標題。
這本書原本的主要讀者是當時美國海軍工程學院的學生,但我個人覺得它的受眾包含所有有志在科技社會中做巨大貢獻的人,特別是科學家與工程師(本科學生和碩博生)。原因有兩個,第一你需要感受到一名教授對你追求卓越的鼓勵,其二,你需要被引導、被有系統地曝光於上文所展示的那些思維與方法。
本書旨在帶領讀者探索多個不同且高度技術性的現代研究領域,從中萃取出作者特別強調的一套思考風格。因此,書中包含許多較為硬核的內容,諸如 information theory、coding theory 以及 digital filter 等相關主題。
在選擇方向的時候,你勢必需要回答下面三個問題:
- 有什麼是可能的?(科學問題)
- 什麼是很可能發生的?(工程問題)
- 什麼是我們希望發生的?(道德問題)
這些與未來相關的問題很難回答,人類僅有的參考是歷史,結合計算機正在快速改變人類的所有領域,因此計算機歷史是貫穿本書的基調。
在本書講述的所有主題中,教育 (education) 與訓練 (training) 的區別是貫穿所有章節和主題的脈絡,也是區分領導者與跟隨者的關鍵。在未來進入領域工作後,你不是領導者就是跟隨者,作者希望你成為領導者。
閱讀建議#
推薦先以讀 blog 的心態讀一下 You and Your Research (30 min read),感受 Hamming 對長江後浪的滿腔期許。如果你對這本書感興趣的話,我推薦你把它分為不同的區塊,然後每個區塊當做一個 blog 或 blog series 去閱讀。比如說 History of Computers 是一個 series,AI 是一個 series,Coding Theory and Information Theory 是一個 series,然後 Simulation 是一個 series。其他的更像是一個單篇的 blog,比如 System engineering。書中每個 “series” 或 “blog” 都會有一些 meta point,閱讀的時候重點放在弄懂他的 meta point,而不要專注在繁瑣的 technical detail 和故事。
以下我分享我覺得有用或有趣的部分筆記,完整版請參考此白板。
教育 (education) 與訓練 (training)#
Education is what, when, and why to do things. Training is how to do it.
兩者之間的差異,用系統工程的角度來看,訓練是教會學生如何解決一個被清楚定義的問題,像是什麼情況用什麼技巧,如何使用技巧等。而教育則是讓學生面對一個模糊的問題時,有能力判斷如何運用不同課程的知識去不斷重複界定問題,進而選擇合適的技巧來解決它。
對科技社會的領導者而言,what, when 和 why to do things 遠比 how 更重要(當然 how 也非常重要)。Hamming 的提醒是:「從別人那裡學到的,你只能用來跟隨;你為自己學到的,才能用來領導。」教育的真正目的,在於培養願景、判斷力與自我修正的能力,使人能在未知中選擇方向、調整路徑。面對知識半衰期快速縮短的世界,教育更專注於「為未來準備」而不是拘泥於「如何」的細節。
從健身的角度來說,舉 40 公斤兩次帶來的肌肉成長,通常比舉 20 公斤四次要顯著。這種對「物理肌肉」的鍛鍊方式,是否也適用於「心理肌肉」?兩者或許不完全等效,但這個類比在何種程度上是合理的?至少在某種意義上,深度的思考挑戰比淺層的重複練習更能鍛鍊心智。
從知識攝取層面與日常思考方面,作者建議:
- 建立深厚的基礎:技術的細枝末節迭代的速度特別快,但基本觀念卻往往能夠跨時代遷移。
- 不斷學習新知:知識指數增長,你需要主動跟上那些新興領域。
- 能夠快速建模:做 back-of-the-envelope calculation,擁有快速數學建模去估算與驗證他人主張的能力。
- 定期思考宏大的問題:Hamming 建議每週花一下午,也就是 10% 的工作時間,去思考那些具有前瞻性、開放性的問題。比方說「計算的本質是什麼?它將如何影響科學的發展?電腦在貝爾電話實驗室的自然角色是什麼?電腦將對 AT&T 產生什麼影響?對科學整體又會有什麼影響?」他提到這樣他就會知道人類將要前往的方向,從而能朝著正確的方向前進。且不會像那個「東倒西歪、許多步驟又被隨機其它步驟抵消」的醉酒水手,而能夠較為直線地前進。也能密切關注重要問題,確保他的主要精力投放在它們上面。
Error correcting code 的發明#
Error correcting code 的發明徹底改變了通訊與儲存系統,使得他們能在有噪音的情況下以極低的冗餘率自動檢測並修正錯誤,是現代技術的基石。
Hamming 之所以能發現 error correcting code,是因為他當時飽受機器出錯的折磨。當時的機器在運算時時常會因為 code 中出現錯誤而無法按預期完成計算,比如 0 突然變成 1,或 1 變成 0。好幾次因為這個導致計畫落後之後,他非常生氣,並提出一個問題:「既然這些機器能夠偵測到錯誤,為何不能定位錯誤的位置並主動修復它?」
他知道能用存儲多次的方法,用多數決去實現自動 error correcting,但這個方法的冗餘率太高,在記憶十分寶貴的時代行不通。他知道一定有更好的做法可以達到自動糾錯,因此他著手研究這個問題。他對 two‑out‑of‑five code、parity checks 以及二進制的理解,加上作為數學家的紮實數學基礎,對他發展 error‑correcting code 幫助很大。在當時,多數科學家、計算機科學家與從業者並不熟悉二進制數字與二進制演算法。那個年代,人們還傾向使用熟悉的十進制,而不像今天普遍認為二進制對計算機更為合適。
Hamming 發明 error‑correcting code 的關鍵在於一個極簡而深刻的洞見:將檢測到的錯誤「症狀」本身視為一個二進制數字,而這個數字直接指出了錯誤發生的位置。在此基礎上,他進一步提出,若要直觀地探索二進制碼的能力與極限,應該將度量碼距的空間從傳統的歐幾里得空間 Euclidean space 轉換到二進制度量的的 Hamming space,從而建立了一套全新的幾何框架來設計與分析錯誤更正碼。
真正的創意來自於被問題飽和的潛意識#
「Originality」的意思不僅僅是沒有被做過,你可以做一些微不足道的事,比如把兩個隨機的十位數相乘,但這樣做不會有任何有意義後果。創造力似乎是「有用地」把先前未被認為相關的事物組合起來,而可能最重要的是事物之間最初的心理距離 (psychology distance),如同前面 error-correcting code 中,計算兩個位串之間的距離時使用 Hamming 度量而不是 Euclidean 度量。
人們可以更具有創造力嗎?市面上大多數創造力課程和工具似乎並不是特別有幫助,因為它們從未在任何領域產生大量主導人物。在整本書中,創造力被稱為「風格」,Hamming 相信人們可以更具有創造力。一個創造性行為通常從以某種模糊的意識識別問題開始,隨後對問題進行收斂。在收斂的時候,不要太快給它下框架,因為你會把它放入一個常規的形式並得到常規的結論。在這一階段,需要深刻的情感投入以真正投入其中。對問題的長時間醞釀可能導致暫時的解決方案或暫時放棄問題。這是許多偉大創造性行為的共同過程,但這對讓潛意識去思考這個問題而言是必不可少的。
接下來迎來的就是洞見或「創造力」的時刻。錯誤的起步和錯誤的解決方案常常會使你下一次嘗試的方法更為銳利。你現在知道哪些做法是錯誤的了!你剩下要探索的方向更少了。你對什麼行不通以及可能為何行不通有了更好的理解。
如果解決方案來自潛意識,那麼我們可以用這個問題來飽和潛意識 (saturate the subconscious with the problem)。如果我們幾小時、幾天、甚至幾週都不去想其他任何事,那麼我們甚至還會在睡眠中咀嚼這個問題! Luck favors the prepared mind, and you can be prepared.
在創造的過程中,類比推理 (reason by analogy) 是最重要的工具之一。廣泛涉獵不同領域的知識會對此大有裨益,前提是這些知識能被靈活地取用。這有賴於你在學習新知時,不斷地從多元角度審視它,為它建立許多「知識掛鉤 (knowledge hooks)」。如此一來,當你需要時,才能透過類比從心智中鉤出那個關鍵的想法。
如果你不著手於重要的問題,你怎能期望做出重要的工作?#
這一節的內容取自 You and Your Research
「我覺得做有意義的事比僅僅混日子直到生命終結要好得多。當然,在生命將盡時,回首一生中的成就總比回顧一個只是活著並自娛自樂的生活要令人欣慰。這意味著兩件事,(1) 值得為自己設定崇高的目標,(2) 值得去努力完成你為自己設定的目標。」
因此,你必須大膽地向自己承認:「我想做出一流的工作!」畢竟,如果你不致力於解決重要的問題,又如何能期望做出一番重要的事業呢?
許多人會用「我不夠聰明」作為藉口,但許多看似沒有極高智商的人也做出了偉大的事。例如,在貝爾實驗室中,Bill Pfann 起初看起來並不特別聰明,但他在區熔(zone melting)方面的工作贏得了這一領域所有的獎項,並且隨著信心的增長,他也變得更能言善辯。能力有很多種形式,不僅僅是智商。
比起高智商,信心或許是更關鍵的特質,你也可以稱之為「勇氣」。這種勇氣可以後天培養,多專注於你的成功,少關心你的失敗。如 Claude Shannon 在下棋時,常會大膽地將皇后推入戰局,說:「我什麼都不怕 (I ain’t scared of nothing)。」當你陷入困境時,不妨也這樣告訴自己。
擁有雄心和勇氣後,下一步是確保你把精力花在「對」的問題上。為此,你應該定期挪出時間,思考那些更宏大的「偉大想法」:你所在領域的本質是什麼?它將如何影響科學的發展?如果你想成為引領者而非跟隨者,就必須跳脫出多數人深陷的細節之海,時常審視大局。一個具體的方法是,在心中常備一份清單,列出約 10 到 20 個你關心但尚不知如何解決的重要問題。偉大的科學家們總是如此,他們將這些問題放在心上,一旦出現線索,便會立刻投入其中。
對卓越的渴望是做出偉大工作的基本特徵。沒有這樣的目標,你會像一個醉酒的水手一樣四處遊蕩(平均到 )。
如何關注一個新興領域,並為此做準備#
我們該如何面對一個潛力巨大的新興領域?Hamming 以他親身經歷的光纖 (Fiber Optics) 技術崛起為例,說明了他應對一個全新領域時所採用的思考模式。
首先,漢明從「第一原理」出發,迅速辨識出光纖的重要性。物理學原理揭示了光學頻率遠高於當時使用的電器頻率,因此能提供更大的頻寬;而其原料是取之不盡的沙子,對比日益稀缺的銅礦,成本優勢顯而易見。此外,他注意到當時紐約曼哈頓的電話線管道空間已趨飽和,若城市要繼續發展,直徑更小的光纖是唯一不必重新大規模開挖街道的解決方案。這些原因讓他確信,他所在的貝爾實驗室勢必會全力投入這項技術。
接著,他持續追蹤自己預見的技術瓶頸,並隨著領域演進更新知識。例如,他很早就意識到「如何拼接髮絲般細的光纖」會是實務上的一大難題。他也觀察到當時的系統需要將光學信號轉為電子信號來放大,再轉回光學信號,他認為這是個糟糕的設計,並預見了「光學放大器」的必然出現。此外,他還意識到光纖不受電磁干擾(例如核爆或雷擊)的特性,這意味著它必然會獲得軍方的大力支持。透過關注這些關鍵問題,整個領域的發展藍圖在他眼中變得清晰可見。
你應該永遠主動提出問題,才能更好地預測並引領未來,而不是被動地跟隨趨勢。
計算機時代的教育與訓練#
在計算機發展的時候,有大量的教育研究指出,計算機對教育有益,並且能夠輔助訓練學生。然而多數的教育實驗並沒有解決掉 “Hawthorne effect”——即人們因為感受到自己正在接受特殊關注或觀察而帶來的短暫表現改善。新學習方法所表現出的大多數效益增長通常反映了這種偏見,而非實質的改善。
高等教育的標準一直在變。未來的教育將與現在的教育大相徑庭,就像現在的教育與十九世紀的學習幾乎毫不相干一樣。教育系統會隨著技術的飛躍而劇烈躍進。若沒有對未來何種教育形式適切的願景,我們又如何評估擬議的 CAI 專案?我們必須建立一個對未來社會受過教育者樣貌的願景,只有如此,我們才能有把握地處理 CAI (computer aided instruction) 中出現的問題。
Hamming 認為計算機有助於低階、條件反射式訓練,但在教育方面則不那麼有用,部分原因如上所說,是我們還不知道在新時代中「受過教育的人」意味著什麼。(2025 年, Eureka Labs 的 Andrej Karpathy 有話說)
我們所教/所學在多大程度上是訓練,而在多大程度上是教育?
系統工程#
系統工程的核心理念是時刻關注宏觀目標,並將局部行動轉化為整體的成果。
系統工程視角 (system view) 與執行者視角 (task view) 的根本在於「我在建造大教堂」和「我在雕刻一塊石頭」。許多人自以為以為理解了這點,但大多數時候都還是沉浸於細節之中,而沒有思考更大的圖景。因此,衡量一個系統工程師應當以他們產出的東西為主,而不是他們所說的話。
系統工程的第一條規則是:「如果你優化小的組件,你很可能會毀掉系統的性能。」如果你專注於一個簡單組件的優化而不注意它對整體目標的影響,那麼你就會毀掉整體目標。工程上有這樣的例子,但一個更容易理解的例子是教育:如果你在學校不斷找捷徑(比如面向往年題複習),那你所受到的學校教育就是失敗的。
對教育採取系統工程的做法是讓學生通過基於主修的九門課的綜合考試。在這種情況下,當修任何一門課時,重點就不是為了通過這門課、討好教授,而是要學會課程內容,這樣在以後(2年後)的某個時間你仍會記得課程中重要的知識。畢竟,教育重要的是最終呈現出的成果,而每個階段發生的事情則不像最終結果那麼重要 (what matters in your education is what emerged at the end, and what happens at each stage is not as important)。
系統工程的第二條規則是:設計必須具備靈活性,為變化做好準備,確保在調整時能平穩過渡,而不損害其他部分的功能。技術知識的半衰期大約只有 15 年,對教育而言,這意味著今日所學的許多細節在未來可能不再適用。因此,教育的目標應是為你的未來做準備,更著重於傳授基礎原理,而非那些稍縱即逝的枝微末節。
系統工程的第三條規則是:設計應能在超載時實現「優雅降級 (gracefully degrade) 」。一個設計如果過於貼近其規格,當負載超出預期時,其失效將會非常迅速且徹底,就像是為特定載重設計的橋樑或為最大流量設計的電話系統。一個好的系統,則會在壓力超出極限時,性能逐步下降,而非直接崩潰。
系統工程是一項永無止境的任務。首先,任何解決方案的出現都會改變其所處的環境,從而引發新的問題。其次,解決問題的過程往往會讓工程師對問題本身產生更深刻的洞察,進而不滿足於現有的方案。在系統工程中,並不存在所謂的「最終解答」,因為每一個解決方案都應為下一輪的改進提供新的見解。一個無法帶來新洞見的方案,幾乎不能稱之為解決方案。因此,系統工程的核心是接受一個事實:問題和解決方案都不是固定不變的,演化才是常態。
學校教育通常提供的是有明確定義的問題和唯一的正確答案,但現實世界的系統工程工作恰恰相反,它始於混亂、模糊的背景,需要工程師從中塑造出一個可行的方案。Hamming 認為,學習系統工程最好的方式,是將課堂上學到的理想化解法與複雜的現實情況進行對比。系統工程的目標是正確地解決「對的問題」,即便解決方案本身可能不完美。每個方案都只是暫時的,但它所帶來的深刻理解,將為下一輪的設計迭代鋪平道路。
所測及所得 You get what you measure#
這裡的「測量」,不僅指具體的數據,更泛指所有與設定指標相關的體系,例如教育目標、招聘標準、績效評估方法及晉升機制等。 這個概念提醒我們,測量工具本身會深刻影響我們所觀察到的結果,如同漁夫用特定網孔的漁網捕魚,最終會誤以為海裡的魚都有最小尺寸限制。 在設計任何衡量指標時,都必須深思熟慮其可能帶來的深遠影響。
舉例而言,評等系統會影響冒險行為:
- 想像一個評分系統,每個人的初始分數都是 95%。在這種機制下,個人幾乎沒有提升空間,任何失誤卻都可能導致分數下降,於是,最理性的策略便是規避風險、採取保守作風。 雖然組織高層可能希望提拔具有冒險精神的領導者,但最終能晉升到高位的,卻往往是那些最懂得規避風險的保守派。
- 相對地,如果初始平均分數設定在 50%,則會鼓勵較為平衡的行為。若想進一步激勵創新與冒險,可以將初始分數設在 20% 或更低。在這種情況下,員工因失敗而損失的有限,成功的收益卻很高,這自然會鼓勵他們勇於嘗試。 因此,若想在組織高層看到真正的冒險家,就必須在早期階段的評量與晉升機制中,為承擔風險的行為提供正向激勵。
你用於錄取、聘用或晉升的短期指標,長期來看可能也可能並非你真正想要的。你用來選人的指標,之後可能會適得其反。在數學與電腦科學領域,最初的選拔是基於可靠執行某些心智任務(如解題)的能力,但之後你需要的是能夠從整體上看待該領域(看到更大的圖景)以及能夠猜測出重要新結果的能力。同樣地,在招募時,對典型招聘者有吸引力的特質,可能並不是合適的人選。因此貝爾實驗室的研究人員親自進行招聘。
測量的準確性 (accuracy) 也常常與測量的相關性 (relevance) 混淆,例如:衡量「訓練」很容易,而衡量「教育」卻很困難。另一個經典例子是智商測驗。這類測驗的設計和校準,本身就是為了使其分數分佈符合常態曲線。因此,「智力呈常態分佈」這個結論,與其說是反映了智力的真實樣貌,不如說是測量方法本身所導致的人為結果。
在任何組織中,你需要意識到一個事實:人們會圍繞你設定的指標進行優化,而不是你設定指標時的初衷。 各層級的員工都會想方設法讓自己的數據看起來更亮眼。 更糟的是,指標的意義在不同層級之間傳遞時還會失真。例如,基層單位對「組織能力」的評估報告,到了高層眼中,可能就被錯誤地解讀為成功的「機率」。
當指標改變,行為也會隨之調整。軍隊的正式檢查,教會了各單位如何「表演」戰備狀態;定期檢查會被刻意準備,就連所謂的「隨機」抽查也常被提前預知。 商業或戰爭遊戲的訓練,也往往是讓領導者學會如何贏得模擬競賽,而非現實世界的挑戰。 因此,在設計任何測量系統時,你不能只考慮其一階效應,更要預測並應對它將引發的二階、甚至更高階的行為反應。
高維空間對複雜系統設計的啟發#
當我們設計一個複雜系統時,若將所有可用的參數都考慮進來,就相當於在一個 n 維空間中尋找最優解。但當維度 n 變得非常大時,這個設計空間的主體究竟在哪裡?是在這個 n 維球體的「表面」,還是在其「內部」?這個問題的答案,對我們如何尋找最佳設計具有一定的啟發。
為了解答這個問題,我們可以比較 維球體最外層的薄殼 (shell) 體積,與整個球體體積的比例。假設球體半徑為 ,而我們考慮一個內層半徑為 的球體,那麼最外層薄殼的體積佔總體積的比例為:
這表示,球體的體積幾乎完全集中在靠近表面的薄殼上。舉例來說,如果我們考慮外層一半的半徑範圍(即 ),在三維空間()中,這層薄殼就佔了總體積的 。隨著維度 增加,這個比例 會迅速趨近於 1。
換句話說,最佳設計幾乎肯定位於可行域的「表面」,而不是「內部」。這可能與我們在基礎微積分課程中學到的優化方法相悖,因為那些方法通常在內部尋找極值點。但在高維空間中,最佳解往往是將一個或多個設計參數推到其允許的極限值,這自然就意味著我們處在設計空間的邊界上。
FORTRAN 戰勝時間#
在計算機中,指令的意義來自於其執行過程,符號本身不具有內在含義。這就是所謂的「語義來自實現」(Semantics comes from implementation)。換句話說,是那些被編寫出來用於執行特定操作的子程序 (sub-routine),定義了一門程式語言的真正意義。
在非常早期的計算機時代,程序的控制極度依賴人工。從桌上計算器到由接線板 (plug board) 控制的打孔卡機 punch card,再到紙帶和 ENIAC 最初透過複雜佈線 (wiring) 來控制,無一不是如此。
為了簡化程序設計,一群科學家發明了抽象符號 symbolic abstraction,比如說讓 ADD 這三個字在編譯的時候自動變成如 1011 的二進制的機器碼。有趣的是這種符號組合語言 (Symbolic Assembly Program, SAP) 的出現被當時的硬派程式設計師視為異端、「娘炮玩意兒」(sissy stuff),而不屑使用。
在 SAP 的基礎上,John Backus 和他的團隊在 1950 年代提出了 FORTRAN(意為公式翻譯 Formula Translation)。Hamming 的經驗是,他的程式設計師使用 FORTRAN 後,產出效率提升了近十倍。然而,當時的專業程式設計師社群普遍抵制它,主要理由有三:首先,他們認為這不可能實現;其次,即使做得到,也會極度浪費寶貴的機器時間和儲存容量;最後,就算它真的能用,一個有尊嚴的程式設計師也不屑於使用。
FORTRAN 最終普及並經受住了時間的考驗,而許多後來者,如 Algol,卻失敗了。根本原因在於 FORTRAN 的設計更符合人類的心理直覺—它將人們在學校早已習慣的數學公式直接翻譯成程式,不需要學習全新的思維方式。相比之下,由邏輯學家設計的 Algol 雖然在邏輯上更為嚴謹優雅,卻因不夠人性化而最終被淘汰。這表明,符合人類心理的設計,其生命力遠超純粹邏輯的設計。
這段歷史提供了一個啟示:一項工具能否對人類產生深遠影響,並經受時間的考驗,關鍵在於它是否足夠貼近人性。
人機溝通的問題 (Human Computer Communication)#
大多數現代軟體的核心問題仍舊是「什麼是人機溝通最有效的方式?」它的子問題是「翻譯問題」,如何有效的將人類問題轉化爲可執行的指令。
核心問題是翻譯,將人類問題轉換為人類可以執行的指令。自然語言和 01 二進制機器語言之間需要大量的、連續的抽象中間層,它為人類提供了與硬件細節的緩衝,使我們能夠更直接地表達我們的意思。工具的選擇(如解釋器 interpretator 與編譯器 compiler)其實是對翻譯時誰承受「成本」的選擇。選擇用解釋器執行程序,那麼機器將需要多次重複執行同樣的程序,承擔計算資源的成本,但人類可以立刻看到執行結果;如果選擇編譯器,那麼人類需要提前寫好完整的代碼,承擔更高的認知負擔,但機器可以快速執行編譯後的二進制結果。
進步來自更好的語言和抽象,從而使人們可以更明確和安全地表達他們的意圖給機器。
(或許在 2025 年,這個問題已經得到很大程度的解決..?)
機器會思考嗎?#
在探討人工智能的哲學問題時,我們首先需釐清,「AI」的定義已隨時代變遷。在1995年,Hamming 所討論的 AI,主要指電腦在智力領域對人類的輔助,例如協助音樂創作、化學合成路線的探索,這與我們在 2025 年所熟知的生成式 AI、大型語言模型(LLM)或 AI 代理(Agent)等概念有所不同。
儘管定義不同,一個核心的哲學問題至今仍然存在:「機器能夠思考嗎?」這個問題之所以複雜,根本原因在於我們所依賴的詞語本身就定義不清。例如,電腦處理的是「符號」(symbols),而非「資訊」(information),因為我們至今仍無法精確定義「資訊」到底是什麼,更不用說為它編寫程式。同樣地,「思考」的定義也充滿爭議,若我們將思考定義為「人類能做到而機器不能做到的事」,那這個問題就永遠不會有答案。
對於這個問題的立場,直接影響一個領域的領導者是否會積極採用新技術。Hamming 在書中提醒,抱持「機器不能思考」的偏見會讓你錯失良機,但若輕易相信「機器當然能思考」,則很可能陷入巨大的失敗。因此,關鍵不在於相信或不信,而是必須對這個議題有自己深入的見解。如今我們也深知,若不善用 AI 或相關工具,任何領域的發展都可能停滯,甚至被淘汰。
然而,即便 AI 應用已相當普及,許多哲學性的辯論仍未有定論:
- 機器能從經驗中學習嗎? Art Samuel 的跳棋程式能透過與自己對弈來調整參數,最終擊敗州冠軍。這難道不算「從經驗中學習」嗎?若你認為這只是程式指令,那麼人類在課堂上被老師教導,不也是一種形式的「被編程」嗎?
- 機器是否具備原創性與創造力? 一個幾何定理證明程式,為「等腰三角形兩底角相等」的定理,提出了一個連程式設計師都未曾想到的優雅證明。這份驚喜是「原創性」的展現嗎?這裡存在一個弔詭的悖論:一旦某個任務能被程式完成,人們就傾向於將其視為機械化的 rote process,從而否定了機器具備思考能力的可能性。
這種由機器帶來的驚喜,究竟是邏輯上全新的發現(Logical Novelty),還是僅僅是帶給人類的心理驚奇(Psychological Novelty)?Hamming 指出,程式的運行結果雖然時常讓程式設計師驚訝,但嚴格來說,這並非邏輯上的創新,因為一切仍在程式設定的範圍內。然而,人類的偉大發現,不也常常是基於過去經驗的累積,從而產生的心理驚奇嗎?
更進一步,「思考」是一個非黑即白的是非題,還是一個程度上的問題?或許我們不該只問「是否思考」,而是「思考到什麼程度」。
最後,我們該如何衡量思考?是根據產出的「結果」(what),還是執行的「過程」(how)?Hamming 觀察到,一個孩子在學習三位數乘法時,我們會感覺他「正在思考」;當我們成年人做同樣的運算時,感覺更像是「條件反射」;而當電腦執行時,我們完全不覺得它在思考。傳統的 AI 研究過度專注於「結果」,而忽略了「過程」也許才是思考的關鍵。如果一個程式能完成人類無法做到的複雜任務,例如設計百萬電晶體的晶片,這算是智慧嗎?或者,正因為程式是人類寫的,它的所有行為終究只是依循指令的機械化步驟?這些都是值得我們持續深思的難題。
定義的力量與限制#
在資訊論被提出之前,人們對「資訊」的討論往往是空泛的。然而,一個清晰的定義能將模糊的直覺轉化為可以計算、測試和設計的具體限制,使我們能回答過去無法回答的問題。Shannon 的理論正是如此,它將通訊領域的模糊問題變成了可以尋求最佳解的工程問題,並嚴謹證明了可能性與不可能性的邊界,而過程中完全不涉及語義的討論。這是定義的力量。
然而,我們必須審慎檢視這個定義的內涵。首先,Shannon 並未定義資訊的「意義」,他只提供了一個度量它的公式。其次,這個度量完全基於「驚奇」(surprise):一個事件的機率越低,它帶來的驚奇或資訊量就越大。這個概念雖然非常適用於電話、電腦等機器間的通訊系統,卻與人類對資訊的日常直覺不符。這也是為什麼貝爾實驗室的管理層最初希望稱之為「通訊理論」(Communication Theory)而非「資訊理論」的原因。第三,它是一個相對的度量,完全取決於你的知識狀態。例如,當你看著一串隨機數時,你會覺得每個數字都帶來驚奇;但若你知道生成這些數字的公式,那麼下一個數字就毫無懸念,也就不包含任何資訊。
Shannon 的例子揭示了一個普遍的現象:任何透過嚴格定義來形式化的概念,都不可避免地會扭曲人們對這個詞原來的直覺。長遠來看,這個被精確定義的詞彙,其意義將由定義本身所決定。一個非常著名的例子就是我們常說的 IQ:如果我們設計出一套測驗,並不斷修正使其內部一致,再透過校準使其分數呈現常態分佈,最後宣稱這就是對「智力」的測量,那麼這就是一個近乎完美的循環論證…
因此,我們應該培養一種審視基礎定義及其限制的思維風格,而不僅僅是學習技術。物理學家 Eddington 曾說過一個著名的故事:一群人用網子在海裡捕魚,在檢查漁獲後,他們得出結論:海裡的魚有最小尺寸的限制。這個結論顯然源於他們使用的工具(網子),而非真實的大海。定義也是一種工具,它決定了我們能「發現」什麼。Shannon 的「資訊」定義對於計算通訊系統的容量、極限和編碼方式極其強大,但它並非一套關於人類意義的理論。我們必須了解其適用範圍,並避免過度引申。
有關在計算模擬中的「garbage in, garbage out」#
Garbage in, garbage out 這個古老的說法在計算模擬中總是對的嗎?事實上,這個觀念及其反面都可能是錯的。關鍵在於,我們必須判斷該系統是「收斂的」(convergent)還是「發散的」(divergent)。
發散系統對初始條件非常敏感,微小的誤差會隨著時間被急遽放大,導致結果天差地別。天氣預測就是一個典型的例子,日本一隻蝴蝶拍動翅膀的微小擾動,理論上可能最終決定了美國是否會發生風暴。在這種情況下,Garbage in, garbage out 的說法是成立的,因此要得到準確的結果極其困難。
收斂系統具有內在的穩定性,即使初始輸入的數據有很大的誤差(垃圾),系統的動態也會將其導向一個相對準確的結果。換句話說,大的誤差會隨著模擬的進行而變小。 比方说早期 NIKE 導彈測試中,兩枚測試導彈在飛行中途解體,原因不明。為了模擬失敗過程,團隊需要輸入導彈解體前的飛行數據,但當時的遙測數據模糊不清,他們只能用猜測的數值(也就是「垃圾」)作為初始條件。 然而,Hamming 意識到導彈的導引系統本身就是一個強大的反饋機制,會自動修正飛行軌跡的微小偏差,這形成了一個「強收斂的方向場」(strongly convergent direction field)。正因如此,儘管初始數據不準確,模擬最終依然成功重現了失敗過程,並揭示了問題的根源:工程師們忽略了俯仰(pitch)和偏航(yaw)之間的交互作用,導致能量不斷在兩者間轉移,最終使導彈失控。這正是「垃圾進,精準出」的絕佳範例。
這個原理就像貝爾實驗室 H.S. Black 發明的負反饋放大器一樣:只要反饋迴路中的增益極高,那麼整個放大器中只有一個關鍵電阻需要是高精度的,其餘大部分零件都可以是不準確的。系統的反饋特性會自動補償這些不精確之處。 因此,在進行或評估任何模擬之前,你都應該仔細審視這個根本問題:這個系統是穩定的還是不穩定的?這將決定模擬的可行性與結果的可靠性。
什麼是好的計算模擬?#
一個可靠的計算模擬,其核心問題始終是:「為什麼我們應該相信這個模擬與現實相關?」在回答這個問題時,你不該被投入的人力、計算機的性能或問題的重要性等說辭所迷惑。這些都只是干擾 (distraction),真正的答案應當立基於模型的健全性與計算的正確性之上。
要建立一個健全的模型,首先你需要領域專家對問題的深入理解。因為只有他們才知道模型中哪些因素是至關重要的,哪些可以被安全地忽略。許多模擬專家常犯的錯誤,就是認為自己可以獨立完成所有事,卻忽略了對應用領域的專業知識才是模擬準確性的基石。
與領域專家合作時,你需要精通領域所用的術語 (master the jargon) 。這主要是為了避免對基本概念的誤解。一個詞彙或數學符號,在不同的人腦中可能有截然不同的詮釋。你需要確保雙方對概念的理解完全一致,避免實現的時候出現歧義。
從實務角度(經濟、時間成本)來看,一個模擬專案之所以可行,通常是因為其中存在高度重複的計算部分。無論是計算原子彈中每個球殼的交互作用,還是天氣預報中每個空氣塊的變化,都是將同一套程式碼反覆應用。如果沒有這種重複性,單次模擬的程式設計成本將會高到無法負擔。
一個好的模擬要能夠幫助你從複雜系統中建立直覺。與其一開始就建構一個包羅萬象的複雜模型,你應該從一個只包含主要效應的簡單模型著手。在早期的 NIKE 導彈模擬中,正是因為使用了速度緩慢的類比計算機,研究人員才有充足的時間觀察、思考,從而「感覺」到導彈的飛行特性。這種直覺帶來了突破性的設計洞見,例如改用垂直發射和縮小機翼,這些是在大量高速運算的數據中難以發現的。先從簡化中獲得洞見,再逐步演化到更精細、完整的模擬,是一條更有效的路徑。
在評估一個模擬的可靠性時,你應該建立一套嚴謹的檢查清單來問自己或模擬的提供者:
- 首先,背景場是否在很大程度上支持假設的法則?
- 你對某些微小但重要的效應是否缺失的確定程度有多高?
- 輸入數據是否可靠?
- 模擬是穩定的還是不穩定的?
- 針對已知的過去經驗,你有哪些交叉檢查可以檢查事物?
- 你能否產生任何內部檢查,例如質量、能量或角動量的守恆?在沒有冗餘的情況下,正如你從錯誤更正代碼的講座中所知,可靠性上就不可能有檢查。
正如錯誤更正碼的原理一樣,如果系統中沒有任何形式的「冗餘」(redundancy),我們就無法對其可靠性進行任何有效的檢查。
「機會是留給準備好的人」#
Luck favors the prepared mind
這句話承認了運氣的成分,但更強調成功在很大程度上取決於你自己。你時時刻刻都在透過自己的生活方式,選擇為成功做準備,或者選擇無所作為(人是習慣的總和)。
Hamming 舉了自己和同事 Shannon 的例子。他們在貝爾實驗室差不多同個時期,分別創立了Coding Theory 和 Information Theory。你可以說,這些想法「時機已到」(in the air),這沒錯。但為什麼是他們,而不是當時也在那裡的其他人做到了呢?或許有些運氣,但更是因為他們的人格特質和思維模式,使他們比別人更有準備去發現、研究並創造出這些理論。如果偉大的成就主要靠運氣,那麼這些成就就不會反覆由同一群人達成。
愛因斯坦也是一個絕佳的例子。他在 12 到 14 歲時就問自己:「如果我以光速前行,光看起來會是什麼樣子?」他意識到自己會看到一個靜止的波峰,但當時的數學方程式卻不允許這種靜止的極值存在。這個矛盾早已在他心中埋下種子。多年後,當相對論的時機成熟,許多人都在研究相關問題時,正是因為這個早期思考,讓他比任何人都更懂得如何切入問題的核心。
牛頓曾說,如果別人像他一樣努力思考,也能做到同樣的事。愛迪生也說過:「天才是百分之一的靈感,加上百分之九十九的汗水。」偉大的創造,源於長年累月的辛勤努力,而非唾手可得。全然指望運氣,來度過你僅有一次的人生,是極其不智的。
那麼如何準備呢?總結全書,你需要
(1) 承認自己想做偉大的工作 (2) 厚實知識基礎,並不斷補充新知 (3) 培育你對自己的勇氣與信心 (4) 為自己設定願景,並用系統工程的方法實現它 (5) 讓重要的、對的問題浸染你的潛意識,讓你在夢中持續咀嚼問題 (6) 關心你所在乎領域的世界大局,並不斷預測之
More in Reading
Notes on “The Art of Doing Science and Engineering”
Luck favors the prepared mind.
Takeaways from How to Do Great Work
Doing great work is a depth-first search whose root node is the desire to. So if you don’t succeed, either try again, or backtrack and then try again. Corollary, never abandon the root node.
神经整合 - 如何设计生物神经元网络
探讨如何利用生物神经元实现逻辑门运算,包括与门、或门、非门和异或门的设计方法,以及人工神经网络的基本原理。
Notes on Attachment
Comprehensive notes on attachment theory covering attachment styles, the Adult Attachment Interview, Emotionally Focused Therapy, and how attachment affects relationships, work, and life.
Get new posts by email, or via RSS.