標籤
白色卡片上,由藍到紫的電路板線條繪成的大腦,中央對話框內寫著 LLM

「一連串的失敗」造就了 LLM(上篇)— 從數學的極限到意義的幾何學

LLM 是一連串無關問題的副產品:圖靈的可計算性、夏農的資訊理論、感知器、反向傳播、GPU,以及 Word2Vec。

本頁目錄

引言

像 ChatGPT 與 Claude 這樣的大型語言模型(LLM),並不是從「我們來做一個 LLM 吧」這個目標誕生的。

有人想證明數學的極限,有人想減少電話線路上的雜訊,有人想修正機器翻譯的準確度問題。每個人解的都是完全不同的問題,而這些副產品在 80 年間層層累積,最後成了 LLM。

這篇文章依序追蹤這些意料之外的連結是怎麼接起來的。不預設任何機器學習或數學背景。

起因是一支 Fireship 的 YouTube 影片。它把 LLM 的歷史濃縮得很精簡,讓我想更深入去挖「每一項發明當初到底想解決什麼問題」,於是決定寫下這篇。

上篇(本文) 涵蓋電腦概念的誕生、資訊理論、神經網路的訓練,以及把文字變成數字的技術。下篇 則追蹤處理脈絡的 Attention 如何誕生、Transformer、GPT-3 的規模革命,以及現在的對齊與效率化時代。

1. 「計算」是什麼意思? — Alan Turing (1936)

當時要解的問題

1930 年代的數學界有一個夢想:

「任何數學命題,都應該能由某個演算法判定為『真或假』。」

這被稱為 決定問題(Entscheidungsproblem),由數學巨擘希爾伯特提出。說白了就是:「數學能被完全機械化嗎?」

英國數學家艾倫・圖靈決定去證明這件事是真是假。

圖靈的翻譯:把數學問題換成程式問題

圖靈漂亮的一步,是把問題翻譯成另一個問題

如果真存在「能判定數學命題的演算法」,它必須這樣運作:

持續尋找證明 → 找到證明就停機 → 找不到就永遠迴圈

於是「數學能被機械化嗎?」就等同於「我們能判定一支程式會停機還是會迴圈嗎?

因此,只要能證明停機問題無解,就能證明把數學機械化也是不可能的。這正是圖靈瞄準的地方。

「停機問題」:自我指涉所產生的矛盾

「對任何程式,我們能不能造出一個萬能程式(判定機 H),在執行之前就判定它會停機還是會迴圈?」

答案是 不能。而看清這件事的方法,是先假設相反的情況。假設 H 確實存在。它接收兩樣東西,一支程式與那支程式的輸入,而且永遠回答正確:

H(P, I) → 「會停機」或「會迴圈」
假設存在一個完美的判定機 H證明所依據的假設。判定機 H 接收兩樣東西:程式 P 與輸入資料 I,並回答把 I 輸入 P 執行後會停機還是永遠迴圈。它被假設為對任何程式與任何輸入都能回答,而且從不出錯。假設存在一個完美的判定機 H程式 P輸入資料 I把 I 輸入 P 並執行時,會停機,還是永遠迴圈?會停機 ✓永遠迴圈 ↻假設:H 對任何程式與任何輸入都能回答,而且從不出錯
從這裡往下的一切,都待在那個「假設」裡面。

出問題的形狀,在說謊者悖論裡早已見過:

「這句話是假的。」 → 若為真,則為假;若為假,則為真。兩邊都矛盾。

圖靈用 H 造出了同一個陷阱。如果 H 存在,那麼 唱反調程式 D 也存在,因為 D 只是包住 H 的四行程式:

D(X):
if H(X, X) == 「會停機」: 永遠迴圈
else: 停機

D 去問 H:把程式 X 拿自己當輸入執行會怎樣,然後做相反的事。

若 H 存在,D 也存在 — 它只是包住 H 的四行程式把唱反調程式 D 畫成只是薄薄包住判定機 H 的一層。D 接收程式 X,去問 H 把 X 輸入 X 自己執行會怎樣,然後把答案反轉:H 說會停機,D 就永遠迴圈;H 說會迴圈,D 就停機。D 沒有做任何聰明的事,它只是讀 H 的判定然後做相反的事。因為 D 只是包住 H 的四行程式,所以假設 H 存在,就等於假設 D 也存在。若 H 存在,D 也存在 — 它只是包住 H 的四行程式程式 D(輸入 X)H去問 H:把 X 輸入 X 執行會怎樣H:「會停機」H:「會迴圈」反轉反轉所以 D 永遠迴圈所以 D 停機D 沒有做任何聰明的事。它只是讀 H 的判定,然後做相反的事。
D 不是什麼聰明的程式。它是一層包裝,唯一的工作就是唱反調。

現在把 D 自己當成輸入來執行 D。它做的第一件事是計算 H(D, D),而 H 一定會回答,因為 H 對任何輸入都會回答:

把 D 自己當成輸入,執行 D把 D 自己當成輸入來執行 D,於是它做的第一件事就是計算 H(D, D),而 H 一定會回答。接著有兩列。如果 H 說會停機,D 就走進迴圈的分支而永遠迴圈,所以 H 的答案是錯的。如果 H 說會迴圈,D 就走進停機的分支而停機,所以 H 的答案還是錯的。兩列都走到同樣的結論,而且沒有第三列,因此 H 無論怎麼答都是錯的。H 本來應該對任何程式都正確,但它在 D 上就錯了。把 D 自己當成輸入,執行 DD 做的第一件事是計算 H(D, D),而 H 一定會回答H 說「會停機」D 走進迴圈的分支D 永遠迴圈H 的答案是錯的H 說「會迴圈」D 走進停機的分支D 停機H 的答案是錯的沒有第三列。H 無論怎麼答都是錯的。H 本來應該對任何程式都正確,但它在 D 上就錯了。
陷阱不在 H 的答案,而在於 D 聽得到那個答案。

沒有第三列。 H 的答案是對「D 會做什麼」的預測,而 D 讀了那個預測之後就做相反的事。被推翻的不是 D 的行為,而是 H 的判定

這樣就足以收尾了。H 本來應該對每一支程式都正確,而 D 就是它會答錯的一支,所以 H 不是一個正確的判定機。D 也不是什麼特殊產物:只要 H 寫得出來,D 就寫得出來。判定機 H 在原理上不可能存在。

於是「把數學完全機械化」這個夢想,被證明是不可能的。

意料之外的副產品:「一台機器什麼都能做」的電腦概念

真正重要的不是這個證明的結論,而是這個證明所需要的東西。

為了「證明停機問題」,圖靈必須先嚴格定義「計算是什麼意思」。為此誕生的就是 圖靈機:一個抽象的機器模型,在紙帶上讀寫符號,並依規則改變狀態。

接著圖靈注意到這台機器一個決定性的性質。程式本身也是資料。

這是什麼意思?你可以在圖靈機的紙帶上寫「輸入資料」。但你同樣可以把「它如何運作的步驟(也就是程式)」寫在同一條紙帶上。所以步驟也是資料的一種。而這代表:你可以造出一台萬能機器,把任何程式的描述當成輸入接收下來,並執行它

這就是 萬能圖靈機(Universal Turing Machine,UTM)

這個想法為什麼是革命性的,和它之前的世界一比就很清楚:

萬能圖靈機取代了什麼在萬能圖靈機出現之前,每一項計算任務都需要自己的專用機器:任務 A 要專用機器 A,任務 B 要專用機器 B,任務 C 要專用機器 C。在它出現之後,任何任務都在同一台機器上執行,改變的只是當作輸入交給它的程式。筆電就是這樣的東西:瀏覽器、遊戲與 LLM 推論全都跑在從未改變的硬體上,改變的只是程式這份資料。萬能圖靈機取代了什麼UTM 之前任務 A專用機器 A任務 B專用機器 B任務 C專用機器 CUTM 之後任何任務同一台機器+ 換一個程式(輸入)這就是你的筆電。瀏覽器、遊戲、LLM 推論,硬體從來沒變過。
機器不再是「每碰到一個問題就造一台」的東西。

這就是你的筆電。瀏覽器、遊戲、LLM 推論,硬體都沒有變,變的只是程式這份「資料」。

約翰・馮紐曼讀了圖靈的論文,並在 1940 年代把這個概念落實成實際的電腦設計(馮紐曼架構)。把程式和資料存放在同一個記憶體裡:今天所有的電腦都沿用這個設計。

由於這個設計成為業界標準,一件決定性的事情發生了。任何能在這個共通架構上表達的演算法,都能在任何相容的硬體上執行。 任何人寫出一支程式,就能在全世界的相容機器上跑。不必擁有專用機器,只要有演算法的想法就能參與。這是軟體產業的地基,也是 LLM 訓練程式碼能在全世界的 GPU 叢集上執行的原因。

一次寫成、到處可執行的演算法:程式先通過指令集、作業系統與執行期函式庫所構成的共通契約,接著原封不動地在筆電 CPU、工作站 GPU、資料中心 GPU 叢集或雲端 GPU 上執行,讓開發者能使用自己並不擁有的機器

不過 1936 年的證明還確定了另一件事。圖靈自己畫下的「可計算性極限」,同樣適用於 LLM。 ChatGPT 和 Claude 在原理上都無法解出停機問題,也就是說,要完全保證任意一支程式是否正確是不可能的。同一篇催生了電腦的論文,也為在這台電腦上執行的每一個 AI 定下了永久的天花板。

為了證明數學的極限,反而誕生了「一台機器什麼都能做」的電腦概念。

補充: 14 年後的 1950 年,圖靈提出「機器能思考嗎?」這個問題,並提出用來檢驗人與機器能否被分辨的 圖靈測試。它正是今天用來評估 LLM 能力的對話式測試在概念上的祖先。而電腦科學的最高榮譽稱為 圖靈獎(ACM Turing Award),其份量足以被稱為「電腦科學界的諾貝爾獎」。後面會提到,深度學習的先驅們也拿過這個獎。

2. 「資訊」能用數學衡量嗎? — Claude Shannon (1948)

當時要解的問題

1940 年代,貝爾實驗室的研究員克勞德・夏農有一個很實務的煩惱。

「在充滿雜訊的電話線路上,資訊能被多準確地傳送?」

一個和 AI、機器學習都無關的電話工程問題。

為什麼非得先定義「資訊是什麼」

當時的電話工程師是憑直覺在對付雜訊:把訊號放大、提升纜線品質、把訊息重複幾次。但有一個根本的問題他們答不出來。

「在這條充滿雜訊的線路上,理論上資訊能被多準確地傳送?極限在哪裡?」

答不出來的理由很簡單。他們無法用數學定義雜訊究竟破壞了什麼。

想一想。雜訊會破壞訊號。那麼訊號的「哪個部分」被破壞才算是問題?

舉例來說,如果「THE CAT SAT ON THE MAT」這則訊息被雜訊弄壞了一部分:

  • 「CAT」的「C」不見了 → 意思壞了。致命。
  • 「THE」變成「TH_」 → 讀的人能還原。沒問題。
  • 第二個「THE」不見了 → 讀的人早就預測到了。資訊損失很小。

這裡有一個重要的發現。訊息裡並不是每個部分都帶著同樣多的資訊。 容易預測的部分帶的資訊少,難以預測的部分帶的資訊多。雜訊真正造成傷害,是在它破壞了高資訊量的部分時。

所以要對抗雜訊,得先知道「要保護什麼」。要知道保護什麼,就得先定義「資訊是什麼」。

定義「資訊量」

夏農的答案:「資訊就是不確定性的減少。越是發生了難以預測的事,它帶的資訊就越多。」

「明天太陽還是會從東邊升起」。人人都知道,資訊量幾乎是零。 「東京在盛夏下雪」。出乎意料,資訊量很大。

把這個直覺寫成公式的,就是 資訊熵。它「根據每個事件發生的可能性(機率)計算整體的難預測程度」,越難預測,值就越大。

資訊即不確定性的減少:幾乎確定的事件幾乎不帶資訊,而極為意外的事件帶著大量資訊;熵的公式把這個直覺換算成位元,並以一個有四種結果的變數為例,隨著結果趨於均勻,依序得到 0.24、1.57 與 2.00 位元

資訊量的單位

順帶一提,「bit(位元)」這個詞也出現在這個年代,但並不是夏農自己發明的。0 與 1 的二進位概念可以追溯到萊布尼茲(1703 年),而「bit」這個詞是由他的同事約翰・圖基造出來、再由夏農在論文中推廣開來的。夏農真正的發明不是「0 或 1」,而是 把資訊量化的數學本身

補充: Anthropic 的 AI 助理「Claude」,普遍認為是以克勞德・夏農命名的。一個 AI 冠上創立資訊理論的夏農之名,是個相當耐人尋味的選擇。

夏農的答案所解放的工程學

因為定義了資訊,一切都變得可以量化:

  1. 可以衡量一則訊息:計算它含有多少位元的資訊
  2. 可以衡量一條通道:計算線路每秒能可靠傳送多少位元(通道容量)
  3. 可以設計冗餘:計算為了錯誤更正該多加多少位元

而最重要的結果是 雜訊通道編碼定理:只要資訊速率低於通道容量,無論雜訊多大,只要編碼得當,就能做到實質上零錯誤的通訊。

在夏農之前,工程師認為線路一有雜訊、品質下降就是無可避免的。夏農證明了並非如此。雜訊設下了極限,但在那個極限之下,只要編碼正確,完美的可靠度是做得到的。

與壓縮的連結:資訊少的部分可以丟掉

夏農對資訊的定義又催生了另一場革命:資料壓縮

根據 來源編碼定理,一則訊息能被壓縮到的理論最小尺寸,等於它的熵(資訊量)。也就是說:

  • 「AAAAAAAAAA」:完全可預測,熵接近零 → 可以壓到幾乎沒有
  • 隨機雜訊:完全不可預測,熵最大 → 無法壓縮
  • 自然語言:介於兩者之間,模式很多 → 可以大幅壓縮

JPEG、MP3 與 ZIP 檔全都是這個原理。把容易預測(低資訊量)的部分拿掉,保留難以預測(高資訊量)的部分。解壓縮時,再從脈絡把可預測的部分還原回來。

LLM 的斷詞器(BPE,也就是 Byte Pair Encoding)在這個意義上同樣是壓縮。頻繁出現的序列(“the”、“ing”、“tion”)會變成單一 token,而罕見的序列則維持逐字元的形式。斷詞器就是字面意義上針對自然語言的夏農最佳編碼器。

把 BPE 斷詞器視為夏農最佳壓縮:「the」「ing」「tion」這類頻繁序列會收成單一 token,只需約四到六位元的短碼;罕見序列則維持逐字元,代價達二十位元以上。因為最佳編碼器給每個符號的碼長,就是其機率取負的以二為底對數

與 LLM 的連結:從訓練到推論

訓練:交叉熵損失

訓練 LLM 時的核心問題是「模型能多準確地預測下一個詞?」

用來衡量這個「預測準確度」的指標就是 交叉熵損失,它直接由夏農的熵推導而來。

損失 = -(正解機率 × log(模型預測機率) 的總和)

當 LLM 在學習時,模型會不停地想把這個數字變小。換句話說,減少對下一個 token 的「意外程度」 就是訓練的全部目的。夏農的「資訊 = 不確定性的減少」,直接就是學習目標。

推論:temperature 就是熵的旋鈕

夏農所說的「意外程度」,也直接連到控制 LLM 輸出這件事。temperature 這個參數,就是直接操作輸出分布之熵的旋鈕。

P(token) = softmax(logit / temperature)
Temperature 對分布的影響 夏農熵
→ 0 集中在機率最高的 token 熵 → 0(毫無意外)
= 1 模型自然的分布 自然的熵
> 1 分布變平,各 token 更接近 熵上升(意外程度增加)

低 temperature = 永遠挑最可預測(低資訊量)的 token。高 temperature = 從熵更高的分布取樣 = 有創意,但也可能較不一致。

當你為了「寫得更有創意」而調高 temperature 時,你其實是字面意義上在提高輸出的夏農熵。

整條連結

同一個定義,一路貫穿到推論同一個定義貫穿五個階段。夏農在 1948 年把資訊定義為意外程度,並以熵來衡量。壓縮去掉低熵、可預測的部分,保留高熵的部分。斷詞器套用同樣的原理,由 BPE 最佳化地編碼語言。訓練損失是交叉熵,衡量模型對正解 token 的意外程度。而 Temperature 則在推論時控制輸出分布的熵。每一個階段都是同一個想法用在不同的位置上。同一個定義,一路貫穿到推論夏農 (1948)定義資訊 = 意外程度 = 熵壓縮去掉低熵(可預測)的部分,保留高熵的部分斷詞器BPE 以同樣的原理最佳化地編碼語言訓練損失交叉熵 = 模型對正解 token 的「意外程度」Temperature在推論時控制輸出分布的熵
沒有人把這件事重新推導了四次。它是同一個定義,而且到現在還在承重。

同一套數學框架,適用於打造與運行 LLM 的每一層。當初只是想減少電話線路雜訊的夏農數學,80 年後同時成了 LLM 的「聰明程度的定義」與「創意的調節旋鈕」。

3. 機器能學習嗎? — 樂觀、挫折、復甦

樂觀的年代:感知器(1958)

第一個證明「機器能學習」的,是法蘭克・羅森布拉特的 感知器

機制很簡單。最簡單的神經網路,就是只有一個「神經元」的電路。

感知器:最簡單的神經網路把感知器畫成電路。三個輸入 x1、x2、x3 各自沿著帶有權重 w1、w2、w3 的連線前進。加權後的輸入與偏置一起加總,這個總和再與閾值比較,得到 0 或 1 這個單一的二元輸出。學習改變的只有權重,電路裡的其他東西都不會動。感知器:最簡單的神經網路輸入權重加總輸出x1w1x2w2x3w3Σ(xi·wi) + 偏置閾值判定0 或 1學習改變的只有權重。電路裡的其他東西都不會動。
一個神經元,而唯一可調整的部分就是線上的權重。
  1. 接收數個輸入(數字)
  2. 各自乘上一個「權重」再相加
  3. 若總和超過閾值就輸出「Yes(1)」,否則輸出「No(0)」

看個具體例子。一個判斷「這封信是不是垃圾郵件?」的感知器:

輸入:
x1 = 是否含有「free prize」?(1 或 0)
x2 = 是否來自已知的聯絡人?(1 或 0)
x3 = 是否有附件?(1 或 0)
學習到的權重:
w1 = +0.9(強烈的垃圾郵件訊號)
w2 = -0.8(強烈的非垃圾郵件訊號)
w3 = +0.3(微弱的垃圾郵件訊號)
分數 = (1)(0.9) + (0)(-0.8) + (1)(0.3) = 1.2
閾值 = 0.5
1.2 > 0.5 → 「垃圾郵件」

所謂「學習」,就是調整這些權重。先從隨機的權重開始,對照正解,再一點一點修正權重。重複幾千次之後,權重就會收斂到適當的值。

在感知器之前,每一支程式都跑在人類手寫的規則上。感知器示範了一個革命性的概念:機器能自己從資料裡找出規則

《紐約時報》這樣報導:「海軍公開了一台機器的雛形,它能走路、說話、看見、書寫,並自我複製。」樂觀的氣氛瀰漫。

挫折:第一次 AI 寒冬(1969)

馬文・閔斯基與西摩・派普特潑了一盆冷水。

感知器有數學上的極限。

這裡可能會冒出一個疑問:「圖靈在 1936 年不是證明了萬能圖靈機能做任何計算嗎?為什麼像 XOR 這種東西會是問題?」

答案是,圖靈的萬能性與感知器的學習,是 完全不同的兩種能力

  • 圖靈的萬能性: 只要由人寫出正確的程式,任何計算都做得到。XOR?一行 if 就解決了。
  • 感知器的承諾: 機器自己從資料中找出規則。規則不是人寫的。

XOR 摧毀的不是「計算能力」,而是「學習機制」本身。

具體來看。XOR(互斥或)是個簡單的規則:「兩個輸入都是 1 或都是 0 時輸出 0,只有其中一個是 1 時輸出 1」。把它畫在二維平面上:

XOR(互斥或)無法用一條直線分開真值表與二維座標圖並列。表格呈現 XOR:0 與 0 得 0,0 與 1 得 1,1 與 0 得 1,1 與 1 得 0。在座標圖上輸出為 1 的兩點位於對角,輸出為 0 的兩點也位於對角,因此任何一條直線切過這個正方形,都必然把某一點留在錯的一側。這就是單層感知器的極限。XOR(互斥或)無法用一條直線分開真值表二維座標圖x1x2輸出000011101110x1x20101NoYesYesNo無論怎麼畫直線都無法把 Yes 與 No 分開,這就是感知器的極限。
沒有任何一條直線能把 Yes 和 No 分開。這就是單層感知器的死因。

感知器試圖用 一條直線 把 Yes 和 No 分開。但看看上面的圖:用一條直線分開 ● 與 ○ 是不可能的。無論怎麼畫,它們總是混在一起。

如果只是這樣,「那 XOR 就是個特例吧」或許還說得過去。但閔斯基與派普特證明的並不只是 XOR。兩人證明的是,需要非線性判定邊界的一整類問題對感知器來說都不可能:奇偶判定(判別奇數或偶數)、對稱性偵測、連通性判定等等。XOR 只是其中最簡單、也最難堪的一個反例。

而這件事之所以毀滅性,在於 期待與現實之間的落差。媒體報導的是「會走路、會說話的機器」。數學家證明的是那台機器連 XOR 都學不會。出資者的結論是:「神經網路 = 死路一條」。這引發了 第一次 AI 寒冬。研究經費凍結,許多神經網路研究者失去了工作。

但他們的書裡留下了值得注意的一句話:

「多層網路或許能解決這個問題。但要怎麼訓練它,目前不得而知。」

這個「但是」,定義了接下來 17 年的研究課題。

復甦:反向傳播(1986)

那個「但是」,由魯梅哈特、辛頓與威廉斯提出的 反向傳播(誤差反向傳播法) 解開了。

多層網路就是把數個感知器連起來。每個感知器都有自己的權重,並被歸整成一層一層。

多層神經網路的結構三層節點的圖。左邊三個輸入節點,中間兩個隱藏節點,右邊兩個輸出節點,每一層都與下一層全連接。輸入層與輸出層從外部看得見,中間那層看不見,因此稱為隱藏層。每條連線都帶有自己的權重,訓練會調整這些權重。多層神經網路的結構輸入層(Layer 1)隱藏層(Layer 2)輸出層(Layer 3)w1w2w5w6ABCDEFG看得見看不見(hidden)看得見每條連線都有自己的權重 (w)。訓練會調整這些權重,學到的就是這個模式。
中間層之所以叫隱藏層,是因為網路外面的人看不到它。

在這張圖裡,中間的 Layer 2 稱為 隱藏層。「隱藏」不代表它藏了什麼東西。輸入層是使用者交出資料的地方,輸出層是使用者收到結果的地方。兩者對使用者來說都「看得見」。相對地,中間層是使用者永遠不會直接碰到的 內部工作空間。因為從外面看不見,所以叫「隱藏」。

為什麼叫「深度」學習?

層數增加時,增加的正是這些隱藏層。輸入層永遠只有一層,輸出層也是。在兩者之間疊了多少隱藏層,就是「網路的深度」,這也正是「深度學習」裡「深度」的意思。這個「隱藏」的概念在第 5 章還會再出現,先記著。

學習的流程很直覺:

  1. 把所有權重初始化為隨機值(若不隨機,每個神經元都會學到一樣的東西)
  2. 餵進資料,通過所有層產生預測(「這張圖是貓」)
  3. 對照正解,計算錯得多離譜
  4. 由輸出往輸入方向回溯「哪些權重對這個誤差有貢獻」
  5. 依貢獻度把每個權重稍微調整(權重會被覆寫,不留快照)
  6. 重複幾百萬次

「哪個權重對誤差貢獻了多少」要怎麼算?

知道正解的只有 最終輸出。中間層「正確來說該輸出什麼」沒有人知道。「對一張貓的圖片,Layer 1 正確的邊緣偵測結果」這種東西並不存在正解。

所以誤差訊號是 從輸出往回 傳的。用微積分的 連鎖律,各層的責任會被依序算出來:若 A 影響 B、B 影響 C,則 A 對 C 的影響就是兩者效果相乘。

反向傳播:把一個誤差拆成每一層的責任把反向傳播畫成對同樣三層的兩次傳遞。前向傳遞由左至右,輸入依序通過 Layer 1、Layer 2、Layer 3 得到輸出,再與正解比較,結果是錯的。這個比較是唯一的評分點,因為沒有人知道中間層原本該輸出什麼。反向傳遞由右至左,把誤差拆成每一層的責任:Layer 3 負責 40%,Layer 2 負責 35%,Layer 1 負責 25%,一個誤差拆成三份,合計為 100%。每一層再依自己的比例調整權重。這個拆分由連鎖律計算:若 A 影響 B、B 影響 C,則 A 對 C 的影響就是兩者效果相乘。反向傳播:把一個誤差拆成每一層的責任前向傳遞(左 → 右)輸入Layer 1Layer 2Layer 3輸出與正解比較↑ 唯一的評分點。沒有人知道中間層原本該輸出什麼反向傳遞(右 → 左)「錯了!」一個誤差拆成三份責任:40 + 35 + 25 = 100%連鎖律:若 A 影響 B、B 影響 C,則 A 對 C 的影響是兩者相乘
沒有人知道 Layer 2 原本該說什麼,所以只能由唯一握有正解的地方往回傳話。

誤差往反方向傳播。所以叫 反向傳播

多層網路能用這個方法訓練這件事被證明了,閔斯基他們口中「不得而知」的問題也就解開了。

為什麼變成多層就解得開?核心是 線性與非線性 的差別。感知器(單層)只能畫一條直線。這就是 線性 的極限。在多層網路裡,每一層各自畫出自己的直線,把它們組合起來就能形成曲線與複雜形狀的判定邊界。這就是 非線性

層數越多,判定邊界就越複雜用三張圖呈現同一組點,其中一類聚集在中央,另一類環繞在外。第一張圖中,單層網路只能畫一條直線,這條線從中間切過,兩類的點都有被留在錯的一側。第二張圖中,幾層網路把數條直線組合成一個包住中央群集的三角形,已經接近許多,但轉角仍然粗糙。第三張圖中,更深的網路組合了足夠多的直線,邊界成為一條貼合群集形狀的平滑封閉曲線。沒有任何一層真的畫過曲線;曲線只是夠多的直線切割從遠處看起來的樣子。層數越多,判定邊界就越複雜一層:一條直線有些點被留在錯的一側幾層:把直線組合起來更接近了,但轉角還很粗糙更深:組合大量直線邊界貼合了形狀沒有任何一層畫過曲線。曲線只是夠多的直線切割從遠處看起來的樣子。
三張圖的點都一樣。變的只是可以用的直線有幾條。

層數越多,判定邊界就越複雜。這就是深度學習的根基。

但理論與實用之間橫著一道很大的牆。訓練多層網路需要龐大的計算量,而 1980 到 90 年代的硬體無法以實用的速度跑完訓練。

打破速度之牆:GPU 登場(2012)

即使反向傳播已經確立,多層網路有好一陣子仍離實用很遠。資料不夠,計算太慢。

2012 年,情況在 ImageNet(一個把超過一百萬張圖片分到 1000 個類別的競賽)上徹底改變。一個叫 AlexNet 的模型交出了壓倒性的成績。相對於第二名 26.2% 的錯誤率,AlexNet 是 15.3%,差距約 11 個百分點。在機器學習領域,每年進步 1 到 2 個百分點才是常態,所以 11 個百分點就算說是「輾壓」都還算保守。隔年,大量電腦視覺研究者一齊轉向深度學習,業界的常識就此被改寫。

AlexNet 用的是 GPU(繪圖晶片)。GPU 為什麼這麼有效?在那之前訓練都跑在 CPU 上,而 CPU 與 GPU 在設計哲學上根本不同。

CPU 只有少數幾個高效能核心(4 到 16 個),設計目的是依序處理複雜的工作。GPU 有數千個簡單核心(超過 4000 個),設計目的是同時執行大量簡單的計算。

訓練神經網路,其大部分就是 矩陣乘法:把數千個權重與數千個輸入相乘再相加,如此單純地重複。而且每個乘法彼此獨立,w3×x3 的結果不必等 w1×x1 的結果。

ImageNet 2012:同樣的計算,一次全部做完在 ImageNet 2012 中,第二名的錯誤率是 26.2%,AlexNet 是 15.3%,差距約 11 個百分點;在這個領域,一年進步 1 到 2 個百分點才是常態。兩個數字都來自同一年的比賽。原因在於 CPU 與 GPU 的差異。CPU 只有少數快速核心並依序處理,像四位數學家輪流解難題:先算 w1 乘 x1,完成後再算 w2 乘 x2,一路算到 w1000 乘 x1000,總共要一千步。GPU 有數千個簡單核心並同時處理,像四千個小學生同時做加法:一千個乘法在一步之內全部算完。這之所以可行,是因為每個乘法彼此獨立,w3 乘 x3 不必等 w1 乘 x1 的結果。在 CPU 上要花數週到數月的訓練,在 GPU 上只要幾天。ImageNet 2012:同樣的計算,一次全部做完ImageNet 2012 錯誤率第二名:26.2%AlexNet:15.3%約 11 個百分點。而一年進步 1 到 2 點才是常態CPU — 少數快速核心,依序處理4 位數學家輪流解難題w1×x1 → 完成 → w2×x2 → 完成 → … → w1000×x1000合計:1000 步GPU — 數千個簡單核心,同時處理4,000 個小學生同時做加法w1×x1, w2×x2, w3×x3, … w1000×x1000合計:1 步每個乘法都獨立,w3×x3 不必等 w1×x1。CPU 要數週到數月,GPU 只要幾天。
數學一點也沒變。變的只是同一時刻能進行多少個。

AlexNet 的訓練在 CPU 上要花數週到數月,在 GPU 上幾天就跑完了。同樣的數學、同樣的結果,只是大規模平行化而已。GPU 打破了訓練速度之牆,也證明了「GPU + 大量資料 + 多層網路」這個組合能在實用等級上運作。

不過 AlexNet 是一個 8 層的網路。「更深(層數更多)應該會更聰明」,但想把層加深,就撞上了另一道牆。

補充: AlexNet 的作者之一 Geoffrey Hinton,同時也掛名在 1986 年那篇反向傳播的論文上。跨過 AI 寒冬,同一個人在 26 年後領導了深度學習的復甦。Hinton 在 2018 年與 Yann LeCun、Yoshua Bengio 一同獲得 圖靈獎,三人被合稱為「深度學習之父」。

補充: 製造這些 GPU 的 NVIDIA,原本是一家做遊戲繪圖的公司。遊戲裡的 3D 算繪同樣是「對大量像素平行執行相同的計算」,在結構上與神經網路的矩陣運算是同一回事。AI 熱潮讓 NVIDIA 成為全世界最有價值的公司之一。遊戲晶片變成 AI 訓練的最佳工具,也是這篇文章一路追蹤下來的「意料之外的連結」之一。

再深一點:克服梯度消失(2010 年代)

即使 GPU 解決了速度問題,把網路加深這件事本身還有另一道牆:梯度消失問題

如同反向傳播那節看到的,唯一的評分點是最終輸出。誤差訊號只能沿著各層往回走。而它每經過一層,訊號就會被乘法縮小一次。每次乘法的係數通常小於 1(例如 0.3),所以小數字反覆相乘會迅速趨近於零。

3 層: 0.3 × 0.3 × 0.3 = 0.027 ← 小,但還能用
10 層: 0.3^10 ≈ 0.000006 ← 幾乎為零
50 層: 0.3^50 ≈ 0.00000000000000000000000... ← 實質上為零

越靠近最終層,回饋越強;越前面的層,回饋消失得越徹底:

為什麼最前面的層會停止學習梯度消失問題。誤差訊號從輸出進入,那是唯一知道正解的地方,而它在往回傳的路上每越過一層就會被乘上約 0.3。因此每一層實際聽到的內容差距極大。靠近輸出的 Layer 50 聽到自己錯了 30%,還能據此學習。Layer 25 聽到的是錯了 0.000001%,幾乎學不動。Layer 1 聽到的數字與零無法區分,完全動不了。而 Layer 1 正是學習基本特徵的地方,地基既壞掉又搆不著,堆在上面的一切也就失去意義。為什麼最前面的層會停止學習誤差從輸出進入,每越過一層就被乘上 ×0.3Layer 1Layer 25Layer 50輸出誤差!×0.3×0.3每一層實際聽到的內容Layer 50「你錯了 30%,去調整」學得動Layer 25「你錯了 0.000001%」幾乎學不動Layer 1「你錯了 0.0000000000%」完全動不了Layer 1 正是學習基本特徵的地方。地基壞了又搆不著,堆在上面的一切都失去意義。
同樣的誤差、同樣的指示。差別在於傳到每一層時還剩下多少。

這就像建築物的地基壞了卻又修不到。Layer 1 本該學會基本特徵(邊緣、簡單的圖樣),但回饋根本傳不到,所以學不動。地基一直是亂的,那上面堆再多東西也沒有意義。

這道牆是靠多種技術的組合,分階段被克服的。

訊號為什麼會被縮成「×0.3」:Sigmoid 激活函數

前面說過每一層的乘法係數小於 1,像是「0.3」。這個係數是哪來的?答案是 激活函數,也就是每個神經元用來轉換自己輸出的那個函數。

長期被使用的是 Sigmoid。Sigmoid 的設計是為了模仿生物的神經元。真實的神經元不是單純的開關,而是依刺激強度平滑地活化。Sigmoid 是重現這件事的平滑 S 形曲線,把任何輸入都轉換到 0 到 1 的範圍。

但在反向傳播裡,每一層的「責任係數」是由這個激活函數的 斜率(梯度) 決定的。Sigmoid 的斜率最大也只有約 0.25,通常還更低。

那個會縮小的係數是哪來的:Sigmoid 的斜率把 Sigmoid 激活函數畫成 S 形曲線,它把任何輸入都壓進 0 到 1 的範圍。這條曲線的斜率,就是反向傳播時每一層的係數。在輸入極大或極小的地方,曲線幾乎是平的,斜率接近 0。即使在最陡的地方,也就是輸入接近 0 的位置,斜率也只有約 0.25。所以就算是最好的情況,訊號也只剩四分之一,而且每過一層就再乘一次。那個會縮小的係數是哪來的:Sigmoid 的斜率−10+101.00.0輸入接近 0,最好的情況 → 斜率 ≈ 0.25任何輸入都被壓進 0 到 1 的範圍輸入極大 → 斜率 ≈ 0.0輸入極小 → 斜率 ≈ 0.0最好的情況也只有四分之一。每過一層就再乘一次。
曲線上最陡的那一點也只有四分之一。沒有更好的位置可以站。

生物學上的合理性與數學上的優美,正是 Sigmoid 被認為「聰明」的理由本身,卻也成了殺死梯度的原因。它的長處就是它的短處。

ReLU:為什麼「粗糙」贏了

ReLU(Rectified Linear Unit) 簡單到令人吃驚。「正的就原封不動通過,負的就歸零」。就這樣而已。數學家一開始並不看重它。太粗糙。有一個不可微分的點。跟神經元一點也不像。

但 ReLU 對正值的斜率剛好是 1.0。不是 0.25,不是 0.1,就是 1。

Sigmoid 對上 ReLU:同樣通過十層比較 Sigmoid 與 ReLU 這兩個激活函數,對通過十層的訊號各做了什麼。Sigmoid 的斜率最大約為 0.25,因此訊號在十層中每一層都被乘上 0.25:0.25 的十次方約為 0.000001,訊號就此死掉。ReLU 對正輸入的斜率剛好是 1.0,因此訊號在十層中每一層都被乘上 1.0:1.0 的十次方仍是 1.0,訊號完整地活下來。ReLU 並沒有放大任何東西,它只是不再殺死訊號。在 1980 年代常見的兩三層深度下,這個差別根本不會浮現,只有深度才讓它變得致命。Sigmoid 對上 ReLU:同樣通過十層Sigmoid — 斜率最大只有 0.25×0.250.25¹⁰ ≈ 0.000001訊號死掉ReLU — 對正輸入的斜率剛好是 1.0×1.01.0¹⁰ = 1.0訊號活下來ReLU 並沒有放大任何東西,它只是不再殺死訊號。像 1980 年代那樣只有兩三層時,差別根本不會浮現。只有深度才讓它致命。
兩列都是同樣的十次。最後還留著訊號的只有其中一列。

ReLU 並沒有「放大」訊號。它只是 不再殺死它。Sigmoid 是在每一層積極地壓縮訊號,ReLU 則是讓它原樣通過。

1980 年代的網路只有兩三層,所以 Sigmoid 的問題從來沒有浮現。只有在層數變深之後,「聰明設計」隱藏的代價才變得致命。在規模之下,保存訊號的粗糙勝過破壞訊號的優美。

不過 Sigmoid 並不是「錯的」。它是 對的,只是撐不住規模。就像腳踏車的輔助輪:對初學者是正確的設計,對賽車手則是阻礙。實際上,Sigmoid 至今仍用在特定用途:輸出層的 Yes/No 分類(需要 0 到 1 的機率時),以及記憶單元內部的閘門控制。但在深層網路的隱藏層裡,現在的標準已經是 ReLU。

殘差連接(ResNet, 2015):另一種解法

ReLU 抑制的是每一層內部的訊號衰減,而 殘差連接(ResNet) 則是從完全不同的角度攻擊梯度消失。

在一般的網路裡,每一層被要求「接收一個輸入,並產生完整的輸出」。有了殘差連接之後,輸入會走一條捷徑,直接被加到輸出上。

這改變了什麼?這一層的工作徹底變了。這一層的角色從「產生完整的輸出」變成「學習對輸入的一個小修正(殘差)」。殘差連接 的名字就是這麼來的。

想個身邊的例子。要量一隻太輕、體重計量不到的狗,就抱著狗一起站上體重計,再減掉自己的體重。因為有自己的體重(也就是輸入)這個已知的基準,那個小小的差值(狗,也就是殘差)才量得準。殘差連接也一樣:保留輸入當基準,這一層該學的那個小修正才變得可偵測。

而對梯度來說也有決定性的差別。在反向傳播中,梯度會流過 兩條路徑

殘差連接:這一層只需要學會差值殘差連接,分成兩部分呈現。第一部分是這一層被要求做什麼。在一般路徑上,輸入為 5、期望輸出為 5.3,這一層就必須學會完整地產生 5.3。加上殘差連接後,輸入會走一條捷徑並被加到這一層的輸出上,於是這一層只需要學會 0.3 這個小修正,而 0.3 加 5 就得到 5.3。第二部分是梯度往回走時會遇到什麼。梯度會同時流過兩條路徑:層的路徑上,它可能縮到 0.001 倍甚至更小;捷徑路徑上,它以 1.0 倍完整抵達。兩者合計約為 1.001,因此永遠不會歸零。找不到有用修正的層就輸出 0,輸入原封不動地通過,這正是加深網路不再犧牲準確率的原因。殘差連接:這一層只需要學會差值這一層被要求做什麼一般路徑輸入 = 5期望輸出 = 5.3[ Layer ]必須學會:「輸出 5.3」整個都要學加上殘差連接輸入 = 5期望輸出 = 5.3[ Layer ]+捷徑:輸入原封不動地被加上去必須學會:「輸出 0.3」只是小修正;0.3 + 5 = 5.3梯度往回走時會遇到什麼層的路徑 — 可能縮到 ×0.001 甚至更小捷徑路徑 — 以 ×1.0 完整抵達合計 ≈ 1.001,永遠不會歸零找不到有用修正的層就輸出 0,輸入原封不動地通過。這就是加深不再犧牲準確率的原因。
把輸入留作基準,「產生 5.3」就變成「產生 0.3」,也給了梯度一條永遠不會變窄的路。

就算梯度在層的路徑上縮到 0.001,捷徑路徑仍會加上 1.0。合計大約是 1.001。捷徑發揮了保險的作用,訊號不會死掉。 而且因為梯度同樣會流過層的路徑,這一層自己也還學得動,因為回饋沒有消失。

要是這一層找不到有用的修正呢?就輸出 0。輸出 = 0 + 輸入 = 輸入原封不動地通過。因為每一層都有「什麼都不做」這個選項,加深層數並不會讓效能變差。

ResNet 用這個機制成功訓練了 152 層的網路,並拿下 ImageNet 2015 的冠軍。

ReLU 與 ResNet:不同的路徑,同一個目標

ReLU 與 ResNet 是對同一個梯度消失問題 從不同角度出發的解法。ReLU 防止梯度在每一層內部衰減(把係數維持在 1.0);ResNet 則為梯度確保一條跨層的旁路。在現代深度學習中,兩者結合讓超過 100 層的網路成為可行。

GPU 打破了速度之牆,ReLU 與 ResNet 打破了深度之牆。速度與深度兩道牆都倒下之後,現代深度學習才成為可能。

梯度消失問題與它的兩種對策並列:ReLU 讓梯度在每一層內部維持 1.0,ResNet 的捷徑連接則讓梯度跨層傳遞;在 GPU 移除速度之牆後,兩者一起讓超過 100 層的網路變得可行

4. 把文字變成數字是什麼意思? — 意義的幾何學

電腦只處理數字

到目前為止的故事都是「如何讓學習更準確」。而到目前為止的成功案例,處理的全都是 一開始就是數字的資料。影像是像素值(每個像素是 0 到 255 的色彩值)。音訊是波形值。股價、氣溫、感測器資料,全都一開始就是數字。它們可以直接餵進神經網路。

文字不是數字。「貓」「經濟」「美麗」:這些是符號,沒辦法照原樣餵進神經網路的矩陣計算。要打造 LLM,得先解決「我們要怎麼把文字轉成數字?」這個根本問題。

最單純的做法:給它們編號,「貓 = 1、狗 = 2、天空 = 3……」。但這樣一來,「貓」與「狗」之間就沒有任何語意上的關係了。「貓和狗很相似」「貓和太空船差很遠」這些資訊,並不在那些數字裡。

Word2Vec:把意義變成空間中的座標(2013)

Google 的米科洛夫等人提出的想法是:把一個詞表示成高維空間中的「座標(向量)」。

「高維」是什麼意思?我們日常用的地圖是二維(東西、南北);建築物內部是三維(再加上下)。Word2Vec 把一個詞表示成 300 維 的座標。人類沒辦法想像 300 維的空間,但在數學上,距離與方向的計算和二維、三維時完全一樣。

為什麼是 300 維?因為語言的意義是多面向的。「貓」這個詞由無數的軸所刻畫:「是動物嗎?」「是寵物嗎?」「多大?」「危險嗎?」「可愛嗎?」。兩三個維度表達不了這麼豐富的意義幅度。有了 300 個維度,每個維度就能捕捉意義的不同面向。

訓練方法很單純。讓「出現在相似脈絡中的詞得到相近的座標」。「貓」與「狗」都被用在「寵物」「飼料」「散步」這類脈絡裡,所以座標會變得相近。

這樣得到的「意義地圖」有一個令人驚訝的性質:

「king」的座標 − 「man」的座標 + 「woman」的座標 ≈ 「queen」的座標

意義可以拿來做算術。語言變成了數學。

一個詞同時被許多意義的軸所刻畫:「貓」在動物、寵物、野生、危險、可愛、柔軟、夜行與室內等軸上被評分,接著同樣的想法從二維擴展到三維再到三百維,並在那個空間中畫出「king − man + woman ≈ queen」這個向量運算

補充: 「意義存在於關係之中」這個想法是有前輩的。1998 年,史丹佛的研究生賴利・佩吉與謝爾蓋・布林在論文 “The Anatomy of a Large-Scale Hypertextual Web Search Engine” 中提出了 PageRank。當時的搜尋引擎是用頁面內關鍵字出現的頻率來排序,而 PageRank 則是用 一個頁面被其他頁面連結了多少次,也就是網路的結構性關係,來衡量重要度。「比起內容本身,周圍的關係更能表現本質」這種看法,和 Word2Vec 的「一個詞的意義由其周圍脈絡(共同出現的詞)決定」驚人地相似。而從 PageRank 誕生的 Google,後來成立了 Google Brain,並在 2017 年產出 “Attention Is All You Need”(Transformer)這篇論文。一家搜尋引擎公司發明了 LLM 的核心架構。這又是一個「意料之外的連結」。

「近」要怎麼衡量? — 餘弦相似度

前面說了「貓和狗很近」「貓和太空船很遠」,但在 300 維空間裡,「近」到底是什麼意思?

直覺上會想用兩點之間的距離(歐氏距離)。但在高維空間中,方向 比距離更能捕捉語意的相似性。

用一個具體的例子來看原因。假設有一份長文件和一份短文件,都是在講「貓」。

「近」指的是方向,不是距離說明高維空間中的「接近」為什麼要用方向而非距離來衡量。一份提到「貓」五次的短文件,和一份提到五十次的長文件,會產生長度差很多的向量,因此用歐氏距離量會判定兩者相距很遠,儘管兩份文件都在講貓;但它們的方向其實完全相同。餘弦相似度改為測量夾角:1.0 表示方向完全相同、意思相同,0.0 表示直角、毫無關係,−1.0 表示方向完全相反、意思相反。以示意的例子來說,「狗」對「貓」約為 0.9,因為方向幾乎相同;「太空船」約為 0.1,因為指向完全不同的方向。「近」指的是方向,不是距離歐氏距離的問題短文件:「貓」出現 5 次長文件:「貓」出現 50 次歐氏距離:很遠方向:完全相同兩份文件都在講貓。用距離量卻判定成毫無關係。餘弦相似度改為測量夾角1.0方向完全相同 — 意思相同0.0直角 — 毫無關係−1.0完全相反 — 意思相反具體例子(示意)「狗」≈ 0.9和「貓」幾乎同方向「太空船」≈ 0.1方向完全不同
兩份都在講貓的文件,其中一份長了十倍。距離卻把這件事當成意義上的差別。

兩份都是「在講貓的文件」,用距離量卻被判定為「很遠」。用方向量則是「一樣」,而這才是對的。

餘弦相似度 衡量的是 兩個向量指向同一個方向的程度

尺度從方向完全相同的 1.0,經過直角的 0.0,一路到完全相反的 −1.0。上面那張圖同時放了這個尺度與一個具體例子。

這正是今天 RAG(檢索增強生成)與語意搜尋的基礎。把使用者的問題向量化,和資料庫中文件的向量計算餘弦相似度,再取回方向最接近的文件。從 Word2Vec 開始的「用方向衡量意義」這個想法,如今成了 AI 應用的搜尋引擎。

這項技術稱為 Embedding

為什麼 Embedding 對 LLM 不可或缺

Embedding 的重要性不只在 RAG 與搜尋。它是 LLM 處理語言的入口本身

LLM 的內部是一個神經網路,也就是矩陣乘法的連鎖。矩陣乘法需要數字構成的向量。你沒辦法把「貓」這個字串直接放進神經網路。

Embedding 層:LLM 的大門呈現一個句子在 LLM 大門口會經歷什麼。句子「貓正在睡覺」先被斷成「貓」「正」「在」「睡」「覺」等片段,並轉成 4521、12、8834、67、2201 這些 token ID。接著 Embedding 層把每個 ID 轉成一個 300 維向量:4521 變成以 0.12、−0.34、0.56 開頭並以 0.78 結尾的向量,也就是「貓」的語意向量;12 則變成類似的向量,是「在」的語意向量。之後這些向量才進入神經網路。網路只會把數字相乘,而在這之前的每一步,都是為了把這些數字做出來。Embedding 層:LLM 的大門步驟 1 — 斷詞「貓正在睡覺」「貓」4521「正」12「在」8834「睡」67「覺」2201步驟 2 — Embedding每個 ID 都變成一個 300 維向量4521[0.12, −0.34, 0.56, …, 0.78]「貓」的語意向量12[0.01, −0.02, 0.03, …, 0.01]「正」的語意向量步驟 3 — 進入網路網路只會把數字相乘。在這之前的每一步,都是為了把數字做出來。
這裡還沒有任何智慧。這是讓智慧得以成立的那一步。

沒有 Embedding,LLM 連輸入都收不下。Word2Vec 所確立的「把詞轉換成有意義的向量」這項技術,就內建在 LLM 字面意義上的入口,也就是它的第一層。

到這裡,「怎麼把文字變成數字」已經解決了。但下一個問題正等著。光是把詞轉成向量,會失去 詞的順序(脈絡)。「狗追了貓」和「貓追了狗」的詞向量完全一樣,意思卻完全相反。

脈絡要怎麼處理? 這個問題就是下一章的主題。而最早認真處理它的,是機器翻譯領域的研究者。

總結

上篇從電腦的誕生一路追到 Word2Vec,貫穿全篇的線索是:每一項發明,當初解的都是完全不同的問題。

  • 圖靈(1936):為了證明數學的極限,反而誕生了萬能電腦的概念,以及一道同樣適用於 LLM 的永久天花板。
  • 夏農(1948):為了對抗電話線路的雜訊而定義的「資訊 = 不確定性的減少」,後來成了 LLM 的交叉熵訓練損失與 temperature 旋鈕。
  • 從感知器到反向傳播(1958–1986):XOR 引發了第一次 AI 寒冬,而「多層但要怎麼訓練」這個問題,答案是把誤差往回傳。
  • GPU 與 ReLU/ResNet(2012–2015):打破速度之牆與深度之牆,兩者一起讓現代深度學習變得可行。
  • Word2Vec(2013):把詞表示成空間中的座標,讓語言變成數學,並成為 LLM 的入口,也就是 Embedding 層。

下一個問題是脈絡:把詞轉成向量會失去順序,「狗追了貓」和「貓追了狗」變得無法區分。下篇 就從那裡開始,追蹤 Attention 的誕生、Transformer、GPT-3 的規模革命,以及現在的對齊與效率化時代。那是 LLM 如何「未經設計」而完成的後半段。

分享這篇文章