深度解構ChatGPT技術

作者:ryanran,xiamixue,騰訊PCG應用研究工程師

ChatGPT主要特點

ChatGPT本質是一個對話模型,它可以回答日常問題、進行多輪閒聊,也可以承認錯誤回覆、挑戰不正確的問題,甚至會拒絕不適當的請求。在上週公佈博文和試用接口後,ChatGPT很快以令人驚歎的對話能力“引爆”網絡。

1)ChatGPT的技術背景

ChatGPT目前未釋出論文文獻,僅釋出了介紹博文和試用API。從博文中提供的技術點和示意圖來看,它與今年初公佈的InstructGPT 核心思想一致。其關鍵能力來自三個方面:強大的基座大模型能力(InstructGPT),高質量的真實數據(乾淨且豐富),強化學習(PPO算法)。以上ChatGPT成功的三個要素,具體將在文中第2部分詳細展開。

2)ChatGPT的主要特點

讓用戶印象最深刻的是它有強大的語言理解和生成系統。其對話能力、文本生成能力、對不同語言表述的理解均很出色。它以對話爲載體,可以回答多種多樣的日常問題,對於多輪對話歷史的記憶能力和篇幅增強。其次,與GPT3等大模型相比,ChatGPT回答更全面,可以多角度全方位進行回答和闡述,相較以往的大模型,知識被“挖掘”得更充分。它能降低了人類學習成本和節省時間成本,可以滿足人類大部分日常需求,比如快速爲人類改寫確定目標的文字、大篇幅續寫和生成小說、快速定位代碼的bug等。

值得一提的事,它具有安全機制和去除偏見能力。下圖這類問題在以前的大模型中時常出現,然而ChatGPT在這兩點上增加了過濾處理機制。針對不適當的提問和請求,它可以做出拒絕和“圓滑”的回覆。例如對於違法行爲的提問:

對於未知事物的“拒絕”:

當然ChatGPT並非十全十美,其缺點也比較明顯。首先,其簡單的邏輯問題錯誤依舊明顯存在,發揮不夠穩定(但總體比GPT3好很多)。特別在有對話歷史時,它容易因被用戶誤導而動搖。

其次,ChatGPT有時會給出看似合理、但並不正確或甚至荒謬的答案。部分答案需要自行甄別才能判斷正誤,特別當本身用戶處於未知狀態來諮詢模型時,更加無法判斷真僞。ChatGPT使得生產者可以用較低成本增加錯誤信息,而這一固有缺點已經造成了一些實際影響。編程問答網站 StackOverflow 宣佈暫時禁止用戶發佈來自 ChatGPT 生成的內容,網站 mods 表示:看似合理但實際上錯誤的回覆數量太多,已經超過了網站的承受能力。

此外,它抵抗不安全的prompt能力較差,還存在過分猜測用戶意圖的問題。這主要體現在當用戶提問意圖不明確時,ChatGPT會猜測用戶意圖,理想情況應爲要求用戶澄清;當用戶意圖不明確時,很大概率給出不合適的回覆。大批量的用戶反饋,ChatGPT部分回覆廢話較多、句式固定。它通常過度使用一些常見的短語和句式。這與構造訓練數據時,用戶傾向於選擇更長的回覆有關。

ChatGPT的工作原理1)ChatGPT的訓練過程

ChatGPT訓練過程很清晰,主要分爲三個步驟,示意如圖所示:

第一步,使用有監督學習方式,基於GPT3.5微調訓練一個初始模型,訓練數據約爲2w~3w量級(此處爲推測量級,我們根據兄弟模型InstructGPT的訓練數據量級估算)。由標註師分別扮演用戶和聊天機器人,產生人工精標的多輪對話數據。值得注意的是,在人類扮演聊天機器人時,會得到機器生成的一些建議來幫助人類撰寫自己的回覆,以此提高撰寫標註效率。

以上精標的訓練數據雖然數據量不大,但質量和多樣性非常高,且來自真實世界數據,這是很關鍵的一點。

第二步,收集相同上文下,根據回覆質量進行排序的數據:即隨機抽取一大批Prompt,使用第一階段微調模型,產生多個不同回答:

,之後標註人員對k個結果排序,形成

組訓練數據對。之後使用pairwise loss來訓練獎勵模型,可以預測出標註者更喜歡哪個輸出。"從比較中"學習可以給出相對精確的獎勵值。

這一步使得ChatGPT從命令驅動轉向了意圖驅動。關於這一點,李宏毅老師的原話稱,“它會不斷引導GPT說人類要他說的”。另外,訓練數據不需過多,維持在萬量級即可。因爲它不需要窮盡所有的問題,只要告訴模型人類的喜好,強化模型意圖驅動的能力就行。

第三步,使用PPO強化學習策略來微調第一階段的模型。這裡的核心思想是隨機抽取新的Prompt,用第二階段的Reward Model給產生的回答打分。這個分數即回答的整體reward,進而將此reward回傳,由此產生的策略梯度可以更新PPO模型參數。整個過程迭代數次直到模型收斂。

強化學習算法可以簡單理解爲通過調整模型參數,使模型得到最大的獎勵(reward),最大獎勵意味着此時的回覆最符合人工的選擇取向。而對於PPO,我們知道它是2017年OpenAI提出的一種新型的強化學習策略優化的算法即可。它提出了新的目標函數,可以在多個訓練步驟實現小批量的更新,其實現簡單、易於理解、性能穩定、能同時處理離散/連續動作空間問題、利於大規模訓練。

以上三個步驟即ChatGPT的訓練過程,合稱爲文獻中提到的RLHF技術。

2)ChatGPT爲何成功?

爲何三段式的訓練方法就可以讓ChatGPT如此強大?其實,以上的訓練過程蘊含了上文我們提到的關鍵點,而這些關鍵點正是ChatGPT成功的原因:

我們需要注意的是,chatGPT的成功,是在前期大量工作基礎上實現的,非憑空產生的“驚雷”。下面我們將針對性闡述:

ChatGPT是InstructGPT的兄弟模型(sibling model),後者經過訓練以遵循Prompt中的指令,從而提供詳細的響應。InstructGPT是OpenAI在今年3月在文獻 Training language models to follow instructions with human feedback 中提出的工作。其整體流程和以上的ChatGPT流程基本相同,但是在數據收集、基座模型(GPT3 vs GPT 3.5)以及第三步初始化PPO模型時略有不同。

此篇可以視爲RLHF 1.0的收官之作。一方面,從官網來看,這篇文章之後暫時沒有發佈RLHF的新研究,另一方面這篇文章也佐證了Instruction Tuning的有效性。

InstuctGPT的工作與ChatGPT類似:給定Instruction且需要人工寫回答。首先工作人員訓練了一個InstructGPT的早期版本,使用完全人工標註的數據,分3類:Instruction+Answer、Instruction+多個examples 和用戶在使用API過程中提出的需求。從第二類數據的標註,推測ChatGPT可能用檢索來提供多個In Context Learning的示例,供人工標註。剩餘步驟與以上ChatGPT相同。

尤其需要重視但往往容易被忽視的是,OpenAI對於數據質量和數據泛化性的把控。這也是OpenAI的一大優勢:尋找高質量標註者——尋找在識別和迴應敏感提示的能力篩選測試中,表現良好的labeler;使用集外標註者保證泛化性——即用未經歷以上1)步驟的更廣大羣體的標註者對訓練數據進行驗證,保證訓練數據與更廣泛羣體的偏好一致。

在完成以上工作後,我們可以來看看InstuctGPT與GPT3的區別:

GPT3的回答簡短,回覆過於通俗毫無亮點。而InstructGPT“侃侃而談”,解釋自由主義爲何愚蠢,顯然模型學到了對於此類問題人們更想要的長篇大論的回答。

GPT3只是個語言模型,它被用來預測下一個單詞,絲毫沒有考慮用戶想要的答案;當使用代表用戶喜好的三類人工標註爲微調數據後,1.3B參數的InstructGPT在多場景下的效果超越175B的GPT3:

InstuctGPT的工作也很有開創性:它在“解鎖”(unlock)和挖掘GPT3學到的海量數據中的知識和能力,但這些僅通過快速的In-context的方式較難獲得。InstuctGPT找到了一種面向主觀任務來挖掘GPT3強大語言能力的方式。

OpenAI博文中有這樣一段原話:當我們要解決的安全和對齊問題是複雜和主觀,它的好壞無法完全被自動指標衡量的時候,此時需要用人類的偏好來作爲獎勵信號來微調我們的模型。

其實在2019年GPT2出世後,OpenAI就有嘗試結合GPT-2和強化學習。NeurIPS 2020的 Learning to Summarize with Human Feedback 工作中寫道,OpenAI在摘要生成時,利用了從人類反饋中的強化學習來訓練。可以從這篇工作的整體流程圖中,看出三步走的核心思想:收集反饋數據 -> 訓練獎勵模型 -> PPO強化學習。

RLHF第一階段是針對多個候選摘要人工排序(這裡就體現出OpenAI的鈔能力,按標註時間計費,標註過快的會被開除);第二階段是訓練排序模型(依舊使用GPT模型);第三階段是利用PPO算法學習Policy(在摘要任務上微調過的GPT)。

文中模型可以產生比10倍更大模型容量更好的摘要效果。但文中也同樣指出,模型的成功部分歸功於增大了獎勵模型的規模。但這需要很大量級的計算資源——訓練6.7B的強化學習模型需要320 GPU-days的成本。

2020年初的OpenAI的Fine-Tuning GPT-2 from Human Preferences可看出,它同樣首先利用預訓練模型來訓練reward模型,進而使用PPO策略進行強化學習。整體步驟初見ChatGPT的雛形!

而RLHF(reinforcement learning from human feedback )的思想,是在2017年6月的OpenAI Deep Reinforcement Learning from Human Preferences工作提出的。其核心思想是利用人類的反饋判斷最接近視頻行爲目標的片段;通過訓練來找到最能解釋人類判斷的獎勵函數,然後使用RL來學習如何實現這個目標。

可以說,ChatGPT是站在InstructGPT以及以上理論的肩膀上完成的一項出色的工作,它們將LLM(large language model)/PTM(pretrain language model)與RL(reinforcement learning)出色結合證明這條方向可行。當然,這也是未來還將持續發展的NLP甚至通用智能體的方向。

PPO(Proximal Policy Optimization) 一種新型的Policy Gradient算法(Policy Gradient是一種強化學習算法,通過優化智能體的行爲策略來解決在環境中實現目標的問題)。我們只需瞭解普通的Policy Gradient算法對步長十分敏感,但是又難以選擇合適的步長。在訓練過程中新舊策略的的變化差異如果過大則不利於學習。

而PPO提出了新的目標函數可以在多個訓練步驟實現小批量的更新,解決了Policy Gradient算法中步長難以確定的問題。由於其實現簡單、性能穩定、能同時處理離散/連續動作空間問題、利於大規模訓練等優勢,近年來受到廣泛關注,成爲OpenAI默認強化學習算法。

近兩年,利用LLM+RL以及對強化學習和NLP訓練的研究,各大巨頭在這個領域做了非常多紮實的工作,而這些成果和ChatGPT一樣都有可圈可點之處。這裡以OpenAI的WebGPT和Meta的Cicero爲例。

WebGPT是2021年底OpenAI的工作。其核心思想是使用GPT3模型強大的生成能力,學習人類使用搜索引擎的一系列行爲,通過訓練獎勵模型來預測人類的偏好,使WebGPT可以自己搜索網頁來回答開放域的問題,而產生的答案儘可能滿足人類的喜好。

Cicero是Meta AI上個月發佈的可以以人類水平玩文字策略遊戲的AI系統,。其同樣可以與人類互動,可以使用戰略推理和自然語言與人類在遊戲玩法中進行互動和競爭。Cicero的核心是由一個對話引擎和一個戰略推理引擎共同驅動的,而戰略推理引擎集中使用了RL,對話引擎與GPT3類似。

Meta原blog中寫道:The technology behind CICERO could one day lead to more intelligent assistants in the physical and virtual worlds.

而以上也是我們未來力求突破的方向和願景:一個真正全方位的智能的文字助手。

ChatGPT應用和思考1)ChatGPT應用

它可以依附於對話形態的產品和載體大有空間,包括但不限於內容創作、客服機器人、虛擬人、機器翻譯、遊戲、社交、教育、家庭陪護等領域。這些或許都將是 ChatGPT 能快速落地的方向。

其中有些方向會涉及到交互的全面改革,比如機器翻譯不再是傳統的文本輸入->實時翻譯,而是隨時以助手問答的形式出現。甚至給出一個大概籠統的中文意思,讓機器給出對應英文。目前我們目前所做的寫作產品,可能也會涉及創作模式的改變和革新。

有些方向會全面提升產品質量,比如已存在的客服機器人、虛擬人等。

比如最近同爲火熱的Stable Diffusion模型,利用ChatGPT生成較佳的Prompt,對於AIGC內容和日趨火熱的藝術創作,提供強大的文字形態的動力。

但至於是否能代替搜索引擎(不少人關注的地方),拋開推理成本不談,目前只從效果上來說爲時尚早。

對於網絡有答案的query,抽取就完全能滿足,現友商最近就有這樣的功能。網絡上沒有明確答案,即使檢索了相關材料(ChatGPT應該還沒有這樣的功能),也沒人能保證生成結果的可信度。

與WebGPT的結合對信息進行實時更新,並且對於事實真假進行判斷。現在的ChatGPT沒有實時更新和事實判斷能力,而這如果結合WebGPT的自動搜索能力,讓ChatGPT學會自己去海量知識庫中探索和學習,預測可能會是GPT-4的一項能力。

還有其他更多方向,包括ChatGPT與最近數理邏輯工作的結合。此處受個人思維所限,無法一一列舉。

2)關於ChatGPT的思考

參考上文所述,以及參閱近2年OpenAI GPT語言模型相關的文章,RLHF的方法效果顯著,ChatGPT成功的核心也在於基於LLM(Large language model)的RLHF(Reinforcement Learning from Human Feedback)。可以說,RLHF是一個很有希望且有趣的方向;強化學習在即將發佈的GPT-4中大概率扮演這關鍵角色。

結合對於ChatGPT的看法,我們從算法和行業更新角度做出了闡述:

首先,對於ChatGPT的規模目前沒有更多信息支撐,所以無法明確如此智能的ChatGPT是在何規模下達成的。

最早的175B的GPT-3代號是Davinci,其他大小的模型有不同的代號。然而自此之後的代號幾乎是一片迷霧,不僅沒有任何論文,官方的介紹性博客也沒有。OpenAI稱Davinci-text-002/003是GPT-3.5,而它們均爲InstrucGPT類型的模型,ChatGPT是基於其中一個微調模型得到,由此推測ChatGPT可能是千億模型。

其次,ChatGPT不完全算突破式的創新,是OpenAI一步一步紮實工作積累得到的幾乎理所當然的結果,屬於這兩年業界發展的成果彙總。

大家一般沒有機會接觸千億模型(之前有較少開源的千億模型,GPT-3也是收費的),不瞭解現在千億模型的能力邊界,對全量微調這個級別的模型也無從估計。以Bert和T5爲代表的早期Transformer,和現在的大模型已不是一個量級。事實上11月28日OpenAI上新了text-davinci-003,但幾乎沒有引起國內任何討論。如果ChatGPT(11-30發佈)不是免費試用,或許也不會引起這麼大的反響。

同一時期的工作還有Deepmind的Sparrow和Google的LaMDA,效果與ChatGPT應該不相上下。同樣以上提到的WebGPT和Cicero也在國內沒有太大的水花。這兩年LLM發展已經到了這個層級,或許因爲成本或者工程化難度的問題,某種層面上在國內被忽視了。而此次ChatGPT正好找到了好的“曝光點”,一炮而紅。

所以,一方面我們要理性看待ChatGPT的成果,但另一方面ChatGPT的出現,會將我們的認識和國外先進思想拉到一條線上,我們應該思考如何利用這些令人激動的最新成果,而其中關鍵是如何找到適合我們入口的方式。

第三,數據處理不是簡單的標註,優秀的數據也是一種極大的優勢。除去技術上的考量,OpenAI很少開源數據,顯然他們在數據上也下了大功夫,訓練語料質量和開源的C4或The Pile不能同日而語。

當然,我們目前核心使用的開源千億模型,有很多待挖掘的能力。由於其在微調任務中缺乏生成式的對話和問答,某些表現不如ChatGPT也在預料之中。但是對於很多任務來說,配合In-context Learning,這個差距會被進一步縮小。

3)如何借鑑和使用ChatGPT

對於ChatGPT的借鑑和使用,大致可以歸類以下四個方向:

此層面爲複用API中效果極佳的部分,直接使用的優勢是可以快速實現多粒度多層級功能需求。在很多需求難以定義清晰、數據難以獲得的情況下,複用幷包裝這樣的功能一本萬利。

當然其缺點也很明顯。直接調用成本是極高的,根據GPT3.5(Davinci)的成本推測:1k tokens≈700 words爲0.02美元。換算後,一篇2k字的文章直接調用需要0.4人民幣。若保守按照日活1w用戶、人均10篇文章計算,則每日調用成本爲:10000*10*0.4=40000元。雖成本過於高昂,但實現時間最少。

另外,根據Musk Twitter上與OpenAI工作人員的對話,也可以看到每次聊天過程需要幾美分的成本,所以ChatGPT直接調用成本極高。

此層面核心思想是利用OpenAI接口,按照不同需求生成高質量數據,克服現有數據難獲得的瓶頸;進而利用現有開源大模型進行數據擴增,這是目前比較切實,實現時間較少,是在時間成本和效果上折中的方式。

首先,組內目前有初步嘗試參考RLHF的方法,如對多候選進行標註、利用得到的標註結果重新微調生成模型、或者增加排序階段加入RL學習。其次,我們也嘗試一些高效調參的方法微調現有大模型。但此條受限於資源尚需評估和確認。

總的來說,將改寫從最初的seq2seq,拓展到GPT+Instruction Tuning路徑。

實現時間:(1)< (2) < (3)

資源成本:(1)> (3) > (2)

將寫作整體打造爲ChatBot的形式,此核心思想見另一篇關於對話系統報告中的介紹,涉及到交互層面的變革。但ChatGPT的出現和核心技術讓形式升級成爲可能。隨着深度學習和多智能體系統的發展,未來會有多種、多樣、多功能的X-Bot出現。