模型中各個任務的backbone都是GPT-3的架構,支持的context length是2k的token(其中數據處理中prompt選擇不超過1k,response不超過1k)【chatGPT的context長度更長】
2. Step2:強化學習
2.1 生成問題的強化學習建模
如上圖所示,文本生成的問題,可以建模為一個token空間上的序列決策問題(選擇一個token后繼續選擇另一個token)
RLHF中通過人工標注生成結果的排序數據中學習和建立reward模型,進而把human對結果質量的判斷引入到生成模型中。而生成模型就對應的是Policy模型,通過學習和調整policy模型就是在做生成模型的finetune。
2.2 獎勵模型(Reward model)
2.3 PPO模型及訓練
PPO(Proximal Policy Optimization[2])是RL中AC類(Actor/Critic)的經典算法,既有Policy Gradient方法的優勢,同時基于importance sampling實現experience buffer的利用,發揮類似DQN類算法的數據利用優勢,OpenAI非常喜歡用來作為baseline的算法。該算法的具體細節就不展開介紹,感興趣的可以閱讀原論文。
整體而言人工標注的數據量級比想象中的小(萬級別),但是質量、數據分布、不同階段的數據標注方式等設計十分精細,再次體現了OpenAI研究員們非常落地的做事風格也體現數據作為模型效果燃料的關鍵之關鍵(不少人也認為之前的GPT-3比同期的不少社區開源的同級別參數量的預訓練模型效果好也很大程度來自于其精細化的訓練數據構建和數據處理)。
1. 40個精心挑選的標注員
2. 標注數據來源:Prompts的數據來源及類型
3. 標注的任務及目標
4. 標注的標準,三個維度:有用(Helpful)、真實(truthful)、無害(harmless)
5. 標注的數據量及各個任務的訓練數據量
數據類型中包含了不少模糊的、不清晰意圖的、敏感內容等。
1. 實驗評估和驗證的方式
2. 關鍵和有啟發性的一些實驗結論
ChatGPT官方并沒有像instructGPT那樣給出詳細的實現論文,僅有官網Blog[11]上比較概要性的描述,以下通過這些描述來盡量推測其實現的一些細節。
ChatGPT is fine-tuned from a model in the GPT-3.5 series, which finished training in early 2022. You can learn more about the 3.5 series here.
ChatGPT的底座模型,如上述,是GPT 3.5系列,基于推測至少可能是text-davinci-002(即既有text能力又有code能力)
We trained this model using Reinforcement Learning from Human Feedback (RLHF), using the same methods as InstructGPT, but with slight differences in the data collection setup.
整體的技術方案和InstructGPT類似,并且官網的blog中給的圖也和instructGPT論文中的示例圖相似,于是顯然數據的構造、標注的方式成為關鍵,尤其是如何構造對話的語料。
以如果是我在這個設定下去考慮構造對話語料訓練出擁有這類對話能力的模型,我該怎么去構造語料出發,來思考。整個RLHF的訓練涉及到3個關鍵階段:
1. 有監督的微調(SFT:Supervised Finetune)
We trained an initial model using supervised fine-tuning: human AI trainers provided conversations in which they played both sides—the user and an AI assistant. We gave the trainers access to model-written suggestions to help them compose their responses. We mixed this new dialogue dataset with the InstructGPT dataset, which we transformed into a dialogue format.
語料構成:人工交互標注產生 + instructGPT轉化為對話語料
Q:如何人工標注產生對話語料?
兩個標注人員分別作為用戶以及AI進行對話,那么對話的起點以及場景從哪里來,從instructGPT的數據構造參考的話,可以有兩種:
值得注意的是應該構建不只一個需求的對話過程,包含一些插入、多個需求等復雜的場景情況。
而其中chatBOT的標注人員的回復策略以及user的回應的策略、采樣的數據等,根據最終期望模型獲得能力需要有精心的設計。其中回復的策略對照chatGPT的能力以及理想對話中的action strategy應該有幾種
另外,從多輪的一些指代消解維度來看,抽樣的數據和對話語料構建的過程中也應該可以仿照對話的一些維度的能力進行標注的引導和數據分布的均衡:Query中指代、結果中指代等。
Q:instructGPT中的數據轉化為對話的語料?
instructGPT中都是單輪的Prompt-Response的語料,要轉化為對話的語料。能想到的最簡單的是把單輪的語料做一些隨機的組合形成一些對話的語料,這種組合出來的對話語料可以體現用戶不同的需求切換,在對話場景中依然能夠正確的理解。但是如果只是這樣子的話,感覺并沒有充分的利用起來,如果可以的話,應該可以對其中的一些原本的prompt就屬于模糊需求、有錯誤的、邊界能力以及不安全類的挑出來,再過人人交互的對話標注方式進行延展產生這些場景下更豐富的多輪語料。
2. 獎勵模型(RM,Reward Model)
RM的標注數據在instructGPT中主要是對一個prompt下的不同response標注結果的質量排序,而對話中需要把prompt換成一個context。
To create a reward model for reinforcement learning, we needed to collect comparison data, which consisted of two or more model responses ranked by quality. To collect this data, we took conversations that AI trainers had with the chatbot. We randomly selected a model-written message, sampled several alternative completions, and had AI trainers rank them.
上述的描述中,有個細節是用標注人員與chatbot的交互中的某一輪,展開來看對應的多個結果,讓標注人員進行結果的質量排序。那么這個時候的chatbot用什么模型,最原始的底座模型顯然沒有對話能力。所以我推測應該是在第一步SFT之后。
3. 增強學習訓練(with PPO)
we can fine-tune the model using Proximal Policy Optimization. We performed several iterations of this process.
用PPO進行finetune,這塊的數據instructGPT中完全采用的是線上API的prompt,但那里面更多的應該都還是單輪的。我翻看了下,也有很多GPT-3之后下游的生態中用來做chatbot的,所以應該可以從這個里面抽取數據。當然也可以采用之前人工標注數據中起點的prompt從線上來人人對話繼續延展產生的對話語料。