引言
2022年11月30日,OpenAI在其博客上發(fā)布了ChatGPT的介紹,掀起了大語言模型的一波狂風(fēng),席卷了2023年伊始幾乎所有的話題。這個能夠“理解”人類語言的模型,不僅可以完成接續(xù)上下文的查詢和交流任務(wù),還能夠?qū)崿F(xiàn)包括代碼、論文、周報等在內(nèi)的撰寫工作。
它的能力,遠不僅如此。它的出現(xiàn),是一場“變革”。
截止到此文發(fā)布,Google上關(guān)于ChatGPT的搜索詞條達到6.5億個,包括Meta(Galactica,已下線)、百度(文心一言)在內(nèi)的諸多公司火速開展了基于ChatGPT的研究工作并推出了產(chǎn)品。微軟已率先將其應(yīng)用在搜索領(lǐng)域,開啟了ChatGPT影響的第一個領(lǐng)域:搜索引擎。
在這波浪潮之下,作為人工智能從業(yè)者,我們有必要好好了解一下這個“大殺器”的能力和其背后的原理。
注:
- 這篇文章的出現(xiàn)離不開各社區(qū)內(nèi)的研究者們的分享,所有參考文獻已列于本文最后,感謝各位的工作。
- 截止到發(fā)文(2023.2.20),OpenAI公司暫未ChatGPT論文,只先介紹其前序工作,待文章發(fā)表后繼續(xù)更新。
- 為了文章的簡潔性,本文只簡要介紹各方法的思想和主要貢獻,關(guān)于方法的具體內(nèi)容可以參考論文等其他資料。
基石
對于ChatGPT而言,技術(shù)的發(fā)展并非一蹴而就。它的出現(xiàn),依賴了許多前人的工作。在了解這項不可思議的工作之前,讓我們先看看它的發(fā)展歷程。
故事的開始:Transformer
2017年6月,Google公司在《Attention is All You Need》一文中發(fā)布了名為“Transformer”的方法,引用量達到了6萬5千余次。
異姓兄弟:GPT、Bert與GPT-2
GPT
在Transformer發(fā)布的一年后,2018年6月,OpenAI公司推出了第一代GPT模型,其名字是后人根據(jù)論文題目中的“Generative Pre-Training”取首字母得到的。其目的是為了解決自然語言處理任務(wù)中,有標注的樣本數(shù)量不足給深度學(xué)習(xí)類方法帶來的局限。
GPT模型采用的是生成-判別結(jié)構(gòu):首先在未標注文本上預(yù)訓(xùn)練生成一個語言模型,隨后在此基礎(chǔ)上,用有標注樣本在特定任務(wù)下訓(xùn)練一個判別模型。盡管生成-判別結(jié)構(gòu)早在幾年前就廣泛應(yīng)用于了圖像處理領(lǐng)域,但由于自然語言處理當時還沒有大規(guī)模的已標注數(shù)據(jù)集(句子數(shù)1000萬以上),因此在GPT和Bert出現(xiàn)前,這種結(jié)構(gòu)并未在NLP領(lǐng)域打開局面。由于GPT的生成模型是是未標注文本上訓(xùn)練得到的,因此在解決樣本問題上向前邁進了一大步。
另外,在GPT提出之前,雖然也有基于非標注樣本訓(xùn)練的例子(如word2vec),但是這些方法通常需要對一個特定的語言任務(wù)構(gòu)造網(wǎng)絡(luò)結(jié)構(gòu)。不同的是,GPT在應(yīng)對各任務(wù)時,只需要改變輸入,而無需修改模型。這也是一個很大的創(chuàng)新。
總體而言,在當時,使用無標注樣本訓(xùn)練的時候主要存在兩個困難:
- 優(yōu)化目標函數(shù)的選擇比較困難:不同的目標函數(shù)擅長不同的NLP子任務(wù),沒有一個通用的解決方案;
- 如何將學(xué)習(xí)到的文本描述傳遞到下游子任務(wù):NLP子任務(wù)之間的差距比較大,很難有一個一致的描述可以適應(yīng)所有的子任務(wù)。
注: 對不熟悉自然語言處理任務(wù)的小伙伴解釋一下,這里所說的“特定的語言任務(wù)”是指包括詞理解、短語理解、句子理解、句子生成等在內(nèi)的多樣化任務(wù)。
在GPT工作開始的時候,是選擇transformer作為基礎(chǔ)架構(gòu)還是選擇RNN作為基礎(chǔ)架構(gòu)并不是顯而易見的。因此,作者在論文中提到了以transformer為基礎(chǔ)架構(gòu)的原因:在遷移任務(wù)中,RNN習(xí)得的描述沒有transformer習(xí)得的描述更加穩(wěn)健。作者給出的猜測是,transformer中具有更結(jié)構(gòu)化的記憶,從而可以處理更長的文本信息,進而可以更好地抽取句子和段落層面的語義信息。
注: 這里還是一個比較有意思的研究點,能否論證RNN與transformer在穩(wěn)健性上所體現(xiàn)的差異,究竟是什么原因造成的。感興趣的小伙伴可以自行查閱資料,也歡迎大家在評論區(qū)分享查到的結(jié)果。
總體而言,GPT最大的優(yōu)勢是,無需改變模型結(jié)構(gòu)就可以應(yīng)對各類NLP的子任務(wù)。關(guān)于模型的具體實現(xiàn)和做法,歡迎移步我的另一篇博客交流討論。
Bert
【代碼】
GPT出現(xiàn)的四個月后,Google在2018年10月拿出了新模型Bert。GPT一代模型采用了12層的Transformer解碼器,每一層的通道數(shù)是768;而Bert也推出了與之對應(yīng)的Bert-Base模型,該模型與GPT具有相同的規(guī)模(12層,768通道),但是獲得了更好的表現(xiàn)。(盡管GPT基于的解碼器要比Bert基于的編碼器略復(fù)雜(帶掩碼),但是二者在相同層數(shù)和通道數(shù)的情況下,可以認為規(guī)模相當。)
而且這種優(yōu)勢還可以隨著模型的擴大進一步得到體現(xiàn)。除了Bert-Base,論文中還構(gòu)建了一個Bert-Large模型。它的層數(shù)是24,通道數(shù)為1024,參數(shù)量較Bert-Base擴大了約3倍(340M v.s. 110M),效果也比GPT和Bert-Base好出很多。Bert之所以能夠訓(xùn)練這么大的模型,是因為數(shù)據(jù)集與GPT不同。Bert采用的是BooksCorpus數(shù)據(jù)集(GPT用的)以及英文版Wikipedia數(shù)據(jù)集(GPT沒用),而且是以詞為單位(GPT是連續(xù)的文本)。
與GPT不同,Bert采用的是帶掩碼的語言模型,而非GPT中采用的標準語言模型。也就是說Bert在預(yù)測的時候,既能夠看到當前位置之前的詞,也能看到之后的詞(有點像完形填空)。這也是為什么GPT只能采用Transformer的解碼器(包含掩碼,只看到之前的詞),而Bert也可以使用Transformer的編碼器(包含序列的所有信息)。
視野的差異決定了GPT與Bert的目標函數(shù)是不同的,而且GPT中的目標函數(shù)求解要更加困難(預(yù)測未來肯定要比填空更加困難)。這也是Bert的表現(xiàn)要優(yōu)于GPT的一個原因之一。但反言之,如果成功訓(xùn)練了能夠預(yù)測未來的模型,那么其能力也是遠超“填空型”的方法的。因此,OpenAI團隊在GPT的基礎(chǔ)上,進一步擴大了模型,形成了后續(xù)的一系列工作。
關(guān)于Bert的詳細解讀可以移步這篇博客(撰寫中)交流討論。
GPT-2
【代碼】
在發(fā)現(xiàn)自己的工作被更大的模型打敗之后,OpenAI同樣的一作和領(lǐng)導(dǎo)(團隊班子倒是變了)又在2019年2月發(fā)布了GPT-2。
此時,OpenAI團隊面臨著兩個問題:
- 用更大的模型打敗Bert,是否可行?
- 沿用基于Transformer解碼器的技術(shù)路線,能否打敗基于編碼器的Bert?(都站隊了,這個時候換路線,不僅浪費前面的工作,面子上也過不去)
那么針對上面的兩個問題,大佬們是怎么做的呢?
首先,他們創(chuàng)建了一個包含百萬網(wǎng)頁的新數(shù)據(jù)集——WebText,訓(xùn)練了一個體量達到15億的新模型(GPT-2)。相比于3.4億的Bert-Large,模型擴大了4.4倍。但可惜的是,他們發(fā)現(xiàn)與Bert相比,單純地擴大GPT模型的體量所帶來的優(yōu)勢并不明顯。
因此,作者們將zero-shot拿了出來,作為GPT-2工作的一個主要賣點(zero-shot在GPT工作的最后也有用到,主要用來了解GPT模型的訓(xùn)練基石。)
這里作者們提出了,現(xiàn)在的模型大多面臨著泛化性的問題,即在一個數(shù)據(jù)下訓(xùn)練好的模型很難遷移到另外一個數(shù)據(jù)集。盡管多任務(wù)模型能夠通過改變輸入數(shù)據(jù)和損失函數(shù),指導(dǎo)模型具有同時完成多個任務(wù)的能力,但是這種模式在NLP領(lǐng)域卻并不常用。NLP中目前(論文發(fā)表時)常用的思路是與GPT和Bert相似的:先預(yù)訓(xùn)練一個模型,然后在任務(wù)數(shù)據(jù)集下微調(diào)。但是這就意味著,需要對每一個下游子任務(wù)訓(xùn)練一個模型,同時還要對每個子任務(wù)都標注一個數(shù)據(jù)集。
因此,GPT-2提出的zero-shot的概念,就是在無需重新訓(xùn)練的情況下,就可以實現(xiàn)到子任務(wù)的遷移。 這樣,盡管與Bert相比,GPT-2在精度上沒有明顯優(yōu)勢,但是其zero-shot的思想,也讓這項研究具有了更明顯的創(chuàng)新味道。
GPT-2模型最大共有24層,可學(xué)習(xí)參數(shù)量約15億個。盡管GPT-2在問答等某些場景下表現(xiàn)不夠優(yōu)秀,但是實驗結(jié)果也證明了,隨著參數(shù)量的不斷增大,模型的表現(xiàn)也在逐步提升。因此,OpenAI團隊在此基礎(chǔ)上進一步增加了模型體量,這也就形成了后面要講的GPT-3。
關(guān)于GPT-2模型的具體解讀,請移步這篇博客。
大力出奇跡:GPT3
GPT-2中Large GPT模型的表現(xiàn)讓OpenAI團隊看到了大規(guī)模模型在效果提升上的巨大潛力,因此在2020年5月,他們將模型規(guī)模擴大了100倍,實現(xiàn)了跨越式的GPT-3模型(參數(shù)量1750億),真正完成了“大力出奇跡”的第一步。
盡管GPT-3是在GPT-2之后的一項工作,但是它并沒有完全繼承GPT-2的zero-shot思想,而是回歸了GPT實驗最后一小節(jié)中涉及到的few-shot的問題。因為在實際應(yīng)用中,也確實不容易見到完全zero-shot的場景。但由于模型量太大,在各子任務(wù)中訓(xùn)練GPT-3是不現(xiàn)實的。好在GPT-3也實現(xiàn)了無需梯度下降或微調(diào)模型,只需要在few-shot的情況下通過文本與模型互動即可實現(xiàn)子任務(wù)需求。總體上,GPT-3的模型和GPT-2的模型是基本相同的,但是在層數(shù)和通道數(shù)等參數(shù)量的設(shè)置上存在差異(表格來源于GPT-3論文):
GPT-3采用的數(shù)據(jù)集是GPT-2舍棄的Common Craw。當時的舍棄原因是數(shù)據(jù)太臟了,所以GPT-3采用了三個方法來處理數(shù)據(jù)。其中排除相似度的方法用的是lsh算法(Locality-Sensitive Hashing),感興趣大家可以自行了解。【lsh資源1】【lsh資源2】
GPT-3文章中指出了對每個子任務(wù)微調(diào)模型的做法所存在的問題:
- 需要有與子任務(wù)相關(guān)的數(shù)據(jù)集并標注。
- 微調(diào)效果好不見得證明了模型泛化性好,也可能模型在微調(diào)過程中過擬合了這些訓(xùn)練樣本。那么如果這些樣本包含了所有子任務(wù)場景,模型效果會好;但是如果子任務(wù)超出了這些數(shù)據(jù),又不允許模型微調(diào)的話,那么效果可能就不好了。
- 人類的學(xué)習(xí)模式是掌握了語言之后,完成任務(wù)的時候就不需要那么多的訓(xùn)練數(shù)據(jù)了,只需要說清楚要干什么就行。
下圖給出了fine-tuning、zero-shot、one-shot和few-shot的工作模式(圖片來源于GPT-3論文):
GPT-3中一個比較有意思的結(jié)果是,證明了如果想要實現(xiàn)精度的顯性增加,那么就需要指數(shù)增加模型的數(shù)據(jù)量和計算量,這樣的代價是非常大的,也是現(xiàn)在深度學(xué)習(xí)的一個痛點(圖片來源于GPT-3論文):
另外,論文的第五章給出了GPT-3的幾個局限性,感興趣的朋友可以詳細讀一下,這里就不一一列舉了。
相對而言,GPT系列的技術(shù)路線(預(yù)測式)要比Bert的技術(shù)路線(填空式)更加困難,但是GPT-3的表現(xiàn)證明了此種模型的強大能力,也展現(xiàn)了其天花板的高度。
模型的進化:InstructGPT
2022年1月,OpenAI公司推出了InstructGPT模型,其可以根據(jù)人類的反饋在有監(jiān)督的情況下完成模型在GPT-3基礎(chǔ)上的精調(diào)。隨后,通過人對模型的輸出進行排序,以此為輸入進一步采用強化學(xué)習(xí)訓(xùn)練得到的模型,最終獲得InstructGPT。
InstructGPT在結(jié)構(gòu)上與前面的的工作基本上是一樣的,只是在新的數(shù)據(jù)上采用了新的訓(xùn)練手段(強化學(xué)習(xí))。InstructGPT文章有將近70頁,論文中花了很大的篇幅說明模型是如何訓(xùn)練的,如果有需要的話建議詳細讀一下論文來了解具體的工作原理。
InstructGPT的模型大小為130萬,相比于GPT-3(1.75億)小了100倍。雖然InstructGPT仍然會犯錯,但是根據(jù)人類反饋,InstructGPT在表現(xiàn)上要比GPT-3更好。另外,InstructGPT在公開數(shù)據(jù)集上的表現(xiàn)沒有明顯下降,同時在穩(wěn)定性和安全性上有所提高。
ChatGPT
目前ChatGPT的論文還沒有出來,只有一篇blog介紹,里面大致講了一下說ChatGPT采用的模型與InstructGPT是先溝通的,訓(xùn)練方法也同樣采用Reinforcement Learning from Human Feedback (RLHF)。不過兩個模型在數(shù)據(jù)獲取的設(shè)置上存在差異。
下圖是ChatGPT的訓(xùn)練流程:
從圖片中可以看出,ChatGPT與InstructGPT在流程上是基本相同的。OpenAI也提到,ChatGPT是在GPT3.5的基礎(chǔ)上訓(xùn)練得到的。
不過測試版本的應(yīng)用已經(jīng)可以在chat.openai.com里面找到了。除了免費版本,ChatGPT還有一個ChatGPT Plus,一個月20美元,但是會員的優(yōu)勢目前來看也沒有很明顯。如果大家感興趣可以去試一下。
代碼庫
Transformer
Transformer團隊給出的官方代碼是在Tensorflow下寫的,后來在Github又出現(xiàn)了PyTorch實現(xiàn)版本。更多代碼實現(xiàn)可以參考PapersWithCode網(wǎng)站。
GPT-2
GPT-2的官方代碼發(fā)布在GitHub社區(qū)上。
其圖像版本Image-GPT也有開源代碼。
GPT-3
GPT-3的模型的代碼目前是只讀狀態(tài),并未完全開源。
InstructGPT
InstructGPT目前也只有demo,沒有官方的開源代碼。
未來的工作
安全性&有效性
盡管在學(xué)界主要關(guān)心的是模型的表現(xiàn),但是在工業(yè)生產(chǎn)中,機器學(xué)習(xí)類的方法的安全性和有效性是十分重要的。我們一方面在享受模型靈活性帶來的便利,一方面也要小心地應(yīng)對可能存在的危險。
因為安全性問題導(dǎo)致的產(chǎn)業(yè)界緊急叫?;蛳录艿臉I(yè)務(wù)數(shù)不勝數(shù)。比如在2015年Google Mask功能中將黑人標注成了“Gorilla”(大猩猩),導(dǎo)致用戶投訴,Google只得緊急刪除了整個模型中的“Gorilla”標注并道歉。直到3年后的2018年,這個類別標簽仍然沒有恢復(fù)。無獨有偶,2021年Facebook也因為算法將黑人標注為靈長類動物而道歉。更多的示例大家可以觀看李沐這個視頻中11分到13分41秒的內(nèi)容。
現(xiàn)階段,即使ChatGPT團隊做了很多工作來避免其發(fā)布不合適的回答,仍然存在各種各樣的方法能夠繞過這些限制,從而引到ChatGPT做出危險的回復(fù)。因此,在大模型安全性和有效性的問題上,還任重而道遠。文章來源:http://www.zghlxwxcb.cn/news/detail-432807.html
算力與標注代價的平衡
盡管目前許多研究工作是朝著無監(jiān)督/弱監(jiān)督/自監(jiān)督等方向進行的,但是如果需要達到一定的精度,這些方法通常在算力上具有很高的要求。如果在一些困難場景下適當引入標注信息,也許可以有效降低提升模型精度所需要的算力代價。因此,如何找到算力成本與人工標注成本之間的平衡點,也是一個很需要探索的問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-432807.html
參考文獻
- 視頻《GPT,GPT-2,GPT-3 論文精讀【論文精讀】》(李沐)
- 視頻《InstructGPT 論文精讀【論文精讀】》(李沐)
- 知乎:Locality-Sensitive Hashing, LSH
- ChatGPT: Optimizing Language Models for Dialogue
到了這里,關(guān)于從ChatGPT出發(fā):大模型與自然語言模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!