---
# System prepended metadata

title: 第四講：大型語言模型修練史
tags: [機器學習, 生成式 AI, LLM]

---

# 第四講：大型語言模型修練史
>上課筆記

* 上課影片連結
    * ==**[第一階段: 自我學習，累積實力](https://youtu.be/cCpErV7To2o)**==
    * ==**[第二階段: 名師指點，發揮潛力 (兼談對 ChatGPT 做逆向工程與 LLaMA 時代的開始)](https://youtu.be/Q9cNkUPXUB8)**==
    * ==**[第三階段: 參與實戰，打磨技巧 (Reinforcement Learning from Human Feedback, RLHF)](https://youtu.be/v12IKvF6Cj8)**==

---

大型語言模型 (Large Language Models, LLMs) 的訓練過程，如同武術修煉，可分為三個主要階段。每個階段都在學習「文字接龍」，只是使用的訓練資料和目標略有不同。最終目標是讓模型不僅能理解和生成語言，更能遵循指令、提供有用且無害的回應。

---
## 背景知識：文字接龍與模型訓練

*   **核心任務：文字接龍 (Text Completion)**：大型語言模型最核心的能力是預測下一個字 (或符號)。給定一段未完成的文字，模型會計算出接下來最可能出現的字詞。生成長篇回應的過程，就是不斷重複進行文字接龍。
*   **Token**：模型進行文字接龍時，一次預測並生成一個單位，這個單位稱為 Token。在本課程的簡化說明中，可以將一個中文字視為一個 Token，但實際上不同模型的 Token 定義可能不同 (例如，一個中文字可能由多個 Token 組成)。
*   **模型即函式**：語言模型可以看作一個極其複雜的數學函式 (以 $f$ 表示)，輸入是未完成的句子，輸出是下一個最可能的 Token。這個函式包含數十億甚至上兆個參數 (Parameters)。
    *   `下一個 token = f(未完成句子)`
*   **模型架構：[Transformer](https://hackmd.io/@Jaychao2099/imrobot6)**：目前主流的大型語言模型大多基於 Transformer 架構。
*   **訓練 (Training / Learning)**：目標是找出模型函式中數十億個參數的最佳數值。
    *   **訓練資料 (Training Data)**：需要大量成對的「輸入」(未完成句子) 和「正確輸出」(下一個 Token) 的範例。例如：「人工智」->「慧」、「床前明月」->「光」。
    *   **過程**：透過機器學習演算法，根據訓練資料自動調整模型參數，使模型預測的下一個 Token 盡可能符合訓練資料中的「正確輸出」。
*   **測試 (Testing / Inference)**：訓練完成後，使用找到的參數來實際執行文字接龍任務，生成回應。

### 挑戰：尋找最佳參數

訓練過程並非一帆風順，主要挑戰包括：

*   **最佳化 (Optimization)**：尋找數十億參數最佳組合的過程稱為最佳化。
    *   **超參數 (Hyperparameters)**：最佳化演算法本身需要設定一些參數，稱為超參數 (例如學習率、批次大小等)，這些需要人工設定與調整。
    *   **算力 (Computational Power)**：最佳化過程需要龐大的計算資源，尤其是當訓練可能失敗，需要嘗試不同超參數組合時。
    *   **訓練失敗**：有時訓練得到的參數無法很好地符合訓練資料，需要調整超參數重新訓練。
*   **[Overfitting (過擬合)](https://hackmd.io/@Jaychao2099/imrobot2#%E9%81%8E%E5%BA%A6%E6%93%AC%E5%90%88-Overfitting)**：模型在訓練資料上表現完美，但在未見過的測試資料上表現很差。
    *   **原因**：模型可能學到了訓練資料中的表面特徵或噪聲，而非通用的規律。例如，若訓練資料中所有的貓都是黑色的，狗都是黃色的，模型可能會錯誤地學習到「黑色=貓，黃色=狗」的規則，而無法辨識黃色的貓。
    *   **機器學習的本質**：模型只關心找到符合訓練資料的參數，不關心這些參數是否有「道理」或能否「理解」世界。
    *   **解法之一：增加資料多樣性**：提供更多樣化的訓練資料 (例如加入黃貓、黑狗)，強迫模型學習更本質的特徵。
*   **初始參數 (Initial Parameters)**：最佳化演算法需要從一組初始參數開始尋找。最終找到的參數會與初始參數比較接近。
    *   **Train from scratch**：從隨機生成的初始參數開始訓練。
    *   **先驗知識 (Prior Knowledge)**：如果能從一組「好」的 (更接近最終理想參數的) 初始參數開始，訓練結果可能更「合理」。**如何找到好的初始參數**是關鍵問題。

---
## 第一階段：Pre-training / 預訓練 (自我學習，累積實力)

此階段目標是讓模型從海量文本中學習**語言的模式**和**世界知識**，如同打好內功基礎。

### 學習目標：語言與世界知識
*   **語言知識 (Linguistic Knowledge)**：學習語法、詞彙搭配等語言規則。相對較少的資料 (如億級 Token) 可能就足夠。
*   **世界知識 (World Knowledge)**：學習關於物理世界、社會、常識等知識。這需要極其龐大的資料量 (如兆級 Token)，因為世界知識複雜且多層次 (例如，水的沸點在不同氣壓下不同)。[[圖源]](https://arxiv.org/abs/2011.04946)
![image](https://hackmd.io/_uploads/HymJA0Pygx.png)

### 訓練方式：自督導式學習 ([Self-supervised Learning](https://hackmd.io/@Jaychao2099/imrobot8))
*   **資料來源**：主要來自網際網路爬取的巨量文本資料 (網頁、書籍、程式碼等)。
*   **方法**：自動將文本轉換為「輸入」(未完成句子) 和「輸出」(下一個 Token) 的訓練格式，無需人工標註正確答案。例如，句子「人工智慧真神奇」可生成：「人」->「工」、「人工」->「智」、「人工智」->「慧」等訓練樣本。
*   **優點**：可利用的資料量極大，人工介入少。
![image](https://hackmd.io/_uploads/BkYV0Cw1gl.png)

### 資料清理：原始網路資料品質參差不齊，需要清理
*   過濾**有害內容** (色情、暴力等)。
*   去除**不必要的 HTML 標籤等符號**。
*   使用 **「資料品質」分類器** 篩選高品質文本 (如維基百科、書籍)，並可能在訓練中重複使用。
*   **去除重複資料**，避免模型產生過於重複或帶有偏見的內容 (例如，[某段廣告詞](https://arxiv.org/abs/2107.06499)在網路資料中重複出現數萬次)。
*   **版權 (Copyright) 議題**：使用網路資料可能涉及版權問題，例如[紐約時報控告 OpenAI](https://www.nytimes.com/2023/12/27/business/media/new-york-times-open-ai-microsoft-lawsuit.html) 使用其文章訓練模型。

### 模型演進：從 GPT-1 到 GPT-3
*   **模型大小 (Model Size)**：代表參數數量，可視為模型的「天資」。GPT-1 (2018) 約 1.17 億參數 -> GPT-2 (2019) 約 15 億參數 -> GPT-3 (2020) 約 1750 億參數。
*   **資料量 (Data Size)**：代表訓練所用的文本數量，可視為模型的「後天努力」。GPT-1 約 7000 本書 -> GPT-2 約 40GB -> GPT-3 約 580GB (約 3000 億 Tokens，相當於閱讀哈利波特全集 30 萬遍)。
### 侷限性：學會內功，不會使用
*   儘管模型規模和資料量大幅增加，預訓練後的模型 (如 GPT-3、PaLM 早期版本) 雖然掌握了大量知識和語言能力，但在實際應用中[表現不穩定](https://arxiv.org/abs/2005.14165)。
*   **原因**：模型只學會了根據網路文本模式進行文字接龍，並未被明確教導如何「遵循指令」或「好好回答問題」。它可能會生成不相關的內容、反問問題，或模仿網路上找到的問答、列表等格式，而非直接回答。
*   **比喻**：如同練就上乘內功，卻不知道如何運用招式。
![image](https://hackmd.io/_uploads/ryQjgJOyel.png)

---
## 第二階段：Instruction Fine-tuning / 指令微調 (名師指點，發揮潛力)

此階段目標是教導預訓練好的模型如何理解並遵循人類的指令，將其潛力引導到有用的方向。

### 訓練方式：督導式學習 (Supervised Learning)
*   **資料標註 (Data Annotation)**：需要耗費大量人力，準備高品質的「指令」(Prompt) 和對應的「期望輸出」(Response) 的範例。
*   **資料格式**：將指令和回應轉換成文字接龍格式。通常會加入特殊標記 (如 `USER:`、`AI:`) 來區分對話角色，幫助模型理解上下文。
    *   例：輸入 `USER:台灣最高的山是哪座? AI:` -> 輸出 `玉`
    *   例：輸入 `USER:台灣最高的山是哪座? AI:玉` -> 輸出 `山`
*   **學習類型**：由於需要人工標註的正確答案，屬於督導式學習。
### 關鍵：以預訓練參數為基礎
*   **為何不能只用此階段資料**：若直接從隨機參數開始，僅用少量、昂貴的人工標註資料訓練，模型可能學到過於簡單或錯誤的規則 (如看到「最」就回答「玉山」)，且缺乏足夠的世界知識。
*   **方法**：使用第一階段預訓練得到的參數作為**初始參數**，再用指令資料進行**微調 (Fine-tune)**。
*   **意義**：微調是在預訓練學到的豐富知識基礎上，教模型如何「應用」這些知識來遵循指令。
![image](https://hackmd.io/_uploads/H1o1_ZKkge.png)
* **Adapter**
    *   **概念**：一種參數高效的微調技術。凍結大部分預訓練參數，只在模型中插入少量額外參數 (Adapter) 進行訓練，例如 LoRA (Low-Rank Adaptation)。
    *   **優點**：大幅減少訓練所需的計算資源和時間；使微調後的參數與原始預訓練參數更接近。
![image](https://hackmd.io/_uploads/HJB9_-Yklx.png)

* **預訓練的價值：複雜規則與舉一反三**
    *   預訓練迫使模型學習複雜的語言和世界規則，才能在海量文本上成功預測下一個字。
    *   以此為基礎進行微調，模型不易學到簡單錯誤規則，且更容易**舉一反三 (Generalization)**，即在沒明確教過的指令或任務變形上也能表現良好。
    *   **例子**：[多語言 BERT 模型](https://hackmd.io/@Jaychao2099/imrobot8#%E5%A4%9A%E8%AA%9E%E8%A8%80-BERT-Multi-lingual-BERT)在 104 種語言上預訓練後，只需教它英文的閱讀測驗，它就能自動學會中文的閱讀測驗。

### Fine-tuning 路線：專才 vs 通才
*   **路線一：專才模型 (Specialist Models)**：針對特定任務 (如翻譯、摘要、情感分析) 收集指令資料進行微調，得到只擅長該任務的模型。[早期 BERT 模型](https://hackmd.io/@Jaychao2099/imrobot8#%E4%B8%8B%E6%B8%B8%E4%BB%BB%E5%8B%99%E7%AF%84%E4%BE%8B)多採此路線。
*   **路線二：通才模型 (Generalist Models)**：收集涵蓋各式各樣任務的大量指令資料，一起進行微調，目標是打造一個能處理多種任務的通用對話模型。
![image](https://hackmd.io/_uploads/rJwIc-Fyle.png)

### 通才模型的演進 (FLAN, InstructGPT)
*   **台大 [LAMOL](https://arxiv.org/abs/1909.03329v2) (2019)**：早期試圖讓模型連續學習多任務，需解決遺忘舊知識問題。
![image](https://hackmd.io/_uploads/r1zljWYkle.png)
*   **Google [FLAN](https://arxiv.org/abs/2109.01652) / [T0](https://arxiv.org/abs/2110.08207) (2021)**：收集大量現有 NLP 資料集，將其轉換成指令格式進行微調。
![image](https://hackmd.io/_uploads/HJ-_iWY1lx.png)
*   **OpenAI [InstructGPT](https://arxiv.org/abs/2210.11416) (2022)**：使用真實使用者提交給 GPT-3 API 的指令，再由人工標註者撰寫高品質回應。OpenAI 認為其資料更貼近真實使用情境，效果優於 FLAN/T0。
![image](https://hackmd.io/_uploads/SymchZK1gl.png)

### 資料關鍵：重質不重量
*   研究發現 ([InstructGPT](https://arxiv.org/abs/2203.02155)、[Llama 2](https://arxiv.org/abs/2307.09288)、[LIMA](https://arxiv.org/abs/2305.11206))，指令微調效果的好壞，**高品質資料**比**資料數量**更重要。數萬筆甚至數千筆精心設計的指令資料就可能達到很好的效果。
![image](https://hackmd.io/_uploads/BJgMp-Ykee.png)

### 資料取得挑戰與 Llama 的影響
*   對於非大型機構，建立自己的大型語言模型有兩個重大挑戰：
    1. Pre-train 的參數。
    2. 獲取大量高品質、多樣化的 Fine-tuning 指令資料。
*   **[Self-Instruct](https://arxiv.org/abs/2212.10560)**：一種常見方法是對強大的模型 (如 ChatGPT) 進行「**逆向工程**」，讓它生成指令和回應作為訓練資料。但[品質可能不如人工標註](https://arxiv.org/abs/2305.15717The)，且有[使用條款](https://openai.com/policies/terms-of-use)限制風險。
![image](https://hackmd.io/_uploads/SkU8T-Yygl.png)
*   **Meta Llama (2023)**：Meta 開源其預訓練模型 [Llama 1](https://arxiv.org/abs/2302.13971)、[Llama 2](https://arxiv.org/abs/2307.09288)，極大降低了門檻，使得學術界和小型團隊也能以 Llama 為基礎進行指令微調，催生了 [Alpaca](https://crfm.stanford.edu/2023/03/13/alpaca.html)、[Vicuna](https://lmsys.org/blog/2023-03-30-vicuna/) 等眾多開源模型。
![image](https://hackmd.io/_uploads/H1ZSyGFygx.png)

---
## 第三階段：Reinforcement Learning from Human Feedback - RLHF / 基於人類回饋的增強式學習 (參與實戰，打磨技巧)

此階段目標是根據人類的偏好，進一步微調模型的行為，使其回應更符合期望 (更有幫助、更無害、更真實)。

### 核心概念：人類回饋與增強式學習
*   **人類回饋 (Human Feedback)**：收集人類對模型不同回應的偏好。常見方式是讓模型針對同一指令生成多個回應，由人類標示哪個更好 (或排序)。
*   **訓練資料格式**：不再是「輸入->正確輸出」，而是「輸入 -> 回應A > 回應B」 (表示人類偏好 A 勝過 B)。
*   **增強式學習 ([Reinforcement Learning](https://hackmd.io/@Jaychao2099/imrobot13), RL)**：一種學習範式。在此應用中，模型的目標是調整其生成策略 (參數)，以最大化獲得人類偏好的機率。
*   **基本原則**：提高人類偏好的回應的生成機率，降低人類不偏好的回應的生成機率。
*   **演算法**：常用 PPO ([Proximal Policy Optimization](https://www.youtube.com/watch?v=z95ZYgPgXOY))。
![image](https://hackmd.io/_uploads/rJSKdzYylx.png)

### RLHF vs Instruction Fine-tuning
*   **人類負擔**：RLHF 中人類只需「判斷」哪個回應更好，比 Instruction Fine-tuning 中需要「撰寫」完整好回應更輕鬆。對於難以定義「唯一正確答案」的任務 (如寫詩、創意寫作) 尤其適用。
*   **模型學習角度**：Instruction Fine-tuning 關注「過程」 (預測下一個字的準確性) ；RLHF 關注「結果」 (生成完整回應的整體品質)。RLHF 使模型能更通盤地考量生成結果，而不僅是局部最佳。
*   **比喻**：《天龍八部》中的珍瓏棋局，有時需要犧牲局部 (下一個字未必最佳)，才能贏得全局 (整體回應更好)。

### 與 AlphaGo 的類比與差異
*   **類比**：AlphaGo 也使用 RL 學習。第一階段 (跟棋譜學) 類似 Pre-train + Instruction Fine-tuning；第二階段 (自我對弈 RL) 類似 RLHF。
![image](https://hackmd.io/_uploads/SkNNKMY1ee.png)
*   **關鍵差異**：圍棋有明確的輸贏規則作為 RL 回饋信號；語言模型的回應好壞是主觀的，需要人類判斷。因此，LLM 的 RLHF 強烈依賴人類。且因好壞判斷相對主觀，絕對評分困難，故常用「成對比較」。
![image](https://hackmd.io/_uploads/B1X2KfYkxg.png)

### 挑戰：人類回饋有限與 Reward Model
*   **瓶頸**：人類能提供的回饋數量有限且成本高。
*   **解決方案：[Reward Model](https://arxiv.org/abs/2112.09332) (RM, 回饋模型)**：訓練一個模型來模擬人類的偏好。
    *   **訓練**：使用人類標註的成對比較資料，訓練 RM 預測哪個回應會得到更高的偏好分數。輸入是「指令+回應」，輸出是一個分數。
    *   **目標**：對於人類偏好的回應 A 和不偏好的回應 B，RM(A) 的分數要高於 RM(B)。
### Reward Model 的應用與風險
*   **應用 1 (排序)**：讓語言模型生成多個回應，用 RM 評分，只呈現最高分的回應給使用者。
![image](https://hackmd.io/_uploads/B1hNqfFJxx.png)
*   **應用 2 (RL 訓練)**：將 RM 的分數作為 RL 的獎勵信號，直接訓練語言模型去生成能獲得 RM 高分的回應。這等於讓語言模型向「虛擬人類」學習。
![image](https://hackmd.io/_uploads/BklIczK1ge.png)
*   **效果**：實驗證明 (如 [InstructGPT](https://arxiv.org/abs/2203.02155))，使用 RM 進行 RLHF 能顯著提升模型表現 (相比僅做 Instruction Fine-tuning)。
![image](https://hackmd.io/_uploads/Hynd5fKkle.png)
*   **風險：Overoptimization to RM**：語言模型可能過度擬合 RM 的偏好，而非真正的人類偏好，導致奇怪的行為。
    *   **歷史例子 ([2020](https://arxiv.org/abs/2009.01325))**：模型學會結尾加 "please" 或中間加 "???" 來獲得 RM 高分。
    *   **ChatGPT 例子 ([John Schulman](https://icml.cc/virtual/2023/invited-talk/21549))**：過於冗長、過度道歉、固定開場白 ("As an AI language model...")、過於模棱兩可、過度拒絕等，可能都是過度擬合 RM 的結果。

### RLHF 的進階演算法與方向
*   **避免顯式 Reward Model**：如 [DPO (Direct Preference Optimization)](https://arxiv.org/abs/2305.18290), [KTO (Kahneman-Tversky Optimization)](https://arxiv.org/abs/2402.01306) 等方法試圖**直接從偏好資料優化語言模型**，減少對 RM 的依賴。
*   **RLAIF (RL from AI Feedback)**：使用**更強的 AI 模型**或**模型自我反思 (Self-critique)** 來提供偏好回饋，替代或補充人類回饋。
![image](https://hackmd.io/_uploads/BygCoztJge.png)
    * 相關論文：
        * [Constitutional AI: Harmlessness from AI Feedback](https://arxiv.org/abs/2212.08073)
        * [INSTRUCTION TUNING WITH GPT-4](https://arxiv.org/abs/2304.03277)
        * [RLAIF vs. RLHF](https://arxiv.org/abs/2309.00267)
        * [Self-Rewarding Language Models](https://arxiv.org/abs/2401.10020)
### RLHF 的根本難題：定義「好」
*   「好」是多維度的，常有衝突。例如：
    *   **Helpfulness (有幫助) vs Safety (安全)**：使用者問如何製作火藥，拒絕回答是安全的，但沒有幫助。如何平衡？
    *   **[Llama 2 做法](https://arxiv.org/abs/2307.09288Training)**：訓練了兩個獨立的 Reward Model (Helpfulness RM 和 Safety RM)，並用較複雜的規則組合它們的分數。
    *   **不同模型的權衡**：不同模型 (GPT-4, Gemini, Claude) 對於安全性的標準和界限有明顯差異。
### 未來的挑戰：人類判斷的侷限
*   當問題複雜到人類自己都無法準確判斷好壞時 (例如，念博士 vs 工作哪個更好？)，基於可能有偏見或錯誤的人類回饋進行 RLHF，是否會限制模型的發展，甚至引入錯誤？這是待解的問題。

---
## 總結：大型語言模型的三個修煉階段

1.  **第一階段：Pre-training (預訓練)**
    *   目標：從海量文本中學習語言和世界知識。
    *   方法：Self-supervised Learning。
    *   產出：**Foundation Model (基礎模型)**，如同擁有深厚內功。
2.  **第二階段：Instruction Fine-tuning (指令微調)**
    *   目標：教會模型遵循人類指令。
    *   方法：Supervised Learning，使用人工標註的指令-回應對。
    *   關鍵：基於 Pre-trained 參數進行微調。
3.  **第三階段：RLHF (基於人類回饋的增強式學習)**
    *   目標：根據人類偏好進一步優化模型行為。
    *   方法：Reinforcement Learning，使用人類對模型輸出的偏好排序作為回饋。常藉助 Reward Model。

第二階段和第三階段合稱為 **Alignment (對齊)**，目標是讓基礎模型的強大能力**與人類的價值觀和需求對齊**。

---

回[主目錄](https：//hackmd.io/@Jaychao2099/aitothemoon/)