ChatGPT/InstructGPT詳解

2023-01-16 21:00:41

作者:京東零售 劉巖

前言

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

1. 背景知識

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

1.1 GPT系列

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

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

表1:歷代GPT的釋出時間,引數量以及訓練量

模型 釋出時間 層數 頭數 詞向量長度 引數量 預訓練資料量
GPT-1 2018 年 6 月 12 12 768 1.17 億 約 5GB
GPT-2 2019 年 2 月 48 - 1600 15 億 40GB
GPT-3 2020 年 5 月 96 96 12888 1,750 億 45TB

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》[5]文章中提出的思想。指示學習和提示學習的目的都是去挖掘語言模型本身具備的知識。不同的是Prompt是激發語言模型的補全能力,例如根據上半句生成下半句,或是完形填空等。Instruct是激發語言模型的理解能力,它通過給出更明顯的指令,讓模型去做出正確的行動。我們可以通過下面的例子來理解這兩個不同的學習方式:

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

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

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

1.3 人工反饋的強化學習

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

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

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

圖3:人工反饋的強化學習的基本原理

InstructGPT/ChatGPT中還用到了強化學習中一個經典的演演算法:OpenAI提出的最近策略優化(Proximal Policy Optimization,PPO)[7]。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共展示 CK2 個結果,然後使用者從中選擇效果更好的輸出。在訓練時,InstructGPT/ChatGPT將每個prompt的 CK2 個響應對作為一個batch,這種按prompt為batch的訓練方式要比傳統的按樣本為batch的方式更不容易過擬合,因為這種方式每個prompt會且僅會輸入到模型中一次。

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

(1)loss⁡(θ)=−1(K2)E(x,yw,yl)∼D[log⁡(σ(rθ(x,yw)−rθ(x,yl)))]

其中 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. 問題1:隨著模型的更新,強化學習模型產生的資料和訓練獎勵模型的資料的差異會越來越大。作者的解決方案是在損失函數中加入KL懲罰項 βlog⁡(πϕRL(y∣x)/πSFT(y∣x)) 來確保PPO模型的輸出和SFT的輸出差距不會很大。
  2. 問題2:只用PPO模型進行訓練的話,會導致模型在通用NLP任務上效能的大幅下降,作者的解決方案是在訓練目標中加入了通用的語言模型目標 γEx∼Dpretrain [log⁡(πϕRL(x))] ,這個變數在論文中被叫做PPO-ptx。

綜上,PPO的訓練目標為式(2)。 (2) objective (ϕ)=E(x,y)∼DπϕRL[rθ(x,y)−βlog⁡(πϕRL(y∣x)/πSFT(y∣x))]+γEx∼Dpretrain [log⁡(πϕRL(x))]

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也進一步提升大模型的成本,之前還只是比拼資料量和模型規模,現在甚至也引入了僱傭的外包這一支出,讓個體工作者更加望而卻步。

參考

  1. ^Ouyang, Long, et al. "Training language models to follow instructions with human feedback." arXiv preprint arXiv:2203.02155 (2022). https://arxiv.org/pdf/2203.02155.pdf
  2. ^Radford, A., Narasimhan, K., Salimans, T. and Sutskever, I., 2018. Improving language understanding by generative pre-training. https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf
  3. ^Radford, A., Wu, J., Child, R., Luan, D., Amodei, D. and Sutskever, I., 2019. Language models are unsupervised multitask learners. OpenAI blog, 1(8), p.9. https://life-extension.github.io/2020/05/27/GPT技術初探/language-models.pdf
  4. ^Brown, Tom B., Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan et al. 「Language models are few-shot learners.」 arXiv preprint arXiv:2005.14165 (2020). https://proceedings.neurips.cc/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf
  5. ^Wei, Jason, et al. "Finetuned language models are zero-shot learners." arXiv preprint arXiv:2109.01652 (2021). https://arxiv.org/pdf/2109.01652.pdf
  6. ^Christiano, Paul F., et al. "Deep reinforcement learning from human preferences." Advances in neural information processing systems 30 (2017). https://arxiv.org/pdf/1706.03741.pdf
  7. ^Schulman, John, et al. "Proximal policy optimization algorithms." arXiv preprint arXiv:1707.06347 (2017). https://arxiv.org/pdf/1707.06347.pdf