引言
近期,ChatGPT 火遍圈內(nèi)外,連微博熱搜都出現(xiàn)了它的身影。突然之間,好多許久未聯(lián)系的各行各業(yè)的同學(xué)好友都發(fā)來“問候”:ChatGPT 是什么?
其實(shí),ChatGPT 的成功并非一朝一夕,而是 OpenAI 長達(dá) 4 年多持續(xù)努力、不懈追求取得的成果。從 2018 年的初代 GPT 開始,到 GPT-2、GPT-3、InstructGPT,以及后續(xù)一系列變體模型(統(tǒng)稱 GPT-3.5 系列),到如今的 ChatGPT,每一步都是不可或缺的。所以,ChatGPT 不是一次偉大創(chuàng)新的產(chǎn)物,而是許多個階段性創(chuàng)新持續(xù)疊加的結(jié)果。
本文從初代 GPT 開始,總結(jié)整個 GPT 系列的發(fā)展演變,主要包括思想演進(jìn)、模型結(jié)構(gòu)和訓(xùn)練數(shù)據(jù)的變化等,如有不嚴(yán)謹(jǐn)之處,敬請諒解并指出。
注:
1. 本文內(nèi)容大部分來源于原始論文,一部分觀點(diǎn)來源于其他技術(shù)大佬(文末參考中基本已列出,如有遺漏敬請諒解并指出),少量是個人總結(jié)。
2. 本文部分圖是自己總結(jié)并畫出,如需引用請注明來源,萬分感謝。
GPT
背景
讓我們把視角回到 2018 年,那個時候 NLP 在深度學(xué)習(xí)上基本還處于 word2vec 以及為不同任務(wù)做定制化深度模型的情況,雖然已經(jīng)有 ELMo 這類預(yù)訓(xùn)練模型出現(xiàn),但是其影響力還遠(yuǎn)遠(yuǎn)不足。在這個背景下,GPT 第一代預(yù)訓(xùn)練語言模型出現(xiàn)了。
GPT 原文標(biāo)題為 Improving Language Understanding by Generative Pre-Training,即使用通用的預(yù)訓(xùn)練模型來提升語言理解能力(Generative Pre-Training 也可理解為“生成式預(yù)訓(xùn)練”)。GPT 這個名字就來源于 Generative Pre-Training。
從論文標(biāo)題可以引出了兩個問題:
1. 什么是通用?在學(xué)習(xí)通用的,遷移性強(qiáng)的文本特征表達(dá)時,什么目標(biāo)函數(shù)是有效的?
2. 有了通用的特征表達(dá)之后,如何將它遷移到不同下游任務(wù)?
GPT 使用了預(yù)訓(xùn)練 + 微調(diào)的方式解決了這兩個問題。
模型結(jié)構(gòu)
在預(yù)訓(xùn)練階段,GPT 選擇 transformer 的 decoder 部分作為模型的主要模塊,transformer 是 2017年 google 提出的一種特征抽取模型,GPT 以多層 transformer 堆疊的方式構(gòu)成了整個預(yù)訓(xùn)練模型結(jié)構(gòu)。
以我們現(xiàn)在的視角來看,選擇 transformer 還是 RNN,這個答案是顯而易見的,但是在當(dāng)時那個時間點(diǎn)那個環(huán)境下,選擇 transformer 還是 RNN 作為預(yù)訓(xùn)練模型結(jié)構(gòu)并不是一個顯而易見的問題。在模型選擇時,作者發(fā)現(xiàn)與 RNN 相比,Transformer 具有更加結(jié)構(gòu)化的記憶單元來解決長距離依賴問題,處理更長的文本信息,從而使得學(xué)習(xí)到的特征在各個任務(wù)中的遷移具有更強(qiáng)的魯棒性。
我們都知道,Transformer 模型一開始是用來做 seq2seq 任務(wù)的,所以它包含編碼器和解碼器兩個部分;他們兩者的區(qū)別主要是,編碼器在抽取序列中某一個詞的特征時能夠看到整個序列中所有的信息,即上文和下文同時看到;而解碼器中因為有 mask 機(jī)制的存在,使得它在編碼某一個詞的特征時只能看到自身和它之前的文本信息。GPT 模型選擇了 Transformer 的 decoder,也就是解碼器的部分,也正是因為 GPT 的預(yù)訓(xùn)練目標(biāo)函數(shù)選取的是標(biāo)準(zhǔn)的語言模型目標(biāo)函數(shù),使得模型在預(yù)測某一個詞的時候只考慮上文信息而不參考下文。
大家知道,BERT 在預(yù)訓(xùn)練的時候選擇的不是標(biāo)準(zhǔn)的語言模型作為目標(biāo)函數(shù),而是一種 mask 語言模型,也就是在預(yù)測句子中某一個詞的時候可以同時看到它前后的所有上下文信息,類似于一種完形填空任務(wù),所以 BERT 選擇的是 Transformer 的編碼器模塊。
編碼器和解碼器的選取倒不是 GPT 和 BERT 的區(qū)別,它們的區(qū)別主要是預(yù)訓(xùn)練目標(biāo)函數(shù)的選取,有人認(rèn)為 GPT 選擇的是一個更難的訓(xùn)練目標(biāo),它是根據(jù)前面的信息去預(yù)測下文,預(yù)測未來肯定是比完形填空難度要更大的。這也能從某種程度上解釋了為什么相同規(guī)模的 GPT 和 BERT 模型,GPT 的效果要比 BERT 差。但是從另一個角度去想,如果能夠把預(yù)測未來這個事情做好的話,它最終所能達(dá)到的效果的天花板一定是更高的,這可能也是 OpenAI 從一開始到現(xiàn)在一直堅持使用標(biāo)準(zhǔn)語言模型目標(biāo)函數(shù)來做預(yù)訓(xùn)練模型的其中一個原因吧,當(dāng)然這只是一種猜想。事實(shí)證明,從 GPT-3 開始,到最近的 ChatGPT,OpenAI 所取得的令人驚艷的效果也一定程度上證明了他們的選擇的正確性。
模型訓(xùn)練
訓(xùn)練數(shù)據(jù)方面,初代 GPT 使用了 BooksCorpus 數(shù)據(jù)集,文本大小約 5 GB,包含 7400w+ 的句子。該數(shù)據(jù)集是由約 7000 本獨(dú)立的、不同風(fēng)格類型的書籍組成。選擇該數(shù)據(jù)集主要的好處是書籍文本包含大量高質(zhì)量長句,保證模型學(xué)習(xí)長距離信息依賴。
模型的一些關(guān)鍵參數(shù)為:
下游任務(wù)微調(diào)
如上圖所示,分別例舉了 NLP 中四個常見任務(wù)(文本分類、文本蘊(yùn)含、文本相似度、問答任務(wù))作為下游任務(wù)應(yīng)用到 GPT 模型時,其輸入序列是如何構(gòu)造的,以及對應(yīng)的預(yù)測層是如何設(shè)計的。
總的來說,都是通過在序列前后添加 Start 和 Extract 特殊標(biāo)識符來表示開始和結(jié)束,序列之間添加必要的 Delim 標(biāo)識符來表示分隔,當(dāng)然實(shí)際使用時不會直接用 “Start/Extract/Delim” 這幾個詞,而是使用某些特殊符號?;诓煌掠稳蝿?wù)構(gòu)造的輸入序列,使用預(yù)訓(xùn)練的 GPT 模型進(jìn)行特征編碼,然后使用序列最后一個 token 的特征向量進(jìn)行預(yù)測。
可以看到,不論下游任務(wù)的輸入序列怎么變,最后的預(yù)測層怎么變,中間的特征抽取模塊都是不變的,具有很好的遷移能力。
初代 GPT 總結(jié)
初代 GPT 到底做了什么?有哪些貢獻(xiàn)?
第一,它是最早一批提出在 NLP 任務(wù)上使用 pre-train + fine-tuning 范式的工作。
第二,GPT 的實(shí)驗證明了模型的精度和泛化能力會隨著解碼器層數(shù)增加而不斷提升,而且目前還有提升空間,如下圖:
第三,預(yù)訓(xùn)練模型具有 zero-shot 的能力,并且能隨著預(yù)訓(xùn)練的進(jìn)行不斷增強(qiáng),如下圖:
值得注意的是,上述第二和第三點(diǎn),也直接預(yù)示著后續(xù) GPT-2 和 GPT-3 的出現(xiàn)。
其實(shí) pre-train + fine-tuning 在計算機(jī)視覺里面早在好多年前已經(jīng)成為主流的算法,但是在 NLP 中一直沒有流行起來,主要還是因為在 NLP 里面沒有像 ImageNet 那樣大規(guī)模標(biāo)好的數(shù)據(jù)集,這也導(dǎo)致相當(dāng)一段時間內(nèi),深度學(xué)習(xí)在 NLP 的進(jìn)展相對比較緩慢,直到 GPT 和 BERT 的出現(xiàn)才漸漸打開局面。
如果說使用大規(guī)模無標(biāo)注的文本進(jìn)行模型的預(yù)訓(xùn)練使 NLP 的發(fā)展往前走了一大步,那么 GPT 系列一直在努力推動的 zero-shot 可以說是走了另一大步。
為了進(jìn)一步驗證 zero-shot 的能力,OpenAI 在 GPT-1 提出一年后,推出了 GPT-2。
GPT-2
背景
GPT-2 原文標(biāo)題為 Language Models are Unsupervised Multitask Learners,字面意思為語言模型是一種無監(jiān)督多任務(wù)學(xué)習(xí)器。
標(biāo)題中的多任務(wù)學(xué)習(xí)與我們常規(guī)理解的有監(jiān)督學(xué)習(xí)中的多任務(wù)不太一樣,這里主要是指模型從大規(guī)模數(shù)據(jù)中學(xué)到的能力能夠直接在多個任務(wù)之間進(jìn)行遷移,而不需要額外提供特定任務(wù)的數(shù)據(jù),因此引出了 GPT-2 的主要觀點(diǎn):zero-shot。
不論是 GPT-1 還是 BERT,NLP 任務(wù)中比較主流的 pre-train + fine-tuning 始終還是需要一定量的下游任務(wù)有監(jiān)督數(shù)據(jù)去進(jìn)行額外的訓(xùn)練,在模型層面也需要額外的模塊去進(jìn)行預(yù)測,仍然存在較多人工干預(yù)的成本。GPT-2 想徹底解決這個問題,通過 zero-shot,在遷移到其他任務(wù)上的時候不需要額外的標(biāo)注數(shù)據(jù),也不需要額外的模型訓(xùn)練。
在 GPT-1 中,下游任務(wù)需要對不同任務(wù)的輸入序列進(jìn)行改造,在序列中加入了開始符、分隔符和結(jié)束符之類的特殊標(biāo)識符,但是在 zero-shot 前提下,我們無法根據(jù)不同的下游任務(wù)去添加這些標(biāo)識符,因為不進(jìn)行額外的微調(diào)訓(xùn)練,模型在預(yù)測的時候根本不認(rèn)識這些特殊標(biāo)記。所以在 zero-shot 的設(shè)定下,不同任務(wù)的輸入序列應(yīng)該與訓(xùn)練時見到的文本長得一樣,也就是以自然語言的形式去作為輸入,例如下面兩個任務(wù)的輸入序列是這樣改造的:
機(jī)器翻譯任務(wù):translate to french, { english text }, { french text }
閱讀理解任務(wù):answer the question, { document }, { question }, { answer }
為什么上述輸入序列的改造是有效的?或者說為什么 zero-shot 是有效的?這里引用原文的一句話:
Our approach motivates building as large and diverse a dataset as possible in order to collect natural language demonstrations of tasks in as varied of domains and contexts as possible.
大概意思是,從一個盡可能大且多樣化的數(shù)據(jù)集中一定能收集到不同領(lǐng)域不同任務(wù)相關(guān)的自然語言描述示例,例如下圖中展示了英法互譯任務(wù)在自然語言中出現(xiàn)的示例,表明了不同任務(wù)的任務(wù)描述在語料中真實(shí)存在:
所以 GPT-2 的核心思想就是,當(dāng)模型的容量非常大且數(shù)據(jù)量足夠豐富時,僅僅靠語言模型的學(xué)習(xí)便可以完成其他有監(jiān)督學(xué)習(xí)的任務(wù),不需要在下游任務(wù)微調(diào)。
模型結(jié)構(gòu)
在模型結(jié)構(gòu)方面,整個 GPT-2 的模型框架與 GPT-1 相同,只是做了幾個地方的調(diào)整,這些調(diào)整更多的是被當(dāng)作訓(xùn)練時的 trick,而不作為 GPT-2 的創(chuàng)新,具體為以下幾點(diǎn):
1. 后置層歸一化( post-norm )改為前置層歸一化( pre-norm );
2. 在模型最后一個自注意力層之后,額外增加一個層歸一化;
3. 調(diào)整參數(shù)的初始化方式,按殘差層個數(shù)進(jìn)行縮放,縮放比例為 1:sqrt{n} ;
4. 輸入序列的最大長度從 512 擴(kuò)充到 1024;
其中,關(guān)于 post-norm 和 pre-norm 可以參考《Learning Deep Transformer Models for Machine Translation》。兩者的主要區(qū)別在于,post-norm 將 transformer 中每一個 block 的層歸一化放在了殘差層之后,而 pre-norm 將層歸一化放在了每個 block 的輸入位置,如下圖所示:
GPT-2 進(jìn)行上述模型調(diào)整的主要原因在于,隨著模型層數(shù)不斷增加,梯度消失和梯度爆炸的風(fēng)險越來越大,這些調(diào)整能夠減少預(yù)訓(xùn)練過程中各層之間的方差變化,使梯度更加穩(wěn)定。
最終 GPT-2 提供了四種規(guī)模的模型:
其中 117M 參數(shù)等價于 GPT-1 模型,345M 參數(shù)模型用于對標(biāo)同期的 BERT-large 模型。
訓(xùn)練數(shù)據(jù)與實(shí)驗效果
在訓(xùn)練數(shù)據(jù)方面,為了保證 zero-shot 的效果,必須要足夠大且覆蓋面廣。所以 GPT-2 專門爬取了大量的網(wǎng)絡(luò)文本數(shù)據(jù),最后得到的數(shù)據(jù)集叫 WebText。它選取了 Reddit 上的高質(zhì)量帖子,最終得到 4500w 網(wǎng)頁鏈接,800w 有效的文本文檔,語料大小為 40G。
在實(shí)驗效果上,由于 GPT-2 主要是做 zero-shot,所以在實(shí)驗部分,很多的實(shí)驗對比都是在無監(jiān)督的設(shè)定下進(jìn)行的,也就是說他對比的都是無監(jiān)督的算法。
從上述效果可以看到,GPT-2 在較多任務(wù)上對比無監(jiān)督算法取得了一定的提升,證明了 zero-shot 的能力。但是,在很多任務(wù)上與有監(jiān)督微調(diào)的方法相比還是有一些差距的,這可能也是 GPT-2 在當(dāng)時影響力沒有那么大的一個原因。
與 GPT-1 的區(qū)別
整體來看,GPT-2 相比于 GPT-1 有如下幾點(diǎn)區(qū)別:
1. 主推 zero-shot,而 GPT-1 為 pre-train + fine-tuning;
2. 訓(xùn)練數(shù)據(jù)規(guī)模更大,GPT-2 為 800w 文檔 40G,GPT-1 為 5GB;
3. 模型大小,GPT-2 最大 15 億參數(shù),GPT-1為 1 億參數(shù);
4. 模型結(jié)構(gòu)調(diào)整,層歸一化和參數(shù)初始化方式;
5. 訓(xùn)練參數(shù),batch_size 從 64 增加到 512,上文窗口大小從 512 增加到 1024,等等;
GPT-3
背景
雖然 GPT-2 主推的 zero-shot 在創(chuàng)新度上有比較高的水平,但是由于其在效果上表現(xiàn)平平,所以在業(yè)界并沒有取得比較大的影響力,而 GPT-3 正是為了解決效果上的問題而提出的。GPT-3 不再去追求那種極致的不需要任何樣本就可以表現(xiàn)很好的模型,而是考慮像人類的學(xué)習(xí)方式那樣,僅僅使用極少數(shù)樣本就可以掌握某一個任務(wù),因此就引出了 GPT-3 標(biāo)題 Language Models areFew-ShotLearners。
這里的 few-shot 不是像之前的方式那樣,使用少量樣本在下游任務(wù)上去做微調(diào),因為在 GPT-3 那樣的參數(shù)規(guī)模下,即使是參數(shù)微調(diào)的成本也是高到無法估計。
模型結(jié)構(gòu)
在模型結(jié)構(gòu)上,GPT-3 延續(xù)使用 GPT 模型結(jié)構(gòu),但是引入了 Sparse Transformer 中的 sparse attention 模塊(稀疏注意力)。
sparse attention 與傳統(tǒng) self-attention(稱為 dense attention) 的區(qū)別在于:
dense attention:每個 token 之間兩兩計算 attention,復(fù)雜度 O(n2)
sparse attention:每個 token 只與其他 token 的一個子集計算 attention,復(fù)雜度 O(n*logn)
具體來說,sparse attention 除了相對距離不超過 k 以及相對距離為 k,2k,3k,... 的 token,其他所有 token 的注意力都設(shè)為 0,如下圖所示:
使用 sparse attention 的好處主要有以下兩點(diǎn):
1.減少注意力層的計算復(fù)雜度,節(jié)約顯存和耗時,從而能夠處理更長的輸入序列;
2.具有“局部緊密相關(guān)和遠(yuǎn)程稀疏相關(guān)”的特性,對于距離較近的上下文關(guān)注更多,對于距離較遠(yuǎn)的上下文關(guān)注較少;
關(guān)于 sparse attention 詳情可參考《Generating Long Sequences with Sparse Transformers》。
最終 GPT-3 在訓(xùn)練過程中得到了如下不同規(guī)模的模型:
其中規(guī)模最大的模型稱為 GPT-3,模型參數(shù)量為 1750 億。
下游任務(wù)評估方法
如上圖所示,GPT-3 在下游任務(wù)的評估與預(yù)測時,提供了三種不同的方法:
Zero-shot:僅使用當(dāng)前任務(wù)的自然語言描述,不進(jìn)行任何梯度更新;
One-shot:當(dāng)前任務(wù)的自然語言描述,加上一個簡單的輸入輸出樣例,不進(jìn)行任何梯度更新;
Few-shot:當(dāng)前任務(wù)的自然語言描述,加上幾個簡單的輸入輸出樣例,不進(jìn)行任何梯度更新;
其中 Few-shot 也被稱為 in-context learning,雖然它與 fine-tuning 一樣都需要一些有監(jiān)督標(biāo)注數(shù)據(jù),但是兩者的區(qū)別是:
1.【本質(zhì)區(qū)別】fine-tuning 基于標(biāo)注數(shù)據(jù)對模型參數(shù)進(jìn)行更新,而 in-context learning 使用標(biāo)注數(shù)據(jù)時不做任何的梯度回傳,模型參數(shù)不更新;
2. in-context learning 依賴的數(shù)據(jù)量(10~100)遠(yuǎn)遠(yuǎn)小于 fine-tuning 一般的數(shù)據(jù)量;
最終通過大量下游任務(wù)實(shí)驗驗證,F(xiàn)ew-shot 效果最佳,One-shot 效果次之,Zero-shot 效果最差:
上圖中,橫坐標(biāo)為模型參數(shù)量,縱坐標(biāo)為任務(wù)精度,圖中大量灰色線表示不同下游任務(wù),橙色/綠色/藍(lán)色線是下游任務(wù)效果的平均值。
訓(xùn)練數(shù)據(jù)
由于 GPT-3 在模型規(guī)模上的擴(kuò)大,在訓(xùn)練數(shù)據(jù)方面也必須進(jìn)行擴(kuò)充來適配更大的模型使其發(fā)揮出相應(yīng)的能力。
GPT-3 使用了多個數(shù)據(jù)集,其中最大的是 CommonCrawl,原始未處理的數(shù)據(jù)達(dá)到了 45TB,其實(shí)在 GPT-2 的時候他們就有考慮使用這個數(shù)據(jù)集,但是后來還是覺得這個數(shù)據(jù)集太臟了所以沒用,但是現(xiàn)在 GPT-3 的模型規(guī)模太大了,使得訓(xùn)練對數(shù)據(jù)量的需求也增加了很多,他們不得不重新考慮這個數(shù)據(jù)集。因此,他們必須在這個數(shù)據(jù)集上做一些額外的數(shù)據(jù)清洗工作來盡量保證數(shù)據(jù)的質(zhì)量。
數(shù)據(jù)處理主要包括以下幾個部分:
1. 使用高質(zhì)量數(shù)據(jù)作為正例,訓(xùn)練 LR 分類算法,對 CommonCrawl 的所有文檔做初步過濾;
2. 利用公開的算法做文檔去重,減少冗余數(shù)據(jù);
3. 加入已知的高質(zhì)量數(shù)據(jù)集;
其中“高質(zhì)量數(shù)據(jù)”主要是指 BERT、GPT、GPT-2 使用過的數(shù)據(jù),最終處理完成后使用的數(shù)據(jù)規(guī)模約 570G。
如上圖所示,在實(shí)際實(shí)驗過程中,對不同數(shù)據(jù)集按照一定的比例進(jìn)行采樣,這個比例不是按照原始數(shù)據(jù)量多少來劃分的,不然這里基本采樣到的就都是 common crawl 的數(shù)據(jù)了,可以看到這里 common crawl 的數(shù)據(jù)量比其他幾個多很多。進(jìn)行采樣的原因主要考慮到,就算做了一些數(shù)據(jù)清洗還是覺得 common crawl 的數(shù)據(jù)質(zhì)量不如其他幾個。最終采樣的時候,雖然 common crawl 的數(shù)據(jù)量是其他幾個數(shù)據(jù)集的上百倍,但是實(shí)際占比是 60%,有 40% 的數(shù)據(jù)是能夠保證質(zhì)量的。
實(shí)驗分析
GPT-3 花了大部分篇幅介紹了各種 NLP 任務(wù)上的實(shí)驗結(jié)果和分析,大家如果對某個任務(wù)感興趣的話可以自行閱讀一下論文對應(yīng)的章節(jié),本文就不做詳細(xì)介紹了。
下圖是 GPT-3 的一個重要分析結(jié)果:
圖中橫坐標(biāo)為計算量,可以簡單理解為模型規(guī)?;蛘邤?shù)據(jù)量(不止如此),縱坐標(biāo)為任務(wù)精度??梢钥吹?,當(dāng)我們想要線性的提升一個任務(wù)的效果時,往往需要指數(shù)級的提升模型的規(guī)模和所需的數(shù)據(jù)量。
GPT-3 的局限性
雖然 GPT-3 取得了非常亮眼的效果,但是出于嚴(yán)謹(jǐn)?shù)膶W(xué)術(shù)態(tài)度,論文里還是客觀的分析了自己的一些局限性:
1.當(dāng)生成文本長度較長時,GPT-3 還是會出現(xiàn)各種問題,比如重復(fù)生成一段話,前后矛盾,邏輯銜接不好等等;
2.模型和結(jié)構(gòu)的局限性,對于某一些任務(wù),比如填空類型的文本任務(wù),使用單向的自回歸語言模型確實(shí)存在一定的局限性,這時候如果同時考慮上文和下文的話,效果很可能會更好一些;
3. 預(yù)訓(xùn)練語言模型的通病,在訓(xùn)練時,語料中所有的詞都被同等看待,對于一些虛詞或無意義的詞同樣需要花費(fèi)很多計算量去學(xué)習(xí),無法區(qū)分學(xué)習(xí)重點(diǎn);
4.樣本有效性或者利用率過低,訓(xùn)一個模型幾乎要把整個互聯(lián)網(wǎng)上的文本數(shù)據(jù)全都用起來,這與我們?nèi)祟悓W(xué)習(xí)時所需要的成本存在非常大的差異,這方面也是未來人工智能研究的重點(diǎn);
5. 有一個不太確定的點(diǎn)是,模型到底是在“學(xué)習(xí)”還是在“記憶”?我們當(dāng)然希望它能夠?qū)W習(xí),但是在使用數(shù)據(jù)量如此大的情況下,很難去判斷它到底是什么樣的;
6. 眾所周知,GPT-3 的訓(xùn)練和使用成本都太大了;
7. GPT-3 跟很多深度學(xué)習(xí)模型一樣,都是不可解釋的,沒辦法知道模型內(nèi)部到底是如何作出一系列決策的;
8. 模型最終呈現(xiàn)的效果取決于訓(xùn)練數(shù)據(jù),這會導(dǎo)致模型會出現(xiàn)各種各樣的“偏見”;
某些社會影響 —— 模型“偏見”
GPT-3 可能會被拿來做一些壞事,造成一定的社會影響。比如生成新聞稿,散布一些不實(shí)的消息,生成垃圾郵件,釣魚郵件,論文造假之類的。
這里以“種族偏見”和“性別偏見”為例:
上圖展示了模型的“種族偏見”傾向,當(dāng)給模型輸入“The {種族} woman was very”時,可以根據(jù)后續(xù)預(yù)測詞的概率分布簡單分析出 GPT-3 對不同種族的人具有一定的出詞傾向性。圖中縱坐標(biāo)的 0 表示一種正常水平,大于 0 表示比較正面的反饋,小于 0 表示比較負(fù)面的反饋??梢钥吹絹喼奕嗽谀P偷脑u價里算是比較高的,但是最下面的那條線是黑人,所以當(dāng)一個模型對不同種族的人的差異有這么大的時候,還是比較可怕的。
上圖展示了模型的“性別偏見”,當(dāng)給模型輸入 “he was very” 或 “she was very” 時,GPT-3 給出的詞的概率分布具有一定的傾向性,可能會產(chǎn)生一些具有偏見的詞,比如形容男人時經(jīng)常出現(xiàn)“Lazy”。
雖然 GPT-3 存在上述問題,不過當(dāng)這些社會問題被拿出來討論時,也側(cè)面反映了 GPT-3 的效果及其影響力。
與 GPT-2 的區(qū)別
整體來看,GPT-3 相比于 GPT-2 有如下幾點(diǎn)區(qū)別:
1.效果上,超出 GPT-2 非常多,能生成人類難以區(qū)分的新聞文章;
2.主推 few-shot,相比于 GPT-2 的 zero-shot,具有很強(qiáng)的創(chuàng)新性;
3.模型結(jié)構(gòu)略微變化,采用 sparse attention 模塊;
4.海量訓(xùn)練語料45TB(清洗后 570GB),相比于 GPT-2 的 40GB;
5.海量模型參數(shù),最大
InstructGPT
背景
GPT-3 雖然在各大 NLP 任務(wù)以及文本生成的能力上令人驚艷,但是他仍然還是會生成一些帶有偏見的,不真實(shí)的,有害的造成負(fù)面社會影響的信息,而且很多時候,他并不按人類喜歡的表達(dá)方式去說話。在這個背景下,OpenAI 提出了一個概念“Alignment”,意思是模型輸出與人類真實(shí)意圖對齊,符合人類偏好。因此,為了讓模型輸出與用戶意圖更加 “align”,就有了 InstructGPT 這個工作。
InstructGPT 提出了一個理想化語言模型的三大目標(biāo):
從做研究的角度來講,其實(shí)很多時候人們并不在意“Alignment”問題,只要一個模型在評估的數(shù)據(jù)集上表現(xiàn)好,那基本就可以說是一個好模型;但是對于工業(yè)界來說,一個產(chǎn)品的安全性就顯得尤為重要,歷史上也出現(xiàn)過不止一次因為某個負(fù)面 case,引發(fā)社會爭議,從而導(dǎo)致整個產(chǎn)品下線的例子,特別是對于大公司來講,出現(xiàn)一次負(fù)面 case 通常是比較嚴(yán)重的。比如之前 google 和 facebook 就都出現(xiàn)過把照片中的黑人識別成黑猩猩的事件,然后隨之而來的就是產(chǎn)品的整改,公關(guān)道歉之類的。所以從這個角度來講,OpenAI 做 InstructGPT 的出發(fā)點(diǎn)是非常合理且重要的。
技術(shù)方案 —— SFT / RLHF
關(guān)于 InstructGPT 的技術(shù)方案,原文分為了三個步驟:有監(jiān)督微調(diào),獎勵模型訓(xùn)練,強(qiáng)化學(xué)習(xí)訓(xùn)練;實(shí)際上可以把它拆分成兩種技術(shù)方案,一個是有監(jiān)督微調(diào)(SFT),一個是基于人類反饋的強(qiáng)化學(xué)習(xí)(RLHF),下面我們簡單介紹這兩種技術(shù)方案。
SFT(Supervised Fine-Tuning)
本質(zhì)上來說,SFT 可以理解為人工標(biāo)注了一批數(shù)據(jù),然后去微調(diào) GPT-3。但是值得一提的是,這里標(biāo)注的數(shù)據(jù)與 GPT-3 之前用來做下游任務(wù)使用的 few-shot 格式,有非常本質(zhì)的區(qū)別。
GPT-3 中的 few-shot 對于同一個下游任務(wù),通常采用固定的任務(wù)描述方式,而且需要人去探索哪一種任務(wù)表述方式更好。顯然這種模式與真實(shí)場景下用戶的使用方式存在較大的 gap,用戶在向 GPT-3 提問時才不會采用某種固定的任務(wù)表述,而是隨心所欲地以自己的說話習(xí)慣去表達(dá)某個需求。InstructGPT 在 SFT 中標(biāo)注的數(shù)據(jù),正是為了消除這種模型預(yù)測與用戶表達(dá)習(xí)慣之間的 gap。在標(biāo)注過程中,他們從 GPT-3 的用戶真實(shí)請求中采樣大量下游任務(wù)的描述,然后讓標(biāo)注人員對任務(wù)描述進(jìn)行續(xù)寫,從而得到該問題的高質(zhì)量回答。這里用戶真實(shí)請求又被稱為某個任務(wù)的指令,即 InstructGPT 的核心思想“基于人類反饋的指令微調(diào)”。
RLHF(Reinforcement Learning from Human Feedback)
基于 SFT 得到的模型被用于后續(xù)的 RLHF 做進(jìn)一步的模型優(yōu)化。
如上圖所示,以摘要生成任務(wù)為例,詳細(xì)展示了如何基于人類反饋進(jìn)行強(qiáng)化學(xué)習(xí),最終訓(xùn)練完成得到 InstructGPT 模型。主要分為三步:
1.收集人類反饋:使用初始化模型對一個樣本生成多個不同摘要,人工對多個摘要按效果進(jìn)行排序,得到一批排好序的摘要樣本;
2.訓(xùn)練獎勵模型:使用第1步得到的樣本集,訓(xùn)練一個模型,該模型輸入為一篇文章和對應(yīng)的一個摘要,模型輸出為該摘要的得分;
3.訓(xùn)練策略模型:使用初始化的策略模型生成一篇文章的摘要,然后使用獎勵模型對該摘要打分,再使用打分值借助 PPO 算法重新優(yōu)化策略模型;
InstructGPT 總結(jié)
總的來說,InstructGPT 相對于之前的 GPT 系列,有以下幾點(diǎn)值得注意:
1. 解決 GPT-3 的輸出與人類意圖之間的 Align 問題;
2. 讓具備豐富世界知識的大模型,學(xué)習(xí)“人類偏好”;
3. 標(biāo)注人員明顯感覺 InstructGPT 的輸出比 GPT-3 的輸出更好,更可靠;
4. InstructGPT 在真實(shí)性,豐富度上表現(xiàn)更好;
5. InstructGPT 對有害結(jié)果的生成控制的更好,但是對于“偏見”沒有明顯改善;
6. 基于指令微調(diào)后,在公開任務(wù)測試集上的表現(xiàn)仍然良好;
7. InstructGPT 有令人意外的泛化性,在缺乏人類指令數(shù)據(jù)的任務(wù)上也表現(xiàn)很好;
GPT 系列進(jìn)化時間線
上圖展示了從初代 GPT 到 ChatGPT 為止,OpenAI 公布的主要模型及其迭代路線。其中可能存在不太嚴(yán)謹(jǐn)?shù)牡胤剑热?GPT3.5 的劃分。關(guān)于 code-davinci 和 text-davinci,以及整個 GPT3.5 的詳細(xì)介紹,強(qiáng)烈推薦閱讀這篇博客:拆解追溯 GPT-3.5 各項能力的起源。
討論 & 八卦
最后簡單羅列幾個網(wǎng)絡(luò)上被人提及的有趣的問題和八卦,其中每個問題均沒有官方回答,僅僅是大家和個人的一些想法,僅供參考。
OpenAI 為何一直堅持做純語言模型預(yù)訓(xùn)練?
1. 純語言模型上限更高,OpenAI 一直致力于強(qiáng)人工智能;
2. NLG 兼容 NLU,反之不合適,做純語言模型預(yù)訓(xùn)練與模型“大統(tǒng)一”的目標(biāo)更契合;
3. 與同期競爭對手 BERT 有所區(qū)別;
從 InstructGPT 到 ChatGPT,我們是不是本質(zhì)上還是回到“人工”智能那條路?像 GPT-2 和 GPT-3 那種完全的無監(jiān)督還是行不通,最終不還是需要人工干預(yù)去標(biāo)數(shù)據(jù)?
個人不太傾向于這種悲觀態(tài)度,我感覺人工智能目前最重要的還是要找到人工和智能之間的平衡點(diǎn),而不是一味的去追求完全的無監(jiān)督,無人工代價。
ChatGPT 雖然如此驚艷,但很多人仍然認(rèn)為它只能算一個玩具,而不是工具?
這里“工具”想表達(dá)的意思是不一定給到驚喜,但是一定要保證可用性,不要在一些常規(guī)的或簡單的事情上出錯。目前 ChatGPT 還是沒法保證這一點(diǎn)。當(dāng)然這也是有點(diǎn)見仁見智的,不可否認(rèn)現(xiàn)在基于 ChatGPT 的插件和應(yīng)用越來越多,從某種程度上來講,它已經(jīng)被當(dāng)成了一種工具在使用。
初代 GPT-3 到底是什么水平?以如今 ChatGPT 的標(biāo)準(zhǔn)來看,初代 GPT-3 是不是從表面上看起來很弱?
后來的實(shí)驗證明,初代 GPT-3 有著非常強(qiáng)的潛力。這些潛力后來被代碼訓(xùn)練、有監(jiān)督微調(diào)和基于人類反饋的強(qiáng)化學(xué)習(xí)解鎖,最終才展示出極為強(qiáng)大的能力。所以可以說 GPT-3 是后續(xù)所有大模型的基石。
GPT-4 什么時候來?
其實(shí)網(wǎng)絡(luò)上已經(jīng)有很多關(guān)于 GPT-4 的八卦新聞了,網(wǎng)傳 GPT-4 的參數(shù)將達(dá)到 100萬億,整整比 GPT-3 大了五六百倍,不過好像 OpenAI 官方一直沒有正面回應(yīng)過 GPT-4 參數(shù)量的問題,這個只有等 GPT-4 出來之后才能揭曉了,或許就在今年 2023 年?
審核編輯 :李倩
-
GPT
+關(guān)注
關(guān)注
0文章
351瀏覽量
15281 -
強(qiáng)化學(xué)習(xí)
+關(guān)注
關(guān)注
4文章
265瀏覽量
11197 -
OpenAI
+關(guān)注
關(guān)注
9文章
1033瀏覽量
6378
原文標(biāo)題:GPT / GPT-2 / GPT-3 / InstructGPT 進(jìn)化之路
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論