九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
ChatGPT的前世今生——原理解析和拓展思考

文丨Ryan

騰訊互動娛樂 研究員

01

背景介紹

2022年11月30日,OpenAI發(fā)布了其最新的聊天機(jī)器人模型——ChatGPT。由此引發(fā)了廣泛的討論。作為一個目前最接近“六邊形”戰(zhàn)士的聊天機(jī)器人,它不僅能夠用來聊天、搜索、翻譯,還能寫故事、寫代碼甚至是debug(此處省略一系列能力介紹)。由于其能力過于驚艷,僅上線5天后就吸引了100萬用戶。與此同時,大家對其背后的技術(shù)充滿了好奇。本文將圍繞ChatGPT從兩個角度進(jìn)行探討,即原理解析和拓展思考。其中,原理解析將以介紹從Transformer到ChatGPT的逐步進(jìn)化的方式進(jìn)行;而拓展思考中,筆者將從分析ChatGPT的優(yōu)缺點出發(fā),來探索ChatGPT和AI未來的發(fā)展和改進(jìn)方向。

02

原理解析——從發(fā)展歷程了解ChatGPT

2.1 Transformer

2.1.1 Transfermer 背景

2017年,Google的一篇題為“Attention is all you need”的Paper橫空出世,自此完全使用Attention機(jī)制的Transformer模型開始主導(dǎo)NLP領(lǐng)域。不久后,利用Transformer模型結(jié)構(gòu)的預(yù)訓(xùn)練語言模型GPT和BERT大放異彩。時至今日,基于GPT和BERT的預(yù)訓(xùn)練語言模型進(jìn)行Fine-tuning仍然是NLP中廣泛任務(wù)的首選范式。除了NLP領(lǐng)域,Transformer結(jié)構(gòu)也被應(yīng)用到了計算機(jī)視覺領(lǐng)域,由此誕生了一系列吊打CNN的模型,如ViT、BEiT和MAE??梢哉f,Transformer結(jié)構(gòu)繼RNN、CNN(以及其一系列變體LSTM、GRU、ResNet、DenseNet等)之后,在Inductive Bias方向上打開了一個新世界的大門。

2.1.2 Transfermer主要特點

[ 圖一 Self-Attention 和 Multi-Head Attention ]

(1)通過Self-Attention(如圖1左所示),每個詞都和所有詞計算Attention,因此不論序列中詞與詞之間的距離有多長,他們之間的最大路徑長度都為1,因此可以捕獲更長的依賴關(guān)系。

(2)提出Multi-head Attention(MHA)(如圖1右所示), 通過多個Head學(xué)習(xí)不同的子空間語義,最后通過Concat和Linear操作降維至單Head的Size,這相當(dāng)于多個子空間語義表示的Ensemble。

[圖二 Transformer 整體結(jié)構(gòu)]

(3)整體結(jié)構(gòu)遵從Encoder-Decoder的形式,其中Decoder的每個Block比Encoder多了一個Masked Multi-Head Attention(MMHA)。MMHA結(jié)構(gòu)同MHA,只不過Mask矩陣中要屏蔽當(dāng)前位置之前的詞與當(dāng)前位置之后的詞的聯(lián)系,使得文本下文信息不提前泄露,例如生成式任務(wù)(如機(jī)器翻譯)是從前到后逐步生成的。

2.2 初代GPT vs. BERT

【見Transformer起意??】

2.2.1 初代GPT

(1)模型結(jié)構(gòu)

[ 圖三 Transformer Decoder和GPT Decoder對比 ]

GPT (GenerativePre-Training)( https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf)是OpenAI GPT系列的開山之作。在模型結(jié)構(gòu)方面,GPT僅使用了Transformer的Decoder結(jié)構(gòu),并對Transformer Decoder進(jìn)行了一些改動。如圖三所示,原本的Decoder包含了MHA和MMHA,而GPT只保留了MMHA,這確保了GPT只能關(guān)注上文的信息,從而達(dá)到單向模型的目的。

(2)訓(xùn)練方法——無監(jiān)督Pre-training + 有監(jiān)督 Fine-tuning

【無監(jiān)督Pre-training】

初代GPT的無監(jiān)督Pre-training是基于語言模型進(jìn)行的,給定一個無監(jiān)督語料, GPT利用標(biāo)準(zhǔn)的語言建模目標(biāo)最大化以下似然:

其中是上下文窗口的大小。

【有監(jiān)督Fine-tuning】

在利用目標(biāo)函數(shù)(1)進(jìn)行無監(jiān)督Pre-training得到模型后,將其直接應(yīng)用到有監(jiān)督任務(wù)中。假設(shè)有一個有標(biāo)注的數(shù)據(jù)集,其中每個樣本的inputs包含一系列的token,即,和一個label。 將inputs輸入Pre-training的模型得到最后一個transformer decoder block 的狀態(tài)表征, 然后將狀態(tài)表征輸入到在Fine-tuning階段新加入的線性輸出層預(yù)測:

因此,F(xiàn)ine-tuning階段最大化以下目標(biāo):

此外,初代GPT將語言建模作為微調(diào)的輔助目標(biāo)以幫助Fine-tuning階段(a)提升泛化性,(b)加速模型收斂。具體地,整個Fine-tuning階段的優(yōu)化目標(biāo)為:

相比Pre-training階段,F(xiàn)ine-tuning引入了額外的參數(shù)包含和delimiter tokens(分隔符) 的 embeddings。 而delimiter tokens是針對Fine-tuning階段不同的下游tasks進(jìn)行設(shè)計的,目的是為了使得Pre-training得到的模型能在Fine-tuning的時候適配不同的tasks。

(3)Task-specific input transformations(特定于任務(wù)的輸入轉(zhuǎn)換)

[ 圖四 特定于任務(wù)的輸入轉(zhuǎn)換 ]

對于某些任務(wù),如文本分類,GPT可以直接如上所述對模型進(jìn)行微調(diào)。某些其他任務(wù),如問答(Question Answering)或文本蘊(yùn)涵(Textual Entailment),具有結(jié)構(gòu)化輸入,如有序的句子對或文檔、問題和答案的三元組。由于GPT的預(yù)訓(xùn)練模型是在連續(xù)的文本序列上訓(xùn)練的,因此需要一些修改才能將其應(yīng)用于這些任務(wù)。初代GPT之前的工作提出了基于transferred representations的學(xué)習(xí)任務(wù)特定的結(jié)構(gòu)。這種方法重新引入了大量特定于任務(wù)的定制,并且不對這些額外的結(jié)構(gòu)組件使用遷移學(xué)習(xí)。相反,GPT使用遍歷式方法(traversal-style approach)將結(jié)構(gòu)化輸入轉(zhuǎn)換為Pre-training模型可以處理的有序序列。這種輸入轉(zhuǎn)換避免了針對不同任務(wù)對模型結(jié)構(gòu)進(jìn)行大量更改。圖四展示了特定于任務(wù)的輸入轉(zhuǎn)換方式,所有的輸入轉(zhuǎn)換都包含了隨機(jī)初始化的起始(Start)和結(jié)尾(End)token,分別用和表示。具體于不同任務(wù):

? Textual Entailment   如圖三所示,對于文本蘊(yùn)含任務(wù),GPT在Fine-tuning階段將前提(premise)和假設(shè)(hypothesis)的token序列拼接,并在二者中間添加分隔(delimiter) token ,用$表示。

? Similarity 對于相似度任務(wù),兩個句子之間沒有固有的順序。為了反映這一點,GPT將輸入的兩個句子以兩個可能的排列順序拼接兩次,同樣需要將delimiter token添加在兩個句子中間。這樣兩個句子就能獲得兩個不同順序的輸入轉(zhuǎn)換。然后將兩個轉(zhuǎn)換后的輸入獨立地輸入Pre-trianing得到的模型,再將得到兩個序列表征進(jìn)行element-wise加法得到最終的表征。最后將其輸入到線性輸出層。

? Question Answering and Commonsense Reasoning 對于這兩個任務(wù),給定context document, question和可能的answer集合, GPT先將document context和question拼接(二者中間沒有delimiter),然后再將其與每個answer進(jìn)行拼接(中間有delimiter),得到個序列。每個序列都被Pre-training模型+Linear層獨立地處理得到相應(yīng)的分?jǐn)?shù),最終通過softmax層進(jìn)行歸一化,以產(chǎn)生可能答案的輸出分布。

(4)數(shù)據(jù)集

? 無監(jiān)督Pre-training BooksCorpus 7000本未發(fā)布的書,這些書里包含長段的連續(xù)文本,這使得生成模型能夠?qū)W習(xí)以長距離信息為條件的依賴關(guān)系。

? 有監(jiān)督Fine-tuning

(5)實驗結(jié)果概覽

? Neural Language Inference

? Question Answering & Commonsense Reasoning

? Semantic Similarity & Classification

? GPT Fine-tuning階段遷移層數(shù)的影響和Pre-training階段迭代次數(shù)對zero-shot性能的影響(GPT vs. LSTM)

[ 圖五 ]

從圖五(左)可以看出,F(xiàn)ine-tuning階段使用更多層數(shù)的Pre-training模型可以顯著提升下游任務(wù)的性能;而圖五(右)說明(a)GPT在zero-shot方面比LSTM效果好,并且方差低(方差低沒有數(shù)據(jù)展示,但作者在原文中提到了),(b)隨著Pre-training的訓(xùn)練步數(shù)的增加,GPT的zero-shot能力穩(wěn)步提高。

(6)小結(jié)

在有監(jiān)督學(xué)習(xí)的12個任務(wù)中,初代GPT在9個任務(wù)上的表現(xiàn)超過了SOTA的模型。在的zero-shot任務(wù)中,初代GPT的模型要比基于LSTM的模型穩(wěn)定,且隨著訓(xùn)練次數(shù)的增加,其zero-shot的性能也逐漸提升。這些都表明初代GPT已經(jīng)具備(相對)非常強(qiáng)的泛化能力,能夠用到和有監(jiān)督任務(wù)無關(guān)的其它NLP任務(wù)中。初代GPT證明了transformer對學(xué)習(xí)詞向量的強(qiáng)大能力,在初代GPT得到的詞向量基礎(chǔ)上進(jìn)行下游任務(wù)的學(xué)習(xí),能夠讓下游任務(wù)取得更好的泛化能力。對于下游任務(wù)的訓(xùn)練,初代GPT往往只需要簡單的微調(diào)便能取得非常好的效果。

2.2.2 BERT

(1)模型結(jié)構(gòu)

[ 圖六 BERT采用了Transformer的Encoder部分 ]

BERT(BidirectionalEncoderRepresentations fromTransformers )的模型結(jié)構(gòu)采用了原始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.' 大概的意思是:標(biāo)準(zhǔn)語言模型是單向的,這限制了在預(yù)訓(xùn)練期間可以使用的結(jié)構(gòu)選擇。例如,在OpenAI GPT中,作者使用從左到右的架構(gòu),其中在Self-attention中每個token只能訪問先前的token。這種限制對于句子級任務(wù)來說是次優(yōu)的,并且在將基于微調(diào)的方法應(yīng)用于token-level任務(wù)(如問題回答)時可能非常有害,因為在這些任務(wù)中,從兩個方向結(jié)合上下文是至關(guān)重要的。

(2)輸入構(gòu)造

[ 圖七 BERT的輸入層 ]

為了使BERT能夠處理不同的下游任務(wù),對于每一個輸入的Sequence(在BERT的原文中,作者用'Sentence'表示任意跨度的連續(xù)文本,而不是語言意義上的句子;用'Sequence'表示輸入BERT的tokens序列,可以是一個句子也可以是被打包在一起的兩個句子),在其最前面拼接一個特殊的分類token,對應(yīng)位置的最后一層的Hidden state將被用作分類任務(wù)的序列聚合表征。對于被打包成一個Sequence的Sentence pair, 通過兩種機(jī)制來區(qū)分不同句子(a)用特殊token將兩個句子分隔,(b)為每個token添加一個可學(xué)習(xí)的Embedding(Segment Embedding),來指示其屬于前句還是后句。如圖七所示,對于每一個token,其Input representation通過將其對應(yīng)的Token embedding、Position embedding和Segment embedding求和得到。值得注意的是,特殊token和是在預(yù)訓(xùn)練的時候就引入了,并且參與預(yù)訓(xùn)練中的參數(shù)更新,而初代GPT的特殊token只有在Fine-tuning階段才引入。

(3)訓(xùn)練方法——無監(jiān)督Pre-training+有監(jiān)督Fine-tuning

[ 圖八 Pre-traning和Fine-tuning過程]

如圖八所示,與初代GPT相同,BERT也分為無監(jiān)督Pre-training和有監(jiān)督Fine-tuning兩個階段。

【無監(jiān)督Pre-training】 與GPT和其它預(yù)訓(xùn)練語言模型從左到右或是從右到左的標(biāo)準(zhǔn)預(yù)訓(xùn)練方式不同,BERT提出了兩個新的預(yù)訓(xùn)練任務(wù):

Task-1 MASK LM

作者在直覺上相信,雙向模型比單項模型或是只在淺層拼接從左到右和從右到左的表征更強(qiáng)大。為此,作者提出隨機(jī)遮蔽一定比例的token,被遮蔽的token用代替,然后用未遮蔽的部分作為context預(yù)測遮蔽的部分。作者將其稱為MASK LM,也被稱為Cloze task(完形填空)。在實際實現(xiàn)中,將被遮蔽的token在最后一層對應(yīng)位置上的表征輸入分類器;對于每一個句子,隨機(jī)屏蔽15%的token。

盡管MASK LM能夠得到雙向的預(yù)訓(xùn)練LM,然而Pre-training練階段引入的特殊token不會在Fine-tuning階段出現(xiàn),這就產(chǎn)生了一個新的問題:Pre-training和Fine-tuning輸入token的不匹配。為了緩解這一問題, 對與15%被遮蔽的token,不總是用替換,而是采用了如下策略:假設(shè)第個token被選中遮蔽,其(a)有80%的概率用替換,(b)有10%的概率用隨機(jī)token進(jìn)行替換,(c)有10%的概率保持不變。

Task-2 Next Sentence Prediction (NSP)

QA和Natural Language Inference (NLI) 等許多重要的下游任務(wù)都是基于理解兩個句子之間的關(guān)系,而語言建模并不能直接捕捉到這種關(guān)系。為了訓(xùn)練BERT能夠理解句子的關(guān)系,作者提出一個預(yù)測下一句的二分類任務(wù),這種任務(wù)很容易在任何語料中生成。對于NSP中的句子對兒(A,B),有50%的句子B在語料中是緊跟句子A的下一句,有50%的句子B是在語料中隨機(jī)選擇的。如圖八所示,在最后一層輸出的Hidden state將被輸入分類器預(yù)測B是否是A的下一句。

【有監(jiān)督Fine-tuning】

在Fine-tuning階段,將所有任務(wù)的輸入構(gòu)造成句子對(A,B)的形式,例如(a)Paraphrasing中的句子對,(b)Entailment中的hypothesis-premise對,(c)QA中的question-passage對和(d)文本分類和序列標(biāo)注任務(wù)中的text-對。 對于輸出,在token- level的任務(wù)里,將所有token的對應(yīng)位置最后一層的hidden states輸入相應(yīng)的輸出層(例如序列標(biāo)注和QA);在sentence-level的任務(wù)里,將對應(yīng)位置最后一層的hidden state輸入到分類層進(jìn)行分類(例如Entailment和Sentiment Analysis)。

(4)數(shù)據(jù)集

? 無監(jiān)督Pre-training 來自BooksCorpus  800M的words 和 English Wikipedia 2500M的words。

? 有監(jiān)督Fine-tuning GLUE Benchmark, SQuAD v1.1和SQuAD v2.0共11個NLP 任務(wù)。

(5)實驗結(jié)果

? GLUE

可以看到與OPENAI GPT相比(二者模型結(jié)構(gòu)上僅僅在Self-attention模塊上是否有MASK機(jī)制存在差異),在每個任務(wù)上都有提升,平均提升4.5%。

? Ablation Study——Pre-training Task

如上表所示,作者首先針對Pre-training task進(jìn)行消融實驗,以驗證MASK LM和NSP任務(wù)的有效性。其中LTR(Left to Right)表示類似GPT的從左到右的語言建模任務(wù)。+BiLSTM表示在輸出層前增加BiLSTM網(wǎng)絡(luò)。從中可以看出MASK LM和NSP任務(wù)的有效性是顯著的。

? Ablation Study——Model Size

另外,作者針對模型參數(shù)量進(jìn)行了消融實驗,從上表可以看出,模型越大,在下游任務(wù)中的表現(xiàn)越好(這其實初步展示了大模型的潛力)。

2.2.3 初代GPT和BERT的對比

初代 GPTBERT

模型

Transformer Decoder, 單向(去掉MHA)

Transformer Encoder,雙向

參數(shù)量

1.17億

BASE 1.10億;LARGE 3.40億

語料

BooksCropus 800M單詞

BooksCropus 800M單詞+維基English 2500M單詞

[CLS][SEP]..

Fine-tuning引入

Pre-training引入

Pre-training 任務(wù)

LTR預(yù)測下一個單詞

MASK LM和NSP

2.3 GPT-2

GPT-2的核心思想是:可以直接用無監(jiān)督的Pre-training模型直接去做有監(jiān)督任務(wù)。GPT-2在模型結(jié)構(gòu)方面和GPT-1完全一致,Pre-training的任務(wù)也沒有改變,那究竟是什么給GPT-2帶來如此大的自信,可以讓它在無監(jiān)督Pre-training后直接用來做有監(jiān)督任務(wù)呢?接下來,我將按照作者原文的思路,進(jìn)行剖析。

2.3.1 原理

(1)Language Modeling的實際行為

傳統(tǒng)Language Modeling(LM)也是GPT-2的中心思想(大道至簡)。LM通常被構(gòu)造為對來自一組樣本進(jìn)行無監(jiān)督分布估計,其中每個樣本由長度可變的token序列組成。由于language有自然的順序性,因此通常將聯(lián)合概率建模為:

(基礎(chǔ)知識)(https://zhuanlan.zhihu.com/p/109954774)

這種建模方式的缺點是(a)參數(shù)空間過大,但Transformer結(jié)構(gòu)給大模型帶來了光明(b)數(shù)據(jù)稀疏,但算力的提升以及資本的力量允許我們在超大規(guī)模語料上訓(xùn)練。

LM其實也是在給序列的條件概率建模(有了LM的能力自然就有了對序列和序列間條件概率的建模能力)。

(2)NLP中對所有任務(wù)建模方式的通用表達(dá)

NLP中對所有單個任務(wù)的建模都可以表達(dá)為,那么一個通用的模型(指能夠進(jìn)行多種不同任務(wù)的模型),及時對于不同任務(wù)的輸入相同,它也應(yīng)該不僅condition on input還應(yīng)該condition on task才能執(zhí)行。而傳統(tǒng)的多任務(wù)模型,需要對模型結(jié)構(gòu)進(jìn)行特殊的設(shè)計,比如針對不同任務(wù)添加任務(wù)特定編碼器和解碼器。但幸運的是,語言提供了一種靈活的方式來指定任務(wù)、輸入和輸出。例如,一個翻譯任務(wù)的樣本可以被表達(dá)成的形式;一個閱讀理解的樣本可以被表達(dá)為。由此可見,以這種數(shù)據(jù)格式可以有監(jiān)督地訓(xùn)練一個single model,其不需要特定任務(wù)的編碼器或者解碼器,就能執(zhí)行多任務(wù)。

(3)LM在達(dá)到一定條件時實際上可以看作有監(jiān)督多任務(wù)學(xué)習(xí)

相比于有監(jiān)督的多任務(wù)學(xué)習(xí),LM只是不需要顯示地對哪些符號是輸出進(jìn)行監(jiān)督。例如對于任意序列, 通過LM都能推理新的序列,而中所指定的任務(wù)的輸出可能就出現(xiàn)在中,但是LM的輸出沒有顯示地對其進(jìn)行監(jiān)督。從這個意義上理解,多任務(wù)的有監(jiān)督學(xué)習(xí)都是LM對序列建模的子集。例如,在LM Pre-training時,文本中有一句話,“The translation of word Machine Learning in chinese is 機(jī)器學(xué)習(xí)”,在訓(xùn)練完這句話后,LM就自然地將翻譯任務(wù)的輸入輸出學(xué)到了。類似的例子如下表所示:

(4)討論

所以GPT-2是如何實現(xiàn)只進(jìn)行無監(jiān)督Pre-training就直接達(dá)到有監(jiān)督多任務(wù)的效果呢?首先,子標(biāo)題(1)中傳統(tǒng)LM的兩個缺陷(a)參數(shù)空間過大和(b)數(shù)據(jù)稀疏隨著模型結(jié)構(gòu)、算力提升以及資本的力量可以得到解決。換言之,LM的能力提升來自于大模型和在超大規(guī)模語料上預(yù)訓(xùn)練。其次子標(biāo)題(2)中的分析說明,LM可以以其靈活的方式建模單模型多任務(wù)學(xué)習(xí)。最后子標(biāo)題(3)說明,有監(jiān)督多任務(wù)學(xué)習(xí)是LM的子集。實際上有監(jiān)督任務(wù)的監(jiān)督信號是會出現(xiàn)在無監(jiān)督任務(wù)的語料中的,只要語料足夠大,那么就能cover到多個任務(wù)。綜上可以得出結(jié)論,只要模型參數(shù)量足夠大,預(yù)訓(xùn)練語料足夠豐富,那么無監(jiān)督Pre-training得到的LM就能直接拿來執(zhí)行多任務(wù)(重劍無鋒,大巧不工??)。

2.3.2  GPT-2實現(xiàn)

(1)模型結(jié)構(gòu)

GPT-2的模型結(jié)構(gòu)相比GPT-1沒有差別,僅僅是增加了參數(shù)規(guī)模。作者在實驗中采用了四種規(guī)模參數(shù)的模型:

上表中第一個模型的參數(shù)規(guī)模與初代GPT相同,第二個模型的參數(shù)規(guī)模與BERT(Large)相同。而最后一行的模型是發(fā)布的GPT-2。

(2)訓(xùn)練語料

作者從網(wǎng)站上爬取了高質(zhì)量的文本數(shù)據(jù),形成的數(shù)據(jù)集被稱為WebText。其中去掉了所有包含在Wikipedia中的文檔。最終的數(shù)據(jù)集包含超過800萬個文檔,總共40 GB的文本。

2.3.3 實驗結(jié)果

? LM結(jié)果

在8個語言模型任務(wù)中,僅僅通過zero-shot學(xué)習(xí),GPT-2就有7個超過了state-of-the-art的方法;

? NER

在Children's Book Test數(shù)據(jù)集上的命名實體識別任務(wù)中,GPT-2超過了SOTA的方法約7%。參數(shù)規(guī)模越大效果越好。

? LAMBADA數(shù)據(jù)集是測試模型捕捉長期依賴的能力的數(shù)據(jù)集,GPT-2將困惑度從99.8降到了8.6。

? 在閱讀理解數(shù)據(jù)中,GPT-2超過了4個baseline模型中的三個。

? 在法譯英任務(wù)中,GPT-2在zero-shot學(xué)習(xí)的基礎(chǔ)上,超過了大多數(shù)的無監(jiān)督方法,但是比有監(jiān)督的state-of-the-art模型要差。

? GPT-2在文本摘要上的表現(xiàn)不理想,但是它的效果也和有監(jiān)督的模型非常接近。

2.3.4 小結(jié)

GPT-2 驗證了通過擴(kuò)大參數(shù)規(guī)模和Pre-training語料的規(guī)模就可以遷移到多個任務(wù)且不需要額外的Fine-tuning。盡管其在有些任務(wù)上表現(xiàn)得不夠好,但其已經(jīng)初步展現(xiàn)了大模型大語料Zero-shot的潛力,未后續(xù)大模型的發(fā)展提供了有依據(jù)的方向。

2.4 GPT-3

GPT-3的核心賣點是:僅僅需要zero-shot或者few-shot就能在下游不同任務(wù)上表現(xiàn)得很好,并且在很多非常困難的任務(wù)上也有驚艷的表現(xiàn)。

2.4.1 原理

到GPT-3之前,LM已經(jīng)取得了巨大的成功,例如初代GPT、BERT的Pre-training + Fine-tuning, 以及GPT-2所展現(xiàn)的Zero-shot能力。但是,當(dāng)模型結(jié)構(gòu)是task-agnostic的時候,前述LMs仍然需要特定任務(wù)的數(shù)據(jù)集和特定任務(wù)的Fine-tuning(即便強(qiáng)大如GPT-2在某些任務(wù)上也需要Fine-tuning)。這是在GPT-3之前LMs最大的缺點(盡管已經(jīng)很強(qiáng)了,但是目標(biāo)要大一點)。解決這一缺陷的必要性如下:

? 從實用角度來看,對于每一項新任務(wù)都需要一個有標(biāo)注的大數(shù)據(jù)集,這限制了語言模型的適用性(盡管在我們看來,標(biāo)注數(shù)據(jù)是不可避免的,但GPT-3團(tuán)隊的目標(biāo)很大)。更糟糕的是,對于很多應(yīng)用前景很廣泛的任務(wù),例如語法糾錯、生成抽象概念的示例、評論story,很難收集一個大型的監(jiān)督訓(xùn)練數(shù)據(jù)集,特別是當(dāng)每個任務(wù)都要重復(fù)這樣的步驟。

? 在有標(biāo)注數(shù)據(jù)上Fine-tuning得到的大模型其在Out-of-distribution(OOD)數(shù)據(jù)上泛化性不一定更好, 因為模型過度偏向fine-tuning數(shù)據(jù)分布(回想下初代GPT為什么要在Fine-tuning階段加入Pre-training LM的損失)。因此,F(xiàn)ine-tuning模型在特定Benchmark上的性能,即使名義上是人類水平,也可能是被夸大了實際性能。

? 對于人類這個智能體而言,其不需要大量的有監(jiān)督的數(shù)據(jù)集去學(xué)習(xí)絕大多數(shù)NLP任務(wù)。簡短的幾個示例足以使人類以合理的能力執(zhí)行新任務(wù)。如果LM能到達(dá)類似的能力,那么將會極大地增加其通用性。

作者認(rèn)為,解決該缺陷的主要思路是:

? 借用meta-learning(元學(xué)習(xí))的思想。這在LM背景下的含義是:在Pre-training期間讓模型學(xué)習(xí)廣泛的技能和模式識別能力,而在推理期間利用這些技能和能力迅速適配到期望的任務(wù)上。如下圖所示:

以MAML算法為例,meta-learning的目的是找到模型的參數(shù)的最優(yōu)初始化值meta-initialization, 使模型能從meta-initialization開始迅速應(yīng)用到其它任務(wù)中。其優(yōu)化過程分為內(nèi)循環(huán)(inner loop)和外循環(huán)(outer loop),其中內(nèi)循環(huán)(inner loop)是針對子任務(wù)進(jìn)行學(xué)習(xí),而外循環(huán)(outer loop)是對meta-initialization進(jìn)行更新。換言之,如果找到一組參數(shù)meta-initialization, 從它開始來學(xué)習(xí)多個任務(wù),如果每個任務(wù)都能學(xué)好,那么它就是一組不錯的初始化參數(shù),否則就對其進(jìn)行更新。而LM與meta-learning相似,其內(nèi)循環(huán)就是對大語料中包含的多個子任務(wù)(回顧GPT-2)中的每一個進(jìn)行學(xué)習(xí)(即語言建模),作者將其稱為In-context learning,  而外循環(huán)則是對整個語料的建模,即語料中包含多個子任務(wù),模型在整個大語料上一直以語言建模的目標(biāo)進(jìn)行優(yōu)化其實就是在找meta-initialization。 而GPT-2其實也在嘗試In-context learning,其使用Pre-training LM的輸入作為任務(wù)規(guī)范的一種形式,模型以自然語言指令或任務(wù)演示示例為條件,然后通過預(yù)測一下步將發(fā)生什么來完成任務(wù)的更多示例。并且GPT-2已經(jīng)展示了In-context learning的一些能力,證明了這是一個有希望的方向。GPT-2在一些任務(wù)上的能力還遠(yuǎn)不及Fine-tuning。

? 另一個方向是擴(kuò)大模型參數(shù)量的規(guī)模,從初代GPT到BERT,再到GPT-2,這一趨勢證明隨著模型參數(shù)量的擴(kuò)大,模型的能力也隨之提高。由于In-context learning涉及從大規(guī)模語料中將許多技能和任務(wù)吸收到模型參數(shù)中,因此In-context learning的能力可能會隨著規(guī)模的擴(kuò)大而表現(xiàn)出類似的強(qiáng)勁增長。(個人見解:(a)小規(guī)模語料是有偏的,且其中包含的任務(wù)和每個任務(wù)的樣本量少,不足以學(xué)到足夠的“技能”和“任務(wù)”,即在預(yù)訓(xùn)練中無法得到足夠多的知識泛化到實際場景中的任務(wù);(b)因此需要擴(kuò)大語料的規(guī)模,而擴(kuò)大語料中的規(guī)模需要有足夠多的參數(shù)來記住語言建模中學(xué)到的“技能”和“任務(wù)”,如果參數(shù)量不夠,那么隨著Pre-training的進(jìn)行,模型又要嘗試記住所有“技能”和“任務(wù)”,但又無法完全記住,因此可能會對找到meta-initialization帶來困難。(c)另外,可以回到第2.3.1 GPT-2原理那節(jié)從解決LM缺陷的角度思考。)

上述第一點從Meta-learning的角度揭示了LM的背后的機(jī)理,以及背后In-context learning的概念,并以GPT-2所展現(xiàn)的能力來證明In-context learning的有效性;第二點說明近些年來提升參數(shù)規(guī)模所帶來的提升是大勢所趨。因此,GPT-3所帶來的改進(jìn)有兩點:繼續(xù)擴(kuò)大參數(shù)規(guī)模;繼續(xù)擴(kuò)大語料的規(guī)模;再次想到那句話:重劍無鋒,大巧不工。

2.4.2 實現(xiàn)

? Pre-training 語料

GPT-3共訓(xùn)練了5個不同的語料,分別是低質(zhì)量的Common Crawl,高質(zhì)量的WebText2,Books1,Books2和Wikipedia,GPT-3根據(jù)數(shù)據(jù)集的不同的質(zhì)量賦予了不同的權(quán)值,權(quán)值越高的在訓(xùn)練的時候越容易抽樣到。整個語料的規(guī)模為45TB??,數(shù)據(jù)集統(tǒng)計如下表所示:

? 模型結(jié)構(gòu)和參數(shù)量

GPT-3的模型結(jié)構(gòu)和初代GPT和GPT-2相同,但參數(shù)量直接提升至175 Billion(初代目:1.17億;二代目15.42億;三代目:1750億)。

? 訓(xùn)練方式

LM Pre-training。

? 模型推理(Zero-shot,One-shot,F(xiàn)ew-shot)

如上圖所示,與傳統(tǒng)的Pre-training+Fine-tuning不同(圖右),GPT-3(圖左)Pre-training之后直接進(jìn)行推理,且支持三種推理方式,即Zero-shot,One-shot和Few-shot。三種推理方式具體如下:

? Zero-shot只輸入任務(wù)描述和提示詞(Prompt);

? One-shot輸入任務(wù)描述,1個示例和Prompt;

? Few-shot輸入任務(wù)描述,K()個示例和Prompt。

2.4.3 實驗結(jié)果

? 參數(shù)規(guī)模和有無prompt的消融實驗

作者在一個簡單的任務(wù)上(去掉單詞中被隨機(jī)添加的符號,例 s.u!c/c!e.s s i/o/n = succession)對比了不同參數(shù)規(guī)模的模型和在推理時是否有Prompt的結(jié)果??梢缘贸龅慕Y(jié)論有三個(a)擴(kuò)大參數(shù)規(guī)模有助于提升模型利用In-context Information的能力;(b)Prompt有助于提升模型學(xué)習(xí)任務(wù)的能力;(c)Few-shot > One-shot > Zero-shot。

? Cloze and completion tasks

? Open domain QA

? Translation

在GPT-3的年代,其表現(xiàn)也可以用驚艷來形容。它在大多數(shù)LM數(shù)據(jù)集中,超過了絕大多數(shù)的Zero-shot或者Few-shot的SOTA方法。此外,在許多復(fù)雜的NLP任務(wù)中也超過了Fine-tuning后的SOTA方法,例如閉卷問答,模式解析,機(jī)器翻譯等。最后,它在一些其他的任務(wù)上也取得非常震驚的效果,如進(jìn)行數(shù)學(xué)加法,文章生成,編寫代碼等。 然而GPT-3也存在一系列的問題,比如對于一些命題沒有意義的問題,GPT-3不會判斷命題有效與否,而是推理一個沒有意義的答案出來;由于45TB海量數(shù)據(jù)中沒有針對種族歧視,性別歧視,宗教偏見等內(nèi)容進(jìn)行排除,因此GPT-3生成的文章會包含這類敏感內(nèi)容。

2.4.4 從初代GPT到GPT-3對比一覽

初代GPTGPT-2GPT-3

時間

2018年6月

2019年2月

2020年5月

參數(shù)量

1.17億

15.4億

1750億

預(yù)訓(xùn)練數(shù)據(jù)量

5GB

40GB

45TB

訓(xùn)練方式

Pre-training + Fine-tuning

Pre-training

Pre-training

序列長度

512

1024

2048

# of Decoder Layers

12

48

96

Size of Hidden Layers

768

1600

12288

2.5 InstructGPT

InstructGPT是為解決LM有時不能遵循用戶意圖而誕生的?!安荒茏裱脩粢鈭D”表示LM可能會生成不真實、有毒或?qū)τ脩艉翢o幫助的輸出。主要原因是LM的訓(xùn)練目標(biāo)是預(yù)測下一個token而不是有幫助地和安全地遵循用戶的指令。換句話說,這些模型與其用戶沒有對齊。這是由于模型的偏見性和數(shù)據(jù)中存在的一些有毒內(nèi)容導(dǎo)致模型會輸出無用的、有毒的輸出(LM并沒有對輸出是否無用、是否有毒的監(jiān)督)。因此,InstructGPT要做的就是是模型的輸出符合人類的意圖。這種改進(jìn)是十分有必要的,尤其是當(dāng)LM被部署在多個應(yīng)用場景中時。具體而言,InstructGPT的優(yōu)化目標(biāo)有三個(3H):

? Helpful 模型應(yīng)該幫助用戶解決他們的任務(wù)。

? Honest 模型不應(yīng)該編造信息來誤導(dǎo)用戶。

? Harmless 模型不應(yīng)對人或環(huán)境造成身體、心理或社會傷害

為了解決上述問題,F(xiàn)ine-tuning步驟又回到了InstructGPT,但與傳統(tǒng)的Fine-tuning不同。在具體介紹InstructGPT之前,本章將先介紹幾個Preliminary knowledge,分別是Instruct Learning 和 Prompt Learning,Deep Reinforcement Learning from Human Preferences (RLHF),和PPO算法。

2.5.1 Instruct Learning vs. Prompt Learning

Instruct Learning是由Google提出。(接下來引自外部解讀)Instruct Learning 和 Prompt Learning的目的都是去深入挖掘已經(jīng)具備的知識(回顧GPT-2和GPT-3在大規(guī)模語料中學(xué)到的“技能”和“任務(wù)”),并激發(fā)出更強(qiáng)的能力。不同的是,Prompt是激發(fā)LM的補(bǔ)全能力,例如根據(jù)上半句生成下半句,或者是Cloze;而Instruct Learning是激發(fā)語言模型的理解力,通過給出明顯的指令,讓模型去做出正確的行動。通過如下例子來理解兩種學(xué)習(xí)方式:

? Prompt Learning:給女朋友買了這個項鏈,她很喜歡,這個項鏈太__了。

? Instruct Learning:判斷這句話的情感:給女朋友買了這個項鏈,她很喜歡。選項:A=好;B=一般;C=差。

Instruct Learning 原文對傳統(tǒng)Fine-tuning、Prompt Learning和Instruction tuning的對比:

? 傳統(tǒng)Fine-tuning:需要大量任務(wù)特定的樣本;每個任務(wù)都需要Fine-tuning一個特別的模型;

? Prompt:通過少數(shù)示例或prompt工程提升性能。傳送門(https://zhuanlan.zhihu.com/p/514645704)

? Instruction tuning:通過自然語言指令學(xué)習(xí)執(zhí)行多個任務(wù)。

Instruct-tuning 的一些模版,如下圖:

Instruct-tuning 的Zero-shot效果如下圖所示:

從實驗效果來看,1370億參數(shù)的FLAN(Pre-training + instruction tuning)比1750億參數(shù)的GPT-3在各個任務(wù)上效果要好,甚至在某些任務(wù)上(Translation)比全監(jiān)督的算法要好,體現(xiàn)了Instruction tuning在激發(fā)/激活LM潛力方面和泛化能力的優(yōu)越表現(xiàn)。個人認(rèn)為,Instruction learning 能夠進(jìn)一步將任務(wù)編碼到模型參數(shù)中,在inference的時候,模型能夠根據(jù)Instruction中的任務(wù)描述,輸出與任務(wù)相關(guān)的結(jié)果。其實LM本身是生成式模型,Prompt Learning 其實是通過使模型在生成答案的時候condition on Prompt來區(qū)分任務(wù),本質(zhì)上還是強(qiáng)化了模型的補(bǔ)全能力,而Instruction learning使模型condition on 對任務(wù)更豐富的描述,從而加強(qiáng)對任務(wù)的理解。

2.5.2 RLHF

如介紹GPT-3時提到的,45TB的語料中不能保證沒出現(xiàn)敏感的句子,如種族歧視、辱罵等。而LM實際上是對訓(xùn)練數(shù)據(jù)集分布的擬合。這實際上直接影響了LM在內(nèi)容生成上的質(zhì)量。此外,我們不希望模型只受到數(shù)據(jù)的影響,我們希望輸出結(jié)果是可控的,要保證生成的內(nèi)容是有用的,真實的,和無害的。所以,我們應(yīng)該有一個機(jī)制,來鼓勵模型輸出和人類偏好(當(dāng)然,這一定是價值觀比較正的人類??)一致的結(jié)果,比如避免輸出帶有種族歧視、辱罵的語句;再比如生成的內(nèi)容要有具有流暢性和語法正確性;生產(chǎn)的內(nèi)容還需要是有用的、真實的(不能一本正經(jīng)說瞎話)。

因此,RLHF就是通過用人類的偏好(人工標(biāo)注輸出的質(zhì)量分?jǐn)?shù))訓(xùn)練一個獎勵模型(Reward model), 來指導(dǎo)LM的訓(xùn)練。RLHF的流程如下圖所示。

上圖中的一些概念:

? Initial Language Model:Pre-trianing或者Instruct tuning后的模型;

? Tuned Language Model: Initial Lanugage Model的副本,將在RLHF中更新參數(shù),也是RL中的Policy;

? Policy:是給Tuned LM(例如GPT-3)輸入文本后輸出結(jié)果的過程;

? Action Space: 全詞表,大約50K。

? Observation Space:輸入的文本序列空間。

? Reward Function: 一個打分模型Reward Model,和一個KL的梯度懲罰項,目的是為了使Policy的輸出文本不要和Initial LM差太多,防止模型為了迎合Reward模型輸出不連貫的文本或著胡言亂語。

RLHF 首先人工收集LM的輸出答案,并對輸入輸出對進(jìn)行打分標(biāo)注來訓(xùn)練Reward Model; 然后,在RLHF期間,將Prompts Dataset中的每一個樣本分別輸入到Initial LM和Policy中,得到兩個輸出,將輸入到Reward Model中得到評分, 然后加上梯度懲罰項避免Policy的輸出與Initial LM的差距太大。因此,得到Reward Function的輸出結(jié)果。 然后根據(jù)利用Update rule,即PPO算法更新Policy的參數(shù),在InstructGPT中,update rule 還包括原始LM的目標(biāo)。

2.5.3 PPO算法

RL實際上就是Agent在一個狀態(tài)下選擇下一個動作, 獲得獎懲,而我們的優(yōu)化目標(biāo)是希望選擇動作的Policy使得總體收益期望最大。對于一組模型參數(shù),可以得到一組軌跡序列的概率分布$p(\tau;\theta), \tau = [,, \cdots](想象一下答案的生產(chǎn)過程)。對于一條軌跡\tau$,可以得到Reward的期望為

其中是權(quán)重因子,例如遠(yuǎn)期獎勵不重要,是相應(yīng)時間步的Reward。

PPO的目標(biāo)是最大化Reward的期望,因此可得目標(biāo)函數(shù)為:

最大化上述目標(biāo)則采用梯度上升:

.

求解上述梯度:

在InstructGPT中,上式中的對應(yīng)輸入序列后輸出序列的概率。

2.5.4 InstructGPT的實現(xiàn)

在了解了Instruct learning,RLHF和PPO后,我們就不難理解InstructGPT的實現(xiàn)過程(下圖)。

如上圖所示,InstructGPT的訓(xùn)練分成3步,每一步的數(shù)據(jù)也有差異,下面我們分別介紹它們。

? SFT數(shù)據(jù)集是用來訓(xùn)練第1步有監(jiān)督的模型。在這一步中將使用采集的新數(shù)據(jù),按照GPT-3的訓(xùn)練方式對GPT-3進(jìn)行微調(diào)。因為GPT-3是一個基于提示學(xué)習(xí)的生成模型,因此SFT數(shù)據(jù)集也是由提示-答復(fù)對組成的樣本。SFT數(shù)據(jù)一部分來自使用OpenAI的的用戶,另一部分來自O(shè)penAI雇傭的40名標(biāo)注人員。所有的標(biāo)注人員都經(jīng)過了仔細(xì)的培訓(xùn)。標(biāo)注人員在構(gòu)造這個數(shù)據(jù)集中的工作是根據(jù)內(nèi)容自己編寫指令。

? RM數(shù)據(jù)集用來訓(xùn)練第2步的獎勵模型,我們也需要為InstructGPT訓(xùn)練設(shè)置一個獎勵目標(biāo)。這個獎勵目標(biāo)不必可導(dǎo),但是一定要盡可能全面且真實的對齊我們需要模型生成的內(nèi)容。很自然的,我們可以通過人工標(biāo)注的方式來提供這個獎勵,通過人工給那些涉及偏見的生成內(nèi)容更低的分從而鼓勵模型不去生成這些人類不喜歡的內(nèi)容。InstructGPT先讓模型生成一批候選文本,讓后通過標(biāo)注人員根據(jù)生成數(shù)據(jù)的質(zhì)量對這些生成內(nèi)容進(jìn)行排序。

訓(xùn)練步驟如下:

? 步驟一,首先利用標(biāo)注人員標(biāo)注的SFT數(shù)據(jù)集對Initial LM進(jìn)行有監(jiān)督的Fine-tuning,并且作者提到讓模型適當(dāng)過擬合有助于后面兩步的訓(xùn)練。

? 步驟二,訓(xùn)練獎勵模型。對于每一個Prompt,用SFT后的模型生成多個輸出(一個Prompt為什么會得到多個輸出,可能是用了Beam Search),如圖中的A,B,C,D四個答案,然后標(biāo)注人員將四個答案進(jìn)行排序。再利用兩兩之間的排序關(guān)系訓(xùn)練Reward Model進(jìn)行分?jǐn)?shù)回歸。訓(xùn)練Reward Model的目標(biāo)函數(shù):,其中是標(biāo)注人員更偏好的輸出;

? 步驟三,利用Reward Model用PPO算法來優(yōu)化Policy(SFT后的模型);

? 步驟四,持續(xù)重復(fù)步驟二和步驟三;RLFH的優(yōu)化過程中由于訓(xùn)練步子不能放得太大,即在update rule里加入了KL懲罰,因此僅僅一輪步驟二+步驟三可能無法達(dá)到我們的預(yù)期,因為SFT后的模型輸出可能符合預(yù)期的輸出也不多,而通過多輪RLHF優(yōu)化可以逐步提升輸出質(zhì)量。

2.5.5 小結(jié)

優(yōu)點

? 與 GPT-3 的輸出相比,標(biāo)注人員明顯更喜歡 InstructGPT 輸出。13億參數(shù)的InstructGPT的輸出明顯優(yōu)于1750億參數(shù)的GPT-3。 1750億參數(shù)的InstructGPT 的輸出在 85±3% 的時間內(nèi)優(yōu)于 1750億參數(shù)的GPT-3 輸出,在 71±4% 的時間內(nèi)優(yōu)于 few-shot 1750億參數(shù)的GPT-3。 InstructGPT 模型能更可靠地遵循指令中的明確約束。

? InstructGPT 模型在真實性方面比 GPT-3 有所改進(jìn)。在** TruthfulQA 基準(zhǔn)測試中,InstructGPT 生成真實且信息豐富的答案的頻率大約是 GPT-3 的兩倍。

? InstructGPT 與 GPT-3 相比毒性略有改善;

? 1.InstructGPT 模型顯示了 RLHF 微調(diào)對分布之外的指令的有前景泛化。 作者定性地探究了 InstructGPT 的功能,發(fā)現(xiàn)它能夠遵循指令來總結(jié)代碼,回答有關(guān)代碼的問題,有時還會遵循不同語言的指令,盡管這些指令在微調(diào)分布中非常罕見。 相比之下,GPT-3 可以執(zhí)行這些任務(wù),但需要更仔細(xì)的prompt,并且通常不會遵循這些領(lǐng)域的說明。 這個結(jié)果表明,instructGPT能夠泛化到“遵循指令”的概念。 即使在獲得很少直接監(jiān)督信號的任務(wù)上,也會保持一定的對齊。

缺點

? InstructGPT會降低模型在通用NLP任務(wù)上的效果,作者在PPO的訓(xùn)練的時候討論了這點,雖然修改損失函數(shù)可以緩和,但這個問題并沒有得到徹底解決。

? 有時候InstructGPT還會給出一些荒謬的輸出:雖然InstructGPT使用了人類反饋,但限于人力資源有限。影響模型效果最大的還是有監(jiān)督的語言模型任務(wù),人類只是起到了糾正作用。所以很有可能受限于糾正數(shù)據(jù)的有限,或是有監(jiān)督任務(wù)的誤導(dǎo)(只考慮模型的輸出,沒考慮人類想要什么),導(dǎo)致它生成內(nèi)容的不真實。就像一個學(xué)生,雖然有老師對他指導(dǎo),但也不能確定學(xué)生可以學(xué)會所有知識點

? 盡管取得了重大進(jìn)展,但I(xiàn)nstructGPT 模型遠(yuǎn)未完全對齊或完全安全; 它仍然會在沒有明確提示的情況下生成有毒或有偏見的輸出、編造事實以及生成色情和暴力內(nèi)容。 但機(jī)器學(xué)習(xí)系統(tǒng)的安全性不僅取決于底層模型的行為,還取決于這些模型的部署方式。 為了支持API 的安全,Open AI提供內(nèi)容過濾器以檢測不安全的回答,并監(jiān)控濫用情況。

2.6 ChatGPT

2.6.1 ChatGPT的實現(xiàn)

終于可以將ChatGPT了,不過在講完初代GPT、GPT-2、GPT-3以及InstructGPT后,好像沒有什么可以講了,因為ChatGPT基本遵循了與InstructGPT相同的訓(xùn)練方式,有差異的地方只有兩點(a)ChatGPT以GPT3.5作為Initial LM,(b)數(shù)據(jù)收集方式略有不同。目前ChatGPT的論文還沒有公開,OpenAI只發(fā)布了一個簡短的Blog。在此,我將Blog中的原文翻譯后引用在此:

“我們使用來自人類反饋的強(qiáng)化學(xué)習(xí)(RLHF)來訓(xùn)練這個模型,使用與InstructionGPT相同的方法,但數(shù)據(jù)收集設(shè)置略有不同。我們使用有監(jiān)督的微調(diào)訓(xùn)練了一個初始模型:人工智能訓(xùn)練師提供對話,他們扮演用戶和人工智能助手的雙方角色。我們讓訓(xùn)練師獲得模型書面建議,以幫助他們撰寫回復(fù)。我們將這個新的對話數(shù)據(jù)集與InstructGPT數(shù)據(jù)集混合,并將其轉(zhuǎn)換為對話格式。為了創(chuàng)建強(qiáng)化學(xué)習(xí)的獎勵模型,我們需要收集比較數(shù)據(jù),其中包括兩個或多個按質(zhì)量排序的模型響應(yīng)。為了收集這些數(shù)據(jù),我們進(jìn)行了AI訓(xùn)練師與聊天機(jī)器人的對話。我們隨機(jī)選擇了一個模型撰寫的消息,抽樣了幾個備選的答案,并讓AI培訓(xùn)師對其進(jìn)行排名。使用這些獎勵模型,我們可以使用近端策略優(yōu)化對模型進(jìn)行微調(diào)。我們對這個過程進(jìn)行了多次迭代。ChatGPT從GPT-3.5系列中的一個模型進(jìn)行了微調(diào),該系列于2022年初完成了訓(xùn)練。ChatGPT和GPT 3.5在Azure AI超級計算基礎(chǔ)設(shè)施上進(jìn)行了訓(xùn)練?!?/p>

2.6.2 補(bǔ)充GPT系列的其它成員

一篇題為《萬字拆解!追溯ChatGPT各項能力的起源》的Blog中總結(jié)了從GPT-3衍生的GPT家族的其它成員,文中還全面客觀地總結(jié)和剖析了ChatGPT的各項能力來源。如下圖所示,作為ChatGPT Initial LM的GPT-3.5是在原始GPT-3的基礎(chǔ)上,增加code語料和經(jīng)過instruct tuning后得到的。

該Blog中還整理了GPT-3到ChatGPT以及這之間的迭代版本的能力和訓(xùn)練方法,如下圖: 

2.6.3 從初代GPT到ChatGPT的進(jìn)化概覽

2.6.4 ChatGPT的缺陷

** 來自ChatGPT官方給出的缺陷 **:

1.ChatGPT有時會寫出看似合理但不正確或荒謬的答案。解決這一問題具有挑戰(zhàn)性,因為:(1)在RL培訓(xùn)期間,目前沒有任何真相來源;(2) 訓(xùn)練模型更加謹(jǐn)慎會導(dǎo)致它拒絕正確回答的問題;(3)監(jiān)督訓(xùn)練誤導(dǎo)了模型,因為理想的答案取決于模型知道什么,而不是人類演示者知道什么。

2.ChatGPT對輸入短語的調(diào)整或多次嘗試同一提示很敏感。例如,給定一個問題的一個短語,模型可以聲稱不知道答案,但稍微重新措辭,可以正確回答。

3.該模型通常過于冗長,過度使用某些短語,例如重申它是OpenAI訓(xùn)練的語言模型。這些問題源于培訓(xùn)數(shù)據(jù)中的偏差(培訓(xùn)師更喜歡看起來更全面的較長答案)和眾所周知的優(yōu)化問題。

4.理想情況下,當(dāng)用戶提供不明確的查詢時,模型會提出明確的問題。相反,我們當(dāng)前的模型通常猜測用戶的意圖。

5.雖然我們努力讓模型拒絕不適當(dāng)?shù)恼埱?,但它有時會響應(yīng)有害的指令或表現(xiàn)出有偏見的行為。我們正在使用ModerationAPI來警告或阻止某些類型的不安全內(nèi)容,但我們預(yù)計目前它會有一些誤報和誤報。我們渴望收集用戶反饋,以幫助我們正在進(jìn)行的改進(jìn)系統(tǒng)的工作。

本來這里是有另一個小標(biāo)題:“來自網(wǎng)友發(fā)現(xiàn)的缺陷”,但發(fā)現(xiàn)網(wǎng)友給出的例子全被包含在官方給出的5個方面的缺陷中,所以這里將變?yōu)閷ι鲜?點的解讀。1.(1)所說的缺點就是網(wǎng)友們吐槽的“一本正經(jīng)說瞎話”,比如用戶給ChatGPT一個Prompt:“宮廷玉液酒”,ChatGPT會給出如下回答:“宮廷玉液酒是一種傳統(tǒng)的中國白酒。它通常是由大米、小麥...”。然而我國根本沒有宮廷玉液酒這種酒;再比如問ChatGPT:“秦始皇摸電線會怎么樣”,ChatGPT給出的回答里竟然包含這樣一句話:“電線是由英國科學(xué)家艾倫圖靈在1870年代發(fā)明的”。這明顯說明ChatGPT不是一個可靠的知識庫(我也被ChatGPT欺騙過??,見3.1.4);1.(2)訓(xùn)練模型更加謹(jǐn)慎會導(dǎo)致它拒絕正確回答的問題,身邊同事確實遇到過這類案例,比如讓ChatGPT推薦書籍,有時會拒絕回答,但有時會回答,這可能也和第2條缺陷相關(guān)。1.(3)的含義可能是RLHF和Instruct Learning限制了模型可能的輸出范圍,而使模型小心地輸出與人類盡可能對齊的答案。而與人類對齊的能力來自于人類制作的數(shù)據(jù)集和人類標(biāo)注訓(xùn)練的Reward Model,其實這種方式本身就是有偏的。并且模型可能會因此不敢回答從海量語料中學(xué)到的知識。缺陷3.現(xiàn)象很普遍,作者的解釋也很明確;缺陷4.的原因應(yīng)該是ChatGPT沒有認(rèn)知能力,這一點將在3.1.4中討論;缺陷5.大家可以看下這篇博文給的例子# 聊天機(jī)器人 ChatGPT 在誘導(dǎo)下寫出「毀滅人類計劃書」,并給出代碼,AI 發(fā)展有哪些問題需關(guān)注?(https://www.zhihu.com/aria/question/570520300/answer/2790514496),個人認(rèn)為,雖然GPT系列通過大模型、大語料上的LM在不斷提高下游任務(wù)的泛化性,但目前仍然無法保證RLHF中Reward模型的泛化性。

03

拓展

3.1 思考

3.1.1 模型到底是否需要標(biāo)簽監(jiān)督?

從初代GPT的Pre-training + Fine-tuning,到GPT-2初步展現(xiàn)的Zero-shot能力,再到GPT-3的In-context learning(實際上GPT-2也有In-context learning, 而GPT-3采用了更大的模型和更大的語料,并強(qiáng)調(diào)了這一概念)所帶來的更強(qiáng)大的Zero-shot和Few-shot能力,這些趨勢似乎在告訴我們標(biāo)簽訓(xùn)練不是必須的。但需要注意的是,GPT-3在訓(xùn)練的時候并不是完全沒有任務(wù)相關(guān)的監(jiān)督信號,只不過監(jiān)督信號自然地存在于大規(guī)模語料中,并且以傳統(tǒng)LM的建模方式學(xué)到了隱藏在大規(guī)模語料中的多種不同任務(wù)的和之間的依賴。此外,在InstructGPT和ChatGPT中為了使模型與人類對齊,OpenAI仍然通過人工標(biāo)注偏好來訓(xùn)練Reward model,再結(jié)合RL對模型進(jìn)行訓(xùn)練。原因是大規(guī)模語料中沒有與人類對齊的監(jiān)督信號??偠灾?,或許在某些任務(wù)上,我們不需要“人工標(biāo)注”,但并不是說模型不需要任務(wù)相關(guān)的“監(jiān)督信號”,而如果我們對模型有更加High-level的要求,比如與人類對齊,如果數(shù)據(jù)中沒有此類信號,那么“人工標(biāo)注”是必須的。再回想下GPT-3.5為什么要在語料中加入Code語料,這是因為訓(xùn)練GPT-3的45TB中沒有足夠的與代碼相關(guān)的數(shù)據(jù)?;仡橤PT的發(fā)展史我們可以看到,在LM建模能力和算力對模型規(guī)模擴(kuò)大的支持下,人們逐漸從對數(shù)據(jù)集的標(biāo)注轉(zhuǎn)向了對數(shù)據(jù)集分布的設(shè)計上。

3.1.2 對多模態(tài)的啟發(fā)?

GPT的逐漸進(jìn)化不斷解放了對不同任務(wù)的數(shù)據(jù)標(biāo)注、模型結(jié)構(gòu)的設(shè)計,這兩點實際上是讓模型逐漸變得通用。但通用的模型不僅僅應(yīng)該是task-agnostic,還應(yīng)該是modal-agnostic。那如何構(gòu)建一個可以允許多模態(tài)數(shù)據(jù)輸入的通用模型呢?個人認(rèn)為,這里需要重點關(guān)注的問題有兩個(a)通用的模型結(jié)構(gòu)設(shè)計,在這里Transformer仍然是可以滿足的,比如處理圖像數(shù)據(jù)的ViT仍然是基于Transformer結(jié)構(gòu)的。(b)多模態(tài)數(shù)據(jù)集的構(gòu)建,即如何構(gòu)建一個數(shù)據(jù)集,能夠在LM范式下學(xué)到圖像與文本或者是其它模態(tài)之間的依賴關(guān)系。比如圖片文本對,Web上的圖文,還可以加入一些其它更有意義的數(shù)據(jù)比如視覺問答。

3.1.3 ChatGPT對于同一個問題為什么能夠生成不同的答案?

咨詢了下資深NLPer,應(yīng)該是Beam Search,附傳送門(https://machinelearningmastery.com/beam-search-decoder-natural-language-processing/)。

3.1.4 ChatGPT是如何拒絕回答知識范圍外的問題?

目前看來,這個問題在ChatGPT中解決得并不是很完美。這涉及了官方發(fā)布的缺陷中的第 1.(1),1.(2)和 4。大多數(shù)人被ChatGPT已有的能力所吸引,但對于一個可靠的AI來說,拒絕回答知識范圍外的問題在實際應(yīng)用中是十分必要的。舉個例子, 2016年5月,第一例由輔助駕駛系統(tǒng)造成的死亡,原因是感知系統(tǒng)混淆了前方白色的車和明亮的天空,如下圖:

拒絕回答知識范圍外的問題,可以認(rèn)為是模型如何表達(dá)自己的認(rèn)知(Express uncertainty),或者是模型如何識別分布外的樣本(Out-of-distribution detection,OOD detection)。例如,在上述例子中,如果自動駕駛系統(tǒng)能夠表達(dá)該場景下其對前方物體的判斷是不確定的,或者提醒駕駛者前方出現(xiàn)的場景是Out-of-distribution的,那么在這種境況下就可以選擇暫時停下然后提醒駕駛者人為判斷手動駕駛。如果ChatGPT具備這種能力,那么就不會出現(xiàn)一本正經(jīng)說瞎話的情況,根據(jù)筆者目前對ChatGPT的體驗,ChatGPT在這方面的能力可能有3種情況,(a)不具備表達(dá)自己認(rèn)知的能力,(b) 或者有可能只對語言生成有認(rèn)知上的表達(dá),但對生成內(nèi)容的真實性沒有認(rèn)知上的表達(dá),(c) 有可能(但也不一定,)有一定的OOD detection能力。接下來呈上筆者的探究歷程。

剛開始思考這個問題的時候,是在海外體驗同事調(diào)用ChatGPT制作的群Bot的時候。起初,一位同事對ChatGPT發(fā)問:

然后ChatGPT的回答是:

(按理說45TB的語料中應(yīng)該存在這樣簡單的問題吧)此時,筆者問ChatGPT:

ChatGPT回答說:

看到上述回答,筆者頓感被ChatGPT搪塞了,當(dāng)時的猜測是,或許它用了Uncertainty learning,于是接著發(fā)問:

而ChatGPT給出了肯定的回答:

(當(dāng)時覺得可能猜中了,但過幾天再問它它竟然給出了不一樣的回答,被騙了??),然后筆者打算再問一些技術(shù)細(xì)節(jié),并且這次改為用英語提問:

ChatGPT給出的答案是:

上述回答以筆者對Uncertainty learning的了解覺得非常合乎邏輯,于是接著提問:

ChatGPT回答如下:

這個回答跟筆者預(yù)想的一樣,回答內(nèi)容上的邏輯也合理。 但過了幾天,筆者突然在Blog中看到ChatGPT有一本正經(jīng)說瞎話的毛病,于是讓另一個同事用他的賬號去問ChatGPT幾乎相同的問題:

這幾次的回答與之前的回答完全相悖,并且再次問它,它又給出了之前的答案:

結(jié)合這幾次的提問,作者對其是否有表達(dá)不確定性的能力變得不確定了,但確定的是,它確實偶爾會一本正經(jīng)說瞎話。這其實與從InstructGPT開始的與人類對齊的目標(biāo)相悖了,因為ChatGPT不符合Honest的目標(biāo)。但筆者沒有灰心,馬上去瀏覽了一遍所有大佬的Blog,看他們是否對ChatGPT這一方面的能力有所解讀,最后只有一篇Blog提到了這一點(萬字拆解!追溯ChatGPT各項能力的起源),博主說:“模型知道它不知道什么不是通過編寫規(guī)則來實現(xiàn)的, 而是通過RLHF解鎖的。這是一個非常令人驚訝的發(fā)現(xiàn),因為 RLHF 的最初目標(biāo)是讓模型生成符合人類期望的回答,這更多是讓模型生成安全的句子,而不是讓模型知道它不知道的內(nèi)容”。但總覺得這樣的推測沒有什么依據(jù),于是筆者找了幾篇用RLHF訓(xùn)練的大模型的Paper,希望從中找到答案。最后,在Anthropic的一篇題為Training a Helpful and Harmless Assistant with RL from HF(https://arxiv.org/pdf/2204.05862.pdf)的Paper里找到了可能的答案。先看下Anthropic公司的介紹:

Anthropic是一家人工智能安全和研究公司,致力于構(gòu)建可靠、可解釋和可控制的人工智能系統(tǒng)。今天的大型通用系統(tǒng)可以帶來巨大的好處,但也可能是不可預(yù)測、不可靠和不透明的:我們的目標(biāo)是在這些問題上取得進(jìn)展。目前,我們主要專注于這些目標(biāo)的研究;在未來的道路上,我們預(yù)見到我們的工作有很多機(jī)會為商業(yè)和公共利益創(chuàng)造價值。

那Anthropic是怎么解決這個問題的呢?答案是OOD detection:

具體來說,作者將收集的helpfulness dataset中的每一個樣本,也就是in-distribution中的樣本輸入到訓(xùn)練好的模型中,取其中第層的輸出向量,用表示。所有訓(xùn)練集的樣本可以得到In-distribution的向量集合

。然后計算整個分布的均值

和協(xié)方差矩陣

。然后,對于一個新的樣本所得到的第層的向量,得到其與in-distribution集合的距離為。然后就可以設(shè)定閾值排除OOD的樣本了。

目前猜測,(1)ChatGPT用了Uncertainty Learning的技術(shù)可能性低,因為Uncertainty Learning的技術(shù)基本上可以看作是Bayesian Neural Network,其在推理時涉及模型參數(shù)上的采樣,這對大模型來說是不現(xiàn)實的,即便是Mc Dropout,也需要推理多次得到預(yù)測分布。(2)但如果ChatGPT用了Uncertainty Learning技術(shù)也可能出現(xiàn)一本正經(jīng)說瞎話的情況,原因是模型預(yù)訓(xùn)練期間的目標(biāo)是語言建模,它即便能表達(dá)對語言建模的認(rèn)知(即當(dāng)前序列的下一個序列或token是什么)也無法解決對該問題是否能做出真實的回答的認(rèn)知。(3)或許是在Reward Model里用了Uncertainty Learning,而ChatGPT在Inference的時候可以利用Reward Model的認(rèn)知來判斷是否是RLHF期間In-distribution的樣本。(4)用了類似于Anthropic的Paper中的OOD detection技術(shù)的可能性較大,因為ChatGPT收集了比之前更多的指令。(5)不論是用Uncertainty Learning還是OOD detection實際上是ChatGPT本身的作用,其實還可以用Reward Model給ChatGPT的答案做過濾,即分?jǐn)?shù)低于某個閾值則給出一些搪塞的回答。(6)最后一種可能的情況則如萬字拆解!追溯ChatGPT各項能力的起源所說的那樣,RLHF直接給予了模型這種能力,比如標(biāo)注者標(biāo)注偏好時,給模型對敏感問題回答時做出“拒絕回答的回復(fù)”更高的偏好,而RLHF期間模型學(xué)到了這一點。但也帶來兩個問題,(a)模型更謹(jǐn)慎而沒法回答一些不敏感的問題,即RLHF可能有一些副作用不僅限制了模型對一些敏感問題的回答,還限制了對非敏感問題的回答(但回復(fù)的時候加入一些“我不了解”,“我無法回答”來給用戶一種它對自身能力有認(rèn)知的錯覺);(b)某些情況還是會回答敏感的問題,這其實取決于RLHF訓(xùn)練時數(shù)據(jù)的豐富度。

3.1.5 如何獲得更強(qiáng)的泛化——知識組合,系統(tǒng)性泛化

從GPT-3開始,模型似乎已經(jīng)有了組合泛化的能力,通過指令來使模型理解任務(wù)然后自動組合預(yù)訓(xùn)練期間學(xué)到的知識得到我們期望的回答。GPT-3的這種能力來自于大規(guī)模參數(shù)支持下在大語料中進(jìn)行LM訓(xùn)練,并在Instruct Learning下激活。這基本上是從數(shù)據(jù)規(guī)模和模型參數(shù)規(guī)模以及學(xué)習(xí)范式角度來獲得能力。那么是否有其它角度可以進(jìn)一步提高模型的知識組合和系統(tǒng)性泛化的能力呢?這個答案可能是能直接支持計算單元重用的Inductive Bias,比如CNN在處理圖像時在橫向重用計算單元(卷積核),RNN則在垂直方向重用計算單元(垂直方向)。近兩年,Modular Inductive Bias 逐步得到大家關(guān)注,個人認(rèn)為,Modular Inductive Bias是傳統(tǒng)有符號AI和現(xiàn)在Learning based AI的一個結(jié)合,并且有希望將多模態(tài)、多任務(wù)整合在一個更通用的模型中。這里推薦兩個資料:

論文:Dynamic Inference with Neural Interpreters(https://arxiv.org/pdf/2110.06399.pdf)

博文:最前沿: 從Modularity到Generalization(https://arxiv.org/pdf/2110.06399.pdf)

3.1.6 In-context learning 為什么起作用?

請參考這篇長文:被GPT帶飛的In-Context Learning為什么起作用?模型在秘密執(zhí)行梯度下降

3.3 寫在最后

筆者剛剛進(jìn)入NLP領(lǐng)域5個月,是一個萌新NLPer??,對NLP領(lǐng)域更全面的認(rèn)識還不是很全。本文的絕大多數(shù)內(nèi)容是參考自O(shè)pen AI發(fā)布的官方論文或是Blog,還有一小部分是來自知乎和公眾號上資深大佬的解讀,最后結(jié)合筆者過往在ML方面的經(jīng)驗,加入了一些個人解讀。因此,如果讀者發(fā)現(xiàn)其中有不合理的地方,歡迎在評論區(qū)指出。最后,感謝andrei和bella同學(xué)在本文校對方面做的努力。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
深度ChatGPT(三):InstructGPT&ChatGPT-用人的反饋引導(dǎo)大規(guī)模語言模型變得更...
萬字長文解讀:ChatGPT的前世今生
ChatGPT簡介
一文搞懂ChatGPT相關(guān)概念和區(qū)別:GPT、大模型、AIGC、LLM、Transformer、羊駝、LangChain…..
“中國的ChatGPT”真的要來了嗎?
Paper:《Instruction Tuning for Large Language Models: A Survey—大型語言模型的指令調(diào)優(yōu)的綜述》翻譯與解讀
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服