The N 關於 RLHF 與 PPO 的實作細節 – Hugging Face 博客摘要
Hugging Face 部落格文章重現了 OpenAI 2019 年的 RLHF 程式碼庫,匹配其風格任務的學習曲線,並列舉影響可重現性的實作細節。
匹配學習曲線
該重現產出的學習曲線與 OpenAI 原始程式碼庫在情感和描述性任務上幾乎相同。作者在 AWS p3dn.24xlarge 執行個體上運行原始的 TensorFlow 1.x 儲存庫以獲得基準指標,然後使用這些指標來驗證他們基於 PyTorch 的重現。
一般實作細節
獎勵模型和策略價值頭接收連接的查詢與回應作為輸入。序列會使用特殊的填充 token 填充至固定長度,過長時會被截斷,並在 logit 計算期間根據填充 token 調整位置索引。回應生成會取樣固定長度的輸出,不會在 EOS token 處停止,且獎勵模型和策略訓練的學習率會被退火至零。每個 GPU 進程會使用不同的隨機種子以鼓勵探索。
獎勵模型實作細節
獎勵模型僅輸出連接查詢‑回應對的最後一個 token 的值。獎勵頭的權重從一個常態分布初始化,其變異數為 1/(sqrt(d_model)+1),偏置設為零。獎勵標準化在訓練前後進行,方法是計算來自固定參考策略的獎勵的經驗平均值和標準差,然後將其縮放至單位變異數和零平均值。
策略訓練實作細節
在計算對數機率之前,logits 會先除以取樣溫度。價值頭的權重初始化為零平均值和零變異數。策略訓練期間會停用 Dropout。拒絕取樣會在第 16 個與第 24 個 token 之間強制一段期間,否則會分配固定的低獎勵。折扣因子 γ 被設定為 1。訓練使用批次、小批次和微批次進行梯度累積。每個 token 的 KL 懲罰會被加到獎勵中,且每個小批次的獎勵和優勢會進行白化處理(僅對優勢進行平均值位移)。價值函數會如標準 PPO 一樣進行裁剪,且 KL 懲罰係數 β 會根據觀測到的 KL 偏差進行適應。
PyTorch Adam 優化器在 RLHF 中的數值問題
PyTorch 的 Adam 實作與 TensorFlow 的不同之處在於 epsilon 放在分母內的位置,這導致在訓練早期的有效正規化項較小,從而產生更積極的梯度更新。實驗顯示,相較於 TensorFlow 風格的 Adam,PyTorch Adam 會產生更高的對數機率變異數、更大的比率極值,以及增加的近似 KL 和裁剪比例,尤其在較大的模型如 gpt2‑xl 上更為明顯。
局限性
該工作並未嘗試重現來自 CNN/DM 或 TL;DR 的摘要任務,原因是計算成本高且訓練不穩定。原始程式碼需要 8× V100 32GB GPU,而重現版因 GPU 利用率低(約 30%)而導致運行成本高且脆弱。
結論
透過重現 OpenAI 的 RLHF 程式碼庫並記錄其實作細節,作者提供了一個理解 RLHF 工程實踐的參考,並凸顯出一種可能顯著影響訓練動態的微細優化器差異。