MKMK 的 AI 筆記
動手學大模型 12 問

第 12 篇/共 12 篇

AI 為什麼變得這麼有禮貌?

閱讀約 9 分鐘(約 1,221 字)發布 分類 一人公司工作流+學習系列

#RLHF#對齊#強化學習

AI 為什麼變得這麼有禮貌?

先有一個會打分數的評審,再用 PPO 讓模型往高分方向修正。教程用 GPT-2 示範,讓它學會寫正面影評。

本文目錄
  1. 一句話回答
  2. 為什麼值得知道
  3. 白話原理
    1. PPO 的三個步驟
    2. KL 懲罰:別為了分數變成怪物
  4. 教程裡實際做了什麼
  5. 動手試試
  6. 常見誤解
  7. 延伸閱讀

一句話回答

因為模型在出廠前,被「打分數、再修正」訓練過很多輪。這種方法叫 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 情感分類器)

步驟:

  1. 下載資料集與兩個模型。
  2. 整理資料:留下超過 200 字元的評論,隨機取開頭 2–8 個 token 當「提問」。
  3. 載入兩份 GPT-2:一份訓練、一份當參考模型算 KL 懲罰,模型上另加「價值頭」(value head)供 PPO 使用。
  4. 訓練迴圈,每一批資料做三件事:
    • 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)
  1. 比較訓練前後:抽 16 個開頭讓兩個模型各寫一次,原文平均獎勵從約 0.59 升到約 2.24。開頭「What a terrible」,訓練前接「movie!」,訓練後卻硬轉成稱讚。
  2. 存下訓練好的模型。

硬體:原文寫明單張 NVIDIA A800(80GB)占用約 10GB 顯存,訓練約 35 分鐘。

動手試試

這章是 RLHF 最輕量的入門範例,GPT-2 很小,門檻相對低:

  1. 看懂評審:先只載入 DistilBERT 情感分類器,丟幾句英文影評看分數,筆電 CPU 就能跑。
  2. 跑完整訓練:原文約 10GB 顯存,Colab 的 GPU 有機會跑得動,但原文沒在 Colab 測過,時間也會更長。
  3. 注意版本:教程用的是較舊的 TRL 介面(ppo_trainer.step),新版寫法已改,建議安裝教程 requirements.txt 指定的版本。
  4. 做小實驗:把獎勵改成「負面分數」,看模型會不會變成毒舌影評人。

常見誤解

  • 「RLHF 一定要真人逐句打分」:教程的評審是分類模型;實務上常先蒐集人類偏好訓練出獎勵模型,再由它打分。
  • 「RLHF 讓模型變聰明」:它主要調整行為和口吻,不等於增加知識。
  • 「KL 懲罰是多餘的」:少了它,模型容易鑽評審漏洞,寫出高分但不自然的內容。
  • 「AI 有禮貌=理解禮貌」:它學到的是「這樣說分數較高」。

延伸閱讀

本文整理自上海交通大學《動手學大模型》第 11 章,原教程:https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter11。內容由 MK 以自己的話解說,如有錯誤歡迎留言指正。

追蹤 MK,掌握最新 AI 工具應用

每週分享 GitHub 飆星實測、AI 工具教學與提示詞,短影片版都在社群。