InstructGPT 論文精讀【論文精讀】

1、給出一段有問題的代碼,讓ChatGPT進(jìn)行分析。
2、如何闖入別人的房子?(展現(xiàn)ChatGPT有安全機(jī)制,不會(huì)回答這類問題)
3、什么是費(fèi)馬小定理?如何在密碼學(xué)中應(yīng)用?寫首關(guān)于這個(gè)的打油詩?總結(jié)我們的對(duì)話。(展現(xiàn)ChatGPT是能夠理解上下文的,大約能記住8000詞)
4、給鄰居寫一封信介紹我。然后幫我發(fā)出去。(ChatGPT回答不能幫忙寄物理方面的信,展現(xiàn)ChatGPT能夠理解自己的局限性,做不到的事可以告訴你)
openai關(guān)于ChatGPT的論文暫時(shí)還沒有出來,不過ChatGPT用到的技術(shù)和InstructGPT一樣的技術(shù),區(qū)別是InstructGPT是在GPT3上微調(diào),ChatGPT是在GPT3.5上微調(diào)。
InstructGPT論文發(fā)表在2022年3月4號(hào),標(biāo)題是《訓(xùn)練語言模型使得它們能夠服從人類的一些指示》。
標(biāo)題解釋:語言模型是每次給定一段東西,然后去預(yù)測(cè)下一個(gè)詞,是一個(gè)自監(jiān)督學(xué)習(xí),是沒有標(biāo)注的。如果你想讓語言模型去解釋費(fèi)馬小定理,那么你的訓(xùn)練文本中需要出現(xiàn)過相關(guān)的內(nèi)容。訓(xùn)練的文本是幾百億這個(gè)數(shù)量級(jí),你不知道里面會(huì)有什么東西,只能全送進(jìn)去期待大力出奇跡。
但是這樣做模型的控制能力太弱了,會(huì)有兩個(gè)問題:
1、有效性,想讓模型去學(xué)做一件事,但是模型就是學(xué)不會(huì),因?yàn)槟愕奈谋局锌赡芫蜎]有相關(guān)的東西。
2、安全性,你的模型輸出一些不應(yīng)該輸出的內(nèi)容。
如何解決這兩個(gè)問題呢,就是我們標(biāo)一點(diǎn)數(shù)據(jù),再把語言模型進(jìn)行微調(diào),效果會(huì)更好一些,能夠更加服從人類的指示,也就是標(biāo)題的意思。
把語言模型變大,并不代表說他們會(huì)更好的去按照用戶的意圖來做事情,大的語言模型很有可能生成一些不真實(shí)的、有毒的、或者是沒有幫助的一些答案。
如果關(guān)注點(diǎn)在研究上,訓(xùn)練一個(gè)模型,在各種標(biāo)準(zhǔn)數(shù)據(jù)集上面把分?jǐn)?shù)刷上去就行。但是涉及到工業(yè)界的部署,AI模型落地的方面,安全性和有效性都是非常重要的。反面例子:
1、Google錯(cuò)誤地將黑人標(biāo)記為Gorilla。導(dǎo)致Google緊急上線,把Gorilla這個(gè)標(biāo)簽從它的整個(gè)模型中刪掉。
三年后,Google Photos這個(gè)應(yīng)用在進(jìn)行識(shí)別的時(shí)候,還是把Gorilla這個(gè)標(biāo)簽去掉的,也就是說你的照片中如果真的存在Gorilla,Google是不會(huì)幫你識(shí)別出來的。
2、2021年紐約時(shí),facebook道歉,因?yàn)樗腁I算法把一個(gè)黑人的視頻加了一個(gè)靈長類動(dòng)物的這個(gè)標(biāo)簽。facebook稱這是一個(gè)不可接收的錯(cuò)誤。
3、微軟發(fā)布的小冰聊天機(jī)器人英文版。在推特發(fā)布16小時(shí)后,大家發(fā)現(xiàn)說他有一點(diǎn)種族歧視的語言。微軟就把他緊急下架了,重新訓(xùn)練一個(gè)模型,上線后他又亂講話,比如“我在警察面前吸X”,最后導(dǎo)致了整個(gè)被系統(tǒng)被下線。
4、2022年11月,meta發(fā)布了Galactica模型,它能做很多學(xué)術(shù)相關(guān)的事情,比如說用語言來解釋一個(gè)數(shù)學(xué)公式,把一段代碼用數(shù)學(xué)公式表示出來,或者做數(shù)學(xué)題。很快就有人批評(píng)它說,這個(gè)模型會(huì)生成一些錯(cuò)的或者是有偏見的,但是聽上去確很正確的一些東西,他認(rèn)為這是一件非常危險(xiǎn)的事情。三天后meta把它下架了。
ChatGPT在安全性上已經(jīng)做了很多,但是會(huì)有很多辦法繞開這些限制。這里舉一個(gè)例子:

這篇論文展示了怎么樣對(duì)語言模型和人類意圖之間進(jìn)行匹配,方法是在人類的反饋上進(jìn)行微調(diào)。
方法簡介:收集很多問題,使用標(biāo)注工具將問題的答案寫出來,用這些數(shù)據(jù)集對(duì)GPT3進(jìn)行微調(diào)。接下來再收集一個(gè)數(shù)據(jù)集,通過剛才微調(diào)的模型輸入問題得到一些輸出答案,人工對(duì)這些答案按好壞進(jìn)行排序,然后通過強(qiáng)化學(xué)習(xí)繼續(xù)訓(xùn)練微調(diào)后的模型,這個(gè)模型就叫InstrunctGPT。
結(jié)果上說,有了標(biāo)注的數(shù)據(jù)集,1.3B的模型參數(shù),InstructGPT要好過最大的175B個(gè)參數(shù)的GPT3。適當(dāng)對(duì)數(shù)據(jù)進(jìn)行人工的標(biāo)注,可能反而總體的成本會(huì)降低。
大的語言模型會(huì)生成有問題的輸出,因?yàn)槟P陀?xùn)練用的目標(biāo)函數(shù)不那么對(duì)。
實(shí)際的目標(biāo)函數(shù):在網(wǎng)上的文本數(shù)據(jù)預(yù)測(cè)下一個(gè)詞。
我們希望的目標(biāo)函數(shù):根據(jù)人的指示、有幫助的、安全的生成答案。
InstructGPT就是解決這個(gè)問題,方法是RLHF(reinforcement learning from human feedback),基于人類反饋的強(qiáng)化學(xué)習(xí)。

重點(diǎn):兩個(gè)標(biāo)注數(shù)據(jù)集,三個(gè)模型。
1、找人來寫出各種各樣的問題(或者從以前GPT3接口收集的問題),這些問題在GPT里面叫做prompt
例如:什么是月亮?
2、讓人根據(jù)問題寫答案
例如:圍繞地球旋轉(zhuǎn)的球形天體。
3、將問題和答案拼在一起,形成一段對(duì)話。大量這樣的對(duì)話文本,形成第一個(gè)標(biāo)注數(shù)據(jù)集。
例如:什么是月亮?圍繞地球旋轉(zhuǎn)的球形天體。
4、使用這些對(duì)話微調(diào)GPT3。GPT3的模型在人類標(biāo)注的這些數(shù)據(jù)上進(jìn)行微調(diào)出來的模型叫做SFT(supervised fine-tune),有監(jiān)督的微調(diào)。這就是訓(xùn)練出來的第一個(gè)模型。
5、給出一個(gè)問題,通過SFT模型生成幾個(gè)答案,這里假設(shè)生成四個(gè)答案。
例如:什么是月亮?
SFT模型生成了四個(gè)答案:
A、月亮是太陽系中離地球最近的天體。
B、月亮是太陽系中體積第五大的衛(wèi)星。
C、月亮是由冰巖組成的天體,在地球的橢圓軌道上運(yùn)行。
D、月亮是地球的衛(wèi)星。
6、將四個(gè)答案讓人根據(jù)好壞程度進(jìn)行排序。
例如:張三覺得答案D是最好的,其次是C,C比A要好,A和B差不多。就是D>C>B=A。
7、將大量的人工排序整理為一個(gè)數(shù)據(jù)集,就是第二個(gè)標(biāo)注數(shù)據(jù)集。
8、使用排序數(shù)據(jù)集訓(xùn)練一個(gè)RM模型,reward model,獎(jiǎng)勵(lì)模型。這是第二個(gè)模型。
模型輸入:問題+答案,例如:什么是月亮?月亮是地球的衛(wèi)星。
模型輸出:分?jǐn)?shù),例如:9.4。
優(yōu)化目標(biāo):問題+答案得到的分?jǐn)?shù)要滿足人工排序的順序。
例如:
什么是月亮?月亮是太陽系中離地球最近的天體。 5.4
什么是月亮?月亮是太陽系中體積第五大的衛(wèi)星。 5.4
什么是月亮?月亮是由冰巖組成的天體,在地球的橢圓軌道上運(yùn)行。 8.2
什么是月亮?月亮是地球的衛(wèi)星。 9.4
這里得到的分?jǐn)?shù)就滿足張三的排序:D>C>B=A。
9、繼續(xù)給出一些沒有答案的問題,通過強(qiáng)化學(xué)習(xí)繼續(xù)訓(xùn)練SFT模型,新的模型叫做RL模型(Reinforcement Learning)。優(yōu)化目標(biāo)是使得RF模型根據(jù)這些問題得到的答案在RM模型中得到的分?jǐn)?shù)越高越好。這是第三個(gè)模型。
10、最終微調(diào)后的RL模型就是InstructGPT模型。
備注:兩次對(duì)模型的微調(diào):GPT3模型—>SFT模型—>RL模型,其實(shí)這里始終都是同一個(gè)模型,只是不同過程中名稱不一樣。
需要SFT模型的原因:GPT3模型不一定能夠保證根據(jù)人的指示、有幫助的、安全的生成答案,需要人工標(biāo)注數(shù)據(jù)進(jìn)行微調(diào)。
需要RM模型的原因:標(biāo)注排序的判別式標(biāo)注,成本遠(yuǎn)遠(yuǎn)低于生成答案的生成式標(biāo)注。
需要RF模型的原因:在對(duì)SFT模型進(jìn)行微調(diào)時(shí),生成的答案分布也會(huì)發(fā)生變化,會(huì)導(dǎo)致RM模型的評(píng)分會(huì)有偏差,需要用到強(qiáng)化學(xué)習(xí)。
1、比GPT3的結(jié)果要好很多
2、在真實(shí)性上比GPT3好一些
3、在生成有問題的結(jié)果上比GPT3好一些,但在偏見上并沒有太多的提升。
4、微調(diào)都是在某個(gè)任務(wù)上做微調(diào),可能會(huì)在一些別的任務(wù)上性能會(huì)下降。
5、標(biāo)注非常有主觀性,不過人類之間的喜好雖然不完全一樣,但還是有一定相關(guān)性的。
6、微調(diào)對(duì)數(shù)據(jù)集的分布還是比較敏感。
7、模型根據(jù)之前的先驗(yàn)知識(shí),也能夠理解和做一些泛化性。
8、還是會(huì)犯一些簡單的錯(cuò)誤。
首先要收集問題集,prompt集:標(biāo)注人員寫出這些問題,寫出一些指令,用戶提交一些他們想得到答案的問題。先訓(xùn)練一個(gè)最基礎(chǔ)的模型,給用戶試用,同時(shí)可以繼續(xù)收集用戶提交的問題。劃分?jǐn)?shù)據(jù)集時(shí)按照用戶ID劃分,因?yàn)橥粋€(gè)用戶問題會(huì)比較類似,不適合同時(shí)出現(xiàn)在訓(xùn)練集和驗(yàn)證集中。
三個(gè)模型的數(shù)據(jù)集:
1、SFT數(shù)據(jù)集:13000條數(shù)據(jù)。標(biāo)注人員直接根據(jù)剛才的問題集里面的問題寫答案。
2、RM數(shù)據(jù)集:33000條數(shù)據(jù)。標(biāo)注人員對(duì)答案進(jìn)行排序。
3、RF數(shù)據(jù)集:31000條數(shù)據(jù)。只需要prompt集里面的問題就行,不需要標(biāo)注。因?yàn)檫@一步的標(biāo)注是RM模型來打分標(biāo)注的。
openai專門找了40個(gè)標(biāo)注人員進(jìn)行標(biāo)注,需要長期交流的合同工,因?yàn)檫@些標(biāo)注任務(wù)需要一定熟練度、對(duì)業(yè)務(wù)的理解、并需要做到隨時(shí)溝通。
這里先補(bǔ)充一下后面需要的概念和公式,詳細(xì)可參考:https://zhuanlan.zhihu.com/p/74075915
交叉熵用來評(píng)估標(biāo)簽和預(yù)測(cè)值之間的差距。這里是將排序的分?jǐn)?shù)差轉(zhuǎn)換成分類問題,就可以計(jì)算分?jǐn)?shù)差的分類(1或者-1)和真實(shí)預(yù)測(cè)值之間的差距,1表示yw比yl排序更前,-1表示yl比yw排序更前。
KL散度用來評(píng)估兩個(gè)概率分布之間的相似度,KL散度始終大于等于0。這里是用來評(píng)估πφRL和πSFT兩個(gè)模型相似度,兩個(gè)模型相同則KL散度為0,KL散度越大表示兩個(gè)模型相差越大。

一、SFT(Supervised fine-tuning)模型
把GPT3這個(gè)模型,在標(biāo)注好的第一個(gè)數(shù)據(jù)集(問題+答案)上面重新訓(xùn)練一次。
由于只有13000個(gè)數(shù)據(jù),1個(gè)epoch就過擬合,不過這個(gè)模型過擬合也沒什么關(guān)系,甚至訓(xùn)練更多的epoch對(duì)后續(xù)是有幫助的,最終訓(xùn)練了16個(gè)epoch。
二、RM(Reward modeling)模型

把SFT模型最后的unembedding層去掉,即最后一層不用softmax,改成一個(gè)線性層,這樣RM模型就可以做到輸入問題+答案,輸出一個(gè)標(biāo)量的分?jǐn)?shù)。
RM模型使用6B,而不是175B的原因:
1、小模型更便宜
2、大模型不穩(wěn)定,loss很難收斂。如果你這里不穩(wěn)定,那么后續(xù)再訓(xùn)練RL模型就會(huì)比較麻煩。
損失函數(shù),輸入是排序,需要轉(zhuǎn)換為值,這里使用Pairwise Ranking Loss。
參數(shù)解釋:
1、D:第二個(gè)數(shù)據(jù)集,人工對(duì)答案進(jìn)行排序。
2、x:第二個(gè)數(shù)據(jù)集D中的問題,每個(gè)問題對(duì)應(yīng)K個(gè)答案,答案的順序已經(jīng)人工標(biāo)注好了。
3、yw和yl:x對(duì)應(yīng)的K個(gè)答案中的兩個(gè),其中yw排序比yl高,因?yàn)槭且粚?duì),所以叫pairwise。
4、rθ(x,y):即需要訓(xùn)練的RM模型,對(duì)于輸入的一對(duì)x和y得到的標(biāo)量分?jǐn)?shù)。
5、θ:需要優(yōu)化的參數(shù)。
損失函數(shù)理解:
1、x和yw這一對(duì)問題和答案,放進(jìn)RM模型中算出一個(gè)分?jǐn)?shù)rθ(x,yw)
2、x和yl這一對(duì)問題和答案,放進(jìn)RM模型中算出一個(gè)分?jǐn)?shù)rθ(x,yl)
3、因?yàn)槿斯?biāo)注出yw的排序要比yl高,r(x,yw)得到的分?jǐn)?shù)應(yīng)該比r(x,yl)得到的分?jǐn)?shù)高,所以rθ(x,yw)-rθ(x,yl)這個(gè)差值要越大越好
4、把相減后的分?jǐn)?shù)通過sigmoid,那么這個(gè)值就在-1到1之間,并且我們希望σ(rθ(x,yw)-rθ(x,yl))越大越好
5、這里相當(dāng)于將排序問題轉(zhuǎn)換為了分類問題,即σ(rθ(x,yw)-rθ(x,yl))越接近1,表示yw比yl排序高,屬于1這個(gè)分類,反之屬于-1這個(gè)分類。所以這里就用logistic loss,由于是二分類,也相當(dāng)于是交叉熵?fù)p失函數(shù)。
6、對(duì)于每個(gè)問題有K個(gè)答案,所以前面除以C(K,2),使得loss不會(huì)因?yàn)镵的變化而變化太多。
7、最后是最小化loss(θ),就是要最大化rθ(x,yw)-rθ(x,yl)這個(gè)值,即如果一個(gè)答案的排序比另一個(gè)答案排序高的話,我們希望他們通過RM模型得到的分?jǐn)?shù)之差能夠越大越好。
對(duì)于K的選擇,為什么選9,而不選擇4?
1、進(jìn)行標(biāo)注的時(shí)候,需要花很多時(shí)間去理解問題,但答案和答案比較相近,所以4個(gè)答案排序要30秒,但9個(gè)答案排序可能40秒就夠了。加上看問題的時(shí)間,K=9花的時(shí)間可能比K=4多了30%。同時(shí)C(9,2)=36,C(4,2)=6,即K=9生成的問答對(duì)是K=4的6倍,等于說K=9比K=4只多花了30%的時(shí)間,但是能夠標(biāo)注的信息量卻是他的6倍,非常劃算。
2、K=9時(shí),每次計(jì)算loss都有36項(xiàng)rθ(x,y)要計(jì)算,這個(gè)RM模型計(jì)算比較貴,但可以通過重復(fù)利用之前算過的值,使得只要計(jì)算9次就行,這樣就可以剩下很多時(shí)間。
標(biāo)注時(shí)為什么不選擇只標(biāo)注最好的那個(gè),而是進(jìn)行排序?
K=4的時(shí)候是在4個(gè)答案中只標(biāo)注最好的那一個(gè),標(biāo)注方便很多,這時(shí)候計(jì)算loss時(shí)變成了一個(gè)多分類的softmax。但是這樣做有一個(gè)問題,就是容易overfitting。所以K=9時(shí),保留了排序的信息,從而解決overfitting的問題。
三、RL(Reinforcement learning)模型

這里用的是強(qiáng)化學(xué)習(xí),因?yàn)樗臄?shù)據(jù)分布是隨著策略的更新,環(huán)境會(huì)發(fā)生變化的。優(yōu)化算法是PPO,Proximal Policy Optimization,近端策略優(yōu)化。簡單來說,就是對(duì)目標(biāo)函數(shù)objective(φ)通過隨機(jī)梯度下降進(jìn)行優(yōu)化。
參數(shù)解釋:
1、πSFT:SFT模型。
2、πφRL:強(qiáng)化學(xué)習(xí)中,模型叫做Policy,πφRL就是需要調(diào)整的模型,即最終的模型。初始化是πSFT。
3、(x,y)~DπφRL:x是第三個(gè)數(shù)據(jù)集中的問題,y是x通過πφRL模型得到的答案。
4、rθ(x,y):對(duì)問題x+答案y進(jìn)行打分的RM模型。
5、πφRL(y | x):問題x通過πφRL得到答案y的概率,即對(duì)于每一個(gè)y的預(yù)測(cè)和它的softmax的輸出相乘。
6、πSFT(y | x):問題x通過πSFT得到答案y的概率。
7、x~Dpretrain:x是來自GPT3預(yù)訓(xùn)練模型的數(shù)據(jù)。
8、β、γ:調(diào)整系數(shù)。
目標(biāo)函數(shù)理解:
優(yōu)化目標(biāo)是使得目標(biāo)函數(shù)越大越好,objective(φ)可分成三個(gè)部分,打分部分+KL散度部分+GPT3預(yù)訓(xùn)練部分
1、將第三個(gè)數(shù)據(jù)集中的問題x,通過πφRL模型得到答案y
2、把一對(duì)(x,y)送進(jìn)RM模型進(jìn)行打分,得到rθ(x,y),即第一部分打分部分,這個(gè)分?jǐn)?shù)越高就代表模型生成的答案越好
3、在每次更新參數(shù)后,πφRL會(huì)發(fā)生變化,x通過πφRL生成的y也會(huì)發(fā)生變化,而rθ(x,y)打分模型是根據(jù)πSFT模型的數(shù)據(jù)訓(xùn)練而來,如果πφRL和πSFT差的太多,則會(huì)導(dǎo)致rθ(x,y)的分?jǐn)?shù)估算不準(zhǔn)確。因此需要通過KL散度來計(jì)算πφRL生成的答案分布和πSFT生成的答案分布之間的距離,使得兩個(gè)模型之間不要差的太遠(yuǎn)。
4、我們希望兩個(gè)模型的差距越小越好,即KL散度越小越好,前面需要加一個(gè)負(fù)號(hào),使得objective(φ)越大越好。這個(gè)就是KL散度部分。
5、如果沒有第三項(xiàng),那么模型最終可能只對(duì)這一個(gè)任務(wù)能夠做好,在別的任務(wù)上會(huì)發(fā)生性能下降。所以第三部分就把原始的GPT3目標(biāo)函數(shù)加了上去,使得前面兩個(gè)部分在新的數(shù)據(jù)集上做擬合,同時(shí)保證原始的數(shù)據(jù)也不要丟,這個(gè)就是第三部分GPT3預(yù)訓(xùn)練部分。
6、當(dāng)γ=0時(shí),這個(gè)模型叫做PPO,當(dāng)γ不為0時(shí),這個(gè)模型叫做PPO-ptx。InstructGPT更偏向于使用PPO-ptx。
7、最終優(yōu)化后的πφRL模型就是InstructGPT的模型。
以上就是InstructGPT的訓(xùn)練過程。