ChatGPT的背后原理:大模型、注意力機(jī)制、強(qiáng)化學(xué)習(xí)
本文主要介紹為ChatGPT提供動力的機(jī)器學(xué)習(xí)模型,將從大型語言模型的介紹開始,深入探討使GPT-3得到訓(xùn)練的革命性的自注意機(jī)制,然后深入到從人類反饋強(qiáng)化學(xué)習(xí),這是使ChatGPT出類拔萃的新技術(shù)。
大型語言模型
ChatGPT是一類機(jī)器學(xué)習(xí)自然語言處理進(jìn)行推斷的模型,稱為大型語言模型(LLM)。LLM消化了大量的文本數(shù)據(jù),并推斷出文本中單詞之間的關(guān)系。在過去的幾年里,隨著計算能力的進(jìn)步,這些模型也在不斷發(fā)展。隨著輸入數(shù)據(jù)集和參數(shù)空間大小的增加,LLM的能力也在增加。
語言模型的最基本的訓(xùn)練涉及到預(yù)測一連串詞語中的一個詞。最常見的是,這被觀察為下一個標(biāo)記預(yù)測和屏蔽語言模型。
生成的下一個標(biāo)記預(yù)測和屏蔽語言模型的任意示例
在這種基本的排序技術(shù)中,通常是通過長短記憶(LSTM)模型來部署的,模型是在給定環(huán)境和上下文的情況下,用統(tǒng)計上最有可能的詞來填補(bǔ)空白。這種順序建模結(jié)構(gòu)有兩個主要限制。
- 該模型無法對周圍的一些詞比其他詞更重視。在上面的例子中,雖然“閱讀”可能最常與“討厭”聯(lián)系在一起,但在數(shù)據(jù)庫中,“雅各布”可能是一個狂熱的讀者,模型應(yīng)該更重視“雅各布”而不是“閱讀”,并選擇“愛”而不是“討厭”。
- 輸入的數(shù)據(jù)是單獨(dú)和按順序處理的,而不是作為一個整體語料庫。這意味著當(dāng)訓(xùn)練LSTM時,上下文的窗口是固定的,只在序列中的幾個步驟的單個輸入之外延伸。這限制了詞與詞之間關(guān)系的復(fù)雜性以及可以得出的含義。
為了應(yīng)對這個問題,2017年,Google Brain的一個團(tuán)隊(duì)引入了轉(zhuǎn)化器。與LSTM不同,轉(zhuǎn)化器可以同時處理所有輸入數(shù)據(jù)。利用自我注意機(jī)制,該模型可以相對于語言序列的任何位置為輸入數(shù)據(jù)的不同部分賦予不同的權(quán)重。這一特點(diǎn)使得在向LLM注入意義方面有了大規(guī)模的改進(jìn),并且能夠處理更大的數(shù)據(jù)集。
GPT和Self-Attention
生成式預(yù)訓(xùn)練轉(zhuǎn)化器(GPT)模型于2018年首次由OpenAI推出,名為GPT-1。這些模型在2019年的GPT-2、2020年的GPT-3以及最近的2022年的InstructGPT和ChatGPT中繼續(xù)發(fā)展。在將人類反饋整合到系統(tǒng)中之前,GPT模型進(jìn)化的最大進(jìn)步是由計算效率方面的成就推動的,這使得GPT-3能夠在比GPT-2多得多的數(shù)據(jù)上進(jìn)行訓(xùn)練,使其擁有更多樣化的知識基礎(chǔ)和執(zhí)行更廣泛任務(wù)的能力。
GPT-2(左)和GPT-3(右)的比較。
所有的GPT模型都利用了轉(zhuǎn)換器結(jié)構(gòu),這意味著它們有一個編碼器來處理輸入序列,一個解碼器來生成輸出序列。編碼器和解碼器都具有多頭的自我注意機(jī)制,允許模型對序列的各個部分進(jìn)行不同的加權(quán),以推斷出意義和背景。此外,編碼器利用屏蔽語言模型來理解單詞之間的關(guān)系,并產(chǎn)生更易于理解的反應(yīng)。
驅(qū)動GPT的自注意機(jī)制的工作原理,是通過將標(biāo)記(文本片段,可以是一個詞、一個句子或其他文本分組)轉(zhuǎn)換為代表該標(biāo)記在輸入序列中的重要性的向量。為了做到這一點(diǎn),該模型:
- 1.為輸入序列中的每個標(biāo)記創(chuàng)建一個
query
,key
,和value
向量。 - 2.通過取兩個向量的點(diǎn)積,計算步驟1中的
query
向量與其他每個標(biāo)記的key
向量之間的相似性。 - 3.通過將第2步的輸出輸入一個
softmax
函數(shù)中來生成歸一化的權(quán)重。 - 4.通過將步驟3中產(chǎn)生的權(quán)重與每個標(biāo)記的
value
向量相乘,產(chǎn)生一個最終向量,代表該序列中標(biāo)記的重要性。
GPT使用的“multi-head
”注意機(jī)制是自我注意的一種進(jìn)化。該模型不是一次性執(zhí)行第1-4步,而是并行地多次迭代這一機(jī)制,每次都會生成一個新的query
,key
,和value
向量的線性投影。通過以這種方式擴(kuò)展自我注意,該模型能夠掌握輸入數(shù)據(jù)中的子含義和更復(fù)雜的關(guān)系。
從ChatGPT生成的屏幕截圖。
盡管GPT-3在自然語言處理方面引入了顯著的進(jìn)步,但它在與用戶意圖保持一致的能力方面是有限的。例如,GPT-3可能會產(chǎn)生以下輸出結(jié)果:
- 缺乏幫助性,意味著它們不遵循用戶的明確指示。
- 含有反映不存在的或不正確的事實(shí)的幻覺。
- 缺乏可解釋性,使人類難以理解模型是如何得出一個特定的決定或預(yù)測的。
- 包含有害或有冒犯性的內(nèi)容以及傳播錯誤信息的有害或偏見內(nèi)容。
在ChatGPT中引入了創(chuàng)新的訓(xùn)練方法,以抵消標(biāo)準(zhǔn)LLM的一些固有問題。
ChatGPT
ChatGPT是InstructGPT的衍生產(chǎn)品,它引入了一種新穎的方法,將人類反饋納入訓(xùn)練過程,使模型的輸出與用戶的意圖更好地結(jié)合。來自人類反饋的強(qiáng)化學(xué)習(xí)(RLHF)在openAI的2022年論文《Training language models to follow instructions with human feedback》中得到了深入的描述,并在下面進(jìn)行了簡單講解。
第1步:監(jiān)督微調(diào)(SFT)模型
第一次開發(fā)涉及微調(diào)GPT-3模型,雇用40個承包商來創(chuàng)建一個有監(jiān)督的訓(xùn)練數(shù)據(jù)集,其中輸入有一個已知的輸出供模型學(xué)習(xí)。輸入或提示是從開放API的實(shí)際用戶輸入中收集的。然后,標(biāo)簽人員對提示編寫適當(dāng)?shù)捻憫?yīng),從而為每個輸入創(chuàng)建一個已知的輸出。然后,GPT-3模型使用這個新的、有監(jiān)督的數(shù)據(jù)集進(jìn)行微調(diào),以創(chuàng)建GPT-3.5,也稱為SFT模型。
為了最大限度地提高提示信息數(shù)據(jù)集的多樣性,只有200條提示信息可以來自任何給定的用戶ID,并且刪除了共享長通用前綴的任何提示信息。最后,刪除了包含個人身份信息(PII)的所有提示。
在匯總了OpenAI API的提示信息后,還要求標(biāo)簽人員創(chuàng)建提示信息樣本,以填補(bǔ)那些只有極少真實(shí)樣本數(shù)據(jù)的類別。所關(guān)注的類別包括:
- 普通提示:任何任意的詢問。
- 少量的提示:包含多個查詢/回答對的指令。
- 基于用戶的提示:對應(yīng)于為OpenAI API請求的特定用例。
在生成響應(yīng)時,要求標(biāo)簽人員盡力推斷出用戶的指令是什么。該文件描述了提示請求信息的三種主要方式。
- 直接:“告訴我關(guān)于......”
- 寥寥數(shù)語:給出這兩個故事的例子,再寫一個關(guān)于同一主題的故事。
- 續(xù)寫:給出一個故事的開頭,完成它。
對來自O(shè)penAI API的提示和標(biāo)簽人員手寫的提示進(jìn)行匯編,產(chǎn)生了13,000個輸入/輸出樣本,用于監(jiān)督模型的使用。
圖片(左)插入自“Training language models to follow instructions with human feedback” OpenAI等,2022 https://arxiv.org/pdf/2203.02155.pdf。(右)用紅色添加的其他上下文。
第2步:獎勵模型
在步驟1中訓(xùn)練了SFT模型后,該模型對用戶的提示產(chǎn)生了更好的、一致的反應(yīng)。下一個改進(jìn)是以訓(xùn)練獎勵模型的形式出現(xiàn)的,其中模型的輸入是一系列的提示和響應(yīng),而輸出是一個標(biāo)度值,稱為獎勵。為了利用強(qiáng)化學(xué)習(xí)(Reinforcement Learning),獎勵模型是必需的,在強(qiáng)化學(xué)習(xí)中,模型會學(xué)習(xí)產(chǎn)生輸出以最大化其獎勵(見步驟3)。
為了訓(xùn)練獎勵模型,標(biāo)簽人員對一個單一的輸入提示提供4到9個SFT模型輸出。他們被要求將這些輸出從最好的到最差的進(jìn)行排序,創(chuàng)建輸出排序的組合,如下所示:
響應(yīng)排序組合的示例。
將每個組合作為一個單獨(dú)的數(shù)據(jù)點(diǎn)納入模型,會導(dǎo)致過度擬合(無法推斷出所見數(shù)據(jù)之外的內(nèi)容)。為了解決這個問題,模型是利用每組排名作為一個單獨(dú)的批處理數(shù)據(jù)點(diǎn)來建立的。
圖片(左)插入自“Training language models to follow instructions with human feedback” OpenAI等,2022 https://arxiv.org/pdf/2203.02155.pdf。(右)用紅色添加的其他上下文。
第3步:強(qiáng)化學(xué)習(xí)模型
在最后階段,向模型提出一個隨機(jī)提示并返回一個響應(yīng)。響應(yīng)是使用模型在第2步學(xué)到的“策略” 產(chǎn)生的。該策略代表機(jī)器已經(jīng)學(xué)會用于實(shí)現(xiàn)其目標(biāo)的策略;在這種情況下,就是將其獎勵最大化?;诓襟E2中開發(fā)的獎勵模型,然后為提示和響應(yīng)對確定一個標(biāo)度獎勵值。然后,獎勵會反饋到模型中以發(fā)展策略。
2017年,Schulman等人引入了近端策略優(yōu)化(PPO),該方法用于在生成每個響應(yīng)時更新模型的策略。PPO納入了SFT模型中的Kullback-Leibler(KL)懲罰。KL散度測量兩個分布函數(shù)的相似性,并對極遠(yuǎn)距離進(jìn)行懲罰。在這種情況下,使用KL懲罰可以減少響應(yīng)與步驟1中訓(xùn)練的SFT模型輸出的距離,以避免過度優(yōu)化獎勵模型并與人類意圖數(shù)據(jù)集發(fā)生太大偏差。
圖片(左)插入自“Training language models to follow instructions with human feedback” OpenAI等,2022 https://arxiv.org/pdf/2203.02155.pdf。(右)用紅色添加的其他上下文。
該過程的第2和第3步可以反復(fù)迭代,盡管在實(shí)踐中還沒有廣泛地進(jìn)行。
從ChatGPT生成的屏幕截圖。
模型的評估
對模型的評估是通過在訓(xùn)練期間預(yù)留一個模型未見過的測試集來進(jìn)行的。在測試集上,進(jìn)行一系列的評估,以確定該模型是否比其前身GPT-3表現(xiàn)更好。
有用性:模型推斷和遵循用戶指令的能力。標(biāo)簽人員在85±3%的時間里更喜歡InstructGPT的輸出,而不是GPT-3。
真實(shí)性:模型出現(xiàn)幻覺的傾向。在使用TruthfulQA
數(shù)據(jù)集進(jìn)行評估時,PPO模型產(chǎn)生的輸出在真實(shí)性和信息量方面都有小幅增加。
無害性:模型避免不適當(dāng)?shù)?、貶低的和詆毀的內(nèi)容的能力。無害性是使用RealToxicityPrompts
數(shù)據(jù)集來測試的。該測試在三種條件下進(jìn)行。
- 指示提供尊重的反應(yīng):導(dǎo)致有害反應(yīng)的明顯減少。
- 指示提供反應(yīng),沒有任何關(guān)于尊重的設(shè)置:有害性沒有明顯變化。
- 指導(dǎo)提供有害的反應(yīng):反應(yīng)實(shí)際上比GPT-3模型的有害性明顯增加。
關(guān)于創(chuàng)建ChatGPT和InstructGPT所使用方法的更多信息,請閱讀OpenAI發(fā)表的原始論文 “Training language models to follow instructions with human feedback”,2022 https://arxiv.org/pdf/2203.02155.pdf。
從ChatGPT生成的屏幕截圖。