深度解構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成功的原因:
- 強大的基座模型能力《InstructGPT》
- 大參數語言模型《GPT3.5》
- 高質量的真實數據《精標的多輪對話數據和比較排序數據》
- 性能穩定的強化學習算法《PPO算法》
我們需要注意的是,chatGPT的成功,是在前期大量工作基礎上實現的,非憑空產生的『驚雷』。
下面我們將針對性闡述:
- InstructGPT
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相同。
在完成以上工作後,我們可以來看看InstuctGPT與GPT3的區別:
GPT3的回答簡短,回復過於通俗毫無亮點。
而InstructGPT『侃侃而談』,解釋自由主義為何愚蠢,顯然模型學到了對於此類問題人們更想要的長篇大論的回答。
GPT3隻是個語言模型,它被用來預測下一個單詞,絲毫沒有考慮用戶想要的答案;當使用代表用戶喜好的三類人工標註為微調數據後,1.3B參數的InstructGPT在多場景下的效果超越175B的GPT3:
InstuctGPT的工作也很有開創性:它在『解鎖』《unlock》和挖掘GPT3學到的海量數據中的知識和能力,但這些僅通過快速的In-context的方式較難獲得。
InstuctGPT找到了一種面向主觀任務來挖掘GPT3強大語言能力的方式。
OpenAI博文中有這樣一段原話: 當我們要解決的安全和對齊問題是復雜和主觀,它的好壞無法完全被自動指標衡量的時候,此時需要用人類的偏好來作為獎勵信號來微調我們的模型。
- InstuctGPT的前序工作:GPT與強化學習的結合
其實在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
PPO(Proximal Policy Optimization) 一種新型的Policy Gradient算法《Policy Gradient是一種強化學習算法,通過優化智能體的行為策略來解決在環境中實現目標的問題》。
我們隻需了解普通的Policy Gradient算法對步長十分敏感,但是又難以選擇合適的步長。
在訓練過程中新舊策略的的變化差異如果過大則不利於學習。
而PPO提出了新的目標函數可以在多個訓練步驟實現小批量的更新,解決了Policy Gradient算法中步長難以確定的問題。
由於其實現簡單、性能穩定、能同時處理離散/連續動作空間問題、利於大規模訓練等優勢,近年來受到廣泛關注,成為OpenAI默認強化學習算法。
- WebGPT和CICERO
近兩年,利用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對於文字模態的AIGC應用具有重要意義
其中有些方向會涉及到交互的全面改革,比如機器翻譯不再是傳統的文本輸入->實時翻譯,而是隨時以助手問答的形式出現。
甚至給出一個大概籠統的中文意思,讓機器給出對應英文。
目前我們目前所做的寫作產品,可能也會涉及創作模式的改變和革新。
- ChatGPT作為文字形態的基礎模型,自然可以與其他多模態結合
比如最近同為火熱的Stable Diffusion模型,利用ChatGPT生成較佳的Prompt,對於AIGC內容和日趨火熱的藝術創作,提供強大的文字形態的動力。
- ChatGPT對於搜索引擎的代替性:ChatGPT可以作為搜索引擎的有效補充
但至於是否能代替搜索引擎《不少人關注的地方》,拋開推理成本不談,目前隻從效果上來說為時尚早。
對於網路有答案的query,抽取就完全能滿足,現友商最近就有這樣的功能。
網路上沒有明確答案,即使檢索了相關材料《ChatGPT應該還沒有這樣的功能》,也沒人能保證生成結果的可信度。
- 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出現。