OpenAI 的秘密武器、ChatGPT 背後功臣RLHF,被開源了。
來自 Hugging Face、加拿大蒙特利爾 Mila 研究所、網易伏羲 AI Lab 的研究人員從零開始複現了 OpenAI 的 RLHF pipeline,羅列了25 個關鍵實施細節。
最終成功展示了随着模型大小的增加,響應質量顯著提升的scaling 行爲,其中 2.8B、6.9B 的 Pythia 模型在性能上超過了 OpenAI 發布的 1.3B checkpoint。
沒有寫在論文中,但被作者在推文中 po 出來的,還有一個初步的 Pythia 1.4B 實驗,根據 GPT-4 的數據顯示,這個 1.4B 模型非常接近 OpenAI 的 1.3B 性能(由于 GPT4 成本過高,隻進行了一次評估)。
研究人員表示,他們的這一 " 配方 " 的獨特之處在于對 SFT、RM 和 PPO 使用了單一的學習率,所以再重現他們的工作會變得更加簡單。
作者已公開發布了訓練好的模型 checkpoint 和代碼。
順便一提,Huggingface 最近上了一把新聞,抱抱臉現在是正式譯名了:
寫在前頭
大語言模型的功能實質上就是在玩 " 詞語接龍 " ——以給定的前面的 token,預測下一個 token。
爲了讓輸出的下一個 token 符合人類意願,人類反饋強化學習(RLHF)這一方法理念逐漸被引入 pipeline,用于收集成對的人類偏好,訓練獎勵模型(RM)來對這些偏好進行建模,并使用強化學習(RL)創建一個模型來輸出人類喜歡的内容。
OpenAI 對 RLHF 的探索一直走在前頭。
在 2020 年 "Learning to summarize from human feedback" 這項工作中,OpenAI 研究員将 RLHF 應用到了捕捉原始文本主要信息和意圖的摘要任務中。
這種人類反饋訓練的模型在英文摘要任務上顯著優于人類參考摘要和僅使用監督學習的更大模型。且具有較強的泛化能力,在沒有特定領域微調的情況下,也能生成高質量的文章摘要,接近人類參考摘要的質量。
在 2022 年 "Training language models to follow instructions with human feedback" 這項工作中,RLHF 再次被使用,爲指令遵循任務而專門設計的InstructGPT誕生。
這也是 GPT-3 到 ChatGPT 的過渡論文。
InstructGPT 的結構和訓練技術與 ChatGPT 大差不差,所以也被稱爲是 ChatGPT 的兄弟模型。而此後 OpenAI 并未放出 ChatGPT 論文,所以有不少學者從 InstructGPT 出發探索 ChatGPT 的内核。
其中秘密武器 RLHF,開源界圍繞着它做了不少工作,不過想要重現 OpenAI 的 RLHF pipeline 很是困難。
主要有這麽幾個原因:
RL 和 RLHF 有許多微妙的實現細節,這些細節對訓練穩定性有很大影響;
對于指令遵循任務,如評估一個編碼任務中生成的 800 行代碼片段的質量,評估模型的表現不太行;
模型需要長時間的訓練和叠代。
考慮到以上原因,加之總結任務比一般的指令任務更容易評估,所以 Hugging Face 最新的這項工作選擇退後一步,從 OpenAI 早期的 RLHF 工作(也就是上面第一篇論文的摘要任務)中,探尋 OpenAI 的 RLHF 的真面目。
25 個細節深度複現
RLHF 通常包括以下三個步驟。
步驟 1:訓練 SFT(監督微調)策略
使用下一個詞預測損失對預訓練的 LLM 進行微調,這些微調數據基于人類示範。
在這項複現工作中,人類示範數據與 OpenAI 的工作保持一緻,選自過濾後的 Reddit TL;DR(Too Long; Didn ’ t Read)數據集(當時 OpenAI 還 Open 了他們的人類反饋數據集)。
步驟 2:收集偏好對并訓練 RM(獎勵模型)
使用 SFT 策略等采樣不同完成序列,讓人類标注員指出他們較偏好的序列。
基于這些偏好數據,通過在 SFT 策略上添加一個随機初始化的線性頭來初始化 RM,并優化交叉熵損失函數進行訓練,目标是預測人類标注員更傾向于接受哪種完成序列。
步驟 3:針對 RM 訓練 RL(強化學習)策略
從 SFT 策略初始化,RL 策略根據 RM 對采樣的完成序列給出獎勵分數,同時加上一個 KL 懲罰項以防止過度偏離 SFT 策略。然後使用 PPO 算法最大化這個 RLHF 目标函數。
研究人員針從數據集到 SFT、RM、OPP,共介紹了 25 個複現細節,深入分析了 TL;DR 數據集的規格、分詞過程和分詞長度分布。同時,詳細描述了 SFT 和 RM 組件的訓練設置、實施細節和結果。
感興趣的家人們可以劃到最後查看論文,這裏羅列了作者認爲有趣的細節。
數據預處理階段:
對于 RLHF 的提示查詢,OpenAI 在最後一段進行截斷,而不是使用硬性的截斷限制;同時确保 "TL;DR:" 之後沒有多餘的空格。
始終在 reference completions 前加上前導空格,在 reference completions 後添加 `<|endoftext|>`,并使用單獨的 [ PAD ] token 填充。
SFT 和偏好數據集的 tokenization length 不同,因此在 SFT 和 RM 訓練期間分别設置最大 token 長度時需要注意。
RM 的驗證集非常有趣,因爲它包含更多獨特的策略對進行比較,所以它有很多超出分布的數據。
SFT 階段:
SFT 階段沒有太多的實現細節,隻需要标準的下一個 token 預測損失就可以了。除了使用了不同的學習率之外,研究人員的設置幾乎與原始設置相同。
損失下降,ROUGE 分數在 4 個随機種子和 3 個模型 checkpoint 大小上都有所提高。
RM 訓練:
RM 訓練更有趣。例如,研究人員發現 RM 隻在 EOS token 處提取獎勵。此外,在檢查獎勵的 logits 時,除了 EOS token 外,幾乎所有的 logits 都是負數。
結果非常不錯,驗證準确率提高了,RM 幾乎完美地轉移到了偏好數據集驗證集中的 CNN/DM 子集上。
他們計算了 SFT demonstration 的平均獎勵——标量值看起來有些随意;還計算了 OpenAI 偏好數據集中每個批号和置信度的驗證準确率。
值得注意的是,不同的批次 / 置信度可能會有截然不同的準确率。
研究人員也測量了 RM 與 GPT3.5 和 RM 的一緻性率(agreement rate),并發現一緻性率有所提高,但在 6.9B 級别時有所減弱。
并繪制了 AnthropicAI 所做的 RM 校準,發現 RM 通常校準不足。
研究人員将驗證準确率與 DPO 的隐式 RM 進行了比較,發現出于某種原因 DPO 的驗證準确率較低。
幾個不同點:
RM 訓練隻在 EOS token 處應用損失,而 DPO 在每個完成 token 處應用損失。
DPO 還有一個可能影響訓練的 $beta 參數,RM 則沒有。
研究員 Michael Noukhovitch 提出了個有說服力的觀點:DPO 的目标可能更難優化,因爲你需要使你的 logprobs 與基本模型有足夠大的不同才能更改獎勵,而 RM 可以學習一個線性頭,可以更容易 / 更快地改變獎勵的值。
PPO 訓練:
有趣的是,學習值函數的行爲與 RM 截然不同。例如,值函數 logits 通常更爲正,因爲在每個時間步長,它都試圖對最終分數進行建模。
PPO 也使用了 EOS 技巧。在 PPO 訓練中,研究人員通常采樣固定數量的 token,比如 48 個。如果完成不以 EOS token 結束怎麽辦?前面已經提到了,非 EOS token 的 logits 幾乎總是負的(并且可能無效)。
EOS 技巧基本上用恒定的 -1 獎勵取代了不以 EOS token 結尾的完成的獎勵。有幾個目的:
研究人員還嘗試了 PPO 的獎勵白化處理,并發現這樣使得與參考摘要的勝率略有降低,以及完成 token 的長度略微縮短。
長度在這裏是一個混雜因素,所以研究人員引導了 OpenAI 進行的長度控制分析,通過将 x 軸設置爲模型摘要長度與參考摘要長度之比的對數來執行。
當長度得到控制時,研究人員發現比較獎勵白化的結果更具挑戰性,但盡管如此,在每個摘要長度上,PPO 模型幾乎總是優于 SFT 模型。
PPO 的訓練曲線如下所示。值得注意的是,幾個 1B 型号的 KL 值爆炸了。從優化的角度來看,這并沒有什麽問題,因爲 RLHF 獎勵一直在上升,這些 1B 模型對應于 " 獎勵黑客 "/ 過度優化的模型。
爲了更好地理解模型的行爲,研究人員還可視化突出顯示了經過微調的模型在生成文本時總會以一個 EOS token 結束。爲了進一步探索這一點,原論文附錄部分提供了更多類似的可視化效果。
論文鏈接:https://arxiv.org/abs/2403.17031
GitHub 鏈接:
[ 1 ] https://github.com/vwxyzjn/summarize_from_feedback_details
[ 2 ] https://github.com/vwxyzjn/summarize_from_feedback_details/blob/main/visualize_tokens.py
參考鏈接:https://x.com/vwxyzjn/status/1773011925666050313?s=20