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

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

- Source: https://oharu121.com/zh-tw/blog/llm-birth-history-turing-shannon-perceptron-word2vec-part1/
- Published: 2026-08-11T22:23:50+09:00
- Tags: LLM, 生成式 AI, 深度學習

---
## 引言

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

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

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

起因是一支 [Fireship 的 YouTube 影片](https://www.youtube.com/watch?v=ML3q7Ok4hJg)。它把 LLM 的歷史濃縮得很精簡，讓我想更深入去挖「每一項發明當初到底想解決什麼問題」，於是決定寫下這篇。

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

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

### 當時要解的問題

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

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

這被稱為 **決定問題（Entscheidungsproblem）**，由數學巨擘希爾伯特提出。說白了就是：「數學能被完全機械化嗎？」

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

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

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

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

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

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

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

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

「對任何程式，我們能不能造出一個萬能程式（**判定機 H**），在執行之前就判定它會停機還是會迴圈？」

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

```
H(P, I) → 「會停機」或「會迴圈」
```

*Figure — DeciderContract: 從這裡往下的一切，都待在那個「假設」裡面。*

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

> 「這句話是假的。」
> → 若為真，則為假；若為假，則為真。兩邊都矛盾。

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

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

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

*Figure — ContrarianProgram: D 不是什麼聰明的程式。它是一層包裝，唯一的工作就是唱反調。*

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

*Figure — HaltingTrace: 陷阱不在 H 的答案，而在於 D 聽得到那個答案。*

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

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

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

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

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

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

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

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

這就是 **萬能圖靈機（Universal Turing Machine，UTM）**。

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

*Figure — UniversalMachine: 機器不再是「每碰到一個問題就造一台」的東西。*

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

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

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

*Image: 一次寫成、到處可執行的演算法：程式先通過指令集、作業系統與執行期函式庫所構成的共通契約，接著原封不動地在筆電 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」不見了 → 讀的人早就預測到了。資訊損失很小。

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

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

### 定義「資訊量」

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

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

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

*Image: 資訊即不確定性的減少：幾乎確定的事件幾乎不帶資訊，而極為意外的事件帶著大量資訊；熵的公式把這個直覺換算成位元，並以一個有四種結果的變數為例，隨著結果趨於均勻，依序得到 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，而罕見的序列則維持逐字元的形式。斷詞器就是字面意義上針對自然語言的夏農最佳編碼器。

*Image: 把 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 時，你其實是字面意義上在提高輸出的夏農熵。

#### 整條連結

*Figure — EntropyChain: 沒有人把這件事重新推導了四次。它是同一個定義，而且到現在還在承重。*

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

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

### 樂觀的年代：感知器（1958）

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

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

*Figure — PerceptronCircuit: 一個神經元，而唯一可調整的部分就是線上的權重。*

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」。把它畫在二維平面上：

*Figure — XorNotSeparable: 沒有任何一條直線能把 Yes 和 No 分開。這就是單層感知器的死因。*

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

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

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

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

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

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

### 復甦：反向傳播（1986）

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

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

*Figure — MultilayerNetwork: 中間層之所以叫隱藏層，是因為網路外面的人看不到它。*

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

**為什麼叫「深度」學習？**

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

學習的流程很直覺：

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

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

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

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

*Figure — Backpropagation: 沒有人知道 Layer 2 原本該說什麼，所以只能由唯一握有正解的地方往回傳話。*

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

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

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

*Figure — NonLinearBoundary: 三張圖的點都一樣。變的只是可以用的直線有幾條。*

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

但理論與實用之間橫著一道很大的牆。訓練多層網路需要龐大的計算量，而 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` 的結果。

*Figure — GpuParallelism: 數學一點也沒變。變的只是同一時刻能進行多少個。*

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... ← 實質上為零
```

越靠近最終層，回饋越強；越前面的層，回饋消失得越徹底：

*Figure — VanishingGradient: 同樣的誤差、同樣的指示。差別在於傳到每一層時還剩下多少。*

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

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

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

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

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

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

*Figure — SigmoidSlope: 曲線上最陡的那一點也只有四分之一。沒有更好的位置可以站。*

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

#### ReLU：為什麼「粗糙」贏了

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

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

*Figure — ReluVsSigmoid: 兩列都是同樣的十次。最後還留著訊號的只有其中一列。*

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

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

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

#### 殘差連接（ResNet, 2015）：另一種解法

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

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

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

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

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

*Figure — ResidualConnection: 把輸入留作基準，「產生 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 打破了深度之牆。**速度與深度兩道牆都倒下之後，現代深度學習才成為可能。**

*Image: 梯度消失問題與它的兩種對策並列：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」的座標
```

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

*Image: 一個詞同時被許多意義的軸所刻畫：「貓」在動物、寵物、野生、危險、可愛、柔軟、夜行與室內等軸上被評分，接著同樣的想法從二維擴展到三維再到三百維，並在那個空間中畫出「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 維空間裡，「近」到底是什麼意思？

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

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

*Figure — CosineSimilarity: 兩份都在講貓的文件，其中一份長了十倍。距離卻把這件事當成意義上的差別。*

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

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

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

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

這項技術稱為 **Embedding**。

### 為什麼 Embedding 對 LLM 不可或缺

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

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

*Figure — EmbeddingPipeline: 這裡還沒有任何智慧。這是讓智慧得以成立的那一步。*

沒有 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 如何「未經設計」而完成的後半段。
