# 第四講:大型語言模型修練史 >上課筆記 * 上課影片連結 * ==**[第一階段: 自我學習,累積實力](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)  ### 訓練方式:自督導式學習 ([Self-supervised Learning](https://hackmd.io/@Jaychao2099/imrobot8)) * **資料來源**:主要來自網際網路爬取的巨量文本資料 (網頁、書籍、程式碼等)。 * **方法**:自動將文本轉換為「輸入」(未完成句子) 和「輸出」(下一個 Token) 的訓練格式,無需人工標註正確答案。例如,句子「人工智慧真神奇」可生成:「人」->「工」、「人工」->「智」、「人工智」->「慧」等訓練樣本。 * **優點**:可利用的資料量極大,人工介入少。  ### 資料清理:原始網路資料品質參差不齊,需要清理 * 過濾**有害內容** (色情、暴力等)。 * 去除**不必要的 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)。 * **原因**:模型只學會了根據網路文本模式進行文字接龍,並未被明確教導如何「遵循指令」或「好好回答問題」。它可能會生成不相關的內容、反問問題,或模仿網路上找到的問答、列表等格式,而非直接回答。 * **比喻**:如同練就上乘內功,卻不知道如何運用招式。  --- ## 第二階段:Instruction Fine-tuning / 指令微調 (名師指點,發揮潛力) 此階段目標是教導預訓練好的模型如何理解並遵循人類的指令,將其潛力引導到有用的方向。 ### 訓練方式:督導式學習 (Supervised Learning) * **資料標註 (Data Annotation)**:需要耗費大量人力,準備高品質的「指令」(Prompt) 和對應的「期望輸出」(Response) 的範例。 * **資料格式**:將指令和回應轉換成文字接龍格式。通常會加入特殊標記 (如 `USER:`、`AI:`) 來區分對話角色,幫助模型理解上下文。 * 例:輸入 `USER:台灣最高的山是哪座? AI:` -> 輸出 `玉` * 例:輸入 `USER:台灣最高的山是哪座? AI:玉` -> 輸出 `山` * **學習類型**:由於需要人工標註的正確答案,屬於督導式學習。 ### 關鍵:以預訓練參數為基礎 * **為何不能只用此階段資料**:若直接從隨機參數開始,僅用少量、昂貴的人工標註資料訓練,模型可能學到過於簡單或錯誤的規則 (如看到「最」就回答「玉山」),且缺乏足夠的世界知識。 * **方法**:使用第一階段預訓練得到的參數作為**初始參數**,再用指令資料進行**微調 (Fine-tune)**。 * **意義**:微調是在預訓練學到的豐富知識基礎上,教模型如何「應用」這些知識來遵循指令。  * **Adapter** * **概念**:一種參數高效的微調技術。凍結大部分預訓練參數,只在模型中插入少量額外參數 (Adapter) 進行訓練,例如 LoRA (Low-Rank Adaptation)。 * **優點**:大幅減少訓練所需的計算資源和時間;使微調後的參數與原始預訓練參數更接近。  * **預訓練的價值:複雜規則與舉一反三** * 預訓練迫使模型學習複雜的語言和世界規則,才能在海量文本上成功預測下一個字。 * 以此為基礎進行微調,模型不易學到簡單錯誤規則,且更容易**舉一反三 (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)**:收集涵蓋各式各樣任務的大量指令資料,一起進行微調,目標是打造一個能處理多種任務的通用對話模型。  ### 通才模型的演進 (FLAN, InstructGPT) * **台大 [LAMOL](https://arxiv.org/abs/1909.03329v2) (2019)**:早期試圖讓模型連續學習多任務,需解決遺忘舊知識問題。  * **Google [FLAN](https://arxiv.org/abs/2109.01652) / [T0](https://arxiv.org/abs/2110.08207) (2021)**:收集大量現有 NLP 資料集,將其轉換成指令格式進行微調。  * **OpenAI [InstructGPT](https://arxiv.org/abs/2210.11416) (2022)**:使用真實使用者提交給 GPT-3 API 的指令,再由人工標註者撰寫高品質回應。OpenAI 認為其資料更貼近真實使用情境,效果優於 FLAN/T0。  ### 資料關鍵:重質不重量 * 研究發現 ([InstructGPT](https://arxiv.org/abs/2203.02155)、[Llama 2](https://arxiv.org/abs/2307.09288)、[LIMA](https://arxiv.org/abs/2305.11206)),指令微調效果的好壞,**高品質資料**比**資料數量**更重要。數萬筆甚至數千筆精心設計的指令資料就可能達到很好的效果。  ### 資料取得挑戰與 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)限制風險。  * **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/) 等眾多開源模型。  --- ## 第三階段: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))。  ### RLHF vs Instruction Fine-tuning * **人類負擔**:RLHF 中人類只需「判斷」哪個回應更好,比 Instruction Fine-tuning 中需要「撰寫」完整好回應更輕鬆。對於難以定義「唯一正確答案」的任務 (如寫詩、創意寫作) 尤其適用。 * **模型學習角度**:Instruction Fine-tuning 關注「過程」 (預測下一個字的準確性) ;RLHF 關注「結果」 (生成完整回應的整體品質)。RLHF 使模型能更通盤地考量生成結果,而不僅是局部最佳。 * **比喻**:《天龍八部》中的珍瓏棋局,有時需要犧牲局部 (下一個字未必最佳),才能贏得全局 (整體回應更好)。 ### 與 AlphaGo 的類比與差異 * **類比**:AlphaGo 也使用 RL 學習。第一階段 (跟棋譜學) 類似 Pre-train + Instruction Fine-tuning;第二階段 (自我對弈 RL) 類似 RLHF。  * **關鍵差異**:圍棋有明確的輸贏規則作為 RL 回饋信號;語言模型的回應好壞是主觀的,需要人類判斷。因此,LLM 的 RLHF 強烈依賴人類。且因好壞判斷相對主觀,絕對評分困難,故常用「成對比較」。  ### 挑戰:人類回饋有限與 Reward Model * **瓶頸**:人類能提供的回饋數量有限且成本高。 * **解決方案:[Reward Model](https://arxiv.org/abs/2112.09332) (RM, 回饋模型)**:訓練一個模型來模擬人類的偏好。 * **訓練**:使用人類標註的成對比較資料,訓練 RM 預測哪個回應會得到更高的偏好分數。輸入是「指令+回應」,輸出是一個分數。 * **目標**:對於人類偏好的回應 A 和不偏好的回應 B,RM(A) 的分數要高於 RM(B)。 ### Reward Model 的應用與風險 * **應用 1 (排序)**:讓語言模型生成多個回應,用 RM 評分,只呈現最高分的回應給使用者。  * **應用 2 (RL 訓練)**:將 RM 的分數作為 RL 的獎勵信號,直接訓練語言模型去生成能獲得 RM 高分的回應。這等於讓語言模型向「虛擬人類」學習。  * **效果**:實驗證明 (如 [InstructGPT](https://arxiv.org/abs/2203.02155)),使用 RM 進行 RLHF 能顯著提升模型表現 (相比僅做 Instruction Fine-tuning)。  * **風險: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)** 來提供偏好回饋,替代或補充人類回饋。  * 相關論文: * [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/)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up