模型中各個任務(wù)的backbone都是GPT-3的架構(gòu),支持的context length是2k的token(其中數(shù)據(jù)處理中prompt選擇不超過1k,response不超過1k)【chatGPT的context長度更長】
2. Step2:強(qiáng)化學(xué)習(xí)
2.1 生成問題的強(qiáng)化學(xué)習(xí)建模
如上圖所示,文本生成的問題,可以建模為一個token空間上的序列決策問題(選擇一個token后繼續(xù)選擇另一個token)
RLHF中通過人工標(biāo)注生成結(jié)果的排序數(shù)據(jù)中學(xué)習(xí)和建立reward模型,進(jìn)而把human對結(jié)果質(zhì)量的判斷引入到生成模型中。而生成模型就對應(yīng)的是Policy模型,通過學(xué)習(xí)和調(diào)整policy模型就是在做生成模型的finetune。
2.2 獎勵模型(Reward model)
2.3 PPO模型及訓(xùn)練
PPO(Proximal Policy Optimization[2])是RL中AC類(Actor/Critic)的經(jīng)典算法,既有Policy Gradient方法的優(yōu)勢,同時基于importance sampling實(shí)現(xiàn)experience buffer的利用,發(fā)揮類似DQN類算法的數(shù)據(jù)利用優(yōu)勢,OpenAI非常喜歡用來作為baseline的算法。該算法的具體細(xì)節(jié)就不展開介紹,感興趣的可以閱讀原論文。
整體而言人工標(biāo)注的數(shù)據(jù)量級比想象中的小(萬級別),但是質(zhì)量、數(shù)據(jù)分布、不同階段的數(shù)據(jù)標(biāo)注方式等設(shè)計十分精細(xì),再次體現(xiàn)了OpenAI研究員們非常落地的做事風(fēng)格也體現(xiàn)數(shù)據(jù)作為模型效果燃料的關(guān)鍵之關(guān)鍵(不少人也認(rèn)為之前的GPT-3比同期的不少社區(qū)開源的同級別參數(shù)量的預(yù)訓(xùn)練模型效果好也很大程度來自于其精細(xì)化的訓(xùn)練數(shù)據(jù)構(gòu)建和數(shù)據(jù)處理)。
1. 40個精心挑選的標(biāo)注員
2. 標(biāo)注數(shù)據(jù)來源:Prompts的數(shù)據(jù)來源及類型
3. 標(biāo)注的任務(wù)及目標(biāo)
4. 標(biāo)注的標(biāo)準(zhǔn),三個維度:有用(Helpful)、真實(shí)(truthful)、無害(harmless)
5. 標(biāo)注的數(shù)據(jù)量及各個任務(wù)的訓(xùn)練數(shù)據(jù)量
數(shù)據(jù)類型中包含了不少模糊的、不清晰意圖的、敏感內(nèi)容等。
1. 實(shí)驗評估和驗證的方式
2. 關(guān)鍵和有啟發(fā)性的一些實(shí)驗結(jié)論
ChatGPT官方并沒有像instructGPT那樣給出詳細(xì)的實(shí)現(xiàn)論文,僅有官網(wǎng)Blog[11]上比較概要性的描述,以下通過這些描述來盡量推測其實(shí)現(xiàn)的一些細(xì)節(jié)。
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.
整體的技術(shù)方案和InstructGPT類似,并且官網(wǎng)的blog中給的圖也和instructGPT論文中的示例圖相似,于是顯然數(shù)據(jù)的構(gòu)造、標(biāo)注的方式成為關(guān)鍵,尤其是如何構(gòu)造對話的語料。
以如果是我在這個設(shè)定下去考慮構(gòu)造對話語料訓(xùn)練出擁有這類對話能力的模型,我該怎么去構(gòu)造語料出發(fā),來思考。整個RLHF的訓(xùn)練涉及到3個關(guān)鍵階段:
1. 有監(jiān)督的微調(diào)(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.
語料構(gòu)成:人工交互標(biāo)注產(chǎn)生 + instructGPT轉(zhuǎn)化為對話語料
Q:如何人工標(biāo)注產(chǎn)生對話語料?
兩個標(biāo)注人員分別作為用戶以及AI進(jìn)行對話,那么對話的起點(diǎn)以及場景從哪里來,從instructGPT的數(shù)據(jù)構(gòu)造參考的話,可以有兩種:
值得注意的是應(yīng)該構(gòu)建不只一個需求的對話過程,包含一些插入、多個需求等復(fù)雜的場景情況。
而其中chatBOT的標(biāo)注人員的回復(fù)策略以及user的回應(yīng)的策略、采樣的數(shù)據(jù)等,根據(jù)最終期望模型獲得能力需要有精心的設(shè)計。其中回復(fù)的策略對照chatGPT的能力以及理想對話中的action strategy應(yīng)該有幾種
另外,從多輪的一些指代消解維度來看,抽樣的數(shù)據(jù)和對話語料構(gòu)建的過程中也應(yīng)該可以仿照對話的一些維度的能力進(jìn)行標(biāo)注的引導(dǎo)和數(shù)據(jù)分布的均衡:Query中指代、結(jié)果中指代等。
Q:instructGPT中的數(shù)據(jù)轉(zhuǎn)化為對話的語料?
instructGPT中都是單輪的Prompt-Response的語料,要轉(zhuǎn)化為對話的語料。能想到的最簡單的是把單輪的語料做一些隨機(jī)的組合形成一些對話的語料,這種組合出來的對話語料可以體現(xiàn)用戶不同的需求切換,在對話場景中依然能夠正確的理解。但是如果只是這樣子的話,感覺并沒有充分的利用起來,如果可以的話,應(yīng)該可以對其中的一些原本的prompt就屬于模糊需求、有錯誤的、邊界能力以及不安全類的挑出來,再過人人交互的對話標(biāo)注方式進(jìn)行延展產(chǎn)生這些場景下更豐富的多輪語料。
2. 獎勵模型(RM,Reward Model)
RM的標(biāo)注數(shù)據(jù)在instructGPT中主要是對一個prompt下的不同response標(biāo)注結(jié)果的質(zhì)量排序,而對話中需要把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.
上述的描述中,有個細(xì)節(jié)是用標(biāo)注人員與chatbot的交互中的某一輪,展開來看對應(yīng)的多個結(jié)果,讓標(biāo)注人員進(jìn)行結(jié)果的質(zhì)量排序。那么這個時候的chatbot用什么模型,最原始的底座模型顯然沒有對話能力。所以我推測應(yīng)該是在第一步SFT之后。
3. 增強(qiáng)學(xué)習(xí)訓(xùn)練(with PPO)
we can fine-tune the model using Proximal Policy Optimization. We performed several iterations of this process.
用PPO進(jìn)行finetune,這塊的數(shù)據(jù)instructGPT中完全采用的是線上API的prompt,但那里面更多的應(yīng)該都還是單輪的。我翻看了下,也有很多GPT-3之后下游的生態(tài)中用來做chatbot的,所以應(yīng)該可以從這個里面抽取數(shù)據(jù)。當(dāng)然也可以采用之前人工標(biāo)注數(shù)據(jù)中起點(diǎn)的prompt從線上來人人對話繼續(xù)延展產(chǎn)生的對話語料。