最近一段時(shí)間ChatGPT的信息鋪天蓋地,難免眼花繚亂,但是信息太多往往約等于沒有信息。同時(shí),當(dāng)我讀了相關(guān)論文后發(fā)現(xiàn),目前很多新聞、評(píng)論、專業(yè)人士的解讀等,大部分都還是基于openAI發(fā)的幾篇論文的。既然如此,為什么不直接讀論文來獲取一手信息呢?所以接下來我會(huì)學(xué)習(xí)ChatGPT誕生過程中的一些比較重要的論文。
本篇文章主要閱讀三篇論文,分別代表著GPT、GPT2、GPT3,三篇論文分別是
Improving language understanding by generative pre-training[J]. 2018.
Language models are unsupervised multitask learners[J]. OpenAI blog, 2019, 1(8): 9.
Language models are few-shot learners[J]. Advances in neural information processing systems, 2020, 33: 1877-1901.
GPT
《Improving Language Understanding by Generative Pre-Training》
首先關(guān)于這個(gè)標(biāo)題“使用預(yù)訓(xùn)練模型提升自然語言理解能力”,其實(shí)在這里,作者還沒有將模型的名字命名為GPT,只是后來取了標(biāo)題中“generative pre-training”,將模型命名為GPT。
在摘要里作者首先提到,在自然語言理解中,存在許多不同的任務(wù),但標(biāo)記數(shù)據(jù)相對(duì)較少。因此,針對(duì)這個(gè)問題,一種解決方法是在沒有標(biāo)注的數(shù)據(jù)上訓(xùn)練一個(gè)預(yù)訓(xùn)練模型,然后在有標(biāo)記的數(shù)據(jù)上進(jìn)行微調(diào)。這種方法在計(jì)算機(jī)視覺領(lǐng)域早在八九年前就已經(jīng)成為主流算法,但在自然語言處理中一直未能流行起來,因?yàn)闆]有像計(jì)算機(jī)視覺中的ImageNet那樣大規(guī)模標(biāo)記的數(shù)據(jù)集。另外,由于一個(gè)句子所包含的信息比一張圖片所包含的信息要少得多,因此需要相對(duì)更大的句子級(jí)別的標(biāo)準(zhǔn)數(shù)據(jù)集才能訓(xùn)練出較大的模型。這也導(dǎo)致深度學(xué)習(xí)在自然語言處理中的進(jìn)展相對(duì)不那么順利。直到出現(xiàn)了像GPT這樣的預(yù)訓(xùn)練模型,才開始有了一些進(jìn)展。
與計(jì)算機(jī)視覺中的算法類似,自然語言處理中的解決方案也是先訓(xùn)練好預(yù)訓(xùn)練模型,然后進(jìn)行微調(diào)。不同的是,自然語言處理使用的是沒有標(biāo)注的文本數(shù)據(jù)進(jìn)行訓(xùn)練,這是一大步的進(jìn)展。GPT系列文章在此基礎(chǔ)上進(jìn)行了更深入的探索,取得了一定的創(chuàng)新成果。此外,自然語言處理任務(wù)的多樣性也導(dǎo)致了需要為每個(gè)任務(wù)構(gòu)建不同的模型,這也是自然語言處理與計(jì)算機(jī)視覺的一個(gè)區(qū)別。GPT采用的解決方案是改變輸入的形式而不是改變模型本身,這可以減少改變模型架構(gòu)的工作量。
作者還指出,最早的詞嵌入模型Word2Vec也是使用了大量的沒有標(biāo)注的文本數(shù)據(jù),但與GPT不同的是,前者在微調(diào)時(shí)需要構(gòu)造與任務(wù)相關(guān)的輸入。實(shí)驗(yàn)結(jié)果顯示,在12個(gè)任務(wù)中,GPT在9個(gè)任務(wù)上超過了當(dāng)前最好的成績(jī)。
在導(dǎo)言里,作者首先提出一個(gè)問題:如何更好的利用無監(jiān)督的文本?當(dāng)時(shí)最成功的模型是詞嵌入模型。接下來,作者列出了使用無標(biāo)注文本時(shí)遇到的兩個(gè)主要困難。第一個(gè)困難是優(yōu)化目標(biāo)函數(shù)的選擇,損失函數(shù)應(yīng)該是什么樣子?當(dāng)時(shí)有很多選擇可以解決這個(gè)問題,比如語言模型、機(jī)器翻譯、文本一致性等,但沒有一個(gè)特別好的目標(biāo)函數(shù)適用于所有任務(wù)。第二個(gè)困難是如何有效地將所學(xué)的文本表示傳遞到現(xiàn)有的子任務(wù)上,因?yàn)镹LP中的子任務(wù)多樣且沒有一種簡(jiǎn)單有效的方式將一種表示遷移到所有任務(wù)上。
本文提出了一種半監(jiān)督方法,用于在無標(biāo)號(hào)文本上訓(xùn)練大型語言模型,然后在具體子任務(wù)上進(jìn)行微調(diào)。半監(jiān)督學(xué)習(xí)是機(jī)器學(xué)習(xí)中十年前非常流行的話題,旨在利用標(biāo)記數(shù)據(jù)學(xué)習(xí)未標(biāo)記數(shù)據(jù)。在這種情況下,本文采用類似的方法,首先在未標(biāo)記數(shù)據(jù)上訓(xùn)練模型,然后在標(biāo)記數(shù)據(jù)上微調(diào)。
本文的模型基于Transformer架構(gòu),這是當(dāng)時(shí)相對(duì)較新的架構(gòu)。作者解釋說,與遞歸神經(jīng)網(wǎng)絡(luò)(RNN)相比,Transformer在遷移學(xué)習(xí)方面更加穩(wěn)健,因?yàn)樗哂懈Y(jié)構(gòu)化的記憶,可以處理更長(zhǎng)的文本,并從句子和段落層面提取更好的語義信息。
另一個(gè)關(guān)鍵技術(shù)要點(diǎn)是在遷移學(xué)習(xí)時(shí)使用與任務(wù)相關(guān)的表示。本文將在后面詳細(xì)介紹這種表示。
最后一部分介紹了實(shí)驗(yàn)結(jié)果。作者在12個(gè)任務(wù)中的9個(gè)任務(wù)中獲得了優(yōu)異的結(jié)果,但在某些任務(wù)上略遜于BERT(其實(shí)BERT的出現(xiàn)時(shí)間是在GPT之后,但大家都喜歡將這兩個(gè)模型進(jìn)行比較)。
在模型這個(gè)章節(jié)包含3個(gè)小節(jié),分別介紹了在沒有標(biāo)注數(shù)據(jù)的情況下如何訓(xùn)練模型、微調(diào)模型以及如何為每個(gè)子任務(wù)表示輸入。
【1】預(yù)訓(xùn)練
假設(shè)我們有一個(gè)沒有標(biāo)注的文本,其中每個(gè)單詞被表示為一個(gè)向量
具體而言,語言模型要預(yù)測(cè)第i個(gè)單詞的出現(xiàn)概率。對(duì)于單詞
,模型會(huì)考慮它前面的K個(gè)單詞(即
目標(biāo)就是通過訓(xùn)練模型φ,使其能夠輸出與給定文本類似的文章。超參數(shù)K是窗口大小,它控制著模型輸入序列的長(zhǎng)度。輸入序列越長(zhǎng),網(wǎng)絡(luò)就能看到更多的信息,從而更容易在文本中發(fā)現(xiàn)關(guān)系。如果您希望模型更強(qiáng)大,則K可能需要增加到數(shù)十甚至數(shù)百。
對(duì)于公式中的模型φ,模型使用了Transformer的解碼器,這個(gè)模型涉及到編碼器和解碼器兩個(gè)部分。編碼器和解碼器最大的不同在于,編碼器輸入一個(gè)序列時(shí),當(dāng)提取第i個(gè)元素的特征時(shí),可以看到整個(gè)序列里的所有元素。而對(duì)于解碼器來說,由于存在掩碼,當(dāng)提取第I個(gè)元素的特征時(shí),它只能看到當(dāng)前元素和它之前的元素,后面的元素被掩碼處理,注意力機(jī)制計(jì)算時(shí)會(huì)被視為0,所以解碼器無法看到后面的內(nèi)容。因此,我們只能使用Transformer的解碼器,而不能使用編碼器。
如果我們要預(yù)測(cè)單詞U出現(xiàn)的概率,那么將U前面的K個(gè)單詞全部取出來,將K個(gè)詞輸入到一個(gè)大的U中,做一個(gè)詞嵌入的投影,并加上位置信息的編碼,這將成為我們第一層的輸入。接下來,我們需要做N層這樣的Transformer塊,每一層都需要將上一層的輸出作為輸入,并得到新的輸出。由于我們知道存儲(chǔ)模塊不會(huì)改變輸出的形狀,因此一直進(jìn)行完所有層之后,我們就會(huì)得到最后一個(gè)Transformer塊的輸出。然后我們?cè)僮鲆淮瓮队?,并使用softmax函數(shù),就能得到U出現(xiàn)的概率分布了。
【2】微調(diào)模型
在ChatGPT的微調(diào)中,數(shù)據(jù)是有標(biāo)號(hào)的,也就是給定一個(gè)長(zhǎng)為m的詞序列X1到Xm,并告訴它們對(duì)應(yīng)的標(biāo)號(hào)是y。我們的目標(biāo)是對(duì)這個(gè)序列去預(yù)測(cè)它的y的概率。在微調(diào)任務(wù)中,我們把整個(gè)序列放入之前預(yù)訓(xùn)練的GPT模型中,然后獲取transformer塊的最后一層輸出,對(duì)應(yīng)著序列中的Hm,接著將其乘以輸出層,再使用一個(gè)softmax函數(shù),就能得到預(yù)測(cè)概率。這個(gè)操作在微調(diào)任務(wù)中的所有帶有標(biāo)簽的序列上都會(huì)執(zhí)行。在微調(diào)任務(wù)中,我們需要使用標(biāo)準(zhǔn)分類目標(biāo)函數(shù)來最大化預(yù)測(cè)概率。
作者還提到,盡管我們只關(guān)心單個(gè)分類任務(wù)的性能,但是將預(yù)訓(xùn)練語言模型也放到微調(diào)模型中會(huì)提高效果。也就是說,在微調(diào)任務(wù)中我們有兩個(gè)目標(biāo)函數(shù)。一個(gè)是預(yù)測(cè)下一個(gè)單詞,另一個(gè)是預(yù)測(cè)給定完整序列的標(biāo)簽。將這兩個(gè)目標(biāo)函數(shù)結(jié)合起來效果最好。作者通過對(duì)它們的加權(quán)平均來平衡這兩個(gè)目標(biāo)函數(shù),權(quán)重是一個(gè)超參數(shù),可以根據(jù)需要調(diào)整。
【3】子任務(wù)
對(duì)于不同的子任務(wù),我們需要找到一種合適的方式來表示這些任務(wù)。如何將NLP中四種常見的用戶任務(wù)表示為一個(gè)序列和對(duì)應(yīng)的標(biāo)簽,是接下來要討論的。
第一類是應(yīng)用場(chǎng)景是“分類”(classification),例如對(duì)一段文本進(jìn)行情感分類,判斷其是正面還是負(fù)面。為了將這種任務(wù)表示為一個(gè)序列和標(biāo)簽,我們需要在原始文本前添加一個(gè)起始標(biāo)記,后面添加一個(gè)結(jié)束標(biāo)記,形成一個(gè)序列,然后將其輸入到transformer解碼器中。模型會(huì)抽取最后一個(gè)詞的特征并將其傳入一個(gè)線性層進(jìn)行投影。線性層的輸出大小在訓(xùn)練時(shí)是固定的,并且對(duì)于每個(gè)文本和標(biāo)簽對(duì)都會(huì)進(jìn)行訓(xùn)練。在微調(diào)中,我們需要重新構(gòu)造一個(gè)新的線性層,其中權(quán)重可能是隨機(jī)初始化的,并且數(shù)字大小與標(biāo)簽數(shù)量相同。通過這個(gè)線性層,我們可以將輸入序列轉(zhuǎn)換為我們需要的標(biāo)簽,這是微調(diào)過程中的一個(gè)區(qū)別。
第一個(gè)應(yīng)用場(chǎng)景是“蘊(yùn)含”(entailment),即判斷一段文本是否蘊(yùn)含某種假設(shè)。該應(yīng)用可以看作是一個(gè)三分類問題,需要將兩段文本串聯(lián)成一個(gè)長(zhǎng)序列,采用特殊的開始符、分隔符和抽取符來區(qū)分不同部分。注意,這些特殊標(biāo)記不能和文本中的其他詞重復(fù)。該應(yīng)用中使用的模型是GPT算法,它在訓(xùn)練數(shù)據(jù)集上的表現(xiàn)相較于之前的算法有所提升,在多個(gè)數(shù)據(jù)集上的表現(xiàn)也相對(duì)較好。
第二個(gè)應(yīng)用場(chǎng)景是“相似”(similarity),即判斷兩段文本的相似程度。該應(yīng)用同樣采用GPT算法,但需要考慮相似關(guān)系的對(duì)稱性。因此,對(duì)于每一對(duì)文本,需要構(gòu)造兩個(gè)序列,分別將它們放在不同的位置上,并用特殊標(biāo)記區(qū)分不同部分。這些序列將分別輸入模型中進(jìn)行處理,得到最終的輸出結(jié)果,然后通過一個(gè)線性層進(jìn)行判斷,是相似還是不相似。
第三個(gè)應(yīng)用場(chǎng)景是“多選題”(multiple choice),即從多個(gè)答案中選擇正確的答案。該應(yīng)用需要構(gòu)造多個(gè)序列,其中每個(gè)序列的開頭都是同一個(gè)問題,而每個(gè)答案則依次作為第二個(gè)序列進(jìn)行處理。這些序列將分別輸入模型中進(jìn)行處理,最終通過一個(gè)線性投影層輸出對(duì)應(yīng)的答案得分,用softmax函數(shù)將得分轉(zhuǎn)換為對(duì)每個(gè)答案的選擇概率。在這個(gè)應(yīng)用中,GPT算法同樣能夠發(fā)揮出色的表現(xiàn)。
雖然這三個(gè)應(yīng)用的數(shù)據(jù)形式有所不同,但它們都可以被看作是一個(gè)序列處理問題。不論輸入形式如何變化,使用的GPT算法的結(jié)構(gòu)都不會(huì)改變,這是與之前的算法相比的一個(gè)顯著優(yōu)點(diǎn)。因此,GPT算法在NLP領(lǐng)域有著廣泛的應(yīng)用前景,尤其適用于處理文本序列的問題。
關(guān)于實(shí)驗(yàn)我們主要關(guān)心兩點(diǎn)。第一點(diǎn),該模型是在名為 'BooksCorpus' 的數(shù)據(jù)集上進(jìn)行訓(xùn)練的,該數(shù)據(jù)集包含7000篇未發(fā)表的書。第二點(diǎn),模型本身采用了12層Transformer解碼器,每層維度為768,其規(guī)模相當(dāng)龐大。實(shí)驗(yàn)結(jié)果表明該模型在訓(xùn)練數(shù)據(jù)集上的表現(xiàn)相較于之前的算法有所提升。GPT算法在精度上的表現(xiàn)也優(yōu)于其他算法,這一點(diǎn)在多個(gè)數(shù)據(jù)集上都得到了驗(yàn)證。
總體而言,這一模型的訓(xùn)練規(guī)模和數(shù)據(jù)集的規(guī)模都比較大,這使得其性能表現(xiàn)相較于之前的算法更加優(yōu)秀。
從模型上來說,BERT并不使用標(biāo)準(zhǔn)的語言模型,而是采用帶有掩碼的語言模型,即完形填空。在完形填空任務(wù)中,一個(gè)句子中間的一個(gè)單詞被挖去,然后讓你去猜測(cè)這個(gè)單詞。在這個(gè)任務(wù)中,我們可以看到挖去的單詞之前和之后的單詞,因此我們可以使用Transformer的編碼器來完成這個(gè)任務(wù),編碼器可以看到所有單詞
但是使用編碼器和解碼器并不是GPT和BERT的主要區(qū)別,實(shí)際上,GPT選擇了一種更加困難的目標(biāo)函數(shù),即從前面的一段文本預(yù)測(cè)接下來的一個(gè)單詞,這比完形填空要更具挑戰(zhàn)性。舉個(gè)例子,如果我給你股票的歷史價(jià)格信息,你可以預(yù)測(cè)明天的股價(jià),但是如果我不告訴你昨天的股票價(jià)格,讓你去預(yù)測(cè)昨天的價(jià)格,那么這個(gè)任務(wù)就更難了。因?yàn)轭A(yù)測(cè)一個(gè)開放式的結(jié)局,要比預(yù)測(cè)一個(gè)中間狀態(tài)難很多,所以它比完形填空更加具有挑戰(zhàn)性。這也是為什么GPT在訓(xùn)練和效果方面都比BERT差的原因之一。
不過反過來思考,如果你的模型可以真正預(yù)測(cè)未來,那么你將比通過完形填空訓(xùn)練的BERT模型更加強(qiáng)大。這就是為什么GPT的作者需要不斷地?cái)U(kuò)大模型規(guī)模并進(jìn)行不斷嘗試,才能最終實(shí)現(xiàn)類似于GPT-3這樣效果非常出色的經(jīng)驗(yàn)?zāi)P?。這也是之前提到的為什么作者選擇了一條更加困難的技術(shù)路線,但同時(shí)也有更高的天花板。這就是預(yù)訓(xùn)練模型。因此,我們可以說GPT就是Transformer的一個(gè)解碼器。
從參數(shù)上和實(shí)驗(yàn)結(jié)果上來說,BERT base使用了12層,每層有768維,這是為了與GPT進(jìn)行比較。BERT Large則將層數(shù)翻了一倍,寬度增加了1.3倍,復(fù)雜度是BERT base的三倍。為什么BERT能做到三倍復(fù)雜度呢?主要是因?yàn)锽ERT使用了更大的數(shù)據(jù)集。BERT使用了包括GPT的BookCorpus的數(shù)據(jù)集在內(nèi)的8億個(gè)詞,以及Wikipedia數(shù)據(jù)集中的20億個(gè)詞。因此,BERT的數(shù)據(jù)集大小大約是GBT的四倍。在這個(gè)數(shù)據(jù)集上,BERT訓(xùn)練了一個(gè)比GPT大三倍的模型。BERT的實(shí)驗(yàn)結(jié)果表明,BERT base比GPT的模型表現(xiàn)要好,平均精度達(dá)到了75.1,而BERT large的平均精度則達(dá)到了79,如果再增加模型大小,BERT的平均精度可以提高到82.1。
GPT2
《Language Models are Unsupervised Multitask Learners》
前情提要
OpenAI之前使用解碼器訓(xùn)練過一個(gè)很好的模型(GPT),但幾個(gè)月后,Bert用更大的數(shù)據(jù)集和更大的模型打敗了GPT,OpenAI該如何回應(yīng)?首先,更換解碼器不是一個(gè)好的選擇,因?yàn)橐呀?jīng)選擇了這種技術(shù)路線,再次更換會(huì)浪費(fèi)前面的工作。如果仍舊認(rèn)為解碼器的方案是好的,那么你可以嘗試通過增加模型的規(guī)模和數(shù)據(jù)集的大小來提升性能。但是,如果模型再次被打敗,又應(yīng)該如何應(yīng)對(duì)呢?這是GPT2文章要探討的問題。
作者首先用了一個(gè)新的數(shù)據(jù)集——WebText,其中包含百萬級(jí)別的文本。基于這個(gè)更大的數(shù)據(jù)集,他們訓(xùn)練了一個(gè)包含15億個(gè)參數(shù)的transformer模型(Bert Large最大值是3.4個(gè)億)。不過當(dāng)模型變得越來越大時(shí),與先前的Bert模型相比,它的優(yōu)勢(shì)并不明顯。因此,作者轉(zhuǎn)而提出了“zero shot”的觀點(diǎn),并在GPT-2中成為一個(gè)核心點(diǎn),所以作者在導(dǎo)言中提到,收集數(shù)據(jù)集并在上面訓(xùn)練模型以做出預(yù)測(cè)已成為主流途徑。但現(xiàn)有的模型的泛化能力并不是很好。也就是說,在一個(gè)特定的數(shù)據(jù)集和應(yīng)用上訓(xùn)練好的模型難以直接應(yīng)用于另一個(gè)數(shù)據(jù)集和應(yīng)用中。然后作者提到了多任務(wù)學(xué)習(xí)。多任務(wù)學(xué)習(xí)最初的想法是在訓(xùn)練模型的同時(shí)觀察多個(gè)數(shù)據(jù)集,并通過多個(gè)損失函數(shù)來建立一個(gè)能夠在多個(gè)任務(wù)中使用的模型。這一思路在90年代末提出,并在2000年至2010年之間成為一個(gè)相對(duì)流行的話題。盡管多任務(wù)學(xué)習(xí)看起來很有用,但在自然語言處理領(lǐng)域并不常用?,F(xiàn)在在自然語言處理領(lǐng)域,主流的算法是GPT和BERT等類似算法。這些算法在一個(gè)大數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練,然后在每個(gè)任務(wù)上進(jìn)行有監(jiān)督的微調(diào)。當(dāng)然,這種方法仍然有兩個(gè)問題。第一個(gè)問題是,對(duì)于每個(gè)下游任務(wù),你仍然需要重新訓(xùn)練模型。第二個(gè)問題是你需要收集有標(biāo)注的數(shù)據(jù),這會(huì)導(dǎo)致在拓展到新任務(wù)時(shí)會(huì)有一定的成本。
作者最后提到的是GPT2,在進(jìn)行下游任務(wù)時(shí),他將使用一個(gè)稱為“zero shot”的設(shè)置。也就是說,在進(jìn)行下游任務(wù)時(shí),不需要下游任務(wù)的任何標(biāo)注信息,也不需要再次訓(xùn)練模型。這種方法的好處是只需訓(xùn)練一個(gè)模型,便可以在任何地方使用。最后,作者表示,這一方法已經(jīng)得到了看起來相當(dāng)不錯(cuò)且具有一定競(jìng)爭(zhēng)力的結(jié)果。
如果作者只是在GPT算法的基礎(chǔ)上,使用更大的數(shù)據(jù)集來訓(xùn)練更大的模型,并且說自己比BERT算法好一些,這篇文章可能就沒有多少意義了。因?yàn)檫@種方法顯得非常工程化。然而,現(xiàn)在作者換了一個(gè)角度,選擇了一個(gè)更難的問題,也就是“zero shot”。作者表示,他不需要訓(xùn)練模型,也不需要下游任務(wù)的任何標(biāo)注信息,然后得到了差不多的結(jié)果。有時(shí)候稍微好一些,有時(shí)候稍微差一些。雖然這個(gè)方法從結(jié)果上看可能并不像之前的方法那么出色,但它卻具有創(chuàng)新性。
關(guān)于數(shù)據(jù)
在這一節(jié)中,作者詳細(xì)介紹了他的數(shù)據(jù)集是如何得出的。首先,他提到了之前模型(BERT)的數(shù)據(jù)集是Wikipedia,但是他選擇使用書籍來進(jìn)行訓(xùn)練。為了構(gòu)建更大的數(shù)據(jù)集,他使用了一個(gè)名為common crawl的項(xiàng)目,該項(xiàng)目是一個(gè)公開的網(wǎng)頁(yè)抓取項(xiàng)目,通過一個(gè)爬蟲程序不斷從互聯(lián)網(wǎng)上抓取網(wǎng)頁(yè),然后將這些網(wǎng)頁(yè)存儲(chǔ)在AWS的S3上供免費(fèi)下載。目前,這個(gè)項(xiàng)目的數(shù)據(jù)規(guī)模已經(jīng)達(dá)到了TB級(jí)別,是目前最大、最便于獲取的文本數(shù)據(jù)集。然而,這個(gè)數(shù)據(jù)集的性價(jià)比較低,因?yàn)槠渲写蟛糠挚赡芏际抢W(wǎng)頁(yè),需要耗費(fèi)大量時(shí)間進(jìn)行清理。
作者提到雖然他無法將所有優(yōu)質(zhì)網(wǎng)頁(yè)都標(biāo)注出來,但是他可以利用Reddit上其他用戶已經(jīng)過濾好的網(wǎng)頁(yè)。Reddit是一個(gè)美國(guó)排名很靠前的新聞聚合網(wǎng)頁(yè),用戶可以提交感興趣的網(wǎng)頁(yè),并按照主題進(jìn)行分類。其他用戶可以投票評(píng)價(jià)每個(gè)帖子,從而產(chǎn)生一個(gè)叫做karma的評(píng)價(jià)指標(biāo)。作者選取了所有至少有3個(gè)karma的網(wǎng)頁(yè)進(jìn)行抓取,并最終得到了4500萬個(gè)鏈接,從中提取了800萬個(gè)文本信息,總共40GB大小。
另外,作者還對(duì)模型做了如下設(shè)計(jì),其中第一個(gè)模型包含12層,每層寬度為768,一共有1億個(gè)可學(xué)習(xí)的變量,與之前的GPT或BERT base相似。第二個(gè)模型則對(duì)標(biāo)BERT large,擁有更大的尺寸,乘數(shù)增加到2^44,寬度增加到160,總共有15億個(gè)可學(xué)習(xí)元素。
關(guān)于實(shí)驗(yàn)
下圖展示了GPT2的Zero-task在四個(gè)場(chǎng)景下的具體表現(xiàn),可以看到在閱讀理解上來說,它的表現(xiàn)是高于原有模型的,但是在摘要、提問、翻譯的場(chǎng)景下,表現(xiàn)情況均不如原有模型。
GPT3
《Language Models are Few-Shot Learners》
前情提要
GPT3是為了解決GPT2的有效性而設(shè)計(jì)的。因此,它回到了GPT一開始考慮的few-shot學(xué)習(xí)的設(shè)置,即不再追求太過極致的性能表現(xiàn),而是在有限的樣本上提供有用的信息。在現(xiàn)實(shí)生活中,即使是人類學(xué)習(xí)新知識(shí)也需要一些樣本,而人類在樣本有效性上做得相當(dāng)好。但是,對(duì)于語言模型而言,需要大量的樣本才能學(xué)習(xí)到足夠的知識(shí)。因此,在這里,'future'的意思是,雖然仍然需要提供一些樣本,但樣本數(shù)量可以控制在較小的范圍內(nèi),這意味著成本可以保持較低的水平。
GPT-3是一個(gè)具有1750億個(gè)可學(xué)習(xí)參數(shù)的智能模型,比之前所有非系數(shù)模型都要大十倍。盡管如此,GPT-3在成本方面的挑戰(zhàn)依然存在,尤其是在進(jìn)行子任務(wù)訓(xùn)練時(shí),所以GPT-3在進(jìn)行任務(wù)時(shí)不需要進(jìn)行微調(diào)或梯度更新,這也是它的一大特點(diǎn)。與其它模型相比,GPT-3在NLP任務(wù)中表現(xiàn)出色,甚至可以生成人類難以區(qū)分的新聞文章。
總之,作者想要表達(dá)的是GPT-3在處理自然語言方面的優(yōu)越性以及它的巨大潛力。
關(guān)于導(dǎo)言
在最近的自然語言處理領(lǐng)域中,預(yù)訓(xùn)練語言模型已經(jīng)成為了一種非常流行的方法,其核心思想是先使用大規(guī)模的無標(biāo)注語料進(jìn)行預(yù)訓(xùn)練,再針對(duì)特定任務(wù)進(jìn)行微調(diào)。然而,在這種方法中,我們還是需要針對(duì)每個(gè)子任務(wù)準(zhǔn)備一個(gè)與任務(wù)相關(guān)的數(shù)據(jù)集,并進(jìn)行相應(yīng)的微調(diào)。這其中存在著一些問題,例如需要大規(guī)模標(biāo)注數(shù)據(jù)集,而且微調(diào)效果的優(yōu)劣并不能完全反映預(yù)訓(xùn)練模型的泛化能力。此外,人類并不需要進(jìn)行大規(guī)模數(shù)據(jù)集的訓(xùn)練就能夠完成很多任務(wù),這也引發(fā)了人們對(duì)于預(yù)訓(xùn)練模型的質(zhì)疑。
針對(duì)以上問題,有學(xué)者提出了一種新的學(xué)習(xí)方式,即few-shot或者是dear-shot學(xué)習(xí)。這種學(xué)習(xí)方式的核心思想是,通過提供一些樣例來學(xué)習(xí),而不是像傳統(tǒng)的訓(xùn)練方式那樣需要大規(guī)模的數(shù)據(jù)集進(jìn)行訓(xùn)練。這樣做的好處在于,無需耗費(fèi)大量的時(shí)間和成本來收集和標(biāo)注數(shù)據(jù)集,而且模型可以更加關(guān)注于樣例之間的共性,從而提高模型的泛化能力。此外,few-shot學(xué)習(xí)還可以使得模型更加接近人類的學(xué)習(xí)方式,因?yàn)槿祟愐彩峭ㄟ^少量的樣本來進(jìn)行學(xué)習(xí)的。
因此,預(yù)訓(xùn)練模型的未來發(fā)展方向可能會(huì)向著few-shot或者是zero-shot學(xué)習(xí)的方向發(fā)展。雖然在這種學(xué)習(xí)方式下,模型的表現(xiàn)可能不如傳統(tǒng)方式下的微調(diào),但是它可以更加接近人類的學(xué)習(xí)方式,從而提高模型的泛化能力,使得模型更加適用于各種不同的任務(wù)。
在這里作者又提出兩個(gè)新的名詞,Meta Learning和in-context learning,Meta Learning 是一種訓(xùn)練模型的方法,它可以幫助模型更好地適應(yīng)不同的任務(wù)和領(lǐng)域。在 Meta Learning 中,模型不僅要學(xué)習(xí)如何解決特定的任務(wù),還要學(xué)習(xí)如何快速適應(yīng)新的任務(wù)。這樣的訓(xùn)練方法有助于提高模型的泛化能力,使得模型在新的領(lǐng)域中表現(xiàn)更好。in-context learning 是另一種訓(xùn)練模型的方法。它指的是在給定一個(gè)任務(wù)的上下文中,讓模型從少量樣本中學(xué)習(xí)如何解決這個(gè)任務(wù)。in-context learning 只會(huì)對(duì)給定的任務(wù)產(chǎn)生影響,不會(huì)改變模型的權(quán)重。
關(guān)于模型
結(jié)合下面這張圖,可以更好地理解GPT3的模型:
圖的右邊講微調(diào)是如何做的。常規(guī)意義上的微調(diào)是指在預(yù)訓(xùn)練模型的基礎(chǔ)上,在特定任務(wù)上提供少量訓(xùn)練樣本,然后計(jì)算損失,這樣就可以對(duì)他的權(quán)重進(jìn)行更新,接下來再用一個(gè)樣本繼續(xù)更新。但是在GPT3的微調(diào)設(shè)置里,他是要求不做梯度更新的。
圖的左側(cè)是In-context learning的3種不同設(shè)置,用了一個(gè)英語翻譯成法語的例子。
One-shot:除了給出任務(wù)描述和prompt,還給一個(gè)例子(訓(xùn)練樣本)。但是需要注意的是這個(gè)訓(xùn)練樣本只做預(yù)測(cè),不做模型更新,他希望的是你在模型在做前向推理的時(shí)候,能夠通過注意力機(jī)制去處理比較長(zhǎng)的序列信息,從而從中間抽取出來有用的信息。所以叫In-context learning,即你的學(xué)習(xí)只是限于你的上下文。
Few-shot:除了給出任務(wù)描述和prompt,給了多個(gè)例子。Few shot 是對(duì)one shot 的一種拓展,前者相比后者可以提供多個(gè)樣本進(jìn)行訓(xùn)練,但過長(zhǎng)的序列信息可能不利于模型的信息提取和處理。同時(shí)還有一個(gè)問題,這個(gè)模型是每一次的時(shí)候要從中間去抓取信息,但是不能把上一次抓取的信息保存到模型中,也就是盡管你的訓(xùn)練樣本很好,但是也仍舊不能保存到模型中。
關(guān)于模型的具體設(shè)計(jì),設(shè)計(jì)了8個(gè)不同大小的模型,如下表:
每一行表示的是一個(gè)模型,每個(gè)列能表示的是模型的一些參數(shù),其中包括:可學(xué)習(xí)的參數(shù)的數(shù)量、在模型里的層數(shù),然后你每一層的詞表示的向量長(zhǎng)度,多頭注意力里頭的數(shù)量,每個(gè)頭的維度大?。╠ model除以n heads)、訓(xùn)練時(shí)每個(gè)小批量的大小、學(xué)習(xí)率。
GPD3 small:12層,每一層大小768(它就是GBT模型),可學(xué)習(xí)參數(shù)是1.25個(gè)億,也是bert base它的模型的大小,
GPT3 medium24層,每一層大小是1024(bert large的尺寸)。
GPT3 medium、GPT3 Large、GPT3 XL這幾個(gè)模型就是層數(shù)沒有變,但是每層的寬度有增加。
GPT3 175B(簡(jiǎn)稱GPT3):96層,每一層的大小已經(jīng)到了12000左右了。
關(guān)于數(shù)據(jù)
GPT-3的訓(xùn)練數(shù)據(jù)基于Common Crawl,但作者認(rèn)為Common Crawl的數(shù)據(jù)質(zhì)量相對(duì)較低。為了解決這個(gè)問題,作者使用了一些技巧來使數(shù)據(jù)更干凈。他們使用了一個(gè)簡(jiǎn)單的邏輯回歸分類器來區(qū)分高質(zhì)量數(shù)據(jù)和低質(zhì)量數(shù)據(jù),使用LSH算法去重,以及加入了一些已知的高質(zhì)量數(shù)據(jù)集。通過設(shè)置采樣率,其中60%來自Common Crawl,22%來自WebText2,其余的來自其他數(shù)據(jù)集,最終他們獲得了一個(gè)非常大的數(shù)據(jù)集。雖然作者沒有詳細(xì)解釋權(quán)重是如何計(jì)算的,但是作者認(rèn)為這個(gè)數(shù)據(jù)集質(zhì)量相對(duì)較高。下圖是各種數(shù)據(jù)以及相應(yīng)的權(quán)重
關(guān)于實(shí)驗(yàn)
這里只列舉幾個(gè)比較有代表性的實(shí)驗(yàn)結(jié)果:
下圖展示的是不同大小的預(yù)訓(xùn)練模型在訓(xùn)練過程中與計(jì)算量之間的關(guān)系。在圖中,我們可以看到每根線代表一個(gè)不同設(shè)置的模型,而黃色線代表的是GPT上最大的模型,藍(lán)色線則表示最小的那個(gè)模型。X軸表示的是計(jì)算量,Y軸表示的是驗(yàn)證損失。由于驗(yàn)證損失與子任務(wù)上的精度有關(guān),所以可以很好地表示預(yù)訓(xùn)練模型的好壞。
在訓(xùn)練時(shí)間變長(zhǎng)的情況下,計(jì)算量也會(huì)隨之增加。雖然你的計(jì)算量還在增加,但是你的損失卻沒有再下降,這時(shí)就往往不用再進(jìn)行訓(xùn)練了。在機(jī)器學(xué)習(xí)領(lǐng)域中,一個(gè)常見的問題是當(dāng)想要持續(xù)線性提高進(jìn)度時(shí),需要不斷地指數(shù)級(jí)地增加數(shù)據(jù)量。然而,對(duì)于人類而言,學(xué)習(xí)所需的樣本量相對(duì)較少。例如,學(xué)會(huì)閱讀只需要讀幾本書即可,而機(jī)器學(xué)習(xí)則需要全部抓取互聯(lián)網(wǎng)上的數(shù)據(jù)才能進(jìn)行學(xué)習(xí),這與人類的學(xué)習(xí)方式相比還有很大差距,我們還有很長(zhǎng)的路要走。
下圖表現(xiàn)的是模型參數(shù)大小與精度之間的關(guān)系。在圖中,X軸表示模型參數(shù)的大小,Y軸表示精度。作者指出,在增加模型大小的情況下,機(jī)器學(xué)習(xí)算法可以超越目前最好的一些算法,并且使用few shot的情況下,精度與人類相當(dāng)接近。
關(guān)于局限性
在本章中,作者列舉了多個(gè)局限性。在我看來,無論是個(gè)人使用ChatGPT,還是想將ChatGPT進(jìn)行商業(yè)化落地,這些局限性都是需要進(jìn)行了解的,因?yàn)檫@樣更有助于你更有效地使用,并且能夠幫你設(shè)計(jì)出更合適的落地場(chǎng)景。
1、雖然GPT3在文本生成方面比之前的模型有很大提升,但其仍然存在弱點(diǎn)。舉例來說,如果我們讓GPT3生成一個(gè)很長(zhǎng)的文本,它可能會(huì)在寫幾段后重復(fù)之前的內(nèi)容。因此,要讓它幫你寫小說可能有些困難。
2、GPT3存在一些結(jié)構(gòu)和算法上的局限性。其中一個(gè)主要的局限性是因?yàn)镚PT3使用了語言模型,它是根據(jù)上下文生成文本的,因此無法像之前的'Bidirectional Encoder Representations from Transformers (BERT)'那樣反向看待文本。這也是因?yàn)镚PT3使用的是transformer的解碼器。
3、因?yàn)橛?xùn)練是語言模型,每個(gè)詞的重要性在預(yù)測(cè)下一個(gè)詞時(shí)都是相同的。這意味著模型將花費(fèi)大量時(shí)間來學(xué)習(xí)一些常見但不是非常重要的單詞。在人類語言中,有些詞是必須要記住的,而有些則不是。但GPT3無法區(qū)分它們的重要性。
4、由于訓(xùn)練數(shù)據(jù)來自整個(gè)網(wǎng)絡(luò)上的文章,其有效性可能不高。對(duì)于人類來說,這種方式可能不可靠。
5、對(duì)于這種多樣本的上下文學(xué)習(xí)方式,我們不確定模型是否真的是從頭開始學(xué)習(xí)。它是在你給的樣本中學(xué)習(xí)的,還是根據(jù)以前的文本中找到相關(guān)內(nèi)容并記憶下來的?這兩種方式非常不同。雖然我們喜歡前者,即從頭開始學(xué)習(xí)的方式,但如果模型根據(jù)以前的文本中找到相關(guān)內(nèi)容并記憶下來的話,那么最終的泛化能力也將受到訓(xùn)練數(shù)據(jù)的大小的限制。
6、訓(xùn)練GPT3需要大量的時(shí)間和資源。
7、像許多深度學(xué)習(xí)模型一樣,GPT3無法解釋。對(duì)于GPT3這樣的大型模型,找出這些權(quán)重和決策是非常困難的。
參考文獻(xiàn)
【1】Radford A, Narasimhan K, Salimans T, et al. Improving language understanding by generative pre-training[J]. 2018.
【2】Radford A, Wu J, Child R, et al. Language models are unsupervised multitask learners[J]. OpenAI blog, 2019, 1(8): 9.
【3】Brown T, Mann B, Ryder N, et al. Language models are few-shot learners[J]. Advances in neural information processing systems, 2020, 33: 1877-1901.
【4】https://github.com/mli/paper-reading?
【5】https://zhuanlan.zhihu.com/p/597586623?
【6】https://www.lesswrong.com/posts/ZHrpjDc3CepSeeBuE/gpt-3-a-disappointing-paper?
聯(lián)系客服