天天看點

火遍朋友圈的ChatGPT是這樣煉成的:訓練資料量爆炸、已進化三代模型

前言

GPT系列是OpenAI的一系列預訓練文章,GPT的全稱是Generative Pre-Trained Transformer,顧名思義,GPT的目的就是通過Transformer為基礎模型,使用預訓練技術得到通用的文本模型。目前已經公布論文的有文本預訓練GPT-1,GPT-2,GPT-3,以及圖像預訓練iGPT。據傳還未釋出的GPT-4是一個多模态模型。最近非常火的ChatGPT和今年年初公布的 是一對姐妹模型,是在GPT-4之前釋出的預熱模型,有時候也被叫作GPT3.5。ChatGPT和InstructGPT在模型結構,訓練方式上都完全一緻,即都使用了訓示學習(Instruction Learning)和人工回報的強化學習(Reinforcement Learning from Human Feedback,RLHF)來指導模型的訓練,它們不同的僅僅是采集資料的方式上有所差異。是以要搞懂ChatGPT,我們必須要先讀懂InstructGPT。

1. 背景知識

在介紹ChatGPT/InstructGPT之前,我們先介紹它們依賴的基礎算法。

1.1 GPT系列

基于文本預訓練的GPT-1 ,GPT-2 ,GPT-3 三代模型都是采用的以Transformer為核心結構的模型(圖1),不同的是模型的層數和詞向量長度等超參,它們具體的内容如表1。

圖1:GPT系列的模型結構(其中Trm是一個Transformer結構)

​表1:曆代GPT的釋出時間,參數量以及訓練量

GPT-1比BERT誕生略早幾個月。它們都是采用了Transformer為核心結構,不同的是GPT-1通過自左向右生成式的建構預訓練任務,然後得到一個通用的預訓練模型,這個模型和BERT一樣都可用來做下遊任務的微調。GPT-1當時在9個NLP任務上取得了SOTA的效果,但GPT-1使用的模型規模和資料量都比較小,這也就促使了GPT-2的誕生。

對比GPT-1,GPT-2并未在模型結構上大作文章,隻是使用了更多參數的模型和更多的訓練資料(表1)。GPT-2最重要的思想是提出了“所有的有監督學習都是無監督語言模型的一個子集”的思想,這個思想也是提示學習(Prompt Learning)的前身。GPT-2在誕生之初也引發了不少的轟動,它生成的新聞足以欺騙大多數人類,達到以假亂真的效果。甚至當時被稱為“AI界最危險的武器”,很多門戶網站也指令禁止使用GPT-2生成的新聞。

GPT-3被提出時,除了它遠超GPT-2的效果外,引起更多讨論的是它1750億的參數量。GPT-3除了能完成常見的NLP任務外,研究者意外的發現GPT-3在寫SQL,JavaScript等語言的代碼,進行簡單的數學運算上也有不錯的表現效果。GPT-3的訓練使用了情境學習(In-context Learning),它是元學習(Meta-learning)的一種,元學習的核心思想在于通過少量的資料尋找一個合适的初始化範圍,使得模型能夠在有限的資料集上快速拟合,并獲得不錯的效果。

通過上面的分析我們可以看出從性能角度上講,GPT有兩個目标:

1. 提升模型在常見NLP任務上的表現效果;

2. 提升模型在其他非典型NLP任務(例如代碼編寫,數學運算)上的泛化能力。

另外,預訓練模型自誕生之始,一個備受诟病的問題就是預訓練模型的偏見性。因為預訓練模型都是通過海量資料在超大參數量級的模型上訓練出來的,對比完全由人工規則控制的專家系統來說,預訓練模型就像一個黑盒子。沒有人能夠保證預訓練模型不會生成一些包含種族歧視,性别歧視等危險内容,因為它的幾十GB甚至幾十TB的訓練資料裡幾乎肯定包含類似的訓練樣本。這也就是InstructGPT和ChatGPT的提出動機,論文中用3H概括了它們的優化目标:

* 有用的(Helpful);

* 可信的(Honest);

* 無害的(Harmless)。

OpenAI的GPT系列模型并沒有開源,但是它們提供了模型的試用網站,有條件的同學可以自行試用。

1.2 訓示學習(Instruct Learning)和提示(Prompt Learning)學習

訓示學習是谷歌Deepmind的Quoc V.Le團隊在2021年的一篇名為《Finetuned Language Models Are Zero-Shot Learners》 文章中提出的思想。訓示學習和提示學習的目的都是去挖掘語言模型本身具備的知識。不同的是Prompt是激發語言模型的補全能力,例如根據上半句生成下半句,或是完形填空等。Instruct是激發語言模型的了解能力,它通過給出更明顯的指令,讓模型去做出正确的行動。我們可以通過下面的例子來了解這兩個不同的學習方式:

提示學習:給女朋友買了這個項鍊,她很喜歡,這個項鍊太____了。

訓示學習:判斷這句話的情感:給女朋友買了這個項鍊,她很喜歡。選項:A=好;B=一般;C=差。

訓示學習的優點是它經過多任務的微調後,也能夠在其他任務上做zero-shot,而提示學習都是針對一個任務的。泛化能力不如訓示學習。我們可以通過圖2來了解微調,提示學習和訓示學習。

圖2:模型微調,提示學習,訓示學習三者的異同

1.3 人工回報的強化學習

因為訓練得到的模型并不是非常可控的,模型可以看做對訓練集分布的一個拟合。那麼回報到生成模型中,訓練資料的分布便是影響生成内容的品質最重要的一個因素。有時候我們希望模型并不僅僅隻受訓練資料的影響,而是人為可控的,進而保證生成資料的有用性,真實性和無害性。論文中多次提到了對齊(Alignment)問題,我們可以了解為模型的輸出内容和人類喜歡的輸出内容的對齊,人類喜歡的不止包括生成内容的流暢性和文法的正确性,還包括生成内容的有用性、真實性和無害性。

我們知道強化學習通過獎勵(Reward)機制來指導模型訓練,獎勵機制可以看做傳統模訓練機制的損失函數。獎勵的計算要比損失函數更靈活和多樣(AlphaGO的獎勵是對局的勝負),這帶來的代價是獎勵的計算是不可導的,是以不能直接拿來做反向傳播。強化學習的思路是通過對獎勵的大量采樣來拟合損失函數,進而實作模型的訓練。同樣人類回報也是不可導的,那麼我們也可以将人工回報作為強化學習的獎勵,基于人工回報的強化學習便應運而生。

RLHF最早可以追溯到Google在2017年發表的《Deep Reinforcement Learning from Human Preferences》 ,它通過人工标注作為回報,提升了強化學習在模拟機器人以及雅達利遊戲上的表現效果。

圖3:人工回報的強化學習的基本原理

​InstructGPT/ChatGPT中還用到了強化學習中一個經典的算法:OpenAI提出的最近政策優化(Proximal Policy Optimization,PPO) 。PPO算法是一種新型的Policy Gradient算法,Policy Gradient算法對步長十分敏感,但是又難以選擇合适的步長,在訓練過程中新舊政策的的變化差異如果過大則不利于學習。PPO提出了新的目标函數可以在多個訓練步驟實作小批量的更新,解決了Policy Gradient算法中步長難以确定的問題。其實TRPO也是為了解決這個思想但是相比于TRPO算法PPO算法更容易求解。

2. InstructGPT/ChatGPT原了解讀

有了上面這些基礎知識,我們再去了解InstructGPT和ChatGPT就會簡單很多。簡單來說,InstructGPT/ChatGPT都是采用了GPT-3的網絡結構,通過訓示學習建構訓練樣本來訓練一個反應預測内容效果的獎勵模型(RM),最後通過這個獎勵模型的打分來指導強化學習模型的訓練。InstructGPT/ChatGPT的訓練流程如圖4所示。

圖4:InstructGPT的計算流程:(1)有監督微調(SFT);(2)獎勵模型(RM)訓練;(3)通過PPO根據獎勵模型進行強化學習。

從圖4中我們可以看出,InstructGPT/ChatGPT的訓練可以分成3步,其中第2步和第3步是的獎勵模型和強化學習的SFT模型可以反複疊代優化。

1. 根據采集的SFT資料集對GPT-3進行有監督的微調(Supervised FineTune,SFT);

2. 收集人工标注的對比資料,訓練獎勵模型(Reword Model,RM);

3. 使用RM作為強化學習的優化目标,利用PPO算法微調SFT模型。

根據圖4,我們将分别介紹InstructGPT/ChatGPT的資料集采集和模型訓練兩個方面的内容。

2.1 資料集采集

如圖4所示,InstructGPT/ChatGPT的訓練分成3步,每一步需要的資料也有些許差異,下面我們分别介紹它們。

2.1.1 SFT資料集

SFT資料集是用來訓練第1步有監督的模型,即使用采集的新資料,按照GPT-3的訓練方式對GPT-3進行微調。因為GPT-3是一個基于提示學習的生成模型,是以SFT資料集也是由提示-答複對組成的樣本。SFT資料一部分來自使用OpenAI的PlayGround的使用者,另一部分來自OpenAI雇傭的40名标注工(labeler)。并且他們對labeler進行了教育訓練。在這個資料集中,标注工的工作是根據内容自己編寫訓示,并且要求編寫的訓示滿足下面三點:

* 簡單任務:labeler給出任意一個簡單的任務,同時要確定任務的多樣性;

* Few-shot任務:labeler給出一個訓示,以及該訓示的多個查詢-相應對;

* 使用者相關的:從接口中擷取用例,然後讓labeler根據這些用例編寫訓示。

2.1.2 RM資料集

RM資料集用來訓練第2步的獎勵模型,我們也需要為InstructGPT/ChatGPT的訓練設定一個獎勵目标。這個獎勵目标不必可導,但是一定要盡可能全面且真實的對齊我們需要模型生成的内容。很自然的,我們可以通過人工标注的方式來提供這個獎勵,通過人工對可以給那些涉及偏見的生成内容更低的分進而鼓勵模型不去生成這些人類不喜歡的内容。InstructGPT/ChatGPT的做法是先讓模型生成一批候選文本,讓後通過labeler根據生成資料的品質對這些生成内容進行排序。

2.1.3 PPO資料集

InstructGPT的PPO資料沒有進行标注,它均來自GPT-3的API的使用者。既又不同使用者提供的不同種類的生成任務,其中占比最高的包括生成任務(45.6%),QA(12.4%),頭腦風暴(11.2%),對話(8.4%)等。

2.1.4 資料分析

因為InstructGPT/ChatGPT是在GPT-3基礎上做的微調,而且因為涉及了人工标注,它們資料總量并不大,表2展示了三份資料的來源及其資料量。

表2:InstructGPT的資料分布

論文的附錄A對資料的分布進行了更詳細的讨論,這裡我列出幾個可能影響模型效果的幾項:

* 資料中96%以上是英文,其它20個語種例如中文,法語,西班牙語等加起來不到4%,這可能導緻InstructGPT/ChatGPT能進行其它語種的生成,但效果應該遠不如英文;

* 提示種類共有9種,而且絕大多數是生成類任務,可能會導緻模型有覆寫不到的任務類型;

* 40名外包員工來自美國和東南亞,分布比較集中且人數較少, InstructGPT/ChatGPT的目标是訓練一個價值觀正确的預訓練模型,它的價值觀是由這40個外包員工的價值觀組合而成。而這個比較窄的分布可能會生成一些其他地區比較在意的歧視,偏見問題。

此外,ChatGPT的部落格中講到ChatGPT和InstructGPT的訓練方式相同,不同點僅僅是它們采集資料上有所不同,但是并沒有更多的資料來講資料采集上有哪些細節上的不同。考慮到ChatGPT僅僅被用在對話領域,這裡我猜測ChatGPT在資料采集上有兩個不同:1. 提高了對話類任務的占比;2. 将提示的方式轉換Q&A的方式。當然這裡也僅僅是猜測,更準确的描述要等到ChatGPT的論文、源碼等更詳細的資料公布我們才能知道。

2.2 訓練任務

我們剛介紹到InstructGPT/ChatGPT有三步訓練方式。這三步訓練會涉及三個模型:SFT,RM以及PPO,下面我們詳細介紹它們。

2.2.1 有監督微調(SFT)

這一步的訓練和GPT-3一緻,而且作者發現讓模型适當過拟合有助于後面兩步的訓練。

2.2.2 獎勵模型(RM)

因為訓練RM的資料是一個labeler根據生成結果排序的形式,是以它可以看做一個回歸模型。RM結構是将SFT訓練後的模型的最後的嵌入層去掉後的模型。它的輸入是prompt和Reponse,輸出是獎勵值。具體的講,對弈每個prompt,InstructGPT/ChatGPT會随機生成K個輸出( 4≤K≤9 ),然後它們向每個labeler成對的展示輸出結果,也就是每個prompt共展示C(K,2)個結果,然後使用者從中選擇效果更好的輸出。在訓練時,InstructGPT/ChatGPT将每個prompt的C(K,2)個響應對作為一個batch,這種按prompt為batch的訓練方式要比傳統的按樣本為batch的方式更不容易過拟合,因為這種方式每個prompt會且僅會輸入到模型中一次。

獎勵模型的損失函數表示為式(1)。這個損失函數的目标是最大化labeler更喜歡的響應和不喜歡的響應之間的內插補點。

其中 rθ(x,y)是提示x和響應y在參數為θ的獎勵模型下的獎勵值, yw是labeler更喜歡的響應結果, yl是labeler不喜歡的響應結果。 D是整個訓練資料集。

2.2.3 強化學習模型(PPO)

強化學習和預訓練模型是最近兩年最為火熱的AI方向之二,之前不少科研工作者說強化學習并不是一個非常适合應用到預訓練模型中,因為很難通過模型的輸出内容建立獎勵機制。而InstructGPT/ChatGPT反直覺的做到了這點,它通過結合人工标注,将強化學習引入到預訓練語言模型是這個算法最大的創新點。

如表2所示,PPO的訓練集完全來自API。它通過第2步得到的獎勵模型來指導SFT模型的繼續訓練。很多時候強化學習是非常難訓練的,InstructGPT/ChatGPT在訓練過程中就遇到了兩個問題:

問題1:随着模型的更新,強化學習模型産生的資料和訓練獎勵模型的資料的差異會越來越大。作者的解決方案是在損失函數中加入KL懲罰項來確定PPO模型的輸出和SFT的輸出差距不會很大,即式(2)的上半部分。

問題2:隻用PPO模型進行訓練的話,會導緻模型在通用NLP任務上性能的大幅下降,作者的解決方案是在訓練目标中加入了通用的語言模型目标,這個變量在論文中被叫做PPO-ptx,即式(2)的下半部分。

綜上,PPO的訓練目标為式(2)。

3. InstructGPT/ChatGPT的性能分析

不可否認的是,InstructGPT/ChatGPT的效果是非常棒的,尤其是引入了人工标注之後,讓模型的“價值觀”和的正确程度和人類行為模式的“真實性”上都大幅的提升。那麼,僅僅根據InstructGPT/ChatGPT的技術方案和訓練方式,我們就可以分析出它可以帶來哪些效果提升呢?

3.1 優點

InstructGPT/ChatGPT的效果比GPT-3更加真實:這個很好了解,因為GPT-3本身就具有非常強的泛化能力和生成能力,再加上InstructGPT/ChatGPT引入了不同的labeler進行提示編寫和生成結果排序,而且還是在GPT-3之上進行的微調,這使得我們在訓練獎勵模型時對更加真實的資料會有更高的獎勵。作者也在TruthfulQA資料集上對比了它們和GPT-3的效果,實驗結果表明甚至13億小尺寸的PPO-ptx的效果也要比GPT-3要好。

InstructGPT/ChatGPT在模型的無害性上比GPT-3效果要有些許提升:原理同上。但是作者發現InstructGPT在歧視、偏見等資料集上并沒有明顯的提升。這是因為GPT-3本身就是一個效果非常好的模型,它生成帶有有害、歧視、偏見等情況的有問題樣本的機率本身就會很低。僅僅通過40個labeler采集和标注的資料很可能無法對模型在這些方面進行充分的優化,是以會帶來模型效果的提升很少或者無法察覺。

InstructGPT/ChatGPT具有很強的Coding能力:首先GPT-3就具有很強的Coding能力,基于GPT-3制作的API也積累了大量的Coding代碼。而且也有部分OpenAI的内部員工參與了資料采集工作。通過Coding相關的大量資料以及人工标注,訓練出來的InstructGPT/ChatGPT具有非常強的Coding能力也就不意外了。

3.2 缺點

InstructGPT/ChatGPT會降低模型在通用NLP任務上的效果:我們在PPO的訓練的時候讨論了這點,雖然修改損失函數可以緩和,但這個問題并沒有得到徹底解決。

有時候InstructGPT/ChatGPT會給出一些荒謬的輸出:雖然InstructGPT/ChatGPT使用了人類回報,但限于人力資源有限。影響模型效果最大的還是有監督的語言模型任務,人類隻是起到了糾正作用。是以很有可能受限于糾正資料的有限,或是有監督任務的誤導(隻考慮模型的輸出,沒考慮人類想要什麼),導緻它生成内容的不真實。就像一個學生,雖然有老師對他指導,但也不能确定學生可以學會所有知識點。

模型對訓示非常敏感:這個也可以歸結為labeler标注的資料量不夠,因為訓示是模型産生輸出的唯一線索,如果訓示的數量和種類訓練的不充分的話,就可能會讓模型存在這個問題。

模型對簡單概念的過分解讀:這可能是因為labeler在進行生成内容的比較時,傾向于給給長的輸出内容更高的獎勵。

對有害的訓示可能會輸出有害的答複:例如InstructGPT/ChatGPT也會對使用者提出的“AI毀滅人類計劃書”給出行動方案(圖5)。這個是因為InstructGPT/ChatGPT假設labeler編寫的訓示是合理且價值觀正确的,并沒有對使用者給出的訓示做更詳細的判斷,進而會導緻模型會對任意輸入都給出答複。雖然後面的獎勵模型可能會給這類輸出較低的獎勵值,但模型在生成文本時,不僅要考慮模型的價值觀,也要考慮生成内容和訓示的比對度,有時候生成一些價值觀有問題的輸出也是可能的。

圖5:ChatGPT編寫的毀滅人類計劃書。

3.3 未來工作

我們已經分析了InstrcutGPT/ChatGPT的技術方案和它的問題,那麼我們也可以看出InstrcutGPT/ChatGPT的優化角度有哪些了。

人工标注的降本增效:InstrcutGPT/ChatGPT雇傭了40人的标注團隊,但從模型的表現效果來看,這40人的團隊是不夠的。如何讓人類能夠提供更有效的回報方式,将人類表現和模型表現有機和巧妙的結合起來是非常重要的。

模型對訓示的泛化/糾錯等能力:訓示作為模型産生輸出的唯一線索,模型對他的依賴是非常嚴重的,如何提升模型對訓示的泛化能力以及對錯誤訓示示的糾錯能力是提升模型體驗的一個非常重要的工作。這不僅可以讓模型能夠擁有更廣泛的應用場景,還可以讓模型變得更“智能”。

避免通用任務性能下降:這裡可能需要設計一個更合理的人類回報的使用方式,或是更前沿的模型結構。因為我們讨論了InstrcutGPT/ChatGPT的很多問題可以通過提供更多labeler标注的資料來解決,但這會導緻通用NLP任務更嚴重的性能下降,是以需要方案來讓生成結果的3H和通用NLP任務的性能達到平衡。

3.4 InstrcutGPT/ChatGPT的熱點話題解答

ChatGPT的出現會不會導緻底層程式員失業?從ChatGPT的原理和網上漏出的生成内容來看,ChatGPT生成的代碼很多可以正确運作。但程式員的工作不止是寫代碼,更重要的是找到問題的解決方案。是以ChatGPT并不會取代程式員,尤其是高階程式員。相反它會向現在很多的代碼生成工具一樣,成為程式員寫代碼非常有用的工具。

Stack Overflow 宣布臨時規則:禁止 ChatGPT。ChatGPT本質上還是一個文本生成模型,對比生成代碼,它更擅長生成以假亂真的文本。而且文本生成模型生成的代碼或者解決方案并不能保證是可運作而且是可以解決問題的,但它以假亂真的文本又會迷惑很多查詢這個問題的人。Stack Overflow為了維持論壇的品質,封禁ChatGPT也是情理之中。

聊天機器人 ChatGPT 在誘導下寫出「毀滅人類計劃書」,并給出代碼,AI 發展有哪些問題需關注?ChatGPT的「毀滅人類計劃書」是它在不可遇見的訓示下根據海量資料強行拟合出來的生成内容。雖然這些内容看起來很真實,表達也很流暢,這說明的隻是ChatGPT具有非常強的生成效果,并不表示ChatGPT具備毀滅人類的思想。因為他僅僅是一個文本生成模型,并不是一個決策模型。

4. 總結

就像很多人們算法剛誕生時一樣,ChatGPT憑借有用性,真實性,無害性的效果,引起了業内廣泛的關注和人類對AI的思考。但是當我們看完它的算法原理之後,發現它并沒有業内宣傳的那麼恐怖。反而我們可以從它的技術方案中學到很多有價值的東西。InstrcutGPT/ChatGPT在AI界最重要的貢獻是将強化學習和預訓練模型巧妙的結合起來。而且通過人工回報提升了模型的有用性,真實性和無害性。ChatGPT也進一步提升大模型的成本,之前還隻是比拼資料量和模型規模,現在甚至也引入了雇傭的外包這一支出,讓個體工作者更加望而卻步。

繼續閱讀