前段時(shí)間大火的工具Github Copilot
想必大家都略有耳聞夹抗,我們只需要輸入一些注釋說明你需要的函數(shù)功能事扭,AI就會(huì)自動(dòng)幫你編寫完整的函數(shù)代碼智哀,代碼邏輯、規(guī)范甚至比自己寫的都好单匣,可謂是讓人瑟瑟發(fā)抖的結(jié)對(duì)編程好兄弟。
而這個(gè)工具背后的大boss就是參數(shù)量讓人瑟瑟發(fā)抖的GPT-3
語(yǔ)言模型秕硝。本文不僅介紹大哥大GPT-3
暴浦,還對(duì)他的同胞兄弟GPT-1, GPT-2
也進(jìn)行介紹,講解他們之間的演化過程崇败。強(qiáng)烈推薦李沐老師的b站講解視頻盅称,本文內(nèi)容與之強(qiáng)相關(guān),算是李沐老師講解視頻的一個(gè)筆記后室。
首先缩膝,簡(jiǎn)要介紹下,孕育這三兄弟的機(jī)構(gòu)是OpenAI
岸霹。
GPT-1:Improving Language Understanding by Generative Pre-Training
GPT-2:Language Models are Unsupervised Multitask Learners
GPT-3:Language Models are Few-Shot Learners
GPT-1 (生于2018年)
在自然語(yǔ)言處理任務(wù)中疾层,存在大量無標(biāo)簽的語(yǔ)料數(shù)據(jù),而有標(biāo)簽的語(yǔ)料數(shù)據(jù)相對(duì)較少贡避,因此基于有監(jiān)督訓(xùn)練的模型性能的提升大大受限于數(shù)據(jù)集痛黎。為了解決這個(gè)問題,作者提出先在大量的無標(biāo)簽數(shù)據(jù)上訓(xùn)練一個(gè)語(yǔ)言模型刮吧,然后再在下游具體任務(wù)的有標(biāo)簽數(shù)據(jù)集上進(jìn)行fine-tune湖饱。
利用無標(biāo)簽數(shù)據(jù)的難點(diǎn)
- 設(shè)計(jì)何種目標(biāo)函數(shù)來學(xué)習(xí)文本表示。已有的各種目標(biāo)函數(shù)和子任務(wù)的相關(guān)度比較高杀捻,沒有說哪一種目標(biāo)函數(shù)特別好井厌。
- 如何有效地把語(yǔ)言模型學(xué)到的文本表示遷移到下游子任務(wù)上。因?yàn)镹LP領(lǐng)域的各種任務(wù)差別比較大,沒有一個(gè)統(tǒng)一有效的方式使得一種文本表示能夠很好地遷移到各種子任務(wù)上旗笔。
算法關(guān)鍵
-
無監(jiān)督訓(xùn)練的模型采用Transformer的decoder彪置,目標(biāo)函數(shù)采用標(biāo)準(zhǔn)的語(yǔ)言模型的目標(biāo)函數(shù),即通過前文預(yù)測(cè)下一個(gè)詞蝇恶。
這個(gè)目標(biāo)函數(shù)其實(shí)是比BERT模型那種完形填空式的語(yǔ)言模型目標(biāo)函數(shù)要難拳魁,因?yàn)?strong>預(yù)測(cè)未來要比預(yù)測(cè)中間難。這可能也是導(dǎo)致GPT在訓(xùn)練和效果上比BERT差一些的一個(gè)原因撮弧。反過來說潘懊,如果你的模型真能預(yù)測(cè)未來,那么要比BERT這種通過完形填空訓(xùn)練的模型的強(qiáng)大很多贿衍,這也是作者一直將GPT模型不斷做大授舟,誕生三兄弟的一個(gè)原因吧。 - 有監(jiān)督fine-tune采用標(biāo)準(zhǔn)的分類目標(biāo)函數(shù)贸辈。此外释树,作者發(fā)現(xiàn)在有監(jiān)督訓(xùn)練時(shí)額外加上語(yǔ)言模型的目標(biāo)函數(shù)更好,能夠提高模型的泛化性和加速模型收斂擎淤。
輸入形式
對(duì)于不同的下游任務(wù)奢啥,將數(shù)據(jù)轉(zhuǎn)換成統(tǒng)一的形式送入預(yù)訓(xùn)練好的語(yǔ)言模型,再接一層線性層進(jìn)行分類等嘴拢∽ぃ可以發(fā)現(xiàn),在fine-tune時(shí)席吴,僅需要對(duì)預(yù)訓(xùn)練的語(yǔ)言模型做很小的結(jié)構(gòu)改變赌结,即加一層線性層,即可方便地應(yīng)用于下游各種任務(wù)孝冒。
GPT-2 (生于2019年)
GPT-2模型依舊使用Transformer模型的decoder柬姚,但相比于GPT-1,數(shù)據(jù)和模型參數(shù)變得更大迈倍,大約是之前的10倍伤靠,主打zero-shot
任務(wù)。
現(xiàn)有基于監(jiān)督學(xué)習(xí)訓(xùn)練的模型的泛化性不是很好啼染,在一個(gè)任務(wù)上訓(xùn)練好的模型也很難遷移到下一個(gè)任務(wù)上。多任務(wù)學(xué)習(xí)(Multitask learning)是指在訓(xùn)練一個(gè)模型時(shí)焕梅,同時(shí)看多個(gè)任務(wù)的數(shù)據(jù)集迹鹅,而且可能通過多個(gè)損失函數(shù)來達(dá)到一個(gè)模式在多個(gè)任務(wù)上都能用的效果,但是在NLP領(lǐng)域用的不多贞言。NLP領(lǐng)域主流的做法還是像GPT-1或BERT那樣先在大量無標(biāo)簽數(shù)據(jù)上預(yù)訓(xùn)練語(yǔ)言模型斜棚,然后在每個(gè)下游任務(wù)上進(jìn)行有監(jiān)督的fine-tune,但是這樣也有兩個(gè)問題:
- 對(duì)于下游的每個(gè)任務(wù),還是要重新訓(xùn)練模型
- 需要收集有標(biāo)簽的數(shù)據(jù)
這樣導(dǎo)致在拓展到新任務(wù)上時(shí)還是有一定的成本弟蚀。因此蚤霞,GPT-2提出利用語(yǔ)言模型做下游任務(wù)時(shí),不需要下游任務(wù)的任何標(biāo)注信息义钉,即zero-shot
設(shè)定昧绣,也不用訓(xùn)練模型。因此基本實(shí)現(xiàn)一勞永逸捶闸,訓(xùn)練一個(gè)模型夜畴,在多個(gè)任務(wù)上都能用。
此時(shí)删壮,我們需要考慮一個(gè)問題贪绘,如圖1所示,GPT-1在做下游任務(wù)時(shí)會(huì)對(duì)輸入進(jìn)行構(gòu)造央碟,引入了一些模型在預(yù)訓(xùn)練時(shí)沒見過的符號(hào)(預(yù)訓(xùn)練時(shí)見到的是自然文本)税灌,比如Start、Delim亿虽、Extract
菱涤,但因?yàn)橛衒ine-tune的環(huán)節(jié),所以模型會(huì)去認(rèn)識(shí)這些符號(hào)经柴。
然而狸窘,現(xiàn)在要做zero-shot,也就是在做下游任務(wù)時(shí)坯认,模型不能被調(diào)整了翻擒,如果還引入一些模型之前沒見過的符號(hào)的話,模型就會(huì)很困惑牛哺。因此陋气,在構(gòu)造下游任務(wù)的輸入時(shí),我們就不能引入模型未見過的符號(hào)引润,而要使得輸入像模型預(yù)訓(xùn)練時(shí)見到的自然文本一樣巩趁,比如:
- 機(jī)器翻譯任務(wù):
translate to french, english text, french text
〈靖剑“translate to french”這三個(gè)詞可以被認(rèn)為是一個(gè)特殊的分隔符议慰,后面叫Prompt。 - 閱讀理解任務(wù):
answer the question, document, question, answer
下圖所示為GPT-2在不同任務(wù)上進(jìn)行預(yù)測(cè)時(shí)采用的Prompt:
GPT-3 (生于2020年)
GPT-3結(jié)構(gòu)和GPT-2一樣奴曙,但是數(shù)據(jù)約為GPT-2的1000倍别凹,模型參數(shù)約為GPT-2的100倍,暴力出奇跡洽糟,使得效果很驚艷炉菲。
GPT-3不再追求極致的zero-shot學(xué)習(xí)堕战,即不給你任何樣例去學(xué)習(xí),而是利用少量樣本去學(xué)習(xí)拍霜。因?yàn)槿祟愐膊皇遣豢慈魏螛永龑W(xué)習(xí)的嘱丢,而是通過少量樣例就能有效地舉一反三。
由于GPT-3龐大的體量祠饺,在下游任務(wù)進(jìn)行fine-tune的成本會(huì)很大越驻。因此GPT-3作用到下游子任務(wù)時(shí),不進(jìn)行任何的梯度更新或fine-tune吠裆。
這里
=>
可以看成是一個(gè)Prompt伐谈。
GPT-3可以生成人類都很難分辨的新聞文章,瞎扯起來像模像樣试疙,比如:
局限性
- 雖然效果比GPT-2好很多诵棵,但是在文本生成上還是比較弱的。假如讓GPT-3生成一個(gè)很長(zhǎng)的文本祝旷,可能給了幾段之后履澳,就會(huì)重復(fù)起來
- 結(jié)構(gòu)和算法的局限性。GPT-3是語(yǔ)言模型怀跛,不能像bert那樣雙向看距贷。
- 均勻地預(yù)測(cè)下一個(gè)詞。不能判斷哪個(gè)詞重要吻谋,哪個(gè)詞不重要忠蝗,導(dǎo)致語(yǔ)言模型可能會(huì)花很長(zhǎng)時(shí)間去學(xué)習(xí)一些常見的虛詞,不像人類學(xué)習(xí)的劃重點(diǎn)漓拾。
- 樣本有效性不夠阁最。基本上把整個(gè)網(wǎng)絡(luò)上的文章下載下來了骇两。
- 做few-shot時(shí)速种,模型真的是根據(jù)你給的樣本從頭學(xué)習(xí)的嗎?這樣碰到訓(xùn)練樣本上沒有出現(xiàn)的任務(wù)低千,也能夠泛化過去配阵;還是根據(jù)這些樣本,從訓(xùn)練記憶里找出相關(guān)的示血,認(rèn)出了這個(gè)任務(wù)棋傍,那拼的就是訓(xùn)練數(shù)據(jù)的大小了。
- 不具有可解釋性
Improving Language Understanding by Generative Pre-Training
Language Models are Unsupervised Multitask Learners
Language Models are Few-Shot Learners
https://www.bilibili.com/video/BV1AF411b7xQ