簡(jiǎn)介
本文旨在讓沒(méi)有計(jì)算機(jī)科學(xué)背景的人對(duì)ChatGPT和類似的人工智能系統(tǒng)(GPT-3、GPT-4、Bing Chat、Bard等)的工作原理有一些了解。ChatGPT是一種基于大語(yǔ)言模型(Large Language Model) 的對(duì)話式AI聊天機(jī)器人。這些詞匯當(dāng)前還比較陌生,但我們將逐步拆解,討論它們背后的核心概念。這篇文章不需要任何技術(shù)或數(shù)學(xué)背景,我們通過(guò)大量比喻來(lái)說(shuō)明這些概念,討論核心概念的工作方式,以及ChatGPT這樣的大語(yǔ)言模型可以或不可以做什么。
這就是本文要做的,在沒(méi)有任何術(shù)語(yǔ)的情況下慢慢講解與大語(yǔ)言模型和ChatGPT相關(guān)的術(shù)語(yǔ),對(duì)于必要術(shù)語(yǔ),我將用常見(jiàn)詞匯來(lái)拆解解釋。我們從"什么是人工智能"開(kāi)始,逐步深入。我會(huì)盡可能多的使用重復(fù)出現(xiàn)的比喻,從我們應(yīng)該期望AI能做什么或不能做什么來(lái)談?wù)撨@些技術(shù)的含義。
出發(fā)!
1. 什么是人工智能(Artificial Intelligence)?
我們先從一些可能經(jīng)常聽(tīng)到的基本術(shù)語(yǔ)開(kāi)始。什么是人工智能(artificial intelligence) ?
- 人工智能 : 如果一個(gè)實(shí)體的行為和人類類似,這個(gè)實(shí)體可能會(huì)被稱之為智能。
"智能"的定義并沒(méi)有達(dá)成一致,因此用"智能"這個(gè)詞來(lái)定義人工智能有點(diǎn)問(wèn)題,不過(guò)我覺(jué)得這仍然相當(dāng)不錯(cuò)?;旧峡梢哉J(rèn)為,如果看一些人工的東西,做一些吸引人的、有用的、讓人驚嘆的事情,就可以稱之為智能。例如,我們經(jīng)常將"AI"一詞歸因于電腦游戲中由電腦控制的角色,這些機(jī)器人大多是簡(jiǎn)單的if-then-else代碼(例如: 例如,"如果玩家在射程內(nèi),那么射擊,然后移動(dòng)到……")。但如果工作會(huì)讓我們保持投入和興奮,而不是做那些明顯的傻事,我們可能會(huì)認(rèn)為這些工作更復(fù)雜。
我們一旦了解了某些東西是如何工作的,可能并不會(huì)留下太深刻的印象,而且會(huì)期望在幕后看到更復(fù)雜的東西,這完全取決于你對(duì)幕后發(fā)生事情了解多少。
重點(diǎn)是,人工智能不是魔法。因?yàn)椴皇悄Хǎ钥梢越忉尅?/strong>
讓我們開(kāi)始吧。
2. 什么是機(jī)器學(xué)習(xí)(Machine Learning)?
你經(jīng)常聽(tīng)到的另一個(gè)與人工智能相關(guān)的術(shù)語(yǔ)是機(jī)器學(xué)習(xí)(machine learning) 。
- 機(jī)器學(xué)習(xí) : 一種通過(guò)獲取數(shù)據(jù),形成模型,然后執(zhí)行模型來(lái)創(chuàng)建行為的方法。
有時(shí)候,手動(dòng)創(chuàng)建一堆if-then-else語(yǔ)句來(lái)捕捉復(fù)雜的現(xiàn)象(比如語(yǔ)言)非常困難。在這種情況下,我們?cè)噲D找到一堆數(shù)據(jù),并用可以在數(shù)據(jù)中找到的模式來(lái)建模的算法。
但什么是模型呢?模型是對(duì)一些復(fù)雜現(xiàn)象的簡(jiǎn)化。例如,模型汽車(chē)是一輛真正汽車(chē)的更小、更簡(jiǎn)單版本,它有許多屬性,但并不意味著完全取代原來(lái)的汽車(chē)。一輛模型車(chē)可能看起來(lái)很真實(shí),有時(shí)候很有用,但不能開(kāi)它去購(gòu)物。
就像我們能造出更小更簡(jiǎn)單的汽車(chē)一樣,我們也能造出更小更簡(jiǎn)單的人類語(yǔ)言。我們用術(shù)語(yǔ)" 大語(yǔ)言模型(large language models) ",因?yàn)榭紤]到它們需要多少內(nèi)存,這些模型非常大。生產(chǎn)中最大的模型,如ChatGPT、GPT-3和GPT-4,大到需要在數(shù)據(jù)中心服務(wù)器上運(yùn)行大型超級(jí)計(jì)算機(jī)來(lái)創(chuàng)建和運(yùn)行。
3. 什么是神經(jīng)網(wǎng)絡(luò)(Neural Network)?
有許多從數(shù)據(jù)中學(xué)習(xí)模型的方法,神經(jīng)網(wǎng)絡(luò)就是其中之一。該技術(shù)大致模仿人類大腦通過(guò)神經(jīng)元相互連接的腦細(xì)胞網(wǎng)絡(luò)而組成,這些神經(jīng)元來(lái)回傳遞電信號(hào),以某種方式使人類能夠完成各種任務(wù)。20世紀(jì)40年代提出了神經(jīng)網(wǎng)絡(luò)的基本概念,但直到20世紀(jì)80年代才發(fā)明了訓(xùn)練神經(jīng)網(wǎng)絡(luò)的基本概念。神經(jīng)網(wǎng)絡(luò)效率非常低下,直到2017年左右,由于計(jì)算機(jī)硬件的發(fā)展,才讓大規(guī)模使用神經(jīng)網(wǎng)絡(luò)成為可能。
不過(guò),相對(duì)于大腦,我更喜歡用電路來(lái)比喻神經(jīng)網(wǎng)絡(luò)。即使你不是電氣工程師,也應(yīng)該知道電是通過(guò)電線流動(dòng)的,而有種叫做電阻的東西,可以阻礙電流經(jīng)過(guò)電路的某些部分。
假設(shè)你想做一輛能在高速公路上行駛的自動(dòng)駕駛汽車(chē),汽車(chē)的前部、后部和側(cè)面都配備了距離傳感器,當(dāng)有什么東西非常接近時(shí),傳感器報(bào)告數(shù)值為1.0,而當(dāng)附近沒(méi)有任何東西時(shí),報(bào)告數(shù)值為0.0。
你還調(diào)整了汽車(chē)的控制,使自動(dòng)裝置可以轉(zhuǎn)動(dòng)方向盤(pán)、踩剎車(chē)、踩油門(mén)。當(dāng)加速器接收到值1.0時(shí),表示用最大的加速度,0.0表示不加速。同樣,發(fā)送給制動(dòng)裝置的值1.0表示猛踩剎車(chē),0.0表示不剎車(chē)。發(fā)送給轉(zhuǎn)向裝置的值為-1.0到+1.0,負(fù)值表示向左轉(zhuǎn)向,正值表示向右轉(zhuǎn)向,0.0表示保持直線。
你還得記錄駕駛數(shù)據(jù)。當(dāng)前方道路暢通時(shí),就加速。前面有車(chē)時(shí),要減速。當(dāng)一輛車(chē)從左邊靠得太近時(shí),就向右轉(zhuǎn),改變車(chē)道(除非右邊也有一輛車(chē))。這是一個(gè)復(fù)雜的過(guò)程,涉及基于不同傳感器信息的不同動(dòng)作組合(向左轉(zhuǎn)向,向右轉(zhuǎn)向,加速或減速,剎車(chē))。
現(xiàn)在要把傳感器和自動(dòng)裝置連接起來(lái)。該怎么做?目前還不清楚。所以你把每個(gè)傳感器和每個(gè)自動(dòng)裝置驅(qū)動(dòng)器連接起來(lái)。
作為電路連接傳感器和執(zhí)行器的神經(jīng)網(wǎng)絡(luò)。
就這樣開(kāi)車(chē)上路的話會(huì)發(fā)生什么?電流從所有傳感器流向所有執(zhí)行器,汽車(chē)同時(shí)向左、向右轉(zhuǎn)向、加速和剎車(chē),一團(tuán)糟。
當(dāng)傳感器發(fā)送電流時(shí),會(huì)流向所有執(zhí)行器,汽車(chē)就會(huì)同時(shí)加速、剎車(chē)和轉(zhuǎn)向。
這可不行。所以我想在電路的不同部分放上電阻,這樣電流就只能在某些傳感器和某些執(zhí)行器之間流動(dòng)。例如,我希望電流只從前方距離傳感器流向剎車(chē),而不是流向方向盤(pán)。此外,我還放了一些叫做門(mén)的東西,可以阻止電流流動(dòng),直到電力積累到足夠翻轉(zhuǎn)開(kāi)關(guān)(只有當(dāng)前方距離傳感器和后方距離傳感器報(bào)告的數(shù)字比較高時(shí)才允許電流流動(dòng)),或者只有在輸入電流強(qiáng)度低時(shí)才流動(dòng)(當(dāng)前方距離傳感器報(bào)告數(shù)值較低時(shí)向加速器發(fā)送更多電流)。
但把這些電阻和門(mén)放在哪里呢?不知道。一開(kāi)始我把它們隨意放在各個(gè)地方,然后再試一次。也許這次車(chē)開(kāi)得更好了,它在數(shù)據(jù)顯示應(yīng)該剎車(chē)的時(shí)候剎車(chē),應(yīng)該轉(zhuǎn)向的時(shí)候轉(zhuǎn)向,等等。但并不是每件事都做對(duì)了,有些事情做得更糟(數(shù)據(jù)顯示需要?jiǎng)x車(chē)的時(shí)候它卻加速了),所以我一直隨機(jī)嘗試電阻和門(mén)的不同組合。最終,我偶然發(fā)現(xiàn)一種效果足夠好的組合,成功了。也許看起來(lái)像這樣:
經(jīng)過(guò)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)。較暗的線表示電路中電流可以自由流動(dòng)的部分。中間的圓圈是門(mén),在將電流發(fā)送到上面的執(zhí)行器之前,可能會(huì)從下面的傳感器積累大量電流,或者可能在幾乎沒(méi)有電流的情況下發(fā)送電流。
(我們?cè)诂F(xiàn)實(shí)中不能增加或減少門(mén),它們總是存在的,但可以修改門(mén),使它們以更少或更多的電流激活。純粹的機(jī)器學(xué)習(xí)主義者可能會(huì)對(duì)這種描述感到惡心。不過(guò)從技術(shù)上說(shuō),這是通過(guò)調(diào)整門(mén)的偏置(bias) 來(lái)完成的,通常不會(huì)在圖表中顯示,但就電路比喻而言,可以將其視為直接插入電源的門(mén)的導(dǎo)線,然后可以像其他導(dǎo)線一樣進(jìn)行修改。)
讓我們?cè)囻{一下吧!
隨機(jī)嘗試是種很糟糕的方式,有一種被稱為反向傳播(back propagation) 的算法在猜測(cè)如何改變電路的配置方面相當(dāng)出色。算法細(xì)節(jié)并不重要,只需要知道算法會(huì)對(duì)電路進(jìn)行微小調(diào)整,讓電路的行為更接近數(shù)據(jù)的建議,經(jīng)過(guò)數(shù)百萬(wàn)次調(diào)整,最終使電路與數(shù)據(jù)一致。
我們把電阻和門(mén)稱為參數(shù),但實(shí)際上參數(shù)無(wú)所不在,反向傳播算法會(huì)聲明每個(gè)電阻的強(qiáng)弱,因此一旦知道了電路的布局和參數(shù),就可以復(fù)制到其他汽車(chē)上。
4. 什么是深度學(xué)習(xí)(Deep Learning)?
深度學(xué)習(xí)可以讓我們?cè)陔娐分屑尤氤穗娮韬烷T(mén)之外的其他東西。例如,可以在電路中進(jìn)行數(shù)學(xué)計(jì)算,在輸出電流之前進(jìn)行相加或相乘。深度學(xué)習(xí)仍然使用一樣基本增量技術(shù)猜測(cè)參數(shù)。
5. 什么是語(yǔ)言模型(Language Model)?
在汽車(chē)的例子里,我們?cè)噲D讓神經(jīng)網(wǎng)絡(luò)的行為與數(shù)據(jù)一致,從而創(chuàng)造出一種能夠操縱汽車(chē)機(jī)械裝置的電路,模擬司機(jī)的行為。我們可以用同樣的方式對(duì)待語(yǔ)言,看看人類寫(xiě)的文本,并嘗試電路是否能產(chǎn)生與人類產(chǎn)生的單詞序列非常相似的單詞序列?,F(xiàn)在,當(dāng)傳感器看到單詞時(shí)就會(huì)啟動(dòng),輸出的也是單詞。
我們要做什么?嘗試創(chuàng)建一個(gè)電路,在給定一堆輸入單詞的情況下,猜測(cè)輸出單詞。例如:
"Once upon a ___"
我們傾向于從概率角度來(lái)討論語(yǔ)言模型,上述例子的數(shù)學(xué)形式為:
如果不熟悉這個(gè)符號(hào),別擔(dān)心,這只是一個(gè)數(shù)學(xué)術(shù)語(yǔ),意思是"time"這個(gè)詞在給定(|符號(hào)的意思表示 給定 )一堆單詞"once"、"upon"和"a"條件下出現(xiàn)的概率(P)。我們期望好的語(yǔ)言模型輸出"time"這個(gè)詞的概率比"armadillo"這個(gè)詞的概率高。
可以將其概括為:
意思是計(jì)算序列中第n個(gè)單詞在給定在它之前所有單詞(從位置1到n-1的單詞)的條件下出現(xiàn)的概率。
不過(guò)現(xiàn)在退一步,想想老式打字機(jī),就是那種有撞針的打字機(jī)。
DALL-E2生成了這張照片,看看那些撞針!
除了每個(gè)字母都有不同的撞針,我們給每個(gè)單詞都裝上一個(gè)撞針,如果英語(yǔ)有5萬(wàn)個(gè)單詞,那么這會(huì)是一臺(tái)巨大的打字機(jī)!
設(shè)想一個(gè)與汽車(chē)網(wǎng)絡(luò)不同但類似的網(wǎng)絡(luò),電路頂部有5萬(wàn)個(gè)輸出連接到撞針上,每個(gè)單詞一個(gè)。相應(yīng)的,有5萬(wàn)個(gè)傳感器,每個(gè)傳感器檢測(cè)不同輸入單詞。最終選擇一個(gè)能得到最高電流信號(hào)的撞針,對(duì)應(yīng)的單詞就會(huì)出現(xiàn)在空白紙上。
現(xiàn)在的情況是,如果想做一個(gè)簡(jiǎn)單的電路,輸入一個(gè)單詞并產(chǎn)生一個(gè)單詞,就必須做一個(gè)有5萬(wàn)個(gè)傳感器(每個(gè)單詞一個(gè))和5萬(wàn)個(gè)輸出(每個(gè)撞針一個(gè))的電路。只需將傳感器連接到撞針上,總共50000 × 50000 = 25億根電線。
底部的每個(gè)圓圈表示一個(gè)單詞,需要5萬(wàn)個(gè)傳感器來(lái)識(shí)別單詞"once",電流通過(guò)網(wǎng)絡(luò)隨意傳播,上面每個(gè)圓圈都連接到一個(gè)單詞的撞針上,所有撞針都得到了一些電流,但其中某個(gè)會(huì)得到更多的電流。
這是個(gè)很大的網(wǎng)絡(luò)!
更糟的是,如果我想以"Once upon a ___ "為例,需要感知三個(gè)輸入位置都是哪個(gè)單詞,將會(huì)需要50000 × 3 = 150,000個(gè)傳感器,連接到5萬(wàn)個(gè)撞針,得到15萬(wàn) × 5萬(wàn) = 75億個(gè)電線。截至2023年,大多數(shù)大型語(yǔ)言模型可以接收4000個(gè)單詞,最大的可以接收3.2萬(wàn)個(gè)單詞。我要哭了。
以三個(gè)單詞作為輸入的網(wǎng)絡(luò),每個(gè)單詞需要50000個(gè)傳感器。
需要一些技巧來(lái)處理這種情況,我們將分階段進(jìn)行。
5.1 編碼器(Encoders)
第一件事是把電路分成兩個(gè)電路,一個(gè)叫編碼器(encoder) ,一個(gè)叫解碼器(decoder) 。由于許多單詞的意思大致相同,比如以下短語(yǔ):
The king sat on the ___
The queen sat on the ___
The princess sat on the ___
The regent sat on the ___
對(duì)于上面所有空格,一個(gè)合理的猜測(cè)是"throne"(或者"toilet")。也就是說(shuō),可能不需要在"king"和"throne"之間、"queen"和"throne"之間進(jìn)行區(qū)分,相反,如果有一些近似意味著"royalty"的東西,每次看到"king"或"queen",就可以用這個(gè)東西來(lái)代替。然后就只需要關(guān)心哪些單詞的意思大致相同,然后該怎么做(向"throne"發(fā)送大量電流)。
這就是我們要做的。設(shè)置一個(gè)電路,有5萬(wàn)個(gè)單詞的傳感器,并映射到一些較小的輸出集合(比如256個(gè)而不是5萬(wàn)個(gè))。同時(shí)不是只能觸發(fā)一個(gè)撞針,而是可以一次觸發(fā)一堆。每種可能的撞針組合都可以代表不同的概念(如"royalty"或"armored mammals")。這256個(gè)輸出使我們能夠表示 個(gè)概念,而在現(xiàn)實(shí)中甚至更多。就像在汽車(chē)的例子中,可以踩下部分剎車(chē),這256個(gè)輸出的每一個(gè)都處于1.0和0.0之間。也許更貼切的比喻是256只撞針都向下?lián)舸?,但每只力度不同?/p>
好吧,以前一個(gè)單詞需要5萬(wàn)個(gè)傳感器中的某一個(gè)來(lái)激活,現(xiàn)在我們把一個(gè)激活的傳感器和49999個(gè)關(guān)閉的傳感器濃縮成256個(gè)數(shù)字。所以"king"可能是[0.1, 0.0 , 0.9, …, 0.4],"queen"可能是[0.1, 0.1 , 0.9, …, 0.4],幾乎一樣。這些數(shù)字列表被稱為 encodings (由于歷史原因也稱為 隱藏狀態(tài)hidden state ,但我不想解釋這個(gè),所以我們將堅(jiān)持使用encoding)。把5萬(wàn)個(gè)傳感器壓縮成256個(gè)輸出的電路被稱為 encoder ,看上去是這樣的:
encoder網(wǎng)絡(luò)將監(jiān)測(cè)單個(gè)單詞所需的5萬(wàn)個(gè)傳感器值壓縮為256個(gè)數(shù)字編碼(較淺和較深的藍(lán)色用于表示較高或較低的值)。
5.2 解碼器(Decoders)
但編碼器不會(huì)告訴我們下一個(gè)單詞應(yīng)該是哪個(gè),所以我們將編碼器與解碼器網(wǎng)絡(luò)配對(duì)。解碼器是另一個(gè)電路,采用256個(gè)數(shù)字構(gòu)成編碼,并激活原始的5萬(wàn)個(gè)撞針,每個(gè)單詞一個(gè),然后選擇輸出電量最高的單詞,看起來(lái)是這樣的:
解碼器網(wǎng)絡(luò)將編碼中的256個(gè)值擴(kuò)展為與每個(gè)可能的單詞相關(guān)聯(lián)的5萬(wàn)個(gè)撞針的激活值,數(shù)值最高的單詞被激活。
5.3 編碼器和解碼器的組合
編碼器和解碼器一起工作,形成一個(gè)大神經(jīng)網(wǎng)絡(luò):
編碼器-解碼器網(wǎng)絡(luò)。
順便說(shuō)一下,通過(guò)編碼實(shí)現(xiàn)單個(gè)單詞輸入單個(gè)單詞輸出只需要(50000 × 256) × 2 = 2560萬(wàn)個(gè)參數(shù),看起來(lái)好多了。
這個(gè)例子是一個(gè)單詞輸入并產(chǎn)生一個(gè)單詞輸出,所以如果想要讀取n個(gè)單詞,將有50000 × n個(gè)輸入,編碼后將有256 × n個(gè)輸入。
為什么會(huì)這樣?通過(guò)將5萬(wàn)個(gè)單詞都?jí)嚎s到一個(gè)小的數(shù)字集合中,我們迫使網(wǎng)絡(luò)做出妥協(xié),并將可能觸發(fā)相同輸出單詞的輸入單詞分組在一起。這很像文件壓縮,壓縮文本文檔時(shí),我們會(huì)得到一個(gè)較小的不可讀的文檔。但可以解壓縮文檔并恢復(fù)原始可讀文本。因?yàn)閦ip程序用符號(hào)替換了某些單詞模式,解壓縮時(shí)知道要將哪些文本替換符號(hào)。編碼器和解碼器電路學(xué)習(xí)了某種電阻和門(mén)的配置,可以用來(lái)壓縮和解壓縮單詞。
5.4 自監(jiān)督(Self-Supervision)
怎么才能知道每個(gè)單詞的最佳編碼方式?換句話說(shuō),怎么知道"king"的編碼應(yīng)該與"queen"的編碼相似,而不是"armadillo"?
作為思想實(shí)驗(yàn),考慮一個(gè)編碼器-解碼器網(wǎng)絡(luò),接收一個(gè)單詞(5萬(wàn)個(gè)傳感器)并產(chǎn)生完全相同的單詞作為輸出。這是件蠢事,但對(duì)接下來(lái)的事情很有啟發(fā)意義。
編碼器-解碼器網(wǎng)絡(luò)被訓(xùn)練輸出與輸入相同的單詞。
輸入"king",一個(gè)傳感器通過(guò)編碼器發(fā)送電信號(hào),并在中間部分打開(kāi)編碼中的256個(gè)值。如果編碼正確,那么解碼器將向同一個(gè)單詞"king"發(fā)送最高的電信號(hào)。容易對(duì)不對(duì)?先別下結(jié)論。很有可能會(huì)看到帶有"armadillo"字樣的撞針具有最高的電能,假設(shè)"king"的撞針得到0.051的電信號(hào),"armadillo"的撞針得到0.23的電信號(hào)。而實(shí)際上我們根本不在乎"armadillo"的值是多少,可以只看"king"的輸出能量,就知道它不是1.0。1.0和0.051之間的差異是誤差(也稱為 損耗 ),可以用反向傳播對(duì)解碼器和編碼器進(jìn)行一些更改,以便下次看到單詞"king"時(shí)的編碼稍微不同。
我們對(duì)所有單詞都這樣做,而編碼器將不得不妥協(xié),因?yàn)?56比50000小得多。也就是說(shuō),有些詞必須使用相同的能量組合。因此選擇時(shí),會(huì)希望"king"和"queen"的編碼幾乎相同,而"armadillo"的編碼則非常不同,這將使解碼器通過(guò)查看256個(gè)編碼值來(lái)更好的猜測(cè)單詞。如果解碼器看到256個(gè)值的特定組合,并猜測(cè)"king"為0.43,"queen"為0.42,只要"king"和"queen"得到最高的電信號(hào),并且其余49998個(gè)撞針都得到較小的數(shù)字,就可以接受。另一種說(shuō)法是,我們可能更容易接受網(wǎng)絡(luò)混淆king和queen,而不是混淆king和armadillo。
我們說(shuō)神經(jīng)網(wǎng)絡(luò)是自我監(jiān)督(self-supervised) 的,因?yàn)榕c汽車(chē)的例子不同,不需要單獨(dú)收集數(shù)據(jù)來(lái)測(cè)試輸出,而只需要比較輸出和輸入(不需要為輸入和輸出單獨(dú)提供數(shù)據(jù))。
5.5 掩碼語(yǔ)言模型(Masked Language Models)
上面的思維實(shí)驗(yàn)看起來(lái)很傻,但是所謂的掩碼語(yǔ)言模型的基石,其思想是接收一個(gè)單詞序列并生成一個(gè)單詞序列,但掩蓋輸入和輸出中的一個(gè)單詞。
The [MASK] sat on the throne.
網(wǎng)絡(luò)會(huì)猜測(cè)所有單詞,我們只關(guān)心網(wǎng)絡(luò)對(duì)掩蔽詞的猜測(cè)。也就是說(shuō),對(duì)于輸出的每個(gè)單詞,有5萬(wàn)個(gè)撞針,我們來(lái)看看這5萬(wàn)個(gè)掩蔽詞的撞針。
掩碼序列。紅線表示上下所有東西之間的很多很多連接。
可以移動(dòng)掩碼,讓網(wǎng)絡(luò)在不同的地方猜測(cè)不同的單詞。
一種特殊類型的掩碼語(yǔ)言模型只在末尾有掩碼,這被稱為生成模型,因?yàn)椴聹y(cè)的掩碼總是序列中的下一個(gè)單詞,相當(dāng)于生成下一個(gè)單詞,看上去是這樣的:
The [MASK]
The queen [MASK]
The queen sat [MASK]
The queen sat on [MASK]
The queen sat on the [MASK]
我們也稱其為自回歸(auto-regressive) 模型。回歸(regressive) 這個(gè)詞聽(tīng)起來(lái)不太好,但只是意味著試圖理解事物之間的關(guān)系,比如已經(jīng)輸入的單詞和應(yīng)該輸出的單詞。Auto的意思是"自我",自回歸模型是自我預(yù)測(cè)的,預(yù)測(cè)下一個(gè)單詞,然后這個(gè)單詞又被用來(lái)預(yù)測(cè)下一個(gè)單詞,以此類推。其中有些有趣的含義,稍后會(huì)講到。
6. 什么是轉(zhuǎn)移模型(Transformer)?
我們聽(tīng)過(guò)很多關(guān)于GPT-3、GPT-4和ChatGPT的東西。GPT是OpenAI公司開(kāi)發(fā)的一種大語(yǔ)言模型的特定品牌。GPT代表生成式預(yù)訓(xùn)練轉(zhuǎn)移模型(Generative Pre-trained Transformer) 。我們來(lái)分析一下:
- 生成式(Generative) 。該模型能夠生成所提供輸入的延續(xù),也就是說(shuō),給定一些文本,模型試圖猜測(cè)接下來(lái)出現(xiàn)的單詞。
- 預(yù)訓(xùn)練(Pre-trained) 。該模型是在一個(gè)非常大的通用文本語(yǔ)料庫(kù)上進(jìn)行訓(xùn)練的,只需訓(xùn)練一次,就可用于許多不同場(chǎng)景,而不需要從頭開(kāi)始訓(xùn)練。
該模型是在一個(gè)非常大的通用文本語(yǔ)料庫(kù)上進(jìn)行訓(xùn)練的,涵蓋了大量可以想到的主題。這或多或少意味著"從互聯(lián)網(wǎng)上抓取",而不是從一些專門(mén)的文本庫(kù)中獲取。通過(guò)對(duì)一般文本進(jìn)行訓(xùn)練,語(yǔ)言模型相對(duì)基于非常特定類型的文本(如來(lái)自醫(yī)療文檔的文本)上訓(xùn)練的語(yǔ)言模型更有能力響應(yīng)廣泛的輸入。在通用語(yǔ)料庫(kù)上訓(xùn)練的語(yǔ)言模型理論上可以合理響應(yīng)互聯(lián)網(wǎng)上文檔中可能出現(xiàn)的任何內(nèi)容,但可能對(duì)醫(yī)學(xué)文本響應(yīng)一般。只在醫(yī)療文檔上訓(xùn)練的語(yǔ)言模型可能對(duì)與醫(yī)療上下文相關(guān)的輸入響應(yīng)得很好,但在響應(yīng)閑聊或食譜等其他輸入時(shí)就很差了。
要么模型在很多事情上都足夠好,以至于人們不需要訓(xùn)練自己的模型,要么可以做一些所謂的微調(diào)(fine-tuning) ,即采用預(yù)先訓(xùn)練好的模型并對(duì)其進(jìn)行一些更新,使其在特定任務(wù)(如醫(yī)療)上能更好的工作。
接下來(lái)是轉(zhuǎn)移模型…
- 轉(zhuǎn)移模型(Transformer) 。一種特殊類型的自監(jiān)督編碼器-解碼器深度學(xué)習(xí)模型,具有一些非常有趣的屬性,使其擅長(zhǎng)語(yǔ)言建模。
Transformer是一種特殊類型的深度學(xué)習(xí)模型,以一種特殊方式轉(zhuǎn)換編碼,使其更容易猜出空白的單詞,最早是由Vaswani等人在2017年發(fā)表的一篇名為Attention is All You Need ^[2]^ 的論文中介紹的。Transformer的核心是經(jīng)典的編碼器-解碼器網(wǎng)絡(luò),編碼器執(zhí)行非常標(biāo)準(zhǔn)的編碼過(guò)程,你會(huì)驚訝于它的普通,但它還增加了另一種叫做自關(guān)注(self-attention) 的東西。
6.1 自關(guān)注(Self-Attention)
這是自關(guān)注的概念: 序列中的某些單詞與序列中的其他單詞相關(guān)。想想這個(gè)句子:"The alien landed on earth because it needed to hide on a planet."如果我們掩蓋第二個(gè)單詞"alien",并讓神經(jīng)網(wǎng)絡(luò)猜測(cè),它會(huì)通過(guò)"landing"和"earth"這樣的單詞更容易的猜出來(lái)。同樣的,如果我們把"it"遮住,讓神經(jīng)網(wǎng)絡(luò)猜這個(gè)詞,"alien"這個(gè)詞的出現(xiàn)可能會(huì)讓神經(jīng)網(wǎng)絡(luò)更傾向于選擇"it",而不是"he"或"she"。
單詞通過(guò)功能、指稱同一事物或相互傳達(dá)意義而相互聯(lián)系。
我們知道,一個(gè)序列中的單詞會(huì)與其他單詞相關(guān)聯(lián),因?yàn)樗鼈冎g有某種關(guān)系,這種關(guān)系并不一定為人所知。這種關(guān)系可以是解析代詞,可以是動(dòng)詞和主語(yǔ)的關(guān)系,也可以是與同一個(gè)概念相關(guān)的兩個(gè)單詞("earth"和"planet")。不管是什么,知道單詞之間存在某種聯(lián)系對(duì)預(yù)測(cè)很有用。
下一節(jié)將討論自關(guān)注的數(shù)學(xué)問(wèn)題,要點(diǎn)是Transformer學(xué)習(xí)輸入序列中哪些單詞是相關(guān)的,然后為輸入序列中的每個(gè)位置創(chuàng)建一個(gè)新的編碼,該編碼是所有相關(guān)單詞的合集。可以把它想象成學(xué)習(xí)創(chuàng)造一個(gè)新詞,這個(gè)新詞是"alien"、"landing"和"earth"的混合體(aliandearth?)。每個(gè)單詞都被編碼為一個(gè)數(shù)字列表,如果alien = [0.1, 0.2, 0.3, …, 0.4],landing = [0.5, 0.6, 0.7, …, 0.8],earth = [0.9, 1.0, 1.1, …, 1.2],那么第二個(gè)單詞位置可能被編碼為所有這些編碼的總和[1.5, 1.8, 2.1, …, 2.4],它本身不對(duì)應(yīng)任何單詞,但卻捕獲所有單詞的片段。這樣,當(dāng)解碼器最終看到這個(gè)單詞在第二個(gè)位置的新編碼時(shí),就有了很多關(guān)于這個(gè)單詞在序列中是如何使用的信息,從而更好的猜測(cè)掩碼。(示例只是將編碼加在一起,但實(shí)際上比這更復(fù)雜)。
6.2 自關(guān)注是如何起作用的?
自關(guān)注是對(duì)普通編碼器-解碼器網(wǎng)絡(luò)的重大改進(jìn),如果想了解更多有關(guān)其工作原理的信息,請(qǐng)繼續(xù)閱讀,否則可以跳過(guò)本節(jié)。自關(guān)注是數(shù)學(xué)運(yùn)算點(diǎn)積(dot product) 的一個(gè)博眼球的名字。
自關(guān)注分為三個(gè)階段。
(1) 對(duì)輸入序列的每個(gè)單詞進(jìn)行正常編碼。將單詞編碼復(fù)制四份,其中一份稱為 residual ,先保存起來(lái)。 (2) 在其他三份上運(yùn)行第二輪編碼(對(duì)編碼的編碼)。每一份都經(jīng)歷不同的編碼過(guò)程,所以出來(lái)的結(jié)果不同,一個(gè)為查詢(q),一個(gè)為鍵(k),一個(gè)為值(v)。
考慮有一大堆信息存儲(chǔ)在哈希表(在python中也稱為字典)中,每一行都有 鍵 (唯一標(biāo)識(shí)符)和 值 (存儲(chǔ)在該行中的數(shù)據(jù))。要從哈希表中檢索信息,可以執(zhí)行查詢,如果查詢匹配到鍵,則提取對(duì)應(yīng)的值。
可以用來(lái)查詢教授在哪個(gè)大學(xué)工作的哈希表。
自關(guān)注有點(diǎn)像一個(gè)模糊的哈希表,提供一個(gè)查詢,但不是查找與鍵的精確匹配,而是根據(jù)查詢和鍵之間的相似性查找近似匹配。如果沒(méi)有完美匹配,就返回值的一部分。這只有在查詢、鍵和值都是數(shù)值的情況下才有意義,類似這樣:
部分匹配的哈希表。
這就是我們要做的。對(duì)于輸入的每個(gè)單詞位置,采用q編碼和k編碼并計(jì)算相似度,計(jì)算方式是點(diǎn)積,也叫余弦相似度。不過(guò)這不重要,關(guān)鍵是每個(gè)單詞都是256個(gè)數(shù)字的列表(基于之前示例),可以計(jì)算數(shù)字列表的相似性并記錄在矩陣中。我們稱這個(gè)矩陣為自關(guān)注得分(self-attention scores) 。如果有三個(gè)單詞的輸入序列,注意力得分可能是這樣:
每個(gè)單元格表示一個(gè)位置上的編碼單詞對(duì)另一個(gè)位置上的編碼單詞的關(guān)注程度。
網(wǎng)絡(luò)將第一個(gè)單詞視為查詢,并與第二個(gè)關(guān)鍵字進(jìn)行匹配(或者說(shuō)第一個(gè)單詞"關(guān)注"第二個(gè)單詞)。如果第二個(gè)單詞是查詢,將與第三個(gè)鍵匹配。如果第三個(gè)單詞是查詢,將與第一個(gè)鍵匹配。在現(xiàn)實(shí)中永遠(yuǎn)不會(huì)有這樣的1和0,而是會(huì)在0和1之間進(jìn)行部分匹配,并且每個(gè)查詢(行)會(huì)對(duì)多個(gè)鍵(列)進(jìn)行部分匹配。
繼續(xù)檢索的比喻,把這個(gè)矩陣乘以v編碼,有趣的事情發(fā)生了。假設(shè)v編碼像這樣:
每一行都是序列中一個(gè)單詞的編碼。
也就是說(shuō),第一個(gè)單詞被編碼為數(shù)字列表0.10…0.19,第二個(gè)單詞被編碼為數(shù)字列表0.20…0.29,第三個(gè)單詞被編碼為數(shù)字列表0.30…0.39。這些數(shù)字是為了說(shuō)明的目的而編出來(lái)的,實(shí)際上不會(huì)這么整齊。
將注意力與值相乘。
第一個(gè)查詢匹配第二個(gè)鍵,因此檢索第二個(gè)編碼單詞。第二個(gè)查詢與第三個(gè)鍵匹配,因此檢索第三個(gè)編碼單詞。第三個(gè)查詢匹配第一個(gè)鍵,因此檢索第一個(gè)編碼單詞。實(shí)際上做的是行交換!
實(shí)踐中,分?jǐn)?shù)不會(huì)是完美的1和0,而是將是每種編碼混合在一起的(例如,單詞1的97%加上1%或單詞3加上單詞2的2%),但這說(shuō)明自關(guān)注是一種混合和交換。在這個(gè)極端版本中,第一個(gè)單詞被替換為第二個(gè)單詞,依此類推。所以也許"earth"這個(gè)詞被換成了"planet"這個(gè)詞。
怎么知道正確編碼了q、k和v?如果整個(gè)網(wǎng)絡(luò)猜測(cè)掩碼最佳單詞的能力提高了,那么就正確編碼了q、k和v。如果沒(méi)有,那就改一下參數(shù),用稍微不同的方式編碼。
(3) 第三件事是把所有數(shù)學(xué)運(yùn)算的結(jié)果加到residual上。還記得我們擱置的原始編碼的第一個(gè)副本嗎?沒(méi)錯(cuò),現(xiàn)在要把混合交換的版本加進(jìn)去?,F(xiàn)在,"earth"不僅僅是"earth"的編碼,而是某種虛構(gòu)的詞,是"earth"和"planet"的混搭……pearth?ealanet?都不是。無(wú)論如何,這是將被發(fā)送到解碼器的最終轉(zhuǎn)換編碼。每個(gè)位置都有一個(gè)假單詞,它實(shí)際上編碼了兩個(gè)或更多單詞,這更有利于對(duì)基于位置的單個(gè)單詞進(jìn)行預(yù)測(cè)。
然后再這樣做幾次(多層)。
這里省略了很多關(guān)于編碼器的最終編碼如何進(jìn)入解碼器的細(xì)節(jié)(另一輪關(guān)注,稱為 源關(guān)注source-attention ,其中編碼器每個(gè)位置的編碼被用作q和k,以應(yīng)用于另一個(gè)不同版本的v),但現(xiàn)在你只需要知道個(gè)大概。最后,解碼器接收編碼器的編碼,將能量發(fā)送給撞針,挑選出能量最強(qiáng)的單詞。
7. 為什么大語(yǔ)言模型如此強(qiáng)大?
這一切意味著什么?包括ChatGPT、GPT-4等在內(nèi)的大語(yǔ)言模型只做一件事: 接收一堆單詞,并嘗試猜測(cè)下一個(gè)單詞應(yīng)該是什么。如果這是"推理"或"思考",那也只是一種非常特殊的形式。
但即使是這種特殊的形式似乎也非常強(qiáng)大,因?yàn)镃hatGPT和類似的東西似乎可以很好的完成很多事情: 寫(xiě)詩(shī)、回答有關(guān)科學(xué)和技術(shù)的問(wèn)題、總結(jié)文檔、起草電子郵件,甚至編寫(xiě)代碼。為什么會(huì)如此有效?
秘訣有兩個(gè),第一個(gè)已經(jīng)討論過(guò)了: Transformer學(xué)習(xí)混合單詞上下文的方式,從而非常善于猜測(cè)下一個(gè)單詞。其次是如何訓(xùn)練系統(tǒng)。大語(yǔ)言模型根據(jù)從互聯(lián)網(wǎng)上抓取的大量信息進(jìn)行訓(xùn)練,包括書(shū)籍、博客、新聞網(wǎng)站、維基百科、reddit、社交媒體對(duì)話等。在訓(xùn)練過(guò)程中,從其中一個(gè)來(lái)源中輸入一段文本,并要求它猜測(cè)下一個(gè)單詞。如果猜錯(cuò)了,就稍微調(diào)整一下模型,直到猜對(duì)為止。想一下LLM被訓(xùn)練做什么,其實(shí)就是產(chǎn)生可以合理出現(xiàn)在互聯(lián)網(wǎng)上的文本。它記不住整個(gè)互聯(lián)網(wǎng),所以用編碼來(lái)做出妥協(xié),也許會(huì)有點(diǎn)錯(cuò),但希望不要錯(cuò)得太離譜。
重要的是不要低估互聯(lián)網(wǎng)上文本的多樣性。LLM學(xué)習(xí)了一切,看了幾乎所有話題的數(shù)十億次對(duì)話。因此,LLM可以生成看起來(lái)像是在與你對(duì)話的單詞。它已經(jīng)看了數(shù)十億首詩(shī)歌和歌詞,幾乎可以想象,它可以產(chǎn)生看起來(lái)像詩(shī)歌的文本。它已經(jīng)看了數(shù)十億家庭作業(yè)及答案,所以可以對(duì)你的家庭作業(yè)做出合理的猜測(cè)。它看了數(shù)以十億計(jì)的標(biāo)準(zhǔn)化考試問(wèn)題及答案。而今年的SAT試題和去年也不會(huì)有什么不同。它看過(guò)人們談?wù)摷倨谟?jì)劃,所以可以猜出看起來(lái)像假期計(jì)劃的單詞。它已經(jīng)看了數(shù)十億代碼示例,涵蓋各種各樣場(chǎng)景。程序員做的很多事情都是將非常典型和容易理解的代碼片段組裝成更大的代碼塊,因此LLM可以編寫(xiě)這些小而通用的代碼片段。它已經(jīng)在stackoverflow.com上看了數(shù)十億個(gè)錯(cuò)誤代碼的例子和更正,這樣它就能針對(duì)你的錯(cuò)誤代碼提出修復(fù)建議。已經(jīng)有數(shù)十億人在推特上說(shuō),由于摸了熱爐子而燒傷了手指,所以LLM知道這些常識(shí)。它已經(jīng)閱讀了大量科學(xué)論文,所以可以猜測(cè)眾所周知的科學(xué)事實(shí),即使你還不知道。它已經(jīng)看了數(shù)十億關(guān)于如何總結(jié)要點(diǎn)的例子,知道如何使文本更符合語(yǔ)法,更簡(jiǎn)潔或更有說(shuō)服力。
重點(diǎn)是,當(dāng)你要求ChatGPT或其他大語(yǔ)言模型做某些事,并且發(fā)現(xiàn)它完成了,很有可能你只是在要求它做一些它已經(jīng)見(jiàn)過(guò)數(shù)十億個(gè)例子的事情。即使你想出了一些非常獨(dú)特的東西,比如"告訴我閃電俠戈登吃了六個(gè)墨西哥卷餅后會(huì)做什么"(我甚至不知道這是不是獨(dú)特的),而它已經(jīng)看了關(guān)于閃電俠戈登的同人小說(shuō),看到人們談?wù)摮粤颂嗟哪鞲缇盹灒⑶铱梢?由于自關(guān)注)混合和搭配零碎的東西來(lái)組合一個(gè)聽(tīng)上去合理的回應(yīng)。
當(dāng)我們與大語(yǔ)言模型交互時(shí),第一直覺(jué)不應(yīng)該是"哇,這東西一定非常聰明,或者非常有創(chuàng)造力,或者非常容易理解"。我們的第一反應(yīng)應(yīng)該是"我可能已經(jīng)要求它做一些它以前見(jiàn)過(guò)的東西"。不過(guò)即使它不是"認(rèn)真思考"或"做一些非常復(fù)雜的推理",仍然非常有用。
我們不需要擬人化的來(lái)理解它做了什么來(lái)給我們提供回應(yīng)。
關(guān)于這個(gè)主題的最后一點(diǎn)說(shuō)明: 由于大語(yǔ)言模型的工作方式和訓(xùn)練方式,它們傾向于提供某種程度上屬于中間響應(yīng)的答案。在詢問(wèn)關(guān)于閃電俠戈登的故事后,模型往往會(huì)給出平庸的回答,這對(duì)我來(lái)說(shuō)似乎很奇怪。但在一個(gè)故事或一首詩(shī)的背景下,這些回應(yīng)可以被認(rèn)為是許多人(在互聯(lián)網(wǎng)上寫(xiě)作)會(huì)想到的。以一個(gè)人獨(dú)自思考的標(biāo)準(zhǔn)來(lái)看,這可能相當(dāng)不錯(cuò)。但你自己寫(xiě)的故事和詩(shī)歌可能也很普通(但它們對(duì)你來(lái)說(shuō)很特別)。對(duì)不起,事實(shí)如此。
8. 我應(yīng)該注意什么?
Transformer的工作方式和訓(xùn)練方式會(huì)產(chǎn)生一些微妙的影響,以下是一些技術(shù)細(xì)節(jié)。
- 大語(yǔ)言模型是在互聯(lián)網(wǎng)上訓(xùn)練的,這意味著也接受了人類陰暗面的訓(xùn)練。大語(yǔ)言模型可能會(huì)被輸入種族主義、性別歧視言論、對(duì)各種類型的人的各種侮辱、對(duì)他人的刻板假設(shè)、陰謀論、政治錯(cuò)誤信息等,因此語(yǔ)言模型選擇生成的單詞可能會(huì)反應(yīng)這種語(yǔ)言。
- 大語(yǔ)言模型沒(méi)有"核心信念"。他們是在玩填詞游戲,試圖預(yù)測(cè)如果同樣的句子出現(xiàn)在互聯(lián)網(wǎng)上,下一個(gè)單詞會(huì)是什么。因此,可以要求大語(yǔ)言模型寫(xiě)一個(gè)支持或反對(duì)同一件事的句子,語(yǔ)言模型將遵循這兩種方式。這并不意味著它相信這個(gè)或那個(gè),或者改變信仰,或者一個(gè)比另一個(gè)更正確。如果訓(xùn)練數(shù)據(jù)中一個(gè)事物的例子比另一個(gè)事物多,那么大語(yǔ)言模型將傾向于一致的響應(yīng)互聯(lián)網(wǎng)上出現(xiàn)的更頻繁的數(shù)據(jù)。記住: 該模型力求模仿最常見(jiàn)的反應(yīng)。
- 大語(yǔ)言模型沒(méi)有任何對(duì)與錯(cuò)的概念。有些事情我們認(rèn)為是事實(shí),比如地球是圓的,LLM也會(huì)這么說(shuō)。但如果換個(gè)上下文,它也會(huì)說(shuō)相反的話,因?yàn)榛ヂ?lián)網(wǎng)上確實(shí)有關(guān)于地球是平的文字。LLM不能保證提供真相,只是傾向于猜測(cè)我們認(rèn)為正確的單詞,這是最接近于LLM"知道"真相或?qū)﹀e(cuò)的方式。
- 大語(yǔ)言模型可能會(huì)出錯(cuò)。訓(xùn)練數(shù)據(jù)可能有很多不一致的材料,當(dāng)我們問(wèn)問(wèn)題時(shí),自關(guān)注可能不會(huì)關(guān)注到我們想要關(guān)注的所有事情。作為填詞游戲,它可能會(huì)做出錯(cuò)誤的猜測(cè)。有時(shí),訓(xùn)練數(shù)據(jù)看到一個(gè)詞的次數(shù)太多,以至于更喜歡這個(gè)詞,即使它對(duì)輸入沒(méi)有意義。以上導(dǎo)致了一種被稱為" 幻覺(jué)(hallucination) "的現(xiàn)象,在這種現(xiàn)象中,一個(gè)詞是猜測(cè)出來(lái)的,既不是來(lái)自輸入,也不是"正確的"。LLM傾向于猜測(cè)較小的數(shù)字,因?yàn)檩^小的數(shù)字更常見(jiàn)。LLM并不擅長(zhǎng)數(shù)學(xué)。LLM更喜歡數(shù)字"42",因?yàn)槿祟愑捎谝槐咎貏e著名的書(shū)而喜歡這個(gè)數(shù)字。LLM更喜歡常用的名字,所以可能會(huì)虛構(gòu)成作者的名字。
- 大語(yǔ)言模型是自回歸的。因此,當(dāng)它們猜到不正確的單詞時(shí),這些猜測(cè)的單詞會(huì)被添加到它們自己的輸入中,猜測(cè)下一個(gè)單詞。也就是說(shuō),錯(cuò)誤會(huì)累積。即使只有1%的幾率出錯(cuò),自關(guān)注也會(huì)關(guān)注到那個(gè)錯(cuò)誤的選擇,并使錯(cuò)誤加倍。即使只犯了一個(gè)錯(cuò)誤,之后發(fā)生的所有事情也可能與這個(gè)錯(cuò)誤有關(guān)。然后,語(yǔ)言模型可能會(huì)在此基礎(chǔ)上產(chǎn)生額外的錯(cuò)誤。Transformer沒(méi)有辦法"改變主意"或再試一次或自我糾正,只能隨波逐流。
- 應(yīng)該始終驗(yàn)證大語(yǔ)言模型的輸出。如果你要求它做一些你自己無(wú)法勝任的事情,那么應(yīng)該考慮一下是否可以對(duì)所犯的錯(cuò)誤采取行動(dòng)。對(duì)于低風(fēng)險(xiǎn)任務(wù)(比如寫(xiě)一個(gè)短篇故事),這可能沒(méi)問(wèn)題。而對(duì)于高風(fēng)險(xiǎn)任務(wù)(比如決定投資哪些股票),這些錯(cuò)誤可能會(huì)導(dǎo)致你做出非常昂貴的決定。
- 自關(guān)注意味著在輸入提示中提供的信息越多,回答就會(huì)越專業(yè),因?yàn)樗鼤?huì)在猜測(cè)中混合更多輸入的單詞。響應(yīng)的質(zhì)量與輸入提示的質(zhì)量成正比,更好的提示產(chǎn)生更好的結(jié)果。嘗試幾種不同的提示,看看哪種最適合。不要假設(shè)語(yǔ)言模型"理解"你想要做的事情,并且能在第一次就給出最好的結(jié)果。
- 你并沒(méi)有真正與大語(yǔ)言模型"進(jìn)行對(duì)話"。大言模型不會(huì)"記住"交流中發(fā)生的事情。你只是輸入并獲得輸出,LLM什么都不記得。也許你覺(jué)得初始輸入、響應(yīng)以及對(duì)響應(yīng)的響應(yīng)看起來(lái)像是在記憶,那也只是因?yàn)閷?duì)話日志作為了新的輸入。這是一個(gè)前端編程技巧,使大語(yǔ)言模型看起來(lái)像是在進(jìn)行對(duì)話。由于這個(gè)技巧,它可能會(huì)圍繞主題輸出,但不能保證不會(huì)與之前的回應(yīng)相矛盾。此外,可以輸入多少單詞是有限制的(目前ChatGPT允許大約4000個(gè)單詞,而GPT-4允許大約32000個(gè)單詞)。輸入可以相當(dāng)大,所以對(duì)話通常會(huì)在一段時(shí)間內(nèi)保持連貫。最終,累積的日志變得越來(lái)越大,不得不把一開(kāi)始的對(duì)話刪掉,也就是說(shuō)系統(tǒng)會(huì)"忘記"早期的內(nèi)容。
- 大語(yǔ)言模型無(wú)法自己解決問(wèn)題或制定計(jì)劃,但可以要求他們制定計(jì)劃并解決問(wèn)題。這里需要詳細(xì)解釋一下,解決問(wèn)題(Problem-solving) 和計(jì)劃(planning) 是人工智能研究社區(qū)中某些團(tuán)體的保留術(shù)語(yǔ),用于表示非常具體的東西。具體來(lái)說(shuō),意味著有一個(gè)目標(biāo)(想在未來(lái)完成的事情)并通過(guò)在若干可以接近目標(biāo)的備選方案中做出選擇來(lái)努力實(shí)現(xiàn)目標(biāo)。大語(yǔ)言模型沒(méi)有目標(biāo),或者說(shuō)他們只有一個(gè)目標(biāo),即在給定輸入序列的情況下,選擇最有可能出現(xiàn)在訓(xùn)練數(shù)據(jù)中的單詞,也就是模式匹配。計(jì)劃通常涉及到前瞻性(look-ahead) ,人們做計(jì)劃時(shí),會(huì)想象行動(dòng)結(jié)果,并根據(jù)目標(biāo)分析未來(lái)。如果看起來(lái)離目標(biāo)更近了一步,就是一個(gè)很好的行動(dòng)。如果沒(méi)有,可能會(huì)嘗試想象另一種行為的結(jié)果。實(shí)際生活中還有更多東西,但關(guān)鍵是大語(yǔ)言模型沒(méi)有目標(biāo),也沒(méi)有前瞻性。Transformer只向后看,自關(guān)注只能應(yīng)用于已經(jīng)出現(xiàn)的輸入詞。現(xiàn)在,大語(yǔ)言模型可以生成看起來(lái)像計(jì)劃的輸出,只是因?yàn)樵谟?xùn)練數(shù)據(jù)中看了很多計(jì)劃,知道計(jì)劃是什么樣的,也知道關(guān)于某些主題的計(jì)劃應(yīng)該出現(xiàn)什么,因而對(duì)計(jì)劃可以做出很好的猜測(cè)。它們做出計(jì)劃可能會(huì)忽略特定細(xì)節(jié),而傾向于最一般的計(jì)劃。大語(yǔ)言模型當(dāng)然沒(méi)有"考慮各種選擇",也沒(méi)有嘗試一件事,然后又退回去嘗試另一件事。在Transformer內(nèi)部,沒(méi)有機(jī)制可以讓它對(duì)未來(lái)進(jìn)行這樣的考慮。因此在要求它給出計(jì)劃時(shí),一定要驗(yàn)證其輸出。
9. 是什么讓ChatGPT如此特別?
"所以我聽(tīng)說(shuō)RLHF是ChatGPT真正聰明的地方。"
"ChatGPT使用強(qiáng)化學(xué)習(xí),所以它這么聰明。"
不一而足……
現(xiàn)在人們對(duì)RLHF(基于人類反饋的強(qiáng)化學(xué)習(xí),Reinforcement Learning with Human Feedback)感到非常興奮。業(yè)界在訓(xùn)練ChatGPT(以及其他越來(lái)越多的大語(yǔ)言模型)方面做了很多事情,這些并非是全新的技術(shù),但是在ChatGPT發(fā)布時(shí),這些技術(shù)的廣泛引入產(chǎn)生了很好的效果。
ChatGPT是基于Transformer的大語(yǔ)言模型,因其非常擅長(zhǎng)生成對(duì)輸入提示的響應(yīng)以及拒絕回答某些可能被認(rèn)為是有害或固執(zhí)己見(jiàn)的問(wèn)題而贏得了聲譽(yù)。它所做的與上面介紹的沒(méi)有什么不同,事實(shí)上它很普通,但在訓(xùn)練過(guò)程中有點(diǎn)不一樣。ChatGPT的訓(xùn)練方式和正常的一樣,從互聯(lián)網(wǎng)上抓取大量信息,提取文本片段,然后讓系統(tǒng)預(yù)測(cè)下一個(gè)單詞,這就產(chǎn)生了一個(gè)基本模型,已經(jīng)是非常強(qiáng)大的單詞預(yù)測(cè)器(相當(dāng)于GPT-3),但還有兩個(gè)額外的訓(xùn)練步驟: 指令調(diào)優(yōu)(Instruction tuning) 和基于人類反饋的強(qiáng)化學(xué)習(xí)(reinforcement learning with human feedback) 。
9.1. 指令調(diào)優(yōu)(Instruction Tuning)
大語(yǔ)言模型有個(gè)特別的問(wèn)題: 它們只接受輸入單詞序列并生成后續(xù)單詞。大多數(shù)時(shí)候,這正是人們想要的,但并非總是如此??紤]以下輸入提示:
"寫(xiě)一篇關(guān)于亞歷山大·漢密爾頓的文章。"
你認(rèn)為回答應(yīng)該是什么?可能會(huì)想到:"亞歷山大·漢密爾頓于1757年出生在尼維斯。他是政治家、律師、陸軍上校和美國(guó)第一任財(cái)政部長(zhǎng)……"但實(shí)際上可能得到:
"你的文章應(yīng)該至少有五頁(yè),雙倍行距,并包括至少兩次引用。"
發(fā)生了什么?嗯,語(yǔ)言模型可能已經(jīng)看到了很多學(xué)生作業(yè)的例子,這些作業(yè)以"寫(xiě)一篇關(guān)于……的文章"開(kāi)頭,包括詳細(xì)描述長(zhǎng)度和格式的單詞。當(dāng)然,當(dāng)你寫(xiě)"寫(xiě)一篇文章……"時(shí),你認(rèn)為是在給語(yǔ)言模型寫(xiě)指令,就好像它是一個(gè)能夠理解意圖的人。語(yǔ)言模型不理解你的意圖或者它們自己的意圖,它們只將輸入與訓(xùn)練數(shù)據(jù)中看到的模式相匹配。
為了解決這個(gè)問(wèn)題,可以做一些叫做指令調(diào)優(yōu)的事情。想法相當(dāng)簡(jiǎn)單,如果你得到了錯(cuò)誤響應(yīng),寫(xiě)下正確的響應(yīng)應(yīng)該是什么,并將原始輸入和新的、經(jīng)過(guò)修正的輸出作為訓(xùn)練數(shù)據(jù)通過(guò)神經(jīng)網(wǎng)絡(luò)發(fā)送。有了足夠多的修正輸出的例子,系統(tǒng)將學(xué)會(huì)改變其回路,使新的答案成為首選。
不需要做太花哨的事,只要讓很多人與大語(yǔ)言模型交互,并要求它做很多事情,并在它行為不正確時(shí)糾正,然后收集所有出錯(cuò)的例子和新的、正確的輸出,并進(jìn)行更多的訓(xùn)練。
這使得大語(yǔ)言模型表現(xiàn)得好像能夠理解輸入提示的意圖,并表現(xiàn)得好像它在遵循指令。除了試著猜下一個(gè)單詞,它其實(shí)什么也沒(méi)做。但新的訓(xùn)練數(shù)據(jù)讓它能夠更好的猜測(cè)對(duì)輸入更匹配的單詞。
9.2. 基于人類反饋的強(qiáng)化學(xué)習(xí)(Reinforcement Learning from Human Feedback)
下一步是從人類反饋中進(jìn)行強(qiáng)化學(xué)習(xí),這里需要一點(diǎn)解釋。
強(qiáng)化學(xué)習(xí)(Reinforcement learning) 是一種AI技術(shù),傳統(tǒng)上用于機(jī)器人研究和虛擬游戲模擬(想想可以玩國(guó)際象棋、圍棋或星際爭(zhēng)霸的AI系統(tǒng))。強(qiáng)化學(xué)習(xí)特別擅長(zhǎng)弄清楚當(dāng)它得到所謂的獎(jiǎng)勵(lì)時(shí)該怎么做。獎(jiǎng)勵(lì)只是一個(gè)數(shù)字,表明它做得有多好(做得非常好+100,做得很差-100)。在現(xiàn)實(shí)世界和游戲中,通常很少會(huì)有獎(jiǎng)勵(lì)。在游戲中,可能需要玩很久才能得分,甚至只會(huì)在游戲的最后一刻得分。在現(xiàn)實(shí)世界中,沒(méi)有足夠的人告訴你什么時(shí)候做得很好,除非你是一條狗。你唯一需要知道的是,強(qiáng)化學(xué)習(xí)系統(tǒng)試圖預(yù)測(cè)它們將獲得多少獎(jiǎng)勵(lì),然后選擇最有可能獲得更多獎(jiǎng)勵(lì)的行為,這與人們用狗糧來(lái)訓(xùn)練狗的方式并沒(méi)有什么不同。
好吧,先不想這些,考慮下面的提示:
"Mark是什么方面的專家?"
假設(shè)語(yǔ)言模型的輸出為:
"Mark在人工智能、圖形學(xué)和人機(jī)交互方面發(fā)表了許多著作。"
這只是部分正確,但我沒(méi)有在圖形學(xué)方面發(fā)表過(guò)論文,所以很想給它一個(gè)!或者-1分。但這里只有"圖形學(xué)"是錯(cuò)的,如果告訴系統(tǒng)整個(gè)句子都是錯(cuò)的,語(yǔ)言模型可能會(huì)覺(jué)得所有這些單詞都應(yīng)該避免使用,但其實(shí)很多詞并沒(méi)什么問(wèn)題。
這就是強(qiáng)化學(xué)習(xí)的用武之地。強(qiáng)化學(xué)習(xí)的工作原理是嘗試不同選擇,看看哪種選擇能獲得最大回報(bào)。假設(shè)我要求它對(duì)原始提示生成三個(gè)不同的響應(yīng)。
"Mark在人工智能、圖形學(xué)和人機(jī)交互方面發(fā)表了許多著作。"
"Mark曾從事人工智能、安全NLP系統(tǒng)和人機(jī)交互方面的工作。"
"Mark研究過(guò)人工智能、游戲AI和圖形學(xué)。"
我可以給第一個(gè)相應(yīng)-1,給第二個(gè)+1,給第三個(gè)-1。就像玩游戲一樣,強(qiáng)化學(xué)習(xí)算法可以回顧并找出導(dǎo)致-1的一個(gè)共同因素是"圖形學(xué)"這個(gè)詞?,F(xiàn)在,系統(tǒng)可以鎖定這個(gè)單詞,調(diào)整神經(jīng)網(wǎng)絡(luò),使其不與特定的輸入提示一起出現(xiàn)。
然后讓一群人與大語(yǔ)言模型交互,這一次系統(tǒng)會(huì)給出三種(或更多)可能的回答。我們可以通過(guò)要求大語(yǔ)言模型提供多次響應(yīng)并在響應(yīng)的選擇中引入一點(diǎn)隨機(jī)性來(lái)做到(還沒(méi)忘記吧?)我們有時(shí)可能會(huì)選擇排第二或第三的響應(yīng),而不是選擇激活可能性的響應(yīng)。這就提供了不同的文本回復(fù),人們可以選擇最喜歡的回復(fù),第二喜歡的回復(fù),等等?,F(xiàn)在有了選擇,有了權(quán)重?cái)?shù)字,就可以用強(qiáng)化學(xué)習(xí)來(lái)調(diào)整神經(jīng)網(wǎng)絡(luò)。
實(shí)際上,我們用"好"、"不好"的反饋來(lái)訓(xùn)練第二神經(jīng)網(wǎng)絡(luò)來(lái)預(yù)測(cè)人們的反應(yīng)。如果這個(gè)神經(jīng)網(wǎng)絡(luò)能夠很好的預(yù)測(cè)人們會(huì)喜歡什么,那么就可以用第二神經(jīng)網(wǎng)絡(luò)來(lái)猜測(cè)語(yǔ)言模型的反應(yīng)會(huì)得到"好"還是"不好",然后用它來(lái)訓(xùn)練語(yǔ)言模型。
強(qiáng)化學(xué)習(xí)將文本生成視為游戲,每個(gè)動(dòng)作都是一個(gè)單詞。在序列最后,語(yǔ)言模型被告知是得分了還是丟分了。語(yǔ)言模型并沒(méi)有像前一節(jié)中討論的那樣精確的進(jìn)行預(yù)判,但是在某種意義上,它已經(jīng)被訓(xùn)練來(lái)預(yù)測(cè)哪些單詞會(huì)被點(diǎn)贊。大語(yǔ)言模型還是沒(méi)有明確目標(biāo),但有一個(gè)"被點(diǎn)贊"的隱含目標(biāo)(或者也可以說(shuō)有一個(gè)"滿足普通人"的隱含目標(biāo)),并且已經(jīng)學(xué)會(huì)將特定提示的特定反應(yīng)與獲得點(diǎn)贊聯(lián)系起來(lái)。這具有許多計(jì)劃的特性,但沒(méi)有明確的前瞻性機(jī)制,更像是記住了在很多情況下都有效的獲得獎(jiǎng)勵(lì)的策略。
那么RLHF有沒(méi)有讓ChatGPT更智能?它使ChatGPT更有可能產(chǎn)生我們希望看到的響應(yīng),因此看起來(lái)更智能,它的輸出似乎傳達(dá)了一種感覺(jué),即能夠理解我們輸入的意圖,并有自己的回應(yīng)意圖。其實(shí)這是一種錯(cuò)覺(jué),因?yàn)樗匀恢皇菍?duì)文字進(jìn)行編碼和解碼。但話說(shuō)回來(lái),這不就是我們?yōu)樯兑獙?xiě)這篇文章么。
指令調(diào)優(yōu)和RLHF還使ChatGPT能夠抵抗某些類型的濫用,例如產(chǎn)生種族主義、性別歧視或政治內(nèi)容。還是有可能輸出這些內(nèi)容,而且舊版本的GPT-3總是能夠被用來(lái)輸出這些東西。然而作為免費(fèi)的面向公眾的服務(wù),ChatGPT針對(duì)某些類型的濫用所做的工作傳遞了一種安全感,并且它還抵制將意見(jiàn)作為事實(shí)提供,這也消除了對(duì)用戶的潛在傷害。
用強(qiáng)化學(xué)習(xí)來(lái)修改預(yù)訓(xùn)練的語(yǔ)言模型并不是什么新鮮事,至少可以追溯到2016年,并已被用于使大語(yǔ)言模型更安全。大多數(shù)基于強(qiáng)化學(xué)習(xí)的大語(yǔ)言模型調(diào)優(yōu)都用第二模型來(lái)提供獎(jiǎng)勵(lì),這也是用ChatGPT完成的。ChatGPT值得注意的是通過(guò)強(qiáng)化學(xué)習(xí)調(diào)整系統(tǒng)的規(guī)模,以及大規(guī)模的人類反饋收集工作。
審核編輯:郭婷
評(píng)論