哥德爾的 G 與巴赫的賦格#

Figure 54: 〈莫比烏斯帶 II〉,艾雪(1963 木刻)

Figure 56: 〈帶魔帶的立方體〉,艾雪(1957 石版畫)

兩者都能在不同層次上被理解。

人類擁有「我自己」的概念,同時也知道身體由二十五兆個細胞構成、由分子構成——但這兩種圖像被儲存在「不同心智隔間」中,平常無需在它們之間切換。電視螢幕上的閃動光點與我們所看到的人物,也是兩個共存卻不混淆的層次。

分塊(Chunking)與西洋棋大師#

人工智慧領域的核心問題之一:

如何讓系統能在不同的「描述層次」之間轉換?

電腦西洋棋的例子最為典型。1950–60 年代人們以為「比人類看得更深」就能取勝,但事實證明強力 look-ahead 始終追不上頂級人類棋手。

荷蘭心理學家 Adriaan de Groot 在 1940 年代研究新手與大師如何感知棋局:

  • 大師看到的不是「白兵在 K5、黑車在 Q6」這種低階描述
  • 而是把棋子分組為「塊(chunk)」——一個高階模式
  • 大師重現實戰棋局的速度遠快於新手;但對隨機放置的棋盤,兩者沒有差別
  • 大師的錯誤通常是把整組棋子放到稍偏的位置,戰略上幾乎一致——這正是因為大師以「塊」儲存

大師其實看得比新手——他的感知像個過濾器,根本看不見壞棋步(如業餘者根本不會考慮違規招)。這稱為隱式剪枝(implicit pruning)

數學中也是如此:天才數學家不會嘗試所有錯路,而是直接「聞到」有希望的路。

Figure 57: 「分塊(chunking)」的概念示意

同類層次的混淆#

通常我們處理一個系統的多重層次描述並無困難——它們概念上相距遙遠。麻煩的是當兩個層次互相相似時,例如人類心理學的各種「驅力」(drive for power, fame, love)——我們用相同詞彙描述各層級,導致混亂與數百個彼此衝突的理論。

電腦系統的層次#

電腦提供了一個層次密集且鄰接的範例。

最低層:硬體#

  • 記憶體:分為若干個「字(word)」(例如 65,536 個 = 2^16),每個字含若干 bits(典型如 36 個)
  • CPU(中央處理器):包含若干暫存器(registers)
  • I/O 裝置

一個 36-bit 字並不就是一個數——它可以是數、可以是螢幕上若干像素、可以是字母組合、也可以是指令。意義依其在程式中的角色而定,就像一張紙鈔的意義依其用途而定。

機器語言#

  • 一字內前幾個 bits 指示指令類型(ADD、PRINT、JUMP……)
  • 其餘 bits 指向其他字(即「位址」),可指向資料或下一條指令——甚至指向自己

CPU 中有一個特殊指標儲存「下一個將被視為指令的字位址」,依序執行直到遇到 JUMP 等改變流向的指令。

寫機器語言就像「逐個原子地寫 DNA」——理論可行,實務上對人類無比繁瑣。

Figure 58: 組譯器與編譯器:翻譯成機器語言的兩種工具

組合語言#

  • 一條組合語言指令對應恰好一條機器語言指令
  • 用助記符(ADDJUMP)取代二進位編碼
  • 用名字取代位址

組合語言之於機器語言,就像 TNT 原始符號之於哥德爾編碼後的數字——資訊量一致,但人類可讀性大幅提升。

編譯語言(高階語言)#

進一步「分塊」:

  • 1950 年代發現程式中重複出現的「超塊」(superchunks)——即副程序

  • 高階語言允許使用者定義自己的高階模組並命名

  • 語言不再有固定的指令集,可由程式設計師擴充

  • 編譯器(compiler):把整個高階程式一次翻譯為機器語言

  • 直譯器(interpreter):逐行讀取、立即執行(猶如同步口譯)

  • Algol、LISP、FORTRAN 都是早期的高階語言;LISP 由 McCarthy 創造,後來成為人工智慧的主流

Bootstrapping(自我引導)#

一旦寫好一個極簡的編譯器,便可用它編譯更大的編譯器,再用更大的編譯器編譯更完整的編譯器——這個過程稱為「自我引導」,就像孩子學會一定詞彙後,便能用語言來學語言,加速度暴增。

Figure 55: 皮耶·費馬

不同層次的除錯訊息#

當程式出錯時,理想上應在程式設計師寫程式所用的層次回報:

機器語言層級:
  「程式停在位址 1110010101110111。」

組合語言層級:
  「執行 DIV 指令時停止。」

編譯語言層級:
  「求值 (A + B) / Z 時出錯。」

諷刺的是,當基因「程式」出錯時(突變),bug 通常只能在高階(表現型)層級被察覺,而非底層(基因型)。現代生物學正是透過突變這扇窗來窺探基因運作。

微程式、作業系統與分層緩衝#

  • 微程式(microprogramming):使用者可在硬體電路下方再添一層,用「微指令」組合出自訂的機器語言指令;可用來「模仿」(emulate)其他廠牌電腦
  • 作業系統(operating system):在硬體與使用者程式之間,負責資源管理、I/O 排程、多使用者調度
  • 作業系統之於裸機,相當於現代電話系統之於 Bell 最初的單線電話——加上轉接、會議通話、計費、追蹤等繁複功能

多層次的「緩衝(cushioning)」讓使用者不必關心無關的底層細節——一如飛機乘客不需知道油量、風速、餐點數。但一旦出問題(行李遺失),底層的混亂就會湧到眼前。

電腦:超彈性還是超死板?#

人與人對話有大量寬容空間:含糊、半句、咳嗽、岔題——意思仍能傳達。但程式語言通常嚴格到極點

若程序名 INSIGHT 被定義並使用了 17 次,
第 18 次被誤拼成 INSIHGT,
編譯器便會冷漠地報錯,
還可能因「猜錯使用者本意」而引發整串連鎖錯誤訊息。

要設計能容忍模糊與錯誤的「橡膠語言」,存在三條路:

  • 使用者知道所有彈性 → 仍能精確溝通
  • 使用者不知道彈性 → 程式可能被嚴重誤讀
  • 使用者知道彈性但其複雜度難以掌握 → 連設計者也未必能預測結果

自動程式設計(automatic programming)——AI 的一個主要研究方向——希望讓翻譯器能:從例子一般化、修正拼寫與語法錯誤、處理模糊描述、建立使用者模型、用英文交流。要在可靠與彈性之間走鋼索。

AI 進展即語言進展#

近十年的明顯趨勢:新發現會凝結為新語言。目前已有三、四十種專為 AI 研究設計的實驗語言。

  • 高階語言並不擴大電腦的根本能力(機器語言已是潛能上限)
  • 高階語言的新概念會指引方向、開拓視角
  • 在不同語言中編程,像用不同調寫曲——每個調有自己的情緒色彩與「手感」

Figure 59: AI 系統的分層架構

軟硬體之間的混淆#

作者個人定義:「能透過電話線傳輸的,就是軟體;其餘都是硬體。」 鋼琴是硬體,樂譜是軟體;電話機是硬體,電話號碼是軟體。

人類也兼有軟硬體:

  • 硬體:生理——無法用意志治癒疾病、長出任意髮色
  • 軟體:心智——可重新「程式化」自己以新框架思考

但意志也有極限:無法讓自己變更聰明、無法用一個動作學完一門語言、無法同時思考多件事——這些是大腦這台硬體的固有限制。調和「心智的軟體」與「大腦的硬體」是本書的核心目標之一。

中間層級與天氣#

電腦系統有大量中間層級。其他複雜系統呢?

  • 大氣是「硬體」,天氣是「軟體」
  • 最底層:所有分子的運動(人類無法掌握)
  • 中階「機器語言」級:個別分子的細節
  • 我們慣常的「分塊視野」:雨、霧、雪、颶風、氣壓、季風、噴射氣流、積雨雲、逆溫層
  • 是否還存在我們未察覺的中階天氣現象?

也許「龍捲風」與「乾旱」其實是更大、更慢的全球地質尺度現象的中階組件——冰河期可能才是真正的高階天氣事件。

從龍捲風到夸克:近可分解系統#

物理學中,系統由互動的「部分」組成。

  • 近可分解系統(nearly decomposable system)(H. A. Simon 的術語):

    • 各組件互動微弱
    • 每個組件保持自身身份,只略略受影響
    • 例:球隊中的球員、原子中的電子
  • 強交互系統(如原子核中的夸克)則不易分離出「個別組件」——夸克永遠囚禁於強子中,無法獨立存在。

Figure 60: Ant Fugue 中對應的高低層描述

本章奠定的層次觀念,將是後續關於大腦、思維、意識、AI 全部討論的基礎。