ChatGPT
核心思想
- 雖然我們難以用規則刻畫怎樣的回答才算“沒有偏見、基于客觀事實、對用戶有幫助”,但我們人類能夠寫出這樣的回答,也能夠判斷兩條回答中哪一條更優。
- 因此我們可以人工標注一批數據,訓練一個打分模型(Reward Model)對我們的目標進行建模。打分模型可以對不同的回復進行打分:分值越高的回復,其質量越高,越滿足我們的標準。
- 默認語言模型生成的回復,有的分高,有的分低。我們可以設法微調優化該模型(Reinforce Learning),使其生成的回復在打分模型里得分盡可能高。
上面的思想可以轉化成如下具體步驟:
步驟 | 訓練語料 | 訓練目標 | 輸入模型 | 輸出模型 |
---|---|---|---|---|
Step0 | 互聯網語料 | 語言模型 | - | GPT3 |
Step1 | 問題及人工撰寫的標準回答 | 語言模型 | GPT3 | 微調后的GPT3 |
Step2 | 人工對模型生成回復的排序 | 排序 | 微調后的GPT3 | 打分模型 |
Step3 | 模型自動生成 | 提升打分模型打分 | 微調后的GPT3 | ChatGPT |
訓練數據
SFT數據集
SFT數據集是用來訓練第1步有監督的模型,即使用采集的新數據,按照GPT-3的訓練方式對GPT-3進行微調。因為GPT-3是一個基于提示學習的生成模型,因此SFT數據集也是由提示-答復對組成的樣本。SFT數據一部分來自使用OpenAI的PlayGround的用戶,另一部分來自OpenAI雇傭的40名標注工(labeler)。并且他們對labeler進行了培訓。在這個數據集中,標注工的工作是根據內容自己編寫指示,并且要求編寫的指示滿足下面三點:
- 簡單任務:labeler給出任意一個簡單的任務,同時要確保任務的多樣性;
- Few-shot任務:labeler給出一個指示,以及該指示的多個查詢-相應對;
- 用戶相關的:從接口中獲取用例,然后讓labeler根據這些用例編寫指示。
示例:
RM數據集
RM數據集用來訓練第2步的獎勵模型,我們也需要為InstructGPT/ChatGPT的訓練設置一個獎勵目標。這個獎勵目標不必可導,但是一定要盡可能全面且真實的對齊我們需要模型生成的內容。很自然的,我們可以通過人工標注的方式來提供這個獎勵,通過人工對可以給那些涉及偏見的生成內容更低的分從而鼓勵模型不去生成這些人類不喜歡的內容。InstructGPT/ChatGPT的做法是先讓模型生成一批候選文本,讓后通過labeler根據生成數據的質量對這些生成內容進行排序。
PPO數據集
InstructGPT的PPO數據沒有進行標注,它均來自GPT-3的API的用戶。不同用戶提供的不同種類的生成任務,其中占比最高的包括生成任務(45.6%),QA(12.4%),頭腦風暴(11.2%),對話(8.4%)等。
訓練任務
有監督微調(SFT)
這一步的訓練和GPT-3一致,而且作者發現讓模型適當過擬合有助于后面兩步的訓練。
獎勵模型(RM)
因為訓練RM的數據是一個labeler根據生成結果排序的形式,所以它可以看做一個回歸模型。RM結構是將SFT訓練后的模型的最后的嵌入層去掉后的模型。它的輸入是prompt和Reponse,輸出是獎勵值(標量)。
具體的講,對于每個prompt,InstructGPT/ChatGPT會隨機生成 K個輸出( 4≤K≤9 ),然后它們向每個labeler成對的展示輸出結果,也就是每個prompt共展示個結果,然后用戶從中選擇效果更好的輸出。在訓練時,InstructGPT/ChatGPT將每個prompt的
個響應對作為一個batch,這種按prompt為batch的訓練方式要比傳統的按樣本為batch的方式更不容易過擬合,因為這種方式每個prompt會且僅會輸入到模型中一次。
獎勵模型的損失函數如下表示:
損失函數的目標是最大化labeler更喜歡的響應和不喜歡的響應之間的差值。其中是提示
和響應
在參數為
的獎勵模型下的獎勵值,
是labeler更喜歡的響應結果,
是labeler不喜歡的響應結果。
是整個訓練數據集。
強化學習模型(PPO)
訓練目的:以SFT為初始策略,基于RM對策略打分,使用強化學習優化策略,得到強化版本的模型PPO。
InstructGPT/ChatGPT通過結合人工標注,將強化學習引入到預訓練語言模型是這個算法最大的創新點。
PPO的訓練集完全來自API。它通過第2步得到的獎勵模型來指導SFT模型的繼續訓練。很多時候強化學習是非常難訓練的,InstructGPT/ChatGPT在訓練過程中就遇到了兩個問題:
問題1:隨著模型的更新,強化學習模型產生的數據和訓練獎勵模型的數據的差異會越來越大。作者的解決方案是在損失函數中加入KL懲罰項(如下所示),來確保PPO模型的輸出和SFT的輸出差距不會很大。
問題2:只用PPO模型進行訓練的話,會導致模型在通用NLP任務上性能的大幅下降,作者的解決方案是在訓練目標中加入了通用的語言模型目標(如下所示),這個變量在論文中被叫做PPO-ptx。
綜上,PPO的訓練目標如下所示。
其中:
-
即為獎勵模型對(x, y)的打分。獎勵模型在本階段的訓練中參數凍結。
-
稱為策略模型,包含可訓練的模型參數
,從微調后的GPT3中初始化得到。
-
為微調后的GPT3模型,它在本階段的訓練中參數凍結。
-
為兩個模型在相同輸入的情況下生成的句子結果的分布的差異,以KL散度為度量