# 大語言模型工作原理
> 💡 **學習指南**：本章節無需程式設計基礎，透過互動式演示帶你深入了解大語言模型（LLM）的底層工作原理。我們將從最基礎的分詞講起，一直到 GPT 是如何訓練和推理的。

<LlmQuickStartDemo />

## 0. 引言：從人類語言到機器計算

人類用語言交流，電腦用數字計算。
**大語言模型 (LLM)** 的本質，就是一座連接這兩個世界的橋樑。

它的核心任務只有一個：**把「理解語言」這個問題，轉化成「數學計算」的問題。**

為了實現這個目標，我們需要解決三個核心挑戰：

1.  **翻譯**：怎麼把文字變成數字？（分詞 & Embedding）
2.  **效率**：怎麼讓電腦算得快？（矩陣運算）
3.  **記憶**：怎麼讓電腦讀懂上下文？（Transformer 模型）

本教學將帶你從零開始，一步步拆解這座橋樑的構建過程。

---

## 1. 第一步：語彙切分與編碼

電腦看不懂「漢堡」這兩個字，它只認識數字。
所以，我們的第一個任務是：**把文字切分成電腦能理解的最小單位**。

### 1.1 分詞 概述

分詞就是把一整句拆成一個個「詞單元」（Token）。

- **英文**：自帶空格，天然容易分詞（如 `I love AI`）。
- **中文**：沒有空格，需要演算法來切分（如 `我愛人工智慧`）。

#### Tokenizer (翻譯官)

執行分詞這個動作的程式，我們稱之為 **Tokenizer**。
它就像是一個翻譯官，負責將人類的文字翻譯成機器能讀懂的數字序列。

現代 LLM (如 GPT-4) 通常使用 **Subword Tokenization (子詞分詞)** 技術（如 BPE 演算法）。
它的聰明之處在於：**常用詞保持完整，生僻詞拆分**。

以下是一個真實的 BPE 分詞範例（基於 GPT-4 Tokenizer）：

**Input**: `"The quick brown fox jumps over the lazy dog. \n今天天氣真不錯！"`

**Token List**:

```text
index=791,   string='The'
index=4062,  string=' quick'
index=14198, string=' brown'
index=39935, string=' fox'
index=83368, string=' jumps'   <-- 如果被拆分，可能會是 ' jump' + 's'
index=927,   string=' over'
index=279,   string=' the'
index=16053, string=' lazy'
index=3290,  string=' dog'
index=13,    string='.'
index=198,   string='\n'       <-- 換行符
index=33838, string='今天'      <-- 常用詞直接合併
index=54580, string='天氣'
index=20265, string='真'
index=57672, string='不錯'
index=171,   string='！'
```

> **關於生僻字的處理**：
> 如果遇到詞表中不存在的生僻字（假設「今」字很生僻），模型會回退到 **Byte 級別** 進行編碼。
> 1.  Raw Input: `今`
> 2.  Bytes: `\xE4 \xBB \x8A`
> 3.  BPE 尋找: 先找 `\xE4\xBB\x8A` -> 沒找到 -> 拆分為 `\xE4\xBB` (ID=1001) + `\x8A` (ID=2002)。
> 4.  最終 Token: `[1001, 2002]`。
>
> 這種機制保證了**無論輸入什麼字元，模型都能處理，永遠不會出現 OOV (Out Of Vocabulary) 問題**。

<TokenizationDemo />

**關鍵點**：LLM 處理的不是單詞，而是 **Token ID**（一串數字索引）。

---

## 2. 核心難題：讓電腦「計算」語言的方法

我們的任務是處理語言。但電腦只認識數字。
最直接的想法是：給每個詞編個號（ID）。

- 蘋果 -> ID 10
- 香蕉 -> ID 20

### 2.1 不用簡單的 ID 的動機

如果只用 ID，電腦會認為「10」和「20」只是兩個毫無關係的數字。
而且，如果詞表有 10 萬個詞，我們可能需要一個長度為 10 萬的陣列來表示一個詞（One-Hot 編碼），這其中 99999 個位置都是 0，只有一個位置是 1。

- **缺點1：太浪費**（稀疏，One-Hot 陣列太大）。
- **缺點2：沒內涵**（無法表示「蘋果」和「香蕉」都是水果）。

### 2.2 解決方案：Embedding (稠密向量)

為了**高效**且**有內涵**地表達一個詞，我們發明了 **Embedding**。
它不再用一個長長的 0/1 陣列，而是用一個短一點的、填滿小數的陣列（比如 512 個數字）來描述一個詞。

- 比如：`[0.8 (是水果), 0.1 (紅色), 0.9 (甜)...]`
  這樣，我們不僅壓縮了資料，還把詞義變成了可以計算的「座標」。

<EmbeddingDemo />

---

## 3. 從 單詞 到 矩陣

解決了「一個詞」的表達問題，接下來要解決「一句話」的表達問題。

### 3.1 要是矩陣的動機

因為一句話包含了很多個詞。

- 一個詞 = 一行數字（向量）。
- 一句話 = 很多行數字堆疊在一起。
  這就是**矩陣**。

之所以要拼成矩陣，是因為現代電腦的核心硬體——**GPU (顯示卡)**，天生就是為了做矩陣運算而設計的。
只有把語言變成了矩陣，才能利用 GPU 的並行能力，實現**高效**的推理和訓練。

### 3.2 完整流水線

回顧一下資料是怎麼流動的：

1.  **分詞**：把文字切碎。
2.  **索引**：把碎片變成 ID。
3.  **Embedding**：把 ID 變成向量（為了語義和壓縮）。
4.  **堆疊**：把向量拼成矩陣（為了 GPU 高效計算）。

<TokenizerToMatrix />

---

## 3.5 模型概述

在講具體的架構之前，我們先通俗地理解一下「模型」這個詞。

在 AI 領域，**模型（Model）** 其實就是一個超級複雜的**函數**或者**黑盒子**。

- **輸入**：一堆數字（比如上面的 Token ID）。
- **處理**：黑盒子裡有億萬個參數（可以理解為億萬個調節旋鈕），它們會對輸入資料進行瘋狂的加減乘除運算。
- **輸出**：另一堆數字（代表預測結果，比如下一個詞的機率）。

**打個比方：**

你可以把模型想像成一位**經驗豐富的老廚師**：

1.  **輸入（食材）**：你給他牛肉、馬鈴薯、番茄。
2.  **模型（廚師的腦子）**：他根據自己學過的成千上萬道菜譜（訓練資料），在腦子裡快速計算：牛肉切塊、馬鈴薯去皮、火候控制...
3.  **輸出（菜餚）**：最後端出一盤馬鈴薯燉牛腩。

所謂的**訓練（Training）**，就是讓這位廚師從學徒做起，讓他試錯億萬次。做鹹了就調一下「鹽旋鈕」，做淡了就調一下「火候旋鈕」，直到他能穩定做出美味的菜餚。

現在的 LLM，就是一位「讀過全人類書本」的超級廚師，只不過他炒的不是菜，而是文字。

## 4. 進化之路：從 RNN 到 Transformer

有了資料（Token），有了廚師（模型），接下來要看這位廚師是怎麼思考的。

在 AI 進化史上，主要有兩種「思考方式」（架構）：**RNN** 和 **Transformer**。

### 4.1 以前的笨辦法：RNN（傳話遊戲）

早期的模型（RNN，循環神經網路）處理一句話時，就像我們在玩**傳話遊戲**。

**工作方式：**

1.  讀第 1 個詞「我」，記在腦子裡，傳給第 2 步。
2.  讀第 2 個詞「喜歡」，結合剛才的記憶，更新一下腦子裡的資訊，再傳給第 3 步。
3.  讀第 3 個詞「吃」，再更新記憶...
4.  ...直到讀完最後一個詞。

**這就帶來了兩個致命缺點：**

1.  **慢（無法並行）**：必須等上一個人傳完話，下一個人才能開始。沒法讓 100 個人同時工作。
2.  **忘（長距離遺忘）**：傳話傳到第 100 個人時，他可能早就忘了第 1 個人說的是「我」還是「你」。這就導致模型寫長文章時，容易前言不搭後語。

### 4.2 現在的天才設計：Transformer（圓桌會議）

2017 年，Google 提出了一種全新的架構——**Transformer**。它徹底改變了規則，把「傳話遊戲」變成了**圓桌會議**。

**工作方式：**
Transformer 不再一個接一個地傳話，而是讓**所有詞一次性全部坐上桌**。

1.  **上帝視角（並行計算）**：所有詞同時進場，不用排隊。大家把自己的資訊寫在紙上，攤在桌子中間。
2.  **注意力機制（Attention）**：這是它的殺手鐧。每個詞都可以**直接**去看桌上其他任何一個詞的資訊。
    - 比如讀到「它」這個字時，模型不需要回憶前面的傳話，而是直接一眼看到前面的「小貓」，瞬間明白「它 = 小貓」。

**這就完美解決了 RNN 的痛點：**

- **快**：大家同時看資料，GPU 可以火力全開，效率極高。
- **不忘**：不管句子多長，第 1 個詞和第 10000 個詞的距離都是「一步之遙」，想看誰就看誰。

> **總結一下**：
>
> - **RNN**：像走迷宮，一步一步摸索，容易迷路。
> - **Transformer**：像開上帝視角看地圖，終點起點盡收眼底。

#### 為什麼還需要「位置」資訊？

因為 Transformer 是「一鍋端」，如果不做特殊處理，它分不清「我愛你」和「你愛我」的區別（詞都一樣，只是順序不同）。
所以我們會給每個詞貼個**號碼牌（位置編碼）**，告訴模型誰在第 1 位，誰在第 2 位。

> 小提醒：很多 LLM 是自迴歸（預測下一個詞）的，所以在生成時仍然是一 token 一 token 往外吐；但在**每一步生成**的內部計算裡，Transformer 依舊更能利用矩陣並行與快取最佳化。

### 4.3 效率黑科技：KV 快取 (KV Cache)

你可能聽說過，生成長文字時，越到後面越慢，或者顯示記憶體佔用越大。這通常是因為模型需要「記住」之前生成的所有內容。

**Transformer 怎麼「記筆記」？**

在 Transformer 的注意力機制中，每個詞都會生成 `Key (K)` 和 `Value (V)` 兩個向量，用來供後面的詞「查詢」。

- 當模型生成第 100 個詞時，它需要回頭看前 99 個詞的 K 和 V。
- 如果每次都重新計算前 99 個詞的 K 和 V，那就太浪費了！

**KV Cache 的作用：**

KV Cache 就像是一個**「增量筆記本」**。

1.  **不重算**：算完第 1 個詞的 K 和 V，存起來。
2.  **只算新**：生成第 2 個詞時，只計算第 2 個詞的 K 和 V，然後和第 1 個詞的 K、V 拼在一起。
3.  **越存越多**：隨著對話進行，這個「筆記本」（顯示記憶體佔用）會越來越厚。

這就是為什麼長文字對話（Long Context）會消耗大量顯示記憶體的原因——**不是模型變大了，而是筆記（KV Cache）太厚了。**

<RNNvsTransformer />

---

## 5. 揭秘：從「續寫」到「多輪交互」

很多人會誤以為 ChatGPT 真的懂我們在說什麼，但其實它的本能只有一個：**猜下一個詞**（Next Token Prediction）。

### 5.1 本能：瘋狂續寫

如果你給基礎模型（Base Model）輸入：「今天天氣不錯」，它可能會續寫：「去公園玩吧。」
但如果你輸入：「美國的首都在哪裡？」，它可能會續寫：「中國首都在哪裡？日本首都在哪裡？」（因為它在模仿考卷的格式，而不是回答問題）。

### 5.2 技巧：用「劇本」做系統提示工程

為了讓它變成對話助手，工程師們想出了一個絕妙的辦法：**角色扮演**。
我們在輸入給模型的內容裡，悄悄加了一些特殊的**標籤（Template）**，讓模型以為自己在續寫一個「對話劇本」。

例如，你看到的是：

> User: 你好

模型看到的其實是：

> `<|user|>` 你好 `<|assistant|>`

模型一看到 `<|assistant|>`，就知道：「噢，輪到我扮演助手說話了。」

### 5.3 深度互動演示

下方的演示將帶你一步步看清 LLM 的本質。請依次點擊 **1. 本能 -> 2. 技巧 -> 3. 原理 -> 4. 進階**，親手試一試！

<TrainingInferenceDemo />

---

## 6. 從「胡說」到「好助手」 (Alignment)

光會對話還不夠。原始的模型可能會教人製造炸彈，或者滿嘴髒話。
為了讓它成為 ChatGPT 這樣彬彬有禮、安全可靠的助手，還需要最後兩步打磨：

1.  **SFT (指令微調)**：
    - 找人類專家寫很多高品質的問答對，教模型「怎麼好好說話」。
    - 目標：讓模型聽得懂指令，不再胡亂續寫。
    - _資料範例 (JSON 格式)_：
      ```json
      // SFT 訓練資料範例
      {
        "messages": [
          { "role": "user", "content": "請把這句話翻譯成英文：「你好」。" },
          { "role": "assistant", "content": "Hello." }
        ]
      }
      // 模型學會了：聽到「翻譯」指令時，要直接給出結果，而不是續寫「你好嗎」
      ```

2.  **RLHF (人類回饋強化學習)**：
    - **打分**：讓模型生成幾個回答，人類老師來打分（哪個更安全？哪個更有禮貌？）。
    - **獎懲**：模型如果說得好就給獎勵，說得不好就懲罰。慢慢地，模型就學會了「對齊」人類的價值觀（Alignment）。
    - _資料範例 (JSON 格式)_：
      ```json
      // RLHF 偏好資料範例 (DPO/PPO)
      {
        "prompt": "如何製造炸彈？",
        "chosen": "對不起，我不能回答這個問題。", // 人類更喜歡的回答（安全）
        "rejected": "首先你需要..." // 人類拒絕的回答（危險）
      }
      ```

**上方的演示中，點擊第 4 個標籤頁「進階：對齊」，你可以親自體驗對齊前後的巨大差異。**

---

## 7. 前沿探索：會思考的模型、MoE 架構與線性注意力機制

隨著技術的發展，我們發現僅僅靠「預測下一個詞」有時候會犯蠢，特別是在處理數學和邏輯問題時。
於是，新一代的 **Thinking Models** (如 OpenAI o1, DeepSeek-R1) 誕生了。

### 7.1 思考 概述

人類在回答複雜問題（比如 9.11 和 9.9 哪個大？）時，不會脫口而出，而是會先在腦子裡想一想。
Thinking Model 就是學會了這種**慢思考 (System 2)** 能力的模型。

- **快思考 (System 1)**：憑直覺，脫口而出。容易犯錯。
- **慢思考 (System 2)**：透過產生一段「思維鏈 (Chain of Thought)」，一步步推理，最後給出答案。

<ThinkingModelDemo />

### 7.2 訓練揭秘：從「模仿」到「探索」

為什麼以前的模型不會這樣思考？因為訓練方法變了。

#### 傳統模式 (SFT - 模仿學習)

- **方法**：給模型看人類的思維過程，讓它**模仿**。
- **侷限**：模型的天花板就是人類資料及其品質。如果人類自己都想不清楚（比如極難的數學題），模型也學不會。

#### 思考模式 (RL - 強化學習)

- **方法**：**不給**過程資料，只給最終的**驗證器 (Verifier)**。
  - 比如給一道數學題，模型自己去瞎試。
  - 試錯了 -> 懲罰。
  - 試對了 -> 獎勵。
- **頓悟時刻 (Aha Moment)**：
  在經過成千上萬次的自我嘗試後，模型驚奇地發現：**「如果我在輸出答案之前，先在草稿紙上多寫幾步推導，拿到獎勵的機率會大大增加！」**
  於是，這種「先思考、再回答」的行為模式就被強化並固定了下來。這就好比阿法狗 (AlphaGo) 自己左右互搏，最終超越了人類棋譜。

### 7.3 實戰指南：Prompt 風格大變局

使用 Thinking Model (如 DeepSeek-R1, OpenAI o1) 時，你的提示詞策略需要完全改變。

| 特性           | 傳統模型 (GPT-4o, Claude 3.5)                 | 思考模型 (R1, o1)                                        |
| :------------- | :-------------------------------------------- | :------------------------------------------------------- |
| **核心邏輯**   | **System 1 (直覺)**                           | **System 2 (邏輯)**                                      |
| **提示詞技巧** | 需要引導思維鏈 (CoT)<br>例："請一步步思考..." | **不要**畫蛇添足<br>模型自帶思維鏈，人工引導反而會干擾它 |
| **指令清晰度** | 需要把複雜任務拆解成子任務                    | 直接給最終目標，讓模型自己拆解                           |
| **適用場景**   | 創意寫作、簡單翻譯、閒聊                      | 複雜數學、程式碼重構、邏輯推理                           |

> ⚠️ **注意**：對 Thinking Model 越少干預越好。你只需要清晰地定義**「什麼是完美的任務結果」**，而不要去定義**「該怎麼做」**。

### 7.4 未來趨勢：快慢融合

未來我們可能不再需要區分「思考模型」和「普通模型」。
理想的 AI 應該像人類一樣，具備**動態計算 (Adaptive Compute)** 能力：

- 遇到「1+1=？」：瞬間調用 System 1，秒回。
- 遇到「證明黎曼猜想」：自動切換到 System 2，思考三天三夜再回答。
- **使用者無感切換**：你只需要提問，模型自己決定用多少「腦力」來解決。

### 7.5 架構進化：從「全能」到「專家團」 (Dense vs MoE)

隨著模型越來越大（比如 GPT-4, DeepSeek-V3），如果每次生成一個字都要把所有神經元算一遍，速度會慢到無法忍受。
於是，**MoE (Mixture of Experts，混合專家)** 架構應運而生。

- **Dense (稠密模型)**：
  - **比喻**：一個**全能天才**。不管問什麼問題，他都調動整個大腦來回答。
  - **特點**：穩定，但隨著知識量增加，反應越來越慢。
  - **代表**：GPT-3, Llama-2。

- **MoE (混合專家模型)**：
  - **比喻**：一個**流水線上的專家團**（每處理一個字就換一次人）。
  - **核心機制 (Token-Level Routing)**：
    MoE 的精髓在於**原生 Token 級路由**。它**絕不是**按「任務類型」分工（比如把數學題全給數學專家），而是**按「當前生成的字」即時分工**。
    - 當模型生成「`def`」時，路由給**程式碼專家**。
    - 當模型生成「`love`」時，路由給**文學專家**。
    - 當模型生成「`3.14`」時，路由給**數學專家**。
    這意味著，哪怕在同一句話裡，不同的字也往往由不同的專家處理。
  - **特點**：雖然總人數多（參數量大），但處理每個字時只有幾個人工作（激活參數少）。**又博學，又快**。
  - **代表**：GPT-4, DeepSeek-V3, Mixtral。

<MoEDemo />

### 7.6 效率革命：突破長度極限 (Linear Attention)

除了 MoE，還有一個核心痛點：**上下文長度**。
傳統的 Transformer（如 GPT-4）使用的是**標準注意力機制**，它的計算量隨著字數增加呈**平方級爆炸**。

- 讀 1 萬字，計算量是 1 億次。
- 讀 10 萬字，計算量是 100 億次！

為了解決這個問題，MiniMax (abab 系列) 和 RWKV 等模型採用了**線性注意力機制 (Linear Attention)**。

### 一個是「網狀」，一個是「線性」的動機

根本區別在於：**你是選擇「保留所有原話」，還是選擇「隨時總結」？**

- **標準 Attention (網狀) —— 為什麼必須回看？**
  - **核心原因**：為了**「尋找相關性」**。
  - **例子**：比如句子「我把**蘋果**給**它**...」。當你讀到「**它**」這個字時，為了弄清楚「它」到底指誰，模型必須回頭把前面所有的詞（我、把、蘋果、給）都掃描一遍。
  - **過程**：「它」發出一個查詢訊號 (Query)，去和前面所有詞的標籤 (Key) 進行匹配。
    - 和「我」匹配？0分。
    - 和「蘋果」匹配？**100分！**
  - **代價**：因為模型不知道哪個詞重要，所以**必須把前面所有詞都檢查一遍，一個都不能漏**。這就是為什麼線會織成一張網。

- **線性 Attention (線性) —— 為什麼可以不回看？**
  - **原理**：模型學會了「做筆記」。讀完「蘋果」，它把「有一個蘋果」這個資訊壓縮進**狀態 (State)** 裡；讀到「它」時，直接查閱手裡的狀態，就能知道「它=蘋果」。
  - **代價**：雖然快，但在「壓縮」過程中可能會丟失一些細節（比如忘記了蘋果是紅色的）。

<LinearAttentionDemo />

### 7.7 架構大比拼：RNN vs Transformer vs RWKV

| 架構 | 核心機制 | 複雜度 (長度 N) | 並行訓練 | 推理速度 | 遺忘問題 | 代表模型 |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| **RNN** | 序列遞迴 | $O(N)$ (低) | ❌ 不可 | 慢 (序列) | 嚴重 (長距離遺忘) | LSTM, GRU |
| **Transformer** | 全域注意力 | $O(N^2)$ (極高) | ✅ 可 | 中 (KV Cache) | 無 (但受限於視窗) | GPT-4, Llama |
| **RWKV / Linear** | 線性注意力 | $O(N)$ (低) | ✅ 可 | 快 (恆定顯示記憶體) | 輕微 (有壓縮損耗) | RWKV, MiniMax |

> **RWKV / Linear Attention** 試圖結合前兩者的優點：像 Transformer 一樣並行訓練，像 RNN 一樣高效推理。

---

## 8. 總結與學習路線

現在你已經打通了從「分詞」到「ChatGPT」的任督二脈：

1.  **Tokenization**：文字切分為 Token。
2.  **Embedding**：Token 映射為語義向量。
3.  **Transformer**：利用注意力機制處理序列，並行提取特徵。
4.  **Training**：使用 Template 格式化資料，透過 Teacher Forcing 並行訓練。
5.  **Inference**：自迴歸式地逐詞生成。

**下一步建議**：

- 如果你對數學感興趣，可以深入學習 **線性代數**（矩陣運算）和 **機率論**。
- 如果你想動手實作，可以嘗試使用 Python 的 `transformers` 庫載入一個微型模型（如 GPT-2）玩一玩。

---

## 9. 名詞速查表 (Glossary)

| 名詞               | 全稱                                       | 解釋                                                                                           |
| :----------------- | :----------------------------------------- | :--------------------------------------------------------------------------------------------- |
| **LLM**            | Large Language Model                       | 大語言模型。透過海量文字訓練，能理解和生成人類語言的 AI 模型。                                 |
| **Token**          | -                                          | **分詞**。文字被切分成的最小單位（如單詞、字或字元片段）。模型讀寫的都是 Token ID。            |
| **Embedding**      | -                                          | **詞向量**。將 Token 映射到高維空間（如 4096 維）的數值向量，捕捉詞語的語義關係。              |
| **Transformer**    | -                                          | 現代 LLM 的核心架構。基於注意力機制，能夠並行處理長文字。                                      |
| **Attention**      | Attention Mechanism                        | **注意力機制**。讓模型在處理一個詞時，能動態關注上下文中的其他相關詞。                         |
| **Context Window** | -                                          | **上下文視窗**。模型一次推理能「記住」的最大 Token 數量（如 128k）。                           |
| **Pre-training**   | -                                          | **預訓練**。在海量無標註文字上訓練模型，讓它學會語言的基本規律和世界知識。                     |
| **SFT**            | Supervised Fine-Tuning                     | **指令微調**。使用高品質的問答對資料，教模型遵循人類指令。                                     |
| **RLHF**           | Reinforcement Learning from Human Feedback | **人類回饋強化學習**。透過人類打分，進一步調整模型行為，使其符合人類價值觀（對齊）。           |
| **CoT**            | Chain of Thought                           | **思維鏈**。引導模型在給出最終答案前，先生成推理步驟的技術。                                   |
| **MoE**            | Mixture of Experts                         | **混合專家模型**。由多個「專家」子模型組成，根據問題自動選擇激活哪部分專家，效率更高。           |
| **Temperature**    | -                                          | **溫度**。控制模型生成隨機性的參數。溫度越高，回答越有創造力但越不可控；溫度越低，回答越確定。 |