(本文是chatGPT原理介紹,但沒(méi)有任何數(shù)學(xué)公式,可以放心食用) 前言這兩天,chatGPT模型真可謂稱得上是狂拽酷炫D炸天的存在了。一度登上了知乎熱搜,這對(duì)科技類話題是非常難的存在。不光是做人工智能、機(jī)器學(xué)習(xí)的人關(guān)注,而是大量的各行各業(yè)從業(yè)人員都來(lái)關(guān)注這個(gè)模型,真可謂空前盛世。 我趕緊把 openai 以往的 GPT-n 系列論文又翻出來(lái),重新學(xué)習(xí)一下,認(rèn)真領(lǐng)會(huì)大規(guī)模預(yù)訓(xùn)練語(yǔ)言模型(Large Language Model)的強(qiáng)大之處。 可能很多深度學(xué)習(xí)相關(guān)從業(yè)人員的感受和我一樣,大家之前對(duì) LLM 的感受依然是,預(yù)訓(xùn)練+finetune,處理下游任務(wù),依然需要大量的標(biāo)注數(shù)據(jù)和人工干預(yù),怎么突然間,chatGPT 就智能到如此地步? 接下來(lái),我簡(jiǎn)要梳理一下 openai 的 GPT 大模型的發(fā)展歷程。 一、還得從 Bert 說(shuō)起2018年,自然語(yǔ)言處理 NLP 領(lǐng)域也步入了 LLM 時(shí)代,谷歌出品的 Bert 模型橫空出世,碾壓了以往的所有模型,直接在各種NLP的建模任務(wù)中取得了最佳的成績(jī)。 Bert做了什么,主要用以下例子做解釋。
請(qǐng)問(wèn)上述空格應(yīng)該填什么?有的人回答“百度”,有的人可能覺(jué)得,“字節(jié)”也沒(méi)錯(cuò)。但總不再可能是別的字了。 不論填什么,這里都表明,空格處填什么字,是受到上下文決定和影響的。 Bert 所作的事就是從大規(guī)模的上億的文本預(yù)料中,隨機(jī)地扣掉一部分字,形成上面例子的完形填空題型,不斷地學(xué)習(xí)空格處到底該填寫(xiě)什么。所謂語(yǔ)言模型,就是從大量的數(shù)據(jù)中學(xué)習(xí)復(fù)雜的上下文聯(lián)系。 二、GPT 初代與此同時(shí),openai 早于 Bert 出品了一個(gè)初代 GPT 模型。 他們大致思想是一樣的。都基于 Transformer 這種編碼器,獲取了文本內(nèi)部的相互聯(lián)系。 編解碼的概念廣泛應(yīng)用于各個(gè)領(lǐng)域,在 NLP 領(lǐng)域,人們使用語(yǔ)言一般包括三個(gè)步驟:
語(yǔ)言是一個(gè)顯式存在的東西,但大腦是如何將語(yǔ)言進(jìn)行理解、轉(zhuǎn)化和存儲(chǔ)的,則是一個(gè)目前仍未探明的東西。因此,大腦理解語(yǔ)言這個(gè)過(guò)程,就是大腦將語(yǔ)言編碼成一種可理解、可存儲(chǔ)形式的過(guò)程,這個(gè)過(guò)程就叫做語(yǔ)言的編碼。 相應(yīng)的,把大腦中想要表達(dá)的內(nèi)容,使用語(yǔ)言表達(dá)出來(lái),就叫做語(yǔ)言的解碼。 在語(yǔ)言模型中,編碼器和解碼器都是由一個(gè)個(gè)的 Transformer 組件拼接在一起形成的。 這里不展開(kāi)講 Transformer 里的內(nèi)部結(jié)構(gòu),僅僅講一下 Bert 和 GPT 的區(qū)別。 兩者最主要的區(qū)別在于,Bert 僅僅使用了 encoder 也就是編碼器部分進(jìn)行模型訓(xùn)練,GPT 僅僅使用了 decoder 部分。兩者各自走上了各自的道路,根據(jù)我粗淺的理解,GPT 的decoder 模型更加適應(yīng)于文本生成領(lǐng)域。 GPT 初代其實(shí)個(gè)人認(rèn)為(當(dāng)然普遍也都這么認(rèn)為)略遜色于 Bert,再加上宣傳地不夠好,影響力也就小于 Bert。
三、GPT-2自從 Bert 炸街后,跟風(fēng)效仿的改進(jìn)模型也就越來(lái)越多了,比如 albert、roberta、ERNIE,BART、XLNET、T5 等等五花八門(mén)。 最初的時(shí)候,僅僅是一個(gè)完形填空任務(wù)就可以讓語(yǔ)言模型有了極大進(jìn)步,那么,給 LLM 模型出其它的語(yǔ)言題型,應(yīng)該也會(huì)對(duì)模型訓(xùn)練有極大的幫助。 想要出語(yǔ)言題型不是很簡(jiǎn)單么,什么句子打亂順序再排序、選擇題、判斷題、改錯(cuò)題、把預(yù)測(cè)單字改成預(yù)測(cè)實(shí)體詞匯等等,紛紛都可以制定數(shù)據(jù)集添加在模型的預(yù)訓(xùn)練里。很多模型也都是這么干的。 既然出題也可以,把各種NLP任務(wù)的數(shù)據(jù)集添加到預(yù)訓(xùn)練階段當(dāng)然也可以。
GPT-2 主要就是在 GPT 的基礎(chǔ)上,又添加了多個(gè)任務(wù),擴(kuò)增了數(shù)據(jù)集和模型參數(shù),又訓(xùn)練了一番。 既然多個(gè)任務(wù)都在同一個(gè)模型上進(jìn)行學(xué)習(xí),還存在一個(gè)問(wèn)題,這一個(gè)模型能承載的并不僅僅是任務(wù)本身,“汪小菲的媽是張?zhí)m”,這條文字包含的信息量是通用的,它既可以用于翻譯,也可以用于分類,判斷錯(cuò)誤等等。也就是說(shuō),信息是脫離具體 NLP 任務(wù)存在的,舉一反三,能夠利用這條信息,在每一個(gè) NLP 任務(wù)上都表現(xiàn)好,這個(gè)是 元學(xué)習(xí)(meta-learning),實(shí)際上就是語(yǔ)言模型的一腦多用。 四、GPT-3大模型中的大模型首先, GPT-3 的模型所采用的數(shù)據(jù)量之大,高達(dá)上萬(wàn)億,模型參數(shù)量也十分巨大,學(xué)習(xí)之復(fù)雜,計(jì)算之繁復(fù)不說(shuō)了,看圖吧。 GPT-3 里的大模型計(jì)算量是 Bert-base 的上千倍。統(tǒng)統(tǒng)這些都是在燃燒的金錢,真就是 all you need is money。如此巨大的模型造就了 GPT-3 在許多十分困難的 NLP 任務(wù),諸如撰寫(xiě)人類難以判別的文章,甚至編寫(xiě)SQL查詢語(yǔ)句,React或者JavaScript代碼上優(yōu)異的表現(xiàn)。 首先 GPT-n 系列模型都是采用 decoder 進(jìn)行訓(xùn)練的,也就是更加適合文本生成的形式。也就是,輸入一句話,輸出也是一句話。也就是對(duì)話模式。 對(duì)話我們是如何學(xué)會(huì)中文的?通過(guò)從0歲開(kāi)始,聽(tīng),說(shuō),也就是對(duì)話。 我們是如何學(xué)外語(yǔ)的?看教材,聽(tīng)廣播,背單詞。唯獨(dú)缺少了對(duì)話!正是因?yàn)槿鄙倭藢?duì)話這個(gè)高效的語(yǔ)言學(xué)習(xí)方式,所以我們的英語(yǔ)水平才如此難以提高。 對(duì)于語(yǔ)言模型,同理。 對(duì)話是涵蓋一切NLP 任務(wù)的終極任務(wù)。從此 NLP不再需要模型建模這個(gè)過(guò)程。比如,傳統(tǒng) NLP 里還有序列標(biāo)注這個(gè)任務(wù),需要用到 CRF 這種解碼過(guò)程。在對(duì)話的世界里,這些統(tǒng)統(tǒng)都是冗余的。 其實(shí) CRF 這項(xiàng)技術(shù)還是蠻經(jīng)典的,在深度學(xué)習(xí)這塊,CRF這也才過(guò)去沒(méi)幾年。sigh…… in-context learning以往的預(yù)訓(xùn)練都是兩段式的,即,首先用大規(guī)模的數(shù)據(jù)集對(duì)模型進(jìn)行預(yù)訓(xùn)練,然后再利用下游任務(wù)的標(biāo)注數(shù)據(jù)集進(jìn)行 finetune,時(shí)至今日這也是絕大多數(shù) NLP 模型任務(wù)的基本工作流程。 GPT-3 就開(kāi)始顛覆這種認(rèn)知了。它提出了一種 in-context 學(xué)習(xí)方式。這個(gè)詞沒(méi)法翻譯成中文,下面舉一個(gè)例子進(jìn)行解釋。
按理來(lái)講,針對(duì)機(jī)器翻譯任務(wù),我們當(dāng)然希望模型輸出最后一句,針對(duì)對(duì)話任務(wù),我們希望模型輸出前兩句中的任何一句。顯然做碗面這個(gè)輸出句子顯得前言不搭后語(yǔ)。 這時(shí)就有了 in-context 學(xué)習(xí),也就是,我們對(duì)模型進(jìn)行引導(dǎo),教會(huì)它應(yīng)當(dāng)輸出什么內(nèi)容。如果我們希望它輸出翻譯內(nèi)容,那么,應(yīng)該給模型如下輸入:
如果想讓模型回答問(wèn)題:
OK,這樣模型就可以根據(jù)用戶提示的情境,進(jìn)行針對(duì)性的回答了。 這里,只是告知了模型如何做,最好能夠給模型做個(gè)示范:
其中 蘋(píng)果翻譯成 apple,是一個(gè)示范樣例,用于讓模型感知該輸出什么。只給提示叫做 zero-shot,給一個(gè)范例叫做 one-shot,給多個(gè)范例叫做 few-shot。 范例給幾個(gè)就行了,不能再給多了!一個(gè)是,咱們沒(méi)那么多標(biāo)注數(shù)據(jù),另一個(gè)是,給多了不就又成了 finetune 模式了么? 在 GPT-3 的預(yù)訓(xùn)練階段,也是按照這樣多個(gè)任務(wù)同時(shí)學(xué)習(xí)的。比如“做數(shù)學(xué)加法,改錯(cuò),翻譯”同時(shí)進(jìn)行。這其實(shí)就類似前段時(shí)間比較火的 prompt。 這種引導(dǎo)學(xué)習(xí)的方式,在超大模型上展示了驚人的效果:只需要給出一個(gè)或者幾個(gè)示范樣例,模型就能照貓畫(huà)虎地給出正確答案。注意啊,是超大模型才可以,一般幾億參數(shù)的大模型是不行的。(我們這里沒(méi)有小模型,只有大模型、超大模型、巨大模型) 這個(gè)表格彷佛在嘲諷我:哎,你沒(méi)錢,你就看不著這種優(yōu)質(zhì)的效果,你氣不氣? 五、chatGPT終于說(shuō)到了主角,能看到這里的,可以關(guān)注一下 JioNLP 公眾號(hào)嗎?我寫(xiě)的也夠累的。 charGPT 模型上基本上和之前都沒(méi)有太大變化,主要變化的是訓(xùn)練策略變了。 強(qiáng)化學(xué)習(xí)幾年前,alpha GO 擊敗了柯潔,幾乎可以說(shuō)明,強(qiáng)化學(xué)習(xí)如果在適合的條件下,完全可以打敗人類,逼近完美的極限。 強(qiáng)化學(xué)習(xí)非常像生物進(jìn)化,模型在給定的環(huán)境中,不斷地根據(jù)環(huán)境的懲罰和獎(jiǎng)勵(lì)(reward),擬合到一個(gè)最適應(yīng)環(huán)境的狀態(tài)。 NLP + 強(qiáng)化學(xué)習(xí)強(qiáng)化學(xué)習(xí)之所以能比較容易地應(yīng)用在圍棋以及其它各種棋牌游戲里,原因就是因?yàn)閷?duì)莫 alpha Go 而言,環(huán)境就是圍棋,圍棋棋盤(pán)就是它的整個(gè)世界。 而幾年前知乎上就有提問(wèn),NLP + 強(qiáng)化學(xué)習(xí),可以做嗎?怎么做呢? 底下回答一片唱衰,原因就是因?yàn)椋?strong>NLP 所依賴的環(huán)境,是整個(gè)現(xiàn)實(shí)世界,整個(gè)世界的復(fù)雜度,遠(yuǎn)遠(yuǎn)不是一個(gè)19乘19的棋盤(pán)可以比擬的。無(wú)法設(shè)計(jì)反饋懲罰和獎(jiǎng)勵(lì)函數(shù),即 reward 函數(shù)。除非人們一點(diǎn)點(diǎn)地人工反饋。 哎,open-ai 的 chatGPT 就把這事給干了。 不是需要人工標(biāo)反饋和獎(jiǎng)勵(lì)嗎?那就撒錢,找40個(gè)外包,標(biāo)起來(lái)! 這種帶人工操作的 reward,被稱之為 RLHF(Reinforcement Learning from Human Feedback)。 具體操作過(guò)程就是下圖的樣子,采用強(qiáng)化學(xué)習(xí)的方式來(lái)對(duì)模型進(jìn)行訓(xùn)練。已經(jīng)拋棄了傳統(tǒng)的 LM 方式。 這里重點(diǎn)是第二部中,如何構(gòu)建一個(gè) reward 函數(shù),具體就是讓那40名外包人員不斷地從模型的輸出結(jié)果中篩選,哪些是好的,哪些是低質(zhì)量的,這樣就可以訓(xùn)練得到一個(gè) reward 模型。 通過(guò)reward 模型來(lái)評(píng)價(jià)模型的輸出結(jié)果好壞。 講真,這個(gè) reward 模型,《黑客帝國(guó)》的母體 matrix 既視感有木有????! 只要把預(yù)訓(xùn)練模型接一根管子在 reward 模型上,預(yù)訓(xùn)練模型就會(huì)開(kāi)始像感知真實(shí)世界那樣,感知reward。 由此,我們就可以得到這個(gè)把全世界都震碎的高音?。ㄕ`,模型) chatGPT 功能一覽
六、影響NLP 領(lǐng)域的影響個(gè)人認(rèn)為,NLP 領(lǐng)域的一些里程碑性的技術(shù)重要性排序如下:
chatGPT 的關(guān)注度已經(jīng)很大程度讓人們感覺(jué)到,什么天貓精靈、小愛(ài)同學(xué)等等人工智障的時(shí)代似乎過(guò)去了。只要模型足夠大,數(shù)據(jù)足夠豐富,reward 模型經(jīng)過(guò)了更多的人迭代和優(yōu)化,完全可以創(chuàng)造一個(gè)無(wú)限逼近真實(shí)世界的超級(jí) openai 大腦。 當(dāng)然,chat GPT 依然是存在回答不好的情況的,比如會(huì)重復(fù)一些詞句,無(wú)法分清楚事實(shí)等等。 而且,chatGPT 目前看,它是沒(méi)有在推理階段連接外部信息的。 模型知道自己的回答邊界,知道自己只是一個(gè)沒(méi)有情感的回答工具。那么,試想 openai 把外部信息也導(dǎo)入到 chatGPT 里。 另一些影響我看到 chatGPT 居然可以寫(xiě)代碼,還能幫我改代碼,debug,作為程序員,我不禁深深陷入了沉思。 據(jù)說(shuō),debug 程序員網(wǎng)站 stackoverflow,已經(jīng)下場(chǎng)封殺 chatGPT 了。 當(dāng)然,完全不僅僅是程序界。據(jù)說(shuō) GPT-4 正在做圖文理解,那么,對(duì)于教師、醫(yī)生、咨詢師、等等等等,各行各業(yè),是不是都是一個(gè)巨大的沖擊?所謂專業(yè)領(lǐng)域的知識(shí)門(mén)檻,也將被模型一步踏平。到時(shí)候,可能人類真的要靠邊站了,除了某些高精尖的行業(yè)精英。 有人講 google 將被替代,我認(rèn)為也就還好吧,依照google那財(cái)大氣粗的樣子,沒(méi)準(zhǔn) google 此時(shí)此刻,NLP+強(qiáng)化學(xué)習(xí)也已經(jīng)在路上了。 強(qiáng)人工智能時(shí)代真的要來(lái)了? |
|
來(lái)自: taotao_2016 > 《AI》