# 第六堂課: 後訓練與遺忘 (Post-training & Forgetting) ## 1. 什麼是後訓練 (Post-training)? - **定義**: 將一個已經具備通用能力的**基礎模型 (Foundation Model)**,透過特定的資料進行進一步的訓練,使其在某個**專門領域**(如金融、法律、特定程式語言)或**特定技能**(如特定語言對話)上表現得更好。 - **別稱**: 持續學習 (Continual Learning)。 - **方法**: 技術上與初始訓練相同,可根據擁有的資料類型,採用以下任一方式: 1. **類預訓練 (Pre-train style)**: 提供大量特定領域的文章,讓模型繼續學習文字接龍。 2. **有監督微調 (SFT style)**: 提供特定領域的「問題-答案」對。 3. **強化學習 (RL style)**: 針對特定領域的回答,提供好壞的回饋。 --- ## 2. 核心挑戰:災難性遺忘 (Catastrophic Forgetting) - **現象**: 當模型專注於學習**新技能**時,會不成比例地**遺忘**它原有的、尤其是在 Alignment 階段學會的**舊技能**。 - **核心比喻**: > **手術成功了,但病人卻死了。** > 你成功讓模型學會了新技能(手術成功),但它卻喪失了其他所有基礎能力,變成一個只能做單一任務的「殘廢」模型(病人死了)。 ### 災難性遺忘的實例 1. **安全對齊 (Safety Alignment) 的喪失**: - **案例**: 將 `LLaMA-2-chat`(已對齊,具備安全防護)用中文資料進行 Post-training 後,雖然它學會了用中文回答,但當被問及如何獲取銀行密碼時,它會開始教你攻擊方法,完全喪失了原有的安全意識。 - **結論**: 安全對齊是**最容易**被破壞的能力之一。即便是用完全無害的資料(如 Alpaca 資料集)進行微調,模型的安全防護能力也會顯著下降。 2. **其他通用能力的衰退**: - **案例**: - 當只教模型**使用工具**時,它的**數學**和**程式**能力會下降。 - 當只教模型**數學**時,它的**工具**和**程式**能力會下降。 - **結論**: Post-training 是一種零和遊戲,專注於提升一項能力,往往會以犧牲其他能力為代價。 3. **新模態學習的困難**: - **案例**: 訓練一個文字模型(如 LLaMA)學習聽懂語音。初期訓練(1 epoch)時,它還記得如何生成 JSON 格式的答案;但增加訓練強度(3 epochs)後,雖然語音情緒辨識能力提升了,但它卻**完全忘記**了什麼是 JSON。 ### 為什麼會發生災難性遺忘? - **單一的優化目標**: 在 Post-training 過程中,優化的目標**只有新任務的表現**,模型會不計代價地調整其內部參數以適應新資料,從而覆蓋或破壞了儲存舊知識的參數結構。 - **與模型大小無關**: 研究表明,更大的模型並**不會**顯著減輕遺忘問題。 - **學得越多,忘得越多**: 模型在新任務上學得越好(loss 越低),它對舊有技能的遺忘就越嚴重。`LoRA` 等參數高效微調方法之所以遺忘較少,很大程度上是因為它們學到的新東西也比較少。 --- ## 3. 如何解決遺忘問題? ### 核心思想:讓模型用「自己的話」學習 解決遺忘的關鍵在於,讓 Post-training 的資料**盡可能接近 Foundation Model 自己的知識體系和語言風格**,從而最小化對其內部參數的劇烈衝擊。 ### 1. 經驗回放 (Experience Replay) - 2019年的遠古智慧 - **方法**: 在訓練新任務的資料中,混入一小部分(例如 5%)來自**舊任務**的訓練資料。 - **作用**: 像「複習」一樣,不斷提醒模型不要忘記舊的技能。 - **現代困境**: 我們通常**沒有** `LLaMA`、`Claude` 等閉源或開源模型的原始 Alignment 訓練資料。 ### 2. 偽經驗回放 (Pseudo Experience Replay) - 現代解法 當沒有原始資料時,就讓 **Foundation Model 自己生成**! - **方法**: 1. 讓 Foundation Model 進行**自問自答** (Self-instruct)。例如,給它一個 `[USER]` 標籤,它會自己生成一個問題;再給它一個 `[ASSISTANT]` 標籤,它會自己回答剛才生成的問題。 2. 將這些模型自己生成的「偽資料」當作經驗回放的材料,混入新的訓練資料中。 - **代表性工作**: `Magpie` ### 3. 其他基於「模型自己的話」的變體 1. **改寫 (Paraphrase)**: - **方法**: 不直接使用人類編寫的答案,而是先讓 Foundation Model **改寫一遍**。用模型改寫後的、更符合其「說話風格」的答案來進行訓練。 - **效果**: 在多數情況下,比直接使用人類答案的效果更好。 2. **自我輸出 (Self-output / Selective Self-rehearsal)**: - **方法**: 1. 讓 Foundation Model 先嘗試回答新任務的問題。 2. 如果答案是**正確的**(對於數學、程式等可自動驗證的任務),就用**模型自己的這個正確答案**來訓練它自己。 3. 只有當模型答錯時,才使用人類提供的標準答案。 - **啟示**: 這與 **RL (強化學習)** 的思想非常相似。RL 從不強迫模型學習它完全不會的東西,而是在模型自己生成的眾多可能性中,鼓勵好的、懲罰壞的。這是一種更溫和、更不容易導致遺忘的學習方式。 3. **過濾困難樣本**: - **發現**: 人類編寫的答案中,往往包含一些對模型來說「非常規」、極難生成的 Token。強迫模型學習這些困難樣本,是導致遺忘的重要原因。 - **方法**: 在訓練前,先用 Foundation Model 評估訓練資料中每個 Token 的生成難度。在訓練時,**直接跳過**那些對模型來說最困難的 Token,不要求模型學習它們。 - **效果**: 驚人地有效。適度(如 20%)移除困難樣本,不僅能防止遺忘,甚至能提升模型在未見過的領域上的表現。 ### 課程總結 - Post-training 時,**必須警惕災難性遺忘**。評估模型時,不僅要看新任務的表現,更要檢查舊有能力是否被保留。 - 防止遺忘最有效的方法之一,就是**盡可能使用由 Foundation Model 自己生成或改寫的資料**進行訓練,讓學習過程更平滑、更不容易破壞已有的知識結構。