抱抱臉Open了OpenAI的秘密武器,網易參與復現
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結束。爲了進一步探索這一點,原論文附錄部分提供了更多類似的可視化效果。---[西風 發自 : 凹非寺*量子位 : 公衆號 QbitAI/來源: 量子位]
論文鏈接: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