終於到了強化學習這一步
有了獎勵模型代替人類判斷,第三個動作就是單純的強化學習:改善策略以賺取更多獎勵。這裡的主力是用於偏好最佳化的 PPO(PPO for preference optimization)——使用近端策略最佳化(Proximal Policy Optimization, PPO),只是獎勵不來自環境,而來自你剛訓練好的獎勵模型。這個組合就是經典的 PPO-for-RLHF 迴圈。
智能体—环境强化学习循环示意图:智能体执行动作,环境返回奖励和新状态。
為什麼用 PPO 而不是更簡單的方法?因為獎勵很脆弱。PPO 透過它的裁剪替代目標(clipped surrogate objective),以小而保守的步伐改善策略,拒絕在任何單次更新上走太遠。當你的獎勵是個不完美的學習模型時,小步伐是一項優點,而非限制。
為什麼牽繩不容妥協
這裡有個關鍵轉折,把 RLHF 和教科書上的強化學習區分開來。如果你單純去最大化獎勵模型,策略最終會發現某些輸入:獎勵模型給出荒謬的高分,人類卻深惡痛絕——一些剛好踩中它盲點的亂碼。獎勵模型是個代理,而推得夠用力,每個代理都會崩壞。
解法是一條對參考策略的 KL 懲罰(KL penalty to a reference policy)。我們保留一份強化學習之前的模型凍結副本——也就是參考策略——每當策略偏離它太遠時就加以懲罰,偏離程度用 KL 散度(KL divergence)量測。我們告訴最佳化器:去賺更多獎勵,但別為此變成另一個模型。這和更廣義的對齊中的 KL 懲罰是同一個想法。
把缰绳写成公式:有效奖励等于奖励模型的打分,减去 β 乘以相对冻结参考策略的 KL 偏移。
把整個迴圈擺在一處
把三個動作組合起來,下面是一遍又一遍執行的完整 RLHF 訓練步驟:
- 抽出一批提示,讓目前的策略產生回應。
- 用獎勵模型為每個回應打分,得到一個獎勵。
- 減去一個 KL 項:獎勵減去 β 乘上與參考策略的散度。
- 用 PPO 的裁剪目標,針對這個帶懲罰的獎勵更新策略。
- 重複——並定期刷新比較資料,讓獎勵模型保持領先策略。
PPO 的裁剪替代目标:把概率比限制在一个小区间内,使每次策略更新都保持保守。
# one RLHF reward, per response r_rm = reward_model(prompt, response) # learned human-preference score kl = logp_policy(response) - logp_ref(response) # drift from reference reward = r_rm - beta * kl # reward on a leash # ...then a normal PPO update using `reward`
真正重要的旋鈕
實務上有三個設定佔主導。β(KL 權重)控制牽繩,是最重要的單一旋鈕。一個小小的熵獎勵(entropy bonus)能避免策略太早塌縮到單一句式,保住探索性。而每批資料的 PPO 步數則在穩定與速度間取捨——步數越多越能重複利用資料,但有越過 PPO 刻意要守住的保守區間的風險。