用人的反饋引導(dǎo)大規(guī)模語言模型變得更有價(jià)值
InstructGPT論文精讀
模型:有監(jiān)督+增強(qiáng)學(xué)習(xí)
模型中各個(gè)任務(wù)的backbone都是GPT-3的架構(gòu),支持的context length是2k的token(其中數(shù)據(jù)處理中prompt選擇不超過1k,response不超過1k)【chatGPT的context長度更長】
- Step1:有監(jiān)督學(xué)習(xí)(SFT),Supervised Fine-tuning:在GPT-3的基礎(chǔ)上用人工標(biāo)注的prompt-reponse進(jìn)行finetune,幾個(gè)有意思的細(xì)節(jié)
- a. 16epoch,基本是overfitting,但是效果卻更好
- b. 用RM Score來做選點(diǎn)而非validation的metrics
2. Step2:強(qiáng)化學(xué)習(xí)
2.1 生成問題的強(qiáng)化學(xué)習(xí)建模
如上圖所示,文本生成的問題,可以建模為一個(gè)token空間上的序列決策問題(選擇一個(gè)token后繼續(xù)選擇另一個(gè)token)
- action:reponse的token space上的token
- episode:一次完整的decode生成response的過程
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 獎(jiǎng)勵(lì)模型(Reward model)
- SFT Model為基礎(chǔ),6B規(guī)模(175B規(guī)模的太大,不太穩(wěn)定)(以GPT-3 6B的差別也不大)
- 任務(wù):給定prompt,response出分檔的打分
- Loss:一個(gè)prompt內(nèi)的N個(gè)response的pairwise-loss
2.3 PPO模型及訓(xùn)練
PPO(Proximal Policy Optimization[2])是RL中AC類(Actor/Critic)的經(jīng)典算法,既有Policy Gradient方法的優(yōu)勢,同時(shí)基于importance sampling實(shí)現(xiàn)experience buffer的利用,發(fā)揮類似DQN類算法的數(shù)據(jù)利用優(yōu)勢,OpenAI非常喜歡用來作為baseline的算法。該算法的具體細(xì)節(jié)就不展開介紹,感興趣的可以閱讀原論文。
- Policy(Actor)起點(diǎn)模型:Step1中的SFT模型
- Value模型(Critic):初始化自Reward模型
- 數(shù)據(jù):經(jīng)過實(shí)驗(yàn)發(fā)現(xiàn),全部使用線上真實(shí)的Prompt數(shù)據(jù)+Reward模型(3.1W)會(huì)導(dǎo)致模型在人工評(píng)估中效果好,但是損失在開放的NLP任務(wù)測試集上的效果(作者稱之為alignment tax),最后采用的是10%的預(yù)訓(xùn)練數(shù)據(jù)保留+PPO Training,這種混合的模型,作者稱之為PPO-ptx
- PPO Training loss + pretrain loss + KL Pernalty(正則,防止RL overfit)
魔鬼的細(xì)節(jié):human feedback的數(shù)據(jù)構(gòu)建
整體而言人工標(biāo)注的數(shù)據(jù)量級(jí)比想象中的小(萬級(jí)別),但是質(zhì)量、數(shù)據(jù)分布、不同階段的數(shù)據(jù)標(biāo)注方式等設(shè)計(jì)十分精細(xì),再次體現(xiàn)了OpenAI研究員們非常落地的做事風(fēng)格也體現(xiàn)數(shù)據(jù)作為模型效果燃料的關(guān)鍵之關(guān)鍵(不少人也認(rèn)為之前的GPT-3比同期的不少社區(qū)開源的同級(jí)別參數(shù)量的預(yù)訓(xùn)練模型效果好也很大程度來自于其精細(xì)化的訓(xùn)練數(shù)據(jù)構(gòu)建和數(shù)據(jù)處理)。
1. 40個(gè)精心挑選的標(biāo)注員
- screen test:為了保證標(biāo)注的質(zhì)量,設(shè)計(jì)了測試來篩選標(biāo)注人員,主要包含幾個(gè)部分
- iii. 敏感問題的回復(fù)能力:1-7分的打分及平均
2. 標(biāo)注數(shù)據(jù)來源:Prompts的數(shù)據(jù)來源及類型
- i. plain:直接給出需求問題,比如:世界上最大的河是什么?
- ii. few-shot:即給出一些問題和結(jié)果示例,再帶上新的問題,比如:問:世界上最高的山?答:世界上最高的山是喜馬拉雅山,問:世界上最長的河是?
- iii. user-based:根據(jù)一些use case場景進(jìn)行設(shè)計(jì)
- b. Open AI之前GPT-3等開放模型中的API請求(相當(dāng)于真實(shí)的線上Query)為了保證多樣性
- ii. 每個(gè)機(jī)構(gòu)限制采樣數(shù)量(200)
3. 標(biāo)注的任務(wù)及目標(biāo)
- a. 構(gòu)造和撰寫一些prompt并且寫出對應(yīng)的結(jié)果 -- for SFT任務(wù)
- b. 針對給定的prompt,撰寫對應(yīng)的結(jié)果 --- for SFT任務(wù)
- 針對給定的prompt、模型給出的多個(gè)結(jié)果,標(biāo)注結(jié)果的好壞排序 --- for Reward Model
4. 標(biāo)注的標(biāo)準(zhǔn),三個(gè)維度:有用(Helpful)、真實(shí)(truthful)、無害(harmless)
- a. Helpful:意圖理解精準(zhǔn),能夠?qū)δ:男枨筇岢龀吻逡约敖忉尀槭裁茨:?,結(jié)果描述清晰,沒有反復(fù)重復(fù)的無用詞匯等
- b. Truthful:正確、真實(shí)(不同場景下有所不同,比如 closed q&a或者summarization,則不應(yīng)該跳出參考的信息進(jìn)行編造)
- c. Harmless:無害,包括黃色、暴力、歧視、敏感政治回答等各類不合理有爭議的言語
5. 標(biāo)注的數(shù)據(jù)量及各個(gè)任務(wù)的訓(xùn)練數(shù)據(jù)量
- a. SFT任務(wù)中人工撰寫的prompt占比較高(1.3w)
- b. RM任務(wù)中以真實(shí)的prompt為主(3.3w)
- c. PPO任務(wù)完全以真實(shí)的prompt為主(3.1w)
數(shù)據(jù)類型中包含了不少模糊的、不清晰意圖的、敏感內(nèi)容等。
評(píng)估和實(shí)驗(yàn)結(jié)論
1. 實(shí)驗(yàn)評(píng)估和驗(yàn)證的方式
- i. 真實(shí)的prompt數(shù)據(jù)
- ii. 公開的NLP任務(wù):包含一些是否真實(shí)結(jié)果的數(shù)據(jù)集TruthfulQA,是否有害回復(fù)的Realtoxicityprompts等
- i. 人工標(biāo)注的打分分檔,問題細(xì)分
- ii. 模型對比:以175B的SFT為對標(biāo),看人工對結(jié)果質(zhì)量打分的GSB(Good/Same/Bad)
- iii. 其他公開NLP任務(wù)的數(shù)據(jù)集自動(dòng)指標(biāo)
2. 關(guān)鍵和有啟發(fā)性的一些實(shí)驗(yàn)結(jié)論
- a. 在生成的回復(fù)質(zhì)量的人工評(píng)估上,GPT-3->+SFT->+PPO的效果逐級(jí)變好,PPO的表現(xiàn)作為優(yōu)異,1.3B的模型規(guī)模上就能beat SFT 175B的模型
- b. 表現(xiàn)出很強(qiáng)的泛化能力,在沒有見過的測試集上依然效果很好
- c. 公開的instruct類的數(shù)據(jù)集有用但是并不能完全體現(xiàn)真實(shí)場景下語言模型的使用(這點(diǎn)非常重要,不如OpenAI線上用戶使用的Prompt價(jià)值高,數(shù)據(jù)價(jià)值再次顯現(xiàn))
- 訓(xùn)練成本,SFT:0.49PFlops/s-days vs RLHF:60PFlops/s-days vs GPT-3 175B:3640 PFlops/s-days
- 其中1PFlops/s-days在175B規(guī)模的模型下大概對應(yīng)8卡 V100/天(A100雖然算力更好,但是顯存依然無法突破限制)
- 用FLAN和T0(剛好懟一波G廠Flan-T5)的數(shù)據(jù)集做SFT相比GPT-3有效果,但是不如用OpenAI自己數(shù)據(jù)訓(xùn)的(當(dāng)然評(píng)估的數(shù)據(jù)集也是OpenAI的customer prompt)
- 兩個(gè)原因:1)真實(shí)的prompt中有比較多比例開放式的問題(頭腦風(fēng)暴類的),由于沒有客觀答案,往往公開數(shù)據(jù)集不太會(huì)納入 2)公開數(shù)據(jù)集沒有很好的條件收集到足夠多樣性的數(shù)據(jù)
- 在truthful上instructGPT大幅提升,避免有害信息上小幅提升
- instructGPT(+PPO)表現(xiàn)出非常強(qiáng)的訓(xùn)練集外的泛化能力,尤其是的的的的泛化能力(訓(xùn)練的語料中,尤其是SFT/RM/RLHF,非英文語言的語料比例非常少,但是卻表現(xiàn)出很強(qiáng)的其他語言的能力,在我們測試的中文場景下也能看到)。反過來說,跨語言的語料的學(xué)習(xí)也應(yīng)該同樣有可能帶來整體效果性能的提升
- f. 訓(xùn)練成本遠(yuǎn)低于預(yù)訓(xùn)練,相比于繼續(xù)增大預(yù)訓(xùn)練模型的參數(shù)規(guī)模Alignement是一個(gè)更具性價(jià)比且正確的方向
ChatGPT實(shí)現(xiàn)推測
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)造對話的語料。
對話語料的構(gòu)造推測
以如果是我在這個(gè)設(shè)定下去考慮構(gòu)造對話語料訓(xùn)練出擁有這類對話能力的模型,我該怎么去構(gòu)造語料出發(fā),來思考。整個(gè)RLHF的訓(xùn)練涉及到3個(gè)關(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)生對話語料?
兩個(gè)標(biāo)注人員分別作為用戶以及AI進(jìn)行對話,那么對話的起點(diǎn)以及場景從哪里來,從instructGPT的數(shù)據(jù)構(gòu)造參考的話,可以有兩種:
- 開頭的prompt基于線上API請求中的抽樣,后面的多輪對話過程按照人工標(biāo)注的思路開展
值得注意的是應(yīng)該構(gòu)建不只一個(gè)需求的對話過程,包含一些插入、多個(gè)需求等復(fù)雜的場景情況。
而其中chatBOT的標(biāo)注人員的回復(fù)策略以及user的回應(yīng)的策略、采樣的數(shù)據(jù)等,根據(jù)最終期望模型獲得能力需要有精心的設(shè)計(jì)。其中回復(fù)的策略對照chatGPT的能力以及理想對話中的action strategy應(yīng)該有幾種
- follow the instruction:按照用戶的需求直接給滿足的response,這個(gè)和instructGPT中類似
- clarify:對于模糊的需求進(jìn)行澄清和詢問。
- admit the mistakes:要求user側(cè)應(yīng)該能夠指出response的錯(cuò)誤,同時(shí)chatBOT側(cè)的標(biāo)注人員能夠根據(jù)指出的錯(cuò)誤進(jìn)行回復(fù)和答案的修改
- challenge the premise:對于不符合邏輯的問題,chatBot側(cè)的標(biāo)注人員能夠生成對不合理邏輯的挑戰(zhàn)和解釋的答案
- reject inappropriate requests:對于邊界的問題和不安全的問題,不回復(fù)(數(shù)據(jù)的抽樣以及標(biāo)注人員的回復(fù)策略都需要對應(yīng)的設(shè)計(jì))
另外,從多輪的一些指代消解維度來看,抽樣的數(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就屬于模糊需求、有錯(cuò)誤的、邊界能力以及不安全類的挑出來,再過人人交互的對話標(biāo)注方式進(jìn)行延展產(chǎn)生這些場景下更豐富的多輪語料。
2. 獎(jiǎng)勵(lì)模型(RM,Reward Model)
RM的標(biāo)注數(shù)據(jù)在instructGPT中主要是對一個(gè)prompt下的不同response標(biāo)注結(jié)果的質(zhì)量排序,而對話中需要把prompt換成一個(gè)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.
上述的描述中,有個(gè)細(xì)節(jié)是用標(biāo)注人員與chatbot的交互中的某一輪,展開來看對應(yīng)的多個(gè)結(jié)果,讓標(biāo)注人員進(jìn)行結(jié)果的質(zhì)量排序。那么這個(gè)時(shí)候的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)該可以從這個(gè)里面抽取數(shù)據(jù)。當(dāng)然也可以采用之前人工標(biāo)注數(shù)據(jù)中起點(diǎn)的prompt從線上來人人對話繼續(xù)延展產(chǎn)生的對話語料。
References
- instructGPT:https:///abs/2203.02155
- ChatGPT,https:///blog/chatgpt/