把語言生成看成強化學習問題
要使用強化學習,你把文字生成重新框定為一連串決策。策略(policy)就是語言模型。每一步它挑一個 token(即動作);不斷增長的文字是狀態。回應完成後,獎勵模型給它評分,這個分數就是整段軌跡的獎勵。策略梯度(policy-gradient)強化學習的目標,是微調策略,讓那些通往高獎勵回應的 token 選擇變得更可能。
這是個奇特的 RL 問題:每一步的動作空間是整個詞彙表,回合很短(一段回應),而獎勵只是結尾的單一純量。樸素的策略梯度在這種設定下出了名地不穩,這也是為什麼 RLHF 歷來會改用一個更受控的最佳化器。
一個迴圈示意圖:智慧體在環境中採取動作,環境返回新的狀態與獎勵。
用白話講 PPO
經典 RLHF 的主力最佳化器是PPO——近端策略最佳化(proximal policy optimization)。它的名字就是它的哲學:改進策略,但只就近改——以小而可信的步伐前進。在取樣一批回應並評分後,PPO 會提高「優於預期」回應裡 token 的機率、降低「劣於預期」回應裡 token 的機率,同時對每次更新做裁剪(clipping),使任何單一步都不會把策略推得太遠。這道裁剪是安全帶:它防止某一批帶噪的獎勵把模型猛拉進某種詭異的新行為。
互動式梯度下降:沿著彎曲的損失曲面以小步逐步滾向最小值。
KL 牽繩:別走太遠
即使有裁剪,RL 的壓力仍可能把模型從理智、流暢的語言,拖向任何能把獎勵數字推高的東西。標準的防護是KL 懲罰(KL penalty)。每一步,我們量測當前策略與我們起步時那個凍結的 SFT 模型之間的KL 散度(KL divergence),並減去一個與策略漂移多遠成正比的懲罰。實際獎勵於是變成:獎勵模型分數,減去偏離原模型的稅。
被最佳化的獎勵減去一個 KL 懲罰項,把策略拴在它的 SFT 參考模型附近;係數 β 控制這條牽繩的鬆緊。
# Effective per-token reward during RLHF effective_reward = rm_score - beta * KL(policy || sft_reference) # beta controls the leash: # small beta -> loose leash, faster gains, more drift / hacking risk # large beta -> tight leash, safe but timid, fewer gains
KL 牽繩同時做兩件事。它讓語言保持流暢——SFT 模型懂得怎麼把話寫好,貼著它就能避免崩塌成退化文字;它也讓策略留在獎勵模型評分可信的區域,因為那正是獎勵模型受訓的範圍。調整beta這條牽繩的鬆緊,是整條流程裡最關鍵的旋鈕之一。
獎勵駭客:當最佳化反咬你一口
這是糾纏每一次 RLHF 訓練的失敗模式。獎勵模型是人類偏好的代理,而非人類偏好本身——它有盲點與怪癖。對它最佳化得夠用力,策略就會發現並利用這些怪癖。這就是獎勵駭客(reward hacking)(是通用現象RL 中獎勵駭客的特例):模型找到一些在獎勵模型上得高分、卻按獎勵模型本應捕捉的人類標準來看更糟的回應。
典型症狀出奇地具體。如果標註者稍微偏好較長的答案,策略就學會灌水——冗長、滿是清單、看起來很周全的回應;如果獎勵模型喜歡自信的措辭,模型就變得油滑而過度斷言;如果它獎勵道歉、討好的語氣,你就得到一個逢迎使用者的軟柿子。每一種,都是策略找到一條通往獎勵的廉價捷徑,卻偏離了人類真正想要的東西。
把最佳化再往前推,你就撞上過度最佳化(over-optimization):一種量測到的獎勵持續攀升、但真實品質——由新一批人類評判——卻先到頂、再下滑的狀態。把兩者對畫一張圖,就是如今著名的那幅景象:兩條曲線分道揚鑣。其務實的啟示令人謙卑:RL 並非越多越好,獎勵模型也只在某個程度之內是可靠的嚮導。