ChatGPT深度解析:GPT家族進化史
導語 |2022年11月30日,OpenAI 釋出了其最新的聊天機器人模型 ChatGPT。騰訊雲開發者先後從其玩法體驗、技術原理、上手方法和競品洞察幾個方面進行解讀,並邀請騰訊前沿科技研究中心主任王強暢聊 ChatGPT 最受關注的問題(如果你對相關內容感興趣,可點選一鍵跳轉閱讀)。然而,ChatGPT 成為現象級火爆技術之作的背後,是常年累月的技術積累和靈敏迭代。此次我們邀請騰訊 NLP 工程師張先禮深度解析 ChatGPT 進化歷程——GPT 各代有何區別、如何演進?其現有能力有什麼不足?未來將會有什麼發展方向?歡迎各位開發者閱讀、分享與交流 ChatGPT 神話的締造之路。
目錄
1 背景介紹
2 原理解析——從發展歷程瞭解 ChatGPT
2.1 Transformer
2.2 初代 GPT vs. BERT
2.3 GPT-2
2.4 GPT-3
2.5 InstructGPT
2.6 ChatGPT
3 熱門關注點
3.1 模型到底是否需要標籤監督?
3.2 ChatGPT 對多模態有何啟發?
3.3 ChatGPT 為何能對同個問題生成不同的答案?
3.4 ChatGPT 如何拒絕回答知識範圍外的問題?
3.5 如何獲得更強的泛化?
3.6 小結
01
背景介紹
2022年11月30日,OpenA I釋出其最新的聊天機器人模型—— ChatGPT,由此引發熱烈討論。作為一個目前最接近“六邊形”戰士的聊天機器人,它不僅能夠用來聊天、搜尋、翻譯,還能寫故事、寫程式碼甚至是 debug。由於其能力過於驚豔, ChatGPT成為歷史上最快達到1億使用者的應用。各位開發者對其背後的技術充滿了好奇。
本文將圍繞ChatGPT探討其原理解析、優缺點、未來發展方向。其中將介紹從Transformer逐步進化到 ChatGPT 的方式,並從分析 ChatGPT 的優缺點開始,思考ChatGPT、AI 的未來發展方向和改進點。
02
原理解析——從發展歷程瞭解 ChatGPT
本章會逐步介紹Transformer(2.1節)、初代GPT vs. BERT(2.2節)、GPT-2(2.3節)、 GPT-3(2.4節)、 InstructGPT(2.5節)、ChatGPT(2.6節)。如果你對某個演進節點特別感興趣,可以優先跳轉到對應章節閱讀了解。
2.1 Transformer
2.1.1 Transfermer 背景
2017 年,Google 的一篇題為 Attention is all you need 的 Paper 橫空出世,自此完全使用 Attention 機制的 Transformer 模型開始主導 NLP 領域。不久後,利用 Transformer 模型結構的預訓練語言模型 GPT 和 BERT 大放異彩。時至今日,基於 GPT 和 BERT 的預訓練語言模型進行 Fine-tuning 仍然是 NLP 中廣泛任務的首選正規化。除了 NLP 領域,Transformer 結構也被應用到了計算機視覺領域,由此誕生了一系列比CNN更強大的模型,如 ViT、BEiT 和 MAE。可以說,Transformer 結構繼 RNN、CNN(以及其一系列變體 LSTM、GRU、ResNet、DenseNet 等)之後,在 Inductive Bias 方向上打開了一個新世界的大門。
2.1.2 Transfermer 主要特點
圖一 Self-Attention 和 Multi-Head Attention
-
第一,通過 Self-Attention(如圖1左所示),每個詞都和所有詞計算 Attention,因此不論序列中詞與詞之間的距離有多長,他們之間的最大路徑長度都為1,因此可以捕獲更長的依賴關係。
-
第二,提出Multi-head Attention(MHA)(如圖1右所示), 通過多個 Head 學習不同的子空間語義,最後通過 Concat 和 Linear 操作降維至單 Head 的 Size,這相當於多個子空間語義表示的 Ensemble。
圖二 Transformer 整體結構
- 第三,整體結構遵從 Encoder-Decoder 的形式,其中 Decoder 的每個 Block 比Encoder 多了一個 Masked Multi-Head Attention(MMHA)。MMHA 結構同MHA,只不過 Mask 矩陣中要遮蔽當前位置之前的詞與當前位置之後的詞的聯絡,使得文字下文資訊不提前洩露,例如生成式任務(如機器翻譯)是從前到後逐步生成的。
2.2 初代GPT vs. BERT
這裡我們會先講初代GPT,然後介紹BERT實驗,最後在2.2.3將二者的試驗訓練進行對比。
2.2.1 初代GPT
接下來我們會分別講到初代GPT的模型結構、訓練方法、Task-specific input transformations、資料集、實驗結果概覽,然後進行小結。
- 初代GPT模型結構
圖三 Transformer Decoder和GPT Decoder對比
GPT (Generative Pre-Training) 是 OpenAI GPT 系列的開山之作。在模型結構方面, GPT 僅使用了 Transformer 的 Decoder 結構,並對 Transformer Decoder 進行了一些改動。如圖三所示,原本的 Decoder 包含了 MHA 和 MMHA,而 GPT 只保留了 MMHA,這確保了 GPT 只能關注上文的資訊,從而達到單向模型的目的。
-
初代GPT訓練方法——無監督Pre-training + 有監督 Fine-tuning
-
【無監督 Pre-training】
初代GPT的無監督 Pre-training 是基於語言模型進行的,給定一個無監督語料,GPT利用標準的語言建模目標最大化以下似然:
其中是上下文視窗的大小。
- 【有監督Fine-tuning】
在利用目標函式(1)進行無監督 Pre-training 得到模型後,將其直接應用到有監督任務中。假設有一個有標註的資料集,其中每個樣本的inputs包含一系列的 token,即
和一個label
。將 inputs 輸入 Pre-training 的模型得到最後一個 transformer decoder block 的狀態表徵
,然後將狀態表徵輸入到在 Fine-tuning 階段新加入的線性輸出層預測
:
因此,Fine-tuning階段最大化以下目標:
此外,初代 GPT 將語言建模作為微調的輔助目標以幫助 Fine-tuning 階段(a)提升泛化性,(b)加速模型收斂。具體地,整個 Fine-tuning 階段的優化目標為:
相比Pre-training階段,Fine-tuning 引入了額外的引數包含 和 delimiter tokens(分隔符) 的 embeddings。而 delimiter tokens 是針對 Fine-tuning 階段不同的下游 tasks進行設計的,目的是為了使得 Pre-training 得到的模型能在 Fine-tuning 的時候適配不同的 tasks。
- Task-specific input transformations(特定於任務的輸入轉換)
圖四 特定於任務的輸入轉換
某些任務(如文字分類),GPT 可以對其進行直接如上所述的模型微調。而某些其他任務(如問答或文字蘊涵)和具有結構化輸入的任務,如有序的句子對或文件、問題和答案的三元組,由於 GPT 的預訓練模型是在連續的文字序列上訓練的,因此需要一些修改才能將其應用於這些任務。初代 GPT 之前的工作提出了基於 transferred representations 的學習任務特定的結構。這種方法重新引入了大量特定於任務的定製,並且不對這些額外的結構元件使用遷移學習。相反,GPT 使用遍歷式方法(traversal-style approach)將結構化輸入轉換為 Pre-training 模型可以處理的有序序列。這種輸入轉換避免了針對不同任務對模型結構進行大量更改。圖四展示了特定於任務的輸入轉換方式,所有的輸入轉換都包含了隨機初始化的起始(Start)和結尾(End)token,分別用和
表示。具體於不同任務:
Textual Entailment 如圖三所示,對於文字蘊含任務,GPT在 Fine-tuning 階段將前提p(premise )和假設 h (hypothesis)的 token 序列拼接,並在二者中間新增分隔(delimiter) token ,用$表示。
Similarity 對於相似度任務,兩個句子之間沒有固有的順序。為了反映這一點,GPT將輸入的兩個句子以兩個可能的排列順序拼接兩次,同樣需要將delimiter token新增在兩個句子中間。這樣兩個句子就能獲得兩個不同順序的輸入轉換。然後將兩個轉換後的輸入獨立地輸入 Pre-trianing 得到的模型,再將得到兩個序列表徵進行element-wise加法得到最終的表徵。最後將其輸入到線性輸出層。
Question Answering and Commonsense Reasoning 對於這兩個任務,給定context document,question
和可能的answer集合
,GPT先將document context和question拼接(二者中間沒有delimiter),然後再將其與每個answer進行拼接(中間有delimiter),得到
個序列
。每個序列都被Pre-training模型+Linear層獨立地處理得到相應的分數,最終通過softmax層進行歸一化,以產生可能答案的輸出分佈。
- 初代GPT資料集
無監督Pre-training,BooksCorpus 7000本未釋出的書,這些書裡包含長段的連續文字,這使得生成模型能夠學習以長距離資訊為條件的依賴關係。
有監督Fine-tuning
- 初代GPT實驗結果概覽
Neural Language Inference
Question Answering & Commonsense Reasoning
Semantic Similarity & Classification
GPT Fine-tuning 階段遷移層數的影響和 Pre-training 階段迭代次數對 zero-shot 效能的影響(GPT vs. LSTM)
圖五
從圖五(左)可以看出,Fine-tuning 階段使用更多層數的 Pre-training 模型可以顯著提升下游任務的效能;而圖五(右)說明(a)GPT在 zero-shot 方面比 LSTM 效果好,並且方差低(方差低沒有資料展示,但作者在原文中提到了),(b)隨著 Pre-training 的訓練步數的增加,GPT 的 zero-shot 能力穩步提高。
- 初代GPT小結
在有監督學習的12個任務中,初代GPT在9個任務上的表現超過了SOTA的模型。在的 zero-shot 任務中,初代 GPT 的模型要比基於 LSTM 的模型穩定,且隨著訓練次數的增加,其 zero-shot 的效能也逐漸提升。這些都表明初代 GPT 已經具備(相對)非常強的泛化能力,能夠用到和有監督任務無關的其它 NLP 任務中。初代 GPT 證明了 transformer 對學習詞向量的強大能力,在初代 GPT 得到的詞向量基礎上進行下游任務的學習,能夠讓下游任務取得更好的泛化能力。對於下游任務的訓練,初代 GPT 往往只需要簡單的微調便能取得非常好的效果。
2.2.2 BERT
本小節會講BERT的模型結構、輸入構造、訓練方法、資料集和實驗結果。
- BERT模型結構
圖六 BERT採用了 Transformer 的 Encoder 部分
BERT(Bidirectional Encoder Representations from Transformers ) 的模型結構採用了原始 Transformer 的 Encoder(如圖六所示)。由於沒有 MMHA,因此在建模時允許每個 token 訪問其前後兩個方向的 context,因此 BERT 是雙向的語言模型。
至於為什麼需要選擇支援雙向的Encoder,在這裡引用作者原文的話_:"The major limitation is that standard language models are unidirectional, and this limits the choice of architectures that can be used during pre-training. For example, in OpenAI GPT, the authors use a left-to-right architecture, where every token can only attend to previous tokens in the self-attention layers of the Transformer. Such restrictions are sub-optimal for sentence-level tasks and could be very harmful when applying finetuning-based approaches to token-level tasks such as question answering, where it is crucial to incorporate context from both directions."_
大概的意思是:標準語言模型是單向的,這限制了在預訓練期間可以使用的結構選擇。例如,在 OpenAI GPT 中,作者使用從左到右的架構,其中在 Self-attention 中每個 token 只能訪問先前的 token。這種限制對於句子級任務來說是次優的,並且在將基於微調的方法應用於 token-level 任務(如問題回答)時可能非常有害,因為在這些任務中,從兩個方向結合上下文是至關重要的。
- BERT輸入構造
圖七 BERT的輸入層
為了使 BERT 能夠處理不同的下游任務,對於每一個輸入的 Sequence(在BERT的原文中,作者用" Sentence "表示任意跨度的連續文字,而不是語言意義上的句子;用" Sequence "表示輸入 BERT 的 tokens 序列,可以是一個句子也可以是被打包在一起的兩個句子),在其最前面拼接一個特殊的分類 token,
對應位置的最後一層的 Hidden state 將被用作分類任務的序列聚合表徵。
對於被打包成一個 Sequence 的 Sentence pair, 通過兩種機制來區分不同句子(a)用特殊token將兩個句子分隔,(b)為每個 token 新增一個可學習的 Embedding(Segment Embedding),來指示其屬於前句還是後句。如圖七所示,對於每一個 token,其 Input representation 通過將其對應的 Token embedding、Position embedding 和 Segment embedding 求和得到。值得注意的是,特殊token
和
是在預訓練的時候就引入了,並且參與預訓練中的引數更新,而初代 GPT 的特殊 token 只有在 Fine-tuning 階段才引入。
- BERT訓練方法——無監督Pre-training+有監督Fine-tuning
圖八 Pre-traning和Fine-tuning過程
如圖八所示。與初代 GPT 相同,BERT 也分為無監督 Pre-training 和有監督 Fine-tuning 兩個階段。
- 【無監督 Pre-training 】
與 GPT 和其它預訓練語言模型從左到右或是從右到左的標準預訓練方式不同,BERT 提出了兩個新的預訓練任務:
- 【有監督Fine-tuning】:
在Fine-tuning 階段,將所有任務的輸入構造成句子對(A,B)的形式。例如(a)Paraphrasing 中的句子對,(b)Entailment 中的 hypothesis-premise 對,(c)QA中的 question-passage 對和(d)文字分類和序列標註任務中的 text -對。對於輸出,在 token- level 的任務裡,將所有 token 的對應位置最後一層的 hidden states 輸入相應的輸出層(例如序列標註和QA);在 sentence-level 的任務裡,將
對應位置最後一層的 hidden state 輸入到分類層進行分類(例如Entailment和Sentiment Analysis)。
- BERT資料集
無監督 Pre-training,來自 BooksCorpus 800M的words 和 English Wikipedia 2500M 的 words;有監督 Fine-tuning、GLUE Benchmark、 SQuAD v1.1和SQuAD v2.0共11個NLP 任務。
- BERT實驗結果
GLUE
可以看到與 OPENAI GPT 相比(二者模型結構上僅僅在Self-attention模組上是否有MASK機制存在差異),在每個任務上都有提升,平均提升 4.5%。
Ablation Study——Pre-training Task:
如上表所示。作者首先針對 Pre-training task 進行消融實驗,以驗證 MASK LM 和 NSP 任務的有效性。其中 LTR(Left to Right)表示類似 GPT 的從左到右的語言建模任務。+BiLSTM 表示在輸出層前增加 BiLSTM 網路。從中可以看出 MASK LM 和 NSP 任務的有效性是顯著的。
Ablation Study——Model Size:
另外,作者針對模型引數量進行了消融實驗。從上表可以看出,模型越大,在下游任務中的表現越好(這其實初步展示了大模型的潛力)。
2.2.3 初代GPT和BERT的對比
2.3 GPT-2
本節會先介紹其原理(2.3.1),接著分享實現(2.3.2)、實驗結果(2.3.3),最後得出小結(2.3.4)。
GPT-2的核心思想是:可以直接用無監督的 Pre-training 模型直接去做有監督任務。GPT-2在模型結構方面和GPT-1完全一致,Pre-training的任務也沒有改變,那究竟是什麼給 GPT-2 帶來如此大的自信,可以讓它在無監督 Pre-training 後直接用來做有監督任務呢?接下來,我將按照作者原文的思路,進行剖析。
2.3.1 GPT-2 原理
- Language Modeling 的實際行為
傳統Language Modeling(LM)也是GPT-2的中心思想(大道至簡)。LM通常被構造為對來自一組樣本進行無監督分佈估計,其中每個樣本由長度可變的token序列
組成。由於language有自然的順序性,因此通常將聯合概率建模為:
這種建模方式的缺點是:
(a)引數空間過大,但 Transformer 結構給大模型帶來了光明;
(b)資料稀疏,但算力的提升以及資本的力量允許我們在超大規模語料上訓練。
LM 其實也是在給序列的條件概率建模(有了 LM 的能力自然就有了對序列和序列間條件概率的建模能力)。
- NLP中對所有任務建模方式的通用表達
NLP 中對所有單個任務的建模都可以表達為,那麼一個通用的模型(指能夠進行多種不同任務的模型),及時對於不同任務的輸入相同,它也應該不僅 condition on input 還應該 condition on task 才能執行。而傳統的多工模型,需要對模型結構進行特殊的設計,比如針對不同任務新增任務特定編碼器和解碼器。但幸運的是,語言提供了一種靈活的方式來指定任務、輸入和輸出。
例如,一個翻譯任務的樣本可以被表達成 (translation to french, english text, french text) 的形式;一個閱讀理解的樣本可以被表達為 (answer the question , english text, french text)。由此可見,以這種資料格式可以有監督地訓練 single model,其不需要特定任務的編碼器或者解碼器,就能執行多工,
- LM在達到一定條件時實際上可以看作有監督多工學習
相比於有監督的多工學習,LM 只是不需要顯示地對哪些符號是輸出進行監督。例如對於任意序列,通過 LM 都能推理新的序列
,而
中所指定的任務的輸出可能就出現在
中,但是 LM 的輸出沒有顯示地對其進行監督。從這個意義上理解,多工的有監督學習都是 LM 對序列建模的子集。例如,在 LM Pre-training 時,文字中有一句話,“The translation of word Machine Learning in chinese is 機器學習”,在訓練完這句話後,LM就自然地將翻譯任務的輸入輸出學到了。類似的例子如下表所示:
- GPT-2 討論
所以GPT-2是如何實現只進行無監督 Pre-training 就直接達到有監督多工的效果呢?首先,子標題(1)中傳統LM的兩個缺陷(a)引數空間過大和(b)資料稀疏隨著模型結構、算力提升以及資本的力量可以得到解決。換言之,LM的能力提升來自於大模型和在超大規模語料上預訓練。
其次子標題(2)中的分析說明,LM 可以以其靈活的方式建模單模型多工學習。
最後子標題(3)說明,有監督多工學習是 LM 的子集。實際上有監督任務的監督訊號是會出現在無監督任務的語料中的,只要語料足夠大,那麼就能 cover 到多個任務。綜上可以得出結論,只要模型引數量足夠大,預訓練語料足夠豐富,那麼無監督 Pre-training 得到的 LM 就能直接拿來執行多工。
2.3.2 GPT-2 實現
- GPT-2 模型結構
GPT-2的模型結構相比GPT-1沒有差別,僅僅是增加了引數規模。作者在實驗中採用了四種規模引數的模型:
上表中第一個模型的引數規模與初代GPT相同,第二個模型的引數規模與BERT(Large)相同。而最後一行的模型是釋出的GPT-2。
- GPT-2 訓練語料
作者從網站上爬取了高質量的文字資料,形成的資料集被稱為WebText。其中去掉了所有包含在Wikipedia中的文件。最終的資料集包含超過800萬個文件,總共40 GB的文字。
2.3.3 GPT-2 實驗結果
- LM結果
在8個語言模型任務中,僅僅通過zero-shot學習,GPT-2就有7個超過了state-of-the-art的方法;
- NER
在Children's Book Test資料集上的命名實體識別任務中,GPT-2超過了SOTA的方法約7%。引數規模越大效果越好。LAMBADA資料集是測試模型捕捉長期依賴的能力的資料集,GPT-2將困惑度從99.8降到了8.6。在閱讀理解資料中,GPT-2超過了4個baseline模型中的三個。在法譯英任務中,GPT-2在zero-shot學習的基礎上,超過了大多數的無監督方法,但是比有監督的state-of-the-art模型要差。GPT-2在文字摘要上的表現不理想,但是它的效果也和有監督的模型非常接近。
2.3.4 GPT-2 小結
GPT-2 驗證了通過擴大引數規模和Pre-training語料的規模就可以遷移到多個任務且不需要額外的Fine-tuning。儘管其在有些任務上表現得不夠好,但其已經初步展現了大模型大語料Zero-shot的潛力,未後續大模型的發展提供了有依據的方向。
2.4 GPT-3
本節會先介紹其原理(2.4.1),接著分享實現(2.4.2)、實驗結果(2.4.3),最後得出小結(2.4.4)。
GPT-3的核心賣點是:僅僅需要zero-shot或者few-shot就能在下游不同任務上表現得很好,並且在很多非常困難的任務上也有驚豔的表現。
2.4.1 GPT-3 原理
到GPT-3之前,LM 已經取得了巨大的成功,例如初代 GPT、BERT 的 Pre-training + Fine-tuning, 以及 GPT-2 所展現的 Zero-shot 能力。但是,當模型結構是 task-agnostic 的時候,前述 LMs 仍然需要特定任務的資料集和特定任務的 Fine-tuning(即便強大如GPT-2在某些任務上也需要Fine-tuning )。這是在 GPT-3 之前 LMs 最大的缺點(儘管已經很強了,但是目標要大一點)。解決這一缺陷的必要性如下:
從實用角度來看,對於每一項新任務都需要一個有標註的大資料集,這限制了語言模型的適用性(儘管在我們看來,標註資料是不可避免的,但GPT-3團隊的目標很大)。更糟糕的是,對於很多應用前景很廣泛的任務,例如語法糾錯、生成抽象概念的示例、評論story,很難收集一個大型的監督訓練資料集,特別是當每個任務都要重複這樣的步驟。
在有標註資料上 Fine-tuning 得到的大模型其在 Out-of-distribution(OOD)資料上泛化性不一定更好, 因為模型過度偏向fine-tuning資料分佈(回想下初代 GPT 為什麼要在 Fine-tuning 階段加入 Pre-training LM的損失)。因此,Fine-tuning 模型在特定 Benchmark上的效能,即使名義上是人類水平,也可能是被誇大了實際效能。
對於人類這個智慧體而言,其不需要大量的有監督的資料集去學習絕大多數 NLP 任務。簡短的幾個示例足以使人類以合理的能力執行新任務。如果 LM 能到達類似的能力,那麼將會極大地增加其通用性。
作者認為,解決該缺陷的主要思路是:
借用 meta-learning(元學習)的思想。這在 LM 背景下的含義是:在 Pre-training 期間讓模型學習廣泛的技能和模式識別能力,而在推理期間利用這些技能和能力迅速適配到期望的任務上。如下圖所示:
以 MAML 演算法為例,meta-learning 的目的是找到模型的引數
的最優初始化值 meta-initialization , 使模型能從 meta-initialization 開始迅速應用到其它任務中。其優化過程分為內迴圈(inner loop)和外迴圈(outer loop),其中內迴圈(inner loop)是針對子任務進行學習,而外迴圈(outer loop)是對 meta-initialization 進行更新。換言之,如果找到一組引數 meta-initialization , 從它開始來學習多個任務,如果每個任務都能學好,那麼它就是一組不錯的初始化引數,否則就對其進行更新。而LM與 meta-learning 相似,其內迴圈就是對大語料中包含的多個子任務(回顧GPT-2)中的每一個進行學習(即語言建模),作者將其稱為 In-context learning , 而外迴圈則是對整個語料的建模,即語料中包含多個子任務,模型在整個大語料上一直以語言建模的目標進行優化其實就是在找 meta-initialization 。而GPT-2其實也在嘗試 In-context learning,其使用 Pre-training LM 的輸入作為任務規範的一種形式,模型以自然語言指令或任務演示示例為條件,然後通過預測一下步將發生什麼來完成任務的更多示例。並且 GPT-2 已經展示了 In-context learning 的一些能力,證明了這是一個有希望的方向。GPT-2 在一些任務上的能力還遠不及 Fine-tuning 。
另一個方向是擴大模型引數量的規模,從初代 GPT 到 BERT,再到 GPT-2 ,這一趨勢證明隨著模型引數量的擴大,模型的能力也隨之提高。由於 In-context learning 涉及從大規模語料中將許多技能和任務吸收到模型引數中,因此 In-context learning 的能力可能會隨著規模的擴大而表現出類似的強勁增長。筆者認為:
(a)小規模語料是有偏的,且其中包含的任務和每個任務的樣本量少,不足以學到足夠的“技能”和“任務”,即在預訓練中無法得到足夠多的知識泛化到實際場景中的任務;
(b)因此需要擴大語料的規模,而擴大語料中的規模需要有足夠多的引數來記住語言建模中學到的“技能”和“任務”,如果引數量不夠,那麼隨著 Pre-training 的進行,模型又要嘗試記住所有“技能”和“任務”,但又無法完全記住,因此可能會對找到 meta-initialization 帶來困難;
(c)另外,可以回到第 2.3.1 GPT-2 原理那節從解決 LM 缺陷的角度思考。
上述第一點從 Meta-learning 的角度揭示了 LM 的背後的機理,以及背後 In-context learning 的概念,並以GPT-2所展現的能力來證明 In-context learning 的有效性;第二點說明近些年來提升引數規模所帶來的提升是大勢所趨。因此,GPT-3所帶來的改進有兩點:繼續擴大引數規模;繼續擴大語料的規模;想到那句話:重劍無鋒,大巧不工。
2.4.2 GPT-3 實現
-
GPT-3 Pre-training 語料
GPT-3共訓練了5個不同的語料,分別是低質量的 Common Crawl,高質量的WebText2,Books1,Books2 和 Wikipedia,GPT-3 根據資料集的不同的質量賦予了不同的權值,權值越高的在訓練的時候越容易抽樣到。整個語料的規模為 45TB,資料集統計如下表所示:
- GPT-3 模型結構和引數量
GPT-3 的模型結構和初代 GPT 和 GPT-2 相同,但引數量直接提升至 175 Billion(初代目:1.17億;二代目15.42億;三代目:1750億)。
- GPT-3 訓練方式
LM Pre-training
- GPT-3 模型推理(Zero-shot,One-shot,Few-shot)
如上圖所示,與傳統的 Pre-training + Fine-tuning 不同(圖右),GPT-3(圖左)Pre-training 之後直接進行推理,且支援三種推理方式,即 Zero-shot,One-shot 和Few-shot。三種推理方式具體如下:Zero-shot只輸入任務描述和提示詞(Prompt);One-shot輸入任務描述,1 個示例和 Prompt;Few-shot 輸入任務描述,K個示例和 Prompt。
2.4.3 GPT-3 實驗結果
- 引數規模和有無prompt的消融實驗
作者在一個簡單的任務上(去掉單詞中被隨機新增的符號,例 s.u!c/c!e.s s i/o/n = succession)對比了不同引數規模的模型和在推理時是否有Prompt的結果。可以得出的結論有三個:
(a)擴大引數規模有助於提升模型利用 In-context Information 的能力;
(b)Prompt有助於提升模型學習任務的能力;
(c)Few-shot > One-shot > Zero-shot。
- Cloze and completion tasks
- Open domain QA
- Translation
在 GPT-3 的年代,其表現也可以用驚豔來形容。它在大多數 LM 資料集中,超過了絕大多數的 Zero-shot 或者 Few-shot 的 SOTA 方法。此外,在許多複雜的 NLP 任務中也超過了 Fine-tuning 後的 SOTA 方法,例如閉卷問答、模式解析、機器翻譯等。最後,它在一些其他的任務上也取得非常震驚的效果,如進行數學加法、文章生成、編寫程式碼等。
然而 GPT-3 也存在一系列的問題,比如對於一些命題沒有意義的問題,GPT-3 不會判斷命題有效與否,而是推理一個沒有意義的答案出來。由於 45TB 海量資料中沒有針對種族歧視、性別歧視、宗教偏見等內容進行排除,因此 GPT-3 生成的文章會包含這類敏感內容。
2.4.4 從初代GPT到GPT-3對比一覽
2.5 InstructGPT
在本節2.5.1我們會把 Instruct Learning 、Prompt Learning 進行對比,接著講 RLHF (2.5.2)、PPO 演算法(2.5.3),在2.5.4分享 InstructGPT 的實現,最後進行小結,講其優缺點。
2.5.1 Instruct Learning vs. Prompt Learning、RLHF
InstructGPT 是為解決 LM 有時不能遵循使用者意圖而誕生的。“不能遵循使用者意圖”表示LM 可能會生成不真實、有毒或對使用者毫無幫助的輸出。主要原因是 LM 的訓練目標是預測下一個 token 而不是有幫助地和安全地遵循使用者的指令。換句話說,這些模型與其使用者沒有對齊。這是由於模型的偏見性和資料中存在的一些有毒內容導致模型會輸出無用的、有毒的輸出(LM並沒有對輸出是否無用、是否有毒的監督)。因此,InstructGPT 要做的就是是模型的輸出符合人類的意圖。這種改進是十分有必要的,尤其是當 LM 被部署在多個應用場景中時。具體而言,InstructGPT 的優化目標有三個(3H):
-
Helpful,模型應該幫助使用者解決他們的任務;
-
Honest,模型不應該編造資訊來誤導使用者;
-
Harmless,模型不應對人或環境造成身體、心理或社會傷害。
為了解決上述問題,Fine-tuning 步驟又回到了 InstructGPT,但與傳統的 Fine-tuning 不同。在具體介紹 InstructGPT 之前,本章將先介紹幾個 Preliminary knowledge,分別是 Instruct Learning 和 Prompt Learning,Deep Reinforcement Learning from Human Preferences (RLHF) 和 PPO 演算法。
Instruct Learning 是由 Google 提出。(接下來引自外部解讀)Instruct Learning 和 Prompt Learning 的目的都是去深入挖掘已經具備的知識(回顧GPT-2和GPT-3在大規模語料中學到的“技能”和“任務”),並激發出更強的能力。不同的是,Prompt 是激發LM 的補全能力,例如根據上半句生成下半句,或者是 Cloze;而 Instruct Learning 是激發語言模型的理解力,通過給出明顯的指令,讓模型去做出正確的行動。通過如下例子來理解兩種學習方式:
-
第一,Prompt Learning:給女朋友買了這個項鍊,她很喜歡,這個項鍊太__了。
-
第二,Instruct Learning:判斷這句話的情感:給女朋友買了這個項鍊,她很喜歡。選項:A=好;B=一般;C=差。
Instruct Learning 原文對傳統Fine-tuning、Prompt Learning和Instruction tuning的對比:
-
傳統Fine-tuning:需要大量任務特定的樣本;每個任務都需要 Fine-tuning 一個特別的模型;
-
Prompt:通過少數示例或 prompt 工程提升效能;
-
Instruction tuning:通過自然語言指令學習執行多個任務。
Instruct-tuning 的一些模版,如下圖:
Instruct-tuning 的 Zero-shot 效果如下圖所示:
從實驗效果來看,1370億引數的 FLAN(Pre-training + instruction tuning)比 1750億引數的 GPT-3 在各個任務上效果要好,甚至在某些任務上(Translation)比全監督的演算法要好,體現了 Instruction tuning 在激發/啟用 LM 潛力方面和泛化能力的優越表現。
個人認為,Instruction learning 能夠進一步將任務編碼到模型引數中,在 inference 的時候,模型能夠根據Instruction 中的任務描述,輸出與任務相關的結果。其實 LM 本身是生成式模型, Prompt Learning 其實是通過使模型在生成答案的時候 condition on Prompt 來區分任務,本質上還是強化了模型的補全能力,而 Instruction learning使模型condition on 對任務更豐富的描述,從而加強對任務的理解。
2.5.2 RLHF
如介紹 GPT-3 時提到的,45TB 的語料中不能保證沒出現敏感的句子,如種族歧視、辱罵等。而 LM 實際上是對訓練資料集分佈的擬合。這實際上直接影響了 LM 在內容生成上的質量。此外,我們不希望模型只受到資料的影響,我們希望輸出結果是可控的,要保證生成的內容是有用的,真實的,和無害的。所以,我們應該有一個機制,來鼓勵模型輸出和人類偏好一致的結果,比如避免輸出帶有種族歧視、辱罵的語句;再比如生成的內容要有具有流暢性和語法正確性;生產的內容還需要是有用的、真實的。
因此, RLHF 就是通過用人類的偏好(人工標註輸出的質量分數)訓練一個獎勵模型(Reward model), 來指導 LM 的訓練。RLHF 的流程如下圖所示。
上圖中的一些概念:
Initial Language Model:Pre-trianing 或者 Instruct tuning 後的模型;
Tuned Language Model:Initial Lanugage Model 的副本,將在 RLHF 中更新引數,也是RL中的Policy;
Policy:是給Tuned LM(例如GPT-3)輸入文字後輸出結果的過程;
Action Space:全詞表,大約 50K;
Observation Space:輸入的文字序列空間;
Reward Function:一個打分模型 Reward Model,和一個 KL 的梯度懲罰項 ,目的是為了使Policy的輸出文字不要和 Initial LM 差太多,防止模型為了迎合 Reward 模型輸出不連貫的文字或著胡言亂語。
RLHF 首先人工收集LM的輸出答案,並對輸入輸出對進行打分標註來訓練 Reward Model ; 然後,在RLHF期間,將 Prompts Dataset 中的每一個樣本分別輸入到 Initial LM 和 Policy 中,得到兩個輸出,將
輸入到 Reward Model 中得到評分
,然後加上梯度懲罰項避免 Policy 的輸出與Initial LM 的差距太大。因此,得到 Reward Function的輸出結果
。然後根據
利用 Update rule,即 PPO 演算法更新 Policy 的引數
,在 InstructGPT 中,update rule 還包括原始 LM 的目標。
2.5.3 PPO演算法
RL實際上就是 Agent 在一個狀態 s 下選擇下一個動作a, 獲得獎懲r,而我們的優化目標是希望選擇動作的 Policy 使得總體收益期望最大。對於一組模型引數 θ 可以得到一組軌跡序列的概率分佈 (想象一下GPT答案的生產過程)。對於一條軌跡 r,可以得到 Reward 的期望為
,其中
是權重因子,例如遠期獎勵不重要,
是相應時間步的 Reward 。PPO 的目標是最大化 Reward 的期望,因此可得目標函式為:
最大化上述目標則採用梯度上升:
求解上述梯度 :
在 InstructGPT 中,上式中的 對應輸入序列 x 後輸出序列 y 的概率。
2.5.4 InstructGPT的實現
在瞭解了 Instruct learning、RLHF 和 PPO 後,我們就不難理解 InstructGPT 的實現過程(下圖)。
如上圖所示,InstructGPT 的訓練分成3步,每一步的資料也有差異,下面我們分別介紹它們。
SFT資料集是用來訓練第1步有監督的模型。在這一步中將使用採集的新資料,按照GPT-3 的訓練方式對 GPT-3 進行微調。因為 GPT-3 是一個基於提示學習的生成模型,因此 SFT 資料集也是由提示-答覆對組成的樣本。SFT資料一部分來自使用 OpenAI 的的使用者,另一部分來自 OpenAI 僱傭的40名標註人員。所有的標註人員都經過了仔細的培訓。標註人員在構造這個資料集中的工作是根據內容自己編寫指令。
RM資料集用來訓練第2步的獎勵模型,我們也需要為 InstructGPT 訓練設定一個獎勵目標。這個獎勵目標不必可導,但是一定要儘可能全面且真實的對齊我們需要模型生成的內容。很自然的,我們可以通過人工標註的方式來提供這個獎勵,通過人工給那些涉及偏見的生成內容更低的分從而鼓勵模型不去生成這些人類不喜歡的內容。InstructGPT先讓模型生成一批候選文字,讓後通過標註人員根據生成資料的質量對這些生成內容進行排序。
訓練步驟如下:
-
步驟一,首先利用標註人員標註的SFT資料集對 Initial LM 進行有監督的 Fine-tuning,並且作者提到讓模型適當過擬合有助於後面兩步的訓練;
-
步驟二,訓練獎勵模型。對於每一個 Prompt,用SFT後的模型生成多個輸出(一個Prompt為什麼會得到多個輸出,可能是用了Beam Search),如圖中的A,B,C,D四個答案,然後標註人員將四個答案進行排序。再利用兩兩之間的排序關係訓練 Reward Model 進行分數迴歸。訓練 Reward Model 的目標函式:
,其中
是標註人員更偏好的輸出;
-
步驟三,利用Reward Model用PPO演算法來優化Policy(SFT後的模型);
-
步驟四,持續重複步驟二和步驟三;RLFH 的優化過程中由於訓練步子不能放得太大,即在 update rule 里加入了 KL 懲罰,因此僅僅一輪步驟二+步驟三可能無法達到我們的預期,因為 SFT 後的模型輸出可能符合預期的輸出也不多,而通過多輪 RLHF 優化可以逐步提升輸出質量。
2.5.5 小結
- 優點
與 GPT-3 的輸出相比,標註人員明顯更喜歡 InstructGPT 輸出。13億引數的InstructGPT 的輸出明顯優於1750億引數的GPT-3。1750億引數的InstructGPT 的輸出在 85±3% 的時間內優於 1750億引數的GPT-3 輸出,在 71±4% 的時間內優於 few-shot 1750億引數的GPT-3。InstructGPT 模型能更可靠地遵循指令中的明確約束。
InstructGPT 模型在真實性方面比 GPT-3 有所改進。在 TruthfulQA 基準測試中,InstructGPT 生成真實且資訊豐富的答案的頻率大約是 GPT-3 的兩倍。
InstructGPT 與 GPT-3 相比毒性略有改善。InstructGPT 模型顯示了 RLHF 微調對分佈之外的指令的有前景的泛化。作者定性地探究了 InstructGPT 的功能,發現它能夠遵循指令來總結程式碼,回答有關程式碼的問題,有時還會遵循不同語言的指令,儘管這些指令在微調分佈中非常罕見。相比之下,GPT-3 可以執行這些任務,但需要更仔細的prompt,並且通常不會遵循這些領域的說明。這個結果表明,InstructGPT 能夠泛化到“遵循指令”的概念。即使在獲得很少直接監督訊號的任務上,也會保持一定的對齊。
- 缺點
InstructGPT會降低模型在通用 NLP 任務上的效果,作者在PPO的訓練的時候討論了這點,雖然修改損失函式可以緩和,但這個問題並沒有得到徹底解決。
有時候InstructGPT 還會給出一些荒謬的輸出:雖然 InstructGPT 使用了人類反饋,但限於人力資源有限。影響模型效果最大的還是有監督的語言模型任務,人類只是起到了糾正作用。所以很有可能受限於糾正資料的有限,或是有監督任務的誤導(只考慮模型的輸出,沒考慮人類想要什麼),導致它生成內容的不真實。就像一個學生,雖然有老師對他指導,但也不能確定學生可以學會所有知識點。
儘管取得了重大進展,但 InstructGPT 模型遠未完全對齊或完全安全;它仍然會在沒有明確提示的情況下生成有毒或有偏見的輸出、編造事實以及生成色情和暴力內容。但機器學習系統的安全性不僅取決於底層模型的行為,還取決於這些模型的部署方式。為了支援 API 的安全,OpenAI 提供內容過濾器以檢測不安全的回答,並監控濫用情況。
2.6 ChatGPT
在2.6.1,我們會先介紹ChatGPT的實現,然後在2.6.2節補充分享GPT系列的其它成員。之後在章節2.6.3 ,我們對前面的所有分享進行初步回顧——從初代 GPT 到 ChatGPT 的進化。最後,在章節2.6.4聊聊開發者們感興趣的ChatGPT 缺陷。
2.6.1 ChatGPT的實現
終於可以聊ChatGPT 了。ChatGPT 基本遵循了與 InstructGPT 相同的訓練方式,有差異的地方只有兩點:
-
(a)ChatGPT 以 GPT3.5 作為 Initial LM;
-
(b)資料收集方式略有不同。目前 ChatGPT 論文還沒有公開,OpenAI 只發布了一個簡短的 Blog。
在此,我將 Blog 中的原文翻譯後引用在此:
“我們使用來自人類反饋的強化學習(RLHF)來訓練這個模型,使用與InstructionGPT 相同的方法,但資料收集設定略有不同。我們使用有監督的微調訓練了一個初始模型:人工智慧訓練師提供對話,他們扮演使用者和人工智慧助手的雙方角色。我們讓訓練師獲得模型書面建議,以幫助他們撰寫回復。我們將這個新的對話資料集與 InstructGPT 資料集混合,並將其轉換為對話格式。
為了建立強化學習的獎勵模型,我們需要收集比較資料,其中包括兩個或多個按質量排序的模型響應。為了收集這些資料,我們進行了 AI 訓練師與聊天機器人的對話。我們隨機選擇了一個模型撰寫的訊息,抽樣了幾個備選的答案,並讓 AI 培訓師對其進行排名。使用這些獎勵模型,我們可以使用近端策略優化對模型進行微調。我們對這個過程進行了多次迭代。ChatGPT從 GPT-3.5 系列中的一個模型進行了微調,該系列於 2022 年初完成了訓練。ChatGPT 和 GPT 3.5 在 Azure AI 超級計算基礎設施上進行了訓練。”
2.6.2 補充GPT系列的其它成員
網上某 Blog 中總結了從 GPT-3 衍生的 GPT 家族的其它成員,文中還全面客觀地總結和剖析了 ChatGPT 的各項能力來源。如下圖所示,作為 ChatGPT Initial LM 的 GPT-3.5是在原始 GPT-3 的基礎上,增加 code 語料和經過 instruct tuning 後得到的。
該 Blog 中還整理了 GPT-3 到 ChatGPT 以及這之間的迭代版本的能力和訓練方法,如下圖:
2.6.3 從初代 GPT 到 ChatGPT 的進化概覽
2.6.4 ChatGPT 的缺陷
來自 ChatGPT 官方給出的缺陷:
-
第一,ChatGPT 有時會寫出看似合理但不正確或荒謬的答案。解決這一問題具有挑戰性,因為:在 RL 培訓期間,目前沒有任何真相來源;訓練模型更加謹慎會導致它拒絕正確回答的問題;監督訓練誤導了模型,因為理想的答案取決於模型知道什麼,而不是人類演示者知道什麼。
-
第二,ChatGPT 對輸入短語的調整或多次嘗試同一提示很敏感。例如,給定一個問題的一個短語,模型可以聲稱不知道答案,但稍微重新措辭,可以正確回答。
-
第三,該模型通常過於冗長,過度使用某些短語,例如重申它是 OpenAI 訓練的語言模型。這些問題源於培訓資料中的偏差(培訓師更喜歡看起來更全面的較長答案)和眾所周知的優化問題。
-
第四,理想情況下,當用戶提供不明確的查詢時,模型會提出明確的問題。相反,我們當前的模型通常猜測使用者的意圖。
-
第五,雖然我們努力讓模型拒絕不適當的請求,但它有時會響應有害的指令或表現出有偏見的行為。我們正在使用 ModerationAPI 來警告或阻止某些型別的不安全內容,但我們預計目前它會有一些誤報和誤報。我們渴望收集使用者反饋,以幫助我們正在進行的改進系統的工作。
網友給出的缺陷例子基本被包含在官方給出的5個方面的缺陷中。上面1所說的缺點就是網友們吐槽的“一本正經說瞎話”。比如使用者給 ChatGPT 一個 Prompt:“宮廷玉液酒”,ChatGPT 會給出如下回答:“宮廷玉液酒是一種傳統的中國白酒。它通常是由大米、小麥...”。然而我國根本沒有宮廷玉液酒這種酒。再比如問 ChatGPT:“秦始皇摸電線會怎麼樣”,ChatGPT 給出的回答裡竟然包含這樣一句話:“電線是由英國科學家艾倫圖靈在1870年代發明的”。這明顯說明 ChatGPT 不是一個完全可靠的知識庫。
第二點提到訓練模型更加謹慎會導致它拒絕正確回答的問題,身邊同事確實遇到過這類案例。比如讓 ChatGPT 推薦書籍,有時會拒絕回答但有時會回答。這可能也和第2條缺陷相關。
第三點的含義可能是 RLHF 和 Instruct Learning 限制了模型可能的輸出範圍,而使模型小心地輸出與人類儘可能對齊的答案。而與人類對齊的能力來自於人類製作的資料集和人類標註訓練的 Reward Model,其實這種方式本身就是有偏的。並且模型可能會因此不敢回答從海量語料中學到的知識。缺陷3現象很普遍,作者的解釋也很明確;缺陷4的原因應該是 ChatGPT 沒有認知能力,這一點將在3.1.4中討論。
缺陷五,個人認為雖然 GPT 系列通過大模型、大語料上的 LM 在不斷提高下游任務的泛化性,但目前仍然無法保證 RLHF 中 Reward 模型的泛化性。
03
熱門關注點
這一節中,我們依次提出 5 個開發者感興趣的問題,並嘗試進行解答。模型到底是否需要標籤監督?ChatGPT 對多模有何啟發?ChatGPT 對於同一個問題為什麼能夠生成不同的答案?ChatGPT 是如何拒絕回答知識範圍外的問題?如何獲得更強的泛化?如果你對哪個問題感興趣,可直接跳轉到對應小節進行閱讀。
3.1 模型到底是否需要標籤監督?
從初代 GPT 的 Pre-training + Fine-tuning,到GPT-2初步展現的 Zero-shot 能力,再到 GPT-3 的 In-context learning(實際上GPT-2也有In-context learning, 而GPT-3採用了更大的模型和更大的語料,並強調了這一概念)所帶來的更強大的 Zero-shot 和Few-shot 能力,這些趨勢似乎在告訴我們標籤訓練不是必須的。但需要注意的是,GPT-3 在訓練的時候並不是完全沒有任務相關的監督訊號,只不過監督訊號自然地存在於大規模語料中,並且以傳統LM的建模方式學到了隱藏在大規模語料中的多種不同任務的和
之間的依賴。
此外,在 InstructGPT 和 ChatGPT 中為了使模型與人類對齊,OpenAI 仍然通過人工標註偏好來訓練 Reward model,再結合 RL 對模型進行訓練。原因是大規模語料中沒有與人類對齊的監督訊號。總而言之,或許在某些任務上,我們不需要“人工標註”,但並不是說模型不需要任務相關的“監督訊號”,而如果我們對模型有更加 High-level 的要求,比如與人類對齊,如果資料中沒有此類訊號,那麼“人工標註”是必須的。再回想下 GPT-3.5 為什麼要在語料中加入 Code 語料,這是因為訓練 GPT-3 的 45TB 中沒有足夠的與程式碼相關的資料。回顧 GPT 的發展史我們可以看到,在 LM 建模能力和算力對模型規模擴大的支援下,人們逐漸從對資料集的標註轉向了對資料集分佈的設計上。
3.2 對多模態的啟發?
GPT 的逐漸進化不斷解放了對不同任務的資料標註、模型結構的設計,這兩點實際上是讓模型逐漸變得通用。但通用的模型不僅僅應該是 task-agnostic,還應該是 modal-agnostic。那如何構建一個可以允許多模態資料輸入的通用模型呢?個人認為,這裡需要重點關注的問題有兩個:
(a)通用的模型結構設計,在這裡 Transformer 仍然是可以滿足的,比如處理影象資料的 ViT 仍然是基於 Transformer 結構的。
(b)多模態資料集的構建,即如何構建一個數據集,能夠在 LM 正規化下學到影象與文字或者是其它模態之間的依賴關係。比如圖片文字對,Web 上的圖文,還可以加入一些其它更有意義的資料比如視覺問答。
3.3 ChatGPT對於同一個問題為什麼能夠生成不同的答案?
諮詢了下資深 NLPer,應該是 Beam Search。
3.4 ChatGPT是如何拒絕回答知識範圍外的問題?
目前看來,這個問題在 ChatGPT 中解決得並不是很完美。這涉及了官方釋出的缺陷中的第 1.(1),1.(2)和 4。大多數人被 ChatGPT 已有的能力所吸引,但對於一個可靠的 AI 來說,拒絕回答知識範圍外的問題在實際應用中是十分必要的。舉個例子, 2016年5月,第一例由輔助駕駛系統造成的死亡,原因是感知系統混淆了前方白色的車和明亮的天空,如下圖:
拒絕回答知識範圍外的問題,可以認為是模型如何表達自己的認知(Express uncertainty),或者是模型如何識別分佈外的樣本(Out-of-distribution detection,OOD detection)。例如,在上述例子中,如果自動駕駛系統能夠表達該場景下其對前方物體的判斷是不確定的,或者提醒駕駛者前方出現的場景是 Out-of-distribution 的,那麼在這種境況下就可以選擇暫時停下然後提醒駕駛者人為判斷手動駕駛。如果 ChatGPT 具備這種能力,那麼就不會出現一本正經說瞎話的情況,根據筆者目前對 ChatGPT 的體驗,ChatGPT 在這方面的能力可能有3種情況:
-
(a) 不具備表達自己認知的能力;
-
(b) 或者有可能只對語言生成有認知上的表達,但對生成內容的真實性沒有認知上的表達;
-
(c) 有可能有一定的 OOD detection 能力。接下來呈上筆者的探究歷程。
在體驗同事呼叫 ChatGPT 製作的群 Bot 的時候,我們開始關注這個問題。起初,一位同事對 ChatGPT 發問:
然後ChatGPT的回答是:
此時,筆者問ChatGPT:
ChatGPT回答說:
看到上述回答,筆者頓感被ChatGPT搪塞了,當時的猜測是,或許它用了Uncertainty learning,於是接著發問:
而ChatGPT給出了肯定的回答:
然後筆者打算再問一些技術細節,並且這次改為用英語提問:
ChatGPT給出的答案是:
上述回答以筆者對Uncertainty learning的瞭解覺得非常合乎邏輯,於是接著提問:
ChatGPT回答如下:
這個回答跟筆者預想的一樣,回答內容上的邏輯也合理。但過了幾天,筆者突然在Blog中看到ChatGPT有一本正經說瞎話的毛病,於是讓另一個同事用他的賬號去問ChatGPT幾乎相同的問題:
這幾次的回答與之前的回答完全相悖,並且再次問它,它又給出了之前的答案:
結合這幾次的提問,作者對其是否有表達不確定性的能力變得不確定了,但確定的是,它確實偶爾會一本正經說瞎話。這其實與從 InstructGPT 開始的與人類對齊的目標相悖了,因為 ChatGPT 不符合 Honest 的目標。但筆者沒有灰心,馬上去瀏覽了一遍所有大佬的 Blog,看他們是否對 ChatGPT 這一方面的能力有所解讀,最後只有一篇 Blog 提到了這一點,博主說:“模型知道它不知道什麼不是通過編寫規則來實現的, 而是通過 RLHF 解鎖的。這是一個非常令人驚訝的發現,因為 RLHF 的最初目標是讓模型生成符合人類期望的回答,這更多是讓模型生成安全的句子,而不是讓模型知道它不知道的內容”。但總覺得這樣的推測沒有什麼依據,於是筆者找了幾篇用RLHF訓練的大模型的 Paper,希望從中找到答案。最後,在 Anthropic 的一篇題為_Training a Helpful and Harmless Assistant with RL from HF_的 Paper 裡找到了可能的答案。先看下 Anthropic 公司的介紹:
“Anthropic 是一家人工智慧安全和研究公司,致力於構建可靠、可解釋和可控制的人工智慧系統。今天的大型通用系統可以帶來巨大的好處,但也可能是不可預測、不可靠和不透明的:我們的目標是在這些問題上取得進展。目前,我們主要專注於這些目標的研究;在未來的道路上,我們預見到我們的工作有很多機會為商業和公共利益創造價值。”
那Anthropic是怎麼解決這個問題的呢?答案是OOD detection:
具體來說,作者將收集的 helpfulness dataset 中的每一個樣本,也就是 in-distribution 中的樣本輸入到訓練好的模型中,取其中第層的輸出向量,用
表示。所有訓練集的樣本可以得到 in-distribution 的向量集合
。然後計算整個分佈
的均值
和協方差矩陣
。然後,對於一個新的樣本所得到的第
層的向量,得到其與 in-distribution 集合的距離為
。然後就可以設定閾值排除 OOD 的樣本了。
目前猜測:
-
(1)ChatGPT用了Uncertainty Learning的技術可能性低,因為 Uncertainty Learning 的技術基本上可以看作是 Bayesian Neural Network,其在推理時涉及模型引數上的取樣,這對大模型來說是不現實的,即便是 Mc Dropout ,也需要推理多次得到預測分佈。
-
(2)但如果 ChatGPT 用了 Uncertainty Learning 技術也可能出現一本正經說瞎話的情況,原因是模型預訓練期間的目標是語言建模,它即便能表達對語言建模的認知(即當前序列的下一個序列或token是什麼)也無法解決對該問題是否能做出真實的回答的認知。
-
(3)或許是在 Reward Model裡用了 Uncertainty Learning,而 ChatGPT 在Inference的時候可以利用 Reward Model 的認知來判斷是否是 RLHF 期間 In-distribution 的樣本。
-
(4)用了類似於 Anthropic 的 Paper 中的 OOD detection技術的可能性較大,因為ChatGPT收集了比之前更多的指令。
-
(5)不論是用 Uncertainty Learning 還是 OOD detection 實際上是 ChatGPT 本身的作用,其實還可以用 Reward Model 給 ChatGPT 的答案做過濾,即分數低於某個閾值則給出一些搪塞的回答。
-
(6)最後一種可能的情況如其他自媒體所說,RLHF 直接給予了模型這種能力。比如標註者標註偏好時,給模型對敏感問題回答時做出“拒絕回答的回覆”更高的偏好,而 RLHF 期間模型學到了這一點。
但也帶來兩個問題:
-
(a)模型更謹慎而沒法回答一些不敏感的問題,即 RLHF 可能有一些副作用不僅限制了模型對一些敏感問題的回答,還限制了對非敏感問題的回答(但回覆的時候加入一些“我不瞭解”,“我無法回答”來給使用者一種它對自身能力有認知的錯覺);
-
(b)某些情況還是會回答敏感的問題,這其實取決於 RLHF 訓練時資料的豐富度。
3.5 如何獲得更強的泛化——知識組合,系統性泛化
從 GPT-3 開始,模型似乎已經有了組合泛化的能力,通過指令來使模型理解任務然後自動組合預訓練期間學到的知識得到我們期望的回答。GPT-3 的這種能力來自於大規模引數支援下在大語料中進行 LM 訓練,並在 Instruct Learning 下啟用。這基本上是從資料規模和模型引數規模以及學習正規化角度來獲得能力。那麼是否有其它角度可以進一步提高模型的知識組合和系統性泛化的能力呢?這個答案可能是能直接支援計算單元重用的 Inductive Bias,比如CNN在處理影象時在橫向重用計算單元(卷積核),RNN 則在垂直方向重用計算單元(垂直方向)。
近兩年,Modular Inductive Bias 逐步得到大家關注,個人認為,Modular Inductive Bias 是傳統有符號 AI 和現在 Learning based AI 的一個結合,並且有希望將多模態、多工整合在一個更通用的模型中。
3.6 寫在最後
本文部分內容參考自 OpenAI 釋出的官方論文或是 Blog,還有一小部分整理自知乎和公眾號上相關領域的解讀。筆者結合過往在 ML 方面的經驗,加入了一些個人解讀,不代表騰訊官方態度。以上是本次分享全部內容,歡迎各位在評論區交流。
-End-
原創作者|張先禮
技術責編|張先禮
你可能感興趣的騰訊工程師作品
- ChatGPT深度解析:GPT家族進化史
- 微信全文搜尋耗時降94%?我們用了這種方案
- 十問ChatGPT:一個新的時代正拉開序幕
- 對標ChatGPT,新AI助手Claude來了
- 國民應用QQ如何實現高可用的訂閱推送系統
- 一夜爆火的現象級產品ChatGPT,是AI突破還是曇花乍現?
- 元宇宙,會成為下一代網際網路的主場嗎?
- 7天DAU超億級,《羊了個羊》技術架構升級實戰
- 國民級應用:微信是如何防止崩潰的?
- 由淺入深讀透vue原始碼:diff演算法
- 3小時!開發ChatGPT微信小程式
- 祖傳程式碼重構:從25萬行到5萬行的血淚史
- H5開屏從龜速到閃電,企微是如何做到的
- AI繪畫火了!一文看懂背後技術原理
- 快收藏!超強圖解Docker常見命令與實戰!
- Cloud Studio高階玩家:強大的YAML模板
- C 20協程學習
- 打造更安全的視訊加密,雲點播版權保護實踐
- 深入淺出帶你走進Redis!
- 【技思廣益 · 騰訊技術人原創集】雙週優秀作品回顧vol.03