第 12 篇/共 12 篇
AI 為什麼變得這麼有禮貌?
先有一個會打分數的評審,再用 PPO 讓模型往高分方向修正。教程用 GPT-2 示範,讓它學會寫正面影評。
一句話回答
因為模型在出廠前,被「打分數、再修正」訓練過很多輪。這種方法叫 RLHF(Reinforcement Learning from Human Feedback,人類回饋強化學習):先有一個代表人類喜好的評審替回答打分,再用 PPO 演算法讓模型往高分方向調整。禮貌、有幫助的回答分數高,模型就慢慢變成那個樣子。
為什麼值得知道
聊天 AI 會說「好的,我來幫你」、會婉拒危險要求,這些「個性」大多是後來調教的結果,不是預訓練自然長出來的。
理解 RLHF,就比較能看懂 AI 為什麼有時過度客氣、會迎合你的說法,答案常常在「評審喜歡什麼」。
白話原理
把模型想成寫手,旁邊坐著只會打分數的編輯:寫手交稿(產生回答)、編輯打分(評審給分)、寫手依分數修正(更新模型)。重複很多次,寫手就學會寫編輯喜歡的稿子。
PPO 的三個步驟
教程整理的 PPO(Proximal Policy Optimization,近端策略最佳化)流程:
| 步驟 | 英文 | 在做什麼 |
|---|---|---|
| 1 | Rollout(產生) | 模型根據提問(query)產生回答(response) |
| 2 | Evaluation(評分) | 用函式、模型、人類回饋或它們的組合,替每組「提問+回答」打一個分數(單一數字) |
| 3 | Optimization(最佳化) | 依分數更新模型,同時加上 KL 懲罰,避免偏離原本的模型太遠 |
KL 懲罰:別為了分數變成怪物
只追求高分,寫手可能找偷吃步,例如每句都塞「太棒了」,分數很高卻不像人話。
KL 懲罰就是拉住它:保留一份訓練前的模型當參考,計算新舊模型的輸出差多少(KL 散度,KL divergence),差越多扣越多。模型會往高分走,但仍保有原本的語言能力。
教程裡實際做了什麼
本章改編自 Hugging Face TRL 官方範例:用 BERT 情感分類器當評審,訓練 GPT-2 寫正面的 IMDB 電影影評。
工具與素材:
- 函式庫:Transformers、Datasets、TRL(
PPOTrainer)、Weights & Biases(記錄曲線) - 資料集:IMDB 電影評論 5 萬則,標註正面或負面
- 要訓練的模型:
lvwerra/gpt2-imdb(在 IMDB 多微調 1 輪的 GPT-2) - 評審(獎勵模型):
lvwerra/distilbert-imdb(DistilBERT 情感分類器)
步驟:
- 下載資料集與兩個模型。
- 整理資料:留下超過 200 字元的評論,隨機取開頭 2–8 個 token 當「提問」。
- 載入兩份 GPT-2:一份訓練、一份當參考模型算 KL 懲罰,模型上另加「價值頭」(value head)供 PPO 使用。
- 訓練迴圈,每一批資料做三件事:
- GPT-2 接著評論開頭往下寫 4–16 個 token
- 把開頭加續寫丟給 BERT,取「正面」類別的分數當獎勵
- 用(提問、回答、獎勵)呼叫 PPO 更新模型
核心那一步長這樣(摘自原教程,節錄並省略取出正面分數的幾行):
texts = [q + r for q, r in zip(batch["query"], batch["response"])]
pipe_outputs = sentiment_pipe(texts, **sent_kwargs)
rewards = [torch.tensor(s) for s in positive_scores]
stats = ppo_trainer.step(query_tensors, response_tensors, rewards)
- 比較訓練前後:抽 16 個開頭讓兩個模型各寫一次,原文平均獎勵從約 0.59 升到約 2.24。開頭「What a terrible」,訓練前接「movie!」,訓練後卻硬轉成稱讚。
- 存下訓練好的模型。
硬體:原文寫明單張 NVIDIA A800(80GB)占用約 10GB 顯存,訓練約 35 分鐘。
動手試試
這章是 RLHF 最輕量的入門範例,GPT-2 很小,門檻相對低:
- 看懂評審:先只載入 DistilBERT 情感分類器,丟幾句英文影評看分數,筆電 CPU 就能跑。
- 跑完整訓練:原文約 10GB 顯存,Colab 的 GPU 有機會跑得動,但原文沒在 Colab 測過,時間也會更長。
- 注意版本:教程用的是較舊的 TRL 介面(
ppo_trainer.step),新版寫法已改,建議安裝教程requirements.txt指定的版本。 - 做小實驗:把獎勵改成「負面分數」,看模型會不會變成毒舌影評人。
常見誤解
- 「RLHF 一定要真人逐句打分」:教程的評審是分類模型;實務上常先蒐集人類偏好訓練出獎勵模型,再由它打分。
- 「RLHF 讓模型變聰明」:它主要調整行為和口吻,不等於增加知識。
- 「KL 懲罰是多餘的」:少了它,模型容易鑽評審漏洞,寫出高分但不自然的內容。
- 「AI 有禮貌=理解禮貌」:它學到的是「這樣說分數較高」。
延伸閱讀
- 本章原文:https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter11
- TRL(Hugging Face 的強化學習訓練工具,原教程改編自它的官方 GPT-2 情感範例):https://github.com/huggingface/trl
- 參數來源論文《Fine-Tuning Language Models from Human Preferences》:https://huggingface.co/papers/1909.08593
本文整理自上海交通大學《動手學大模型》第 11 章,原教程:https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter11。內容由 MK 以自己的話解說,如有錯誤歡迎留言指正。
追蹤 MK,掌握最新 AI 工具應用
每週分享 GitHub 飆星實測、AI 工具教學與提示詞,短影片版都在社群。