本文從ChatGPT帶來的即時(shí)學(xué)習(xí)能力(in-context learning)入手,逐步深入地探討了ChatGPT目前眾多的關(guān)鍵性問題,包括:
ChatGPT帶來了從未有過的計(jì)算層次——虛擬人
ChatGPT帶來的新的智能計(jì)算構(gòu)架:母體和虛擬人
在人類語料知識用盡的時(shí)候,新的智能架構(gòu)如何成長,如何吸收新的技能
強(qiáng)泛化能力的解釋,以及大模型能力涌現(xiàn)的可能原因
一本正經(jīng)胡說八道問題的原因和長、短期解決方案
ChatGPT如何細(xì)化到垂直領(lǐng)域,比如法律領(lǐng)域。
本文并不是對已發(fā)表的大模型論文的技術(shù)總結(jié),不是一篇綜述文章,而是基于筆者自己的研究分析去探索上述問題的答案。希望能起到一個(gè)拋磚引玉的作用。文章的寫作跨度比較長,大部分的寫作完成于OpenAI推出plugins功能之前,所以有少部分技術(shù)內(nèi)容顯得有些滯后了。
1
ChatGPT帶來的嶄新技術(shù):
即時(shí)學(xué)習(xí)能力
在OpenAI的GPT-3出現(xiàn)之前,以往的深度學(xué)習(xí)模型只是為某個(gè)特定任務(wù)開發(fā)的,比如,翻譯、分類、摘要、信息抽取等等。每個(gè)任務(wù)都有一個(gè)專用的模型,都需要人類標(biāo)柱員專門為這個(gè)任務(wù)生成大量的標(biāo)注數(shù)據(jù)用來訓(xùn)練模型。而OpenAI采用自監(jiān)督的方式來訓(xùn)練它的超級大模型GPT-3,不需要任何人類標(biāo)注數(shù)據(jù)。它使用了巨量的50TB的文字語料,其中大部分來自于互聯(lián)網(wǎng)。而它所做的唯一一件訓(xùn)練任務(wù)就是根據(jù)文本中前面看到的文字,不斷的預(yù)測下一個(gè)文字是什么。
這個(gè)1750億參數(shù)的模型充分訓(xùn)練完成以后,就誕生了一件非常奇妙的事情:模型即時(shí)學(xué)習(xí)的能力,術(shù)語叫做in-context learning(也可翻譯為文中學(xué)習(xí))。因?yàn)镚PT-3有根據(jù)前面的文字不斷預(yù)測下一個(gè)文字的能力,所以它可以生成文本,可以和人對話。即時(shí)學(xué)習(xí)能力就是指GPT-3在這個(gè)交互過程中可以馬上領(lǐng)會到你的指令的意圖、執(zhí)行你的任務(wù),并且可以即時(shí)學(xué)習(xí)到新的知識和技能。ChatGPT通過一個(gè)良好的人機(jī)交互對話界面,充分釋放出GPT-3的即時(shí)學(xué)習(xí)能力。
誕生了超強(qiáng)的即時(shí)學(xué)習(xí)能力以后,以ChatGPT為代表的大模型就成為了一個(gè)新的物種,區(qū)別于以往為專用任務(wù)開發(fā)的深度學(xué)習(xí)模型。大模型不再是任務(wù)的執(zhí)行者,它的角色將轉(zhuǎn)換為底層的賦能者,而它創(chuàng)造出來的各種形形色色具備即時(shí)學(xué)習(xí)能力的“虛擬人”將成為真正的任務(wù)執(zhí)行者。機(jī)器學(xué)習(xí)訓(xùn)練的傳統(tǒng)范式也將發(fā)生根本性的改變。我們先從下圖中的一個(gè)簡單的例子看起。
ChatGPT通過即時(shí)學(xué)習(xí)的能力記住了我教給它的新知識—中國2022年的人口總數(shù),并在后面的人口列表中使用上了這個(gè)新知識。這是多么驚嘆的一種能力!按照以往的范式,我們要改變模型存儲的知識,需要用新數(shù)據(jù)在模型上進(jìn)行多輪的訓(xùn)練。比如,往模型里增加中國2022年的人口總數(shù)這個(gè)事實(shí),就是非常棘手的一件事情。因?yàn)槲覀儾淮_定訓(xùn)練多少輪以后,模型才能夠記住這個(gè)事實(shí)。而且,我們也不確定對這些新數(shù)據(jù)訓(xùn)練之后,是否會破壞模型中存儲的其它知識??蒲薪缒壳耙苍谂鉀Q這個(gè)問題,出現(xiàn)了一個(gè)新的研究方向,叫做neural editing。但是大模型即時(shí)學(xué)習(xí)的能力實(shí)際上已經(jīng)解決這個(gè)問題了,而且是用一種近乎完美的方式:一條指令,一步到位。
你這時(shí)候可能會反駁說,這條新知識其實(shí)并沒有真正存儲在ChatGPT大模型里面,因?yàn)楫?dāng)你打開一個(gè)新的對話的時(shí)候,這個(gè)知識就不存在了。然而,這恰恰是大模型非常大的一個(gè)優(yōu)點(diǎn):即時(shí)學(xué)習(xí)學(xué)到的東西是和母體脫離的,這樣就可以實(shí)現(xiàn)大模型上層任務(wù)的定制化,實(shí)現(xiàn)各種各樣不同的應(yīng)用。而所有的這些都不會改變底層大模型的任何參數(shù)。底層大模型就像操作系統(tǒng)一樣,以賦能者的身份存在。
具備即時(shí)學(xué)習(xí)能力的“虛擬人”可以看作是一種應(yīng)用程序,它的狀態(tài)是可以存儲的,可以讀取的。你教授給它的新知識和新技能并不會丟失。目前ChatGPT能記住4000個(gè)(GPT-4是32000個(gè))漢字的上下文關(guān)聯(lián)。這就意味著我們當(dāng)前對話中前4000個(gè)字里面描述過的知識和技能,ChatGPT都不會遺忘。今后,技術(shù)的發(fā)展肯定會帶來更大的記憶體空間。越大的記憶體就意味著越高的“虛擬人”定制化水平,越寬廣的任務(wù)適用范圍。
我們再列舉一些ChatGPT通過即時(shí)學(xué)習(xí)能力學(xué)習(xí)新技能、新任務(wù)的例子。第一個(gè)例子是關(guān)于七言律詩的學(xué)習(xí)。你如果直接讓ChatGPT寫七言律詩,它會寫得很不符合格式,很隨意。但是如果先將百度百科中關(guān)于七言律詩的定義告訴ChatGPT以后,ChatGPT就可以寫出非常工整的七言律詩。它可以從你給它的定義,馬上學(xué)習(xí)到七言律詩是什么。網(wǎng)絡(luò)上有很多教ChatGPT各種奇奇怪怪新技能和指派新任務(wù)的例子。有人發(fā)明了一種新的語言,教給ChatGPT以后,他和ChatGPT就可以用這種新語言交流了。有人讓ChatGPT去模擬一個(gè)linux內(nèi)核接受用戶的指令,ChatGPT模仿的非常逼真。所有的這些新技能和新任務(wù)的學(xué)習(xí)也僅僅只是一個(gè)定義,一個(gè)prompt,一步到位。
大模型即時(shí)學(xué)習(xí)的能力把大模型從知識和技能萬能者的角色中解放出來了。大模型不再需要做到知識的完美,技能的完美。大模型的知識可以是不完整的,可以不用總是最新的,甚至是可以允許有錯的。大模型上層創(chuàng)造出來的各種“虛擬人”會利用即時(shí)學(xué)習(xí)能力來完善任務(wù)特有的專業(yè)化知識和技能。“虛擬人”還可以通過自主使用API的方式從搜索引擎和數(shù)據(jù)庫中獲得大量的、最新的專業(yè)化知識。大模型此時(shí)真正存在的意義是賦能:即提升“虛擬人”的即時(shí)學(xué)習(xí)的能力和其它能力,比如使用API。
2新的智能計(jì)算構(gòu)架:虛擬人和母體
ChatGPT這次帶來的沖擊和計(jì)算機(jī)發(fā)展歷史中的一個(gè)大事件驚人的相似,那就是通用計(jì)算機(jī)的誕生。在通用計(jì)算機(jī)誕生以前,沒有軟件的概念。那個(gè)時(shí)候電子工程師們需要為每一個(gè)應(yīng)用程序設(shè)計(jì)專門的邏輯電路,開發(fā)專用的計(jì)算機(jī)。直到艾倫·圖靈為解決計(jì)算機(jī)理論問題而提出圖靈機(jī)這一偉大發(fā)明的時(shí)候,人們才發(fā)現(xiàn)計(jì)算機(jī)邏輯可以用代碼的形式和數(shù)據(jù)一起存儲,并通過圖靈機(jī)進(jìn)行運(yùn)算。
通用計(jì)算機(jī)的誕生對社會生產(chǎn)力的提升意義重大。學(xué)習(xí)寫代碼比學(xué)習(xí)開發(fā)邏輯電路要簡單太多了。普通人經(jīng)過一段較長時(shí)間的培訓(xùn)都可以學(xué)會寫代碼。這樣一來,社會各行各業(yè)都可以從軟件開發(fā)中受益,社會自動化程度得到快速的提高。
這次ChatGPT的技術(shù)變革會帶來社會生產(chǎn)力更高層次的躍升。在ChatGPT為代表的通用人工智能出現(xiàn)之前,軟件工程師們需要為每一個(gè)特定任務(wù)開發(fā)一個(gè)專用的機(jī)器學(xué)習(xí)模型或者代碼。ChatGPT誕生之后,普通人就可以通過自然語言交流的方式給ChatGPT安排任務(wù),快速地完成各種復(fù)雜的工作。以前,大家還需要找軟件開發(fā)商來滿足自己業(yè)務(wù)上的需求,現(xiàn)在自己動手就可能可以實(shí)現(xiàn)了!
我們可以設(shè)想一下不久的未來ChatGPT將會帶來的新的智能計(jì)算構(gòu)架,主要可分為賦能層(母體)和應(yīng)用層(虛擬人世界):
1. 底層是一個(gè)基礎(chǔ)大模型,我們稱之為母體。大模型不再是任務(wù)的執(zhí)行者,而是底層的賦能者,其角色就像通用計(jì)算機(jī)中的操作系統(tǒng)一樣。大模型需要為上層提供越來越強(qiáng)的即時(shí)學(xué)習(xí)能力和API訪問等其它能力。在知識方面,大模型不需要做到盡善盡美,無所不知,上面的應(yīng)用層會有辦法彌補(bǔ)大模型專業(yè)知識不足的問題。但大模型仍然需要盡量做到知識的全面性、正確性、最新性,給應(yīng)用層提供最有力的支撐。
2. 上層的應(yīng)用層是一個(gè)虛擬人或者虛擬人任務(wù)的網(wǎng)絡(luò),我們稱之為虛擬人世界。用戶可以根據(jù)不同的任務(wù)用自然語言交流的方式定制虛擬人。虛擬人有自己單獨(dú)的記憶體,里面可以存儲任務(wù)特有的專業(yè)化知識和技能。這部分特有知識可以對底層大模型的知識進(jìn)行補(bǔ)全和覆蓋。虛擬人還可以通過自己調(diào)用數(shù)據(jù)庫和搜索引擎API來獲取完成任務(wù)需要的專業(yè)知識。類似人類社會的分工機(jī)制,虛擬人也可以通過分工的方式來完成更加復(fù)雜的任務(wù),這樣就會構(gòu)造出一個(gè)虛擬人的網(wǎng)絡(luò)。虛擬人即時(shí)學(xué)習(xí)到的知識和技能不會對底層大模型的參數(shù)有任何影響。當(dāng)虛擬人停止工作的時(shí)候,這部分計(jì)算資源就被系統(tǒng)收回,但虛擬人記憶體中的知識和技能可以被保存下來等待下次工作時(shí)讀取。簡而言之,虛擬人的角色就像通用計(jì)算機(jī)中的應(yīng)用程序。
虛擬人的定制化是通過每個(gè)虛擬人記憶體中特有的知識和技能來實(shí)現(xiàn)的。長期來看,我們需要為虛擬人開發(fā)出“可顯示的長期記憶體”技術(shù)來提高記憶的穩(wěn)定性、可靠性、高效性。當(dāng)前,ChatGPT提供了“隱式”的記憶力,GPT-3.5可以記住對話中前4000個(gè)token(漢字)中的內(nèi)容,而GPT-4可以記住32000個(gè)。這些歷史對話中的知識可以用來覆蓋掉母體中的知識。比如,我們先提供給ChatGPT一個(gè)中國人口的數(shù)據(jù)報(bào)告,然后再問它關(guān)于人口數(shù)據(jù)的時(shí)候,ChatGPT會優(yōu)先使用報(bào)告中的數(shù)據(jù)而不是大模型中的數(shù)據(jù)。這是即時(shí)學(xué)習(xí)能力的一個(gè)基本特性,我們將會在下一節(jié)進(jìn)行詳細(xì)的講解。
ChatGPT的最終形態(tài)可能就是一個(gè)超大的智能基座,像供水供電一樣為全社會的各行各業(yè)提供虛擬人服務(wù)。同時(shí),各行各業(yè)企業(yè)級的反饋又能幫助大模型成長。這時(shí),大模型成長的主要助推動力就不再是人類長期歷史文本中積累的知識了,而是各行各業(yè)企業(yè)級應(yīng)用中的第一手知識。換一句形象的話說,所有虛擬人的“生活經(jīng)歷”將成為真正推動母體前進(jìn)的燃料(有趣的是,即時(shí)學(xué)習(xí)并不會直接改變母體的參數(shù))。
在這個(gè)新的計(jì)算架構(gòu)下,我們可以看出知識和技能有兩處可選擇的存儲區(qū)域。一個(gè)是母體,另一個(gè)就是虛擬人的專有記憶體。一般來說,大眾的、穩(wěn)定的、有共識的知識和技能應(yīng)當(dāng)由母體來理解記憶;而任務(wù)特有的、新型的知識和技能則可以通過即時(shí)學(xué)習(xí)的能力存儲在虛擬人的專有記憶體中。
本文章寫作時(shí)間跨度比較長,文章還差結(jié)尾的時(shí)候,OpenAI就把ChatGPT plugins的功能推出市場了。因?yàn)閜lugins是一個(gè)特別好的可以用來說明如何巧用兩處存儲區(qū)域的例子, 我們在這里插入補(bǔ)充一下。plugins作為一種新的技能,可以有兩種實(shí)現(xiàn)的方式。一種就是通過對母體的預(yù)訓(xùn)練來實(shí)現(xiàn),另一種就是通過即使學(xué)習(xí)的能力直接教授給虛擬人。OpenAI選擇的是第二種方式,因?yàn)檫@種方式實(shí)現(xiàn)起來很快,成本很低。而第一種方式需要專門的訓(xùn)練語料,如果讓人來標(biāo)注,成本非常高。但是第二種方式也存在著一個(gè)較大的問題,就是各種plugin API的自然語言描述Prompt加起來會占去虛擬人專有記憶體很大的空間。
這個(gè)時(shí)候其實(shí)有一個(gè)巧妙的解法,不知道OpenAI是否也是這么想的。如果我們把所有用戶使用plugins的全部過程,包括在plugins內(nèi)部點(diǎn)擊選擇的步驟,都詳詳細(xì)細(xì)地記錄下來作為語料反哺給母體進(jìn)行訓(xùn)練。一旦母體獲得掌握這些知識技能之后,我們就不再需要虛擬人用即時(shí)學(xué)習(xí)能力去學(xué)這些plugin API了。甚至,用戶都可以不用再在plugin內(nèi)部進(jìn)行點(diǎn)擊選擇了,所以的一切都會按照用戶的任務(wù)目標(biāo)自動進(jìn)行。虛擬人只需要返回給用戶一個(gè)plugin使用的確認(rèn)報(bào)告就行了。
這就給我們的計(jì)算架構(gòu)提供了一種引入新的大眾技能的范式。即,先通過虛擬人的即時(shí)學(xué)習(xí)能力+用戶輔助來先實(shí)現(xiàn)這個(gè)功能,然后在大量用戶使用之后,逐漸將這個(gè)技能知識沉淀到母體,隨之就可以釋放掉虛擬人這部分的技能定義Prompt。
3即時(shí)學(xué)習(xí)能力和強(qiáng)泛化的解釋
我們現(xiàn)在開始分析一下ChatGPT的即時(shí)學(xué)習(xí)能力從何而來。OpenAI公布的文檔中提及過ChatGPT即時(shí)學(xué)習(xí)能力是通過無監(jiān)督訓(xùn)練的方法從巨量的人類文本語料中學(xué)習(xí)來的,后期的有監(jiān)督訓(xùn)練并沒有提升ChatGPT的即時(shí)學(xué)習(xí)能力。這個(gè)無監(jiān)督訓(xùn)練方法非常簡單樸質(zhì),就是根據(jù)文本中前面看到的文字,不斷的預(yù)測下一個(gè)文字是什么?,F(xiàn)在我們把眼光稍微放開一些,這個(gè)任務(wù)本質(zhì)上就等于根據(jù)前面文本的約束條件生成后面文本,只不過是以一種分步走的形式來進(jìn)行。我們再引申一下,這個(gè)任務(wù)可以進(jìn)一步看成自然語言約束條件下的前因推后果的任務(wù),由前文的“因”推出后文的“果”。
而前因推后果這個(gè)任務(wù)是一個(gè)超級任務(wù),是所有具體任務(wù)的元任務(wù)。GPT實(shí)際上就是在訓(xùn)練這個(gè)超級任務(wù)。因?yàn)樗且粋€(gè)超級任務(wù),非常難,所以它需要非常龐大的參數(shù)模型和巨量的語料來訓(xùn)練。這可能這就是大模型能力涌現(xiàn)現(xiàn)象的原因所在。對于單任務(wù)模型來說,泛化意味著從此任務(wù)的已知數(shù)據(jù)點(diǎn)泛化到此任務(wù)的未知數(shù)據(jù)點(diǎn)上。對于GPT來說,泛化意味著從已知的不計(jì)其數(shù)的任務(wù)泛化到未知的任務(wù)上面。這就解釋了為何ChatGPT擁有即時(shí)學(xué)習(xí)能力,有掌握全新的知識和技能的能力。要做到這樣強(qiáng)的泛化能力,就需要GPT通過在巨量語料上的訓(xùn)練在其內(nèi)部建立起一個(gè)良好的世界知識的模型。
深刻理解“前因推后果”這個(gè)訓(xùn)練本質(zhì)能指導(dǎo)我們更好地使用ChatGPT,構(gòu)造出理想的Prompt。我們舉一個(gè)例子(見下圖),如果我們給ChatGPT一個(gè)人口的數(shù)據(jù)報(bào)告,然后再問它關(guān)于人口數(shù)據(jù)的時(shí)候,ChatGPT會優(yōu)先使用報(bào)告中的數(shù)據(jù)而不是大模型中的數(shù)據(jù)。這是因?yàn)閳?bào)告起到了一個(gè)前因的作用,所以后面的數(shù)據(jù)分析肯定是會基于前面這個(gè)報(bào)告得出的。ChatGPT用到的通用語料中的文字都是上下文相關(guān)的,不可能說前面放了一個(gè)報(bào)告,緊跟著卻去說與報(bào)告無關(guān)的事情,這樣的概率很小。所以,如果我們可以給ChatGPT設(shè)置一個(gè)很好的“前因”,把它帶到我們想要的場景中,那么就會得到更符合我們要求的“后果”。
下面我們接著探討一下GPT強(qiáng)泛化能力的來由。
根據(jù)前面的文本預(yù)測下一個(gè)字確實(shí)是一個(gè)概率行為,看似簡單,但想做好卻是一件異常復(fù)雜的事情。我們?nèi)祟愂窃趺醋龅哪??我們需要理解前文的語義,我們大腦要有世界的知識模型,我們要預(yù)測出后面將會發(fā)生什么事情,最后我們需要根據(jù)語法規(guī)則挑選出合適的下一個(gè)字。只有這樣才能生成符合邏輯的文本。GPT可能也是在做類似的事情,因?yàn)樗闪朔浅7线壿嫷奈谋?,GPT-4在各種任務(wù)上文本生成的表現(xiàn)已經(jīng)接近甚至超越了普通人的智能水平。
很多人認(rèn)為大模型的訓(xùn)練只是對語料中的數(shù)據(jù)進(jìn)行一個(gè)擬合,或者叫做近似。但他們不了解大模型中用到隨機(jī)梯度下降算法實(shí)際上是一種泛化在先的擬合算法,即通過泛化的形式來進(jìn)行擬合。這種算法會先擬合所有數(shù)據(jù)點(diǎn)中最共性的特征,然后再擬合次共性的特征,以此類推,最后擬合每個(gè)數(shù)據(jù)點(diǎn)中最個(gè)性的特征。這時(shí)才等于把所有數(shù)據(jù)點(diǎn)都記憶下來了。
深度學(xué)習(xí)中的隨機(jī)梯度下降算法甚至不屬于標(biāo)準(zhǔn)意義上的NLP統(tǒng)計(jì)算法,因?yàn)樗淖钚∮?jì)算單位不再是字或者字符,不再通過計(jì)數(shù)(counting)字或者詞之間關(guān)聯(lián)的方式來研究語義,這和其它的傳統(tǒng)機(jī)器學(xué)習(xí)算法,比如貝葉斯、SVM、HMM等等非常不同。大模型用高緯度向量來表達(dá)字,相當(dāng)于把離散的一個(gè)個(gè)字的邊界都打碎了,把字碾成了粉末,每個(gè)字其中包含的語義變成連續(xù)的、可以流動的東西,這是為了方便求導(dǎo)的數(shù)學(xué)運(yùn)算。
下面,我們用一個(gè)非常形象但不是特別準(zhǔn)確的例子來解釋一下隨機(jī)梯度下降算法中的泛化在先原則。例子中用到的隨機(jī)梯度下降優(yōu)化算法為Mini-batch SGD。假設(shè)我們的世界知識是一棵長滿綠葉的大樹的照片,我們可以把樹的葉子比喻成語料,一片葉子相當(dāng)于一個(gè)文字。我們的模型初始化的時(shí)候是一張空白的紙。我們不能看見樹的全觀,只能通過一個(gè)個(gè)小窗口看見窗口內(nèi)的樹葉。一個(gè)窗口就相當(dāng)于一次采樣。我們的目標(biāo)是要通過隨機(jī)梯度下降優(yōu)化算法使得模型內(nèi)部構(gòu)建出這顆世界知識的大樹。
我們使用和GPT同樣的訓(xùn)練任務(wù),即我們通過窗口內(nèi)已經(jīng)看到的樹葉去預(yù)測與它們最相鄰的一片葉子,而GPT是使用一段文本中前面的文字去預(yù)測下一個(gè)文字。和GPT訓(xùn)練方法一樣,我們使用Transformer 掩碼(masking)的方式可以同時(shí)完成窗口內(nèi)每一片葉子的被預(yù)測的訓(xùn)練任務(wù),并且同時(shí)完成多個(gè)窗口(多次采樣)上的全部訓(xùn)練任務(wù),因?yàn)槲覀儾捎玫氖荕ini-batch SGD。這就是說,對模型參數(shù)的每一次更新實(shí)際上是基于很多個(gè)預(yù)測下一片葉子的訓(xùn)練子任務(wù)。我們知道,我們是通過梯度的方向來對模型參數(shù)進(jìn)行更新,而梯度的方向就是真實(shí)和預(yù)測之間變化差異最大的方向。每次模型更新的梯度實(shí)際上是多個(gè)訓(xùn)練子任務(wù)上的梯度的疊加。所以這個(gè)總梯度可以說是一個(gè)共性的表現(xiàn),因此每個(gè)訓(xùn)練子任務(wù)上面共性的東西就容易被放大,而個(gè)性的東西就容易被抵消,特別是在共性的東西尚未建立的混沌狀態(tài)中。從統(tǒng)計(jì)的角度來說,大量訓(xùn)練子任務(wù)梯度疊加的方向近似于真實(shí)的世界知識和模型內(nèi)部構(gòu)建的世界知識差異最大的方向。
最開始的時(shí)候,當(dāng)我們的模型還是一張空白紙,它和那棵真實(shí)的“世界知識大樹”差異最大的方向是什么呢?那必定是滿屏的綠色,這就是所有知識(葉子)最最共性的特征。所有預(yù)測下一片葉子的子任務(wù)的梯度中都會有明顯指向這個(gè)方向的向量維度。所以,模型最先擬合的特征就是葉子的綠色,相當(dāng)于我們在白紙上畫上了一片綠色。一旦綠色的特征被基本上擬合之后,次共性的特征就會變得顯著,這些特征可能包括樹葉的輪廓和內(nèi)部脈絡(luò)的基本形狀。一旦這些次共性的特征被擬合之后,次次共性的特征的差異性就會顯露出來了,可能包括樹葉所在的區(qū)域,頂部、中部、邊緣、底部,或者樹葉有沒有被蟲咬,樹葉的菌斑等等樹葉之間的普遍關(guān)聯(lián)特征。當(dāng)共性的特征都被擬合完成之后,模型會開始著重?cái)M合個(gè)性的特征,每片葉子具體的特點(diǎn),特定葉子與葉子之間的關(guān)聯(lián)關(guān)系等等。直至最后,真實(shí)世界知識大樹和我們模型內(nèi)部表征出來的大樹之間的差異沒有了,梯度消失了,我們的訓(xùn)練也就停止了。
通過上面這個(gè)例子我們可以看出,隨機(jī)梯度下降算法是和“死記硬背”完完全全對立的一種算法。它具有非常強(qiáng)的泛化性,是一種泛化在先的算法,因?yàn)樗偸窍葦M合共性的東西。GPT也是使用了相同的方式從巨量的人類語料中學(xué)習(xí)并構(gòu)建出來人類的“世界知識大樹模型”。但是,機(jī)器這種在連續(xù)空間里面找共性的“思維方式”對于我們?nèi)祟悂碚f是很難理解的,因?yàn)槲覀兞?xí)慣于在基于離散的字的空間上去思考問題。
眾所周知,ChatGPT有時(shí)候會一本正經(jīng)的胡編亂造,不知道問題答案的人很容易會被它蒙騙。而這種胡編亂造的本領(lǐng)其實(shí)正是GPT大模型強(qiáng)泛化能力的一個(gè)具體表現(xiàn)。泛化就是理解的能力,舉一反三的能力。編造不存在的東西達(dá)到以假亂真的程度正是說明GPT對它所需要描述的事物有著充分的理解,是一種“高智商”的體現(xiàn)。
4
ChatGPT一本正經(jīng)胡說八道問題的
探討和解決思路
ChatGPT胡編亂造的問題牽扯到一些大模型中非常本質(zhì)的東西。ChatGPT胡編亂造最主要的原因是GPT在巨量語料的預(yù)訓(xùn)練中完全是以旁觀者的身份存在的,這里面缺少一個(gè)“自我”。語料中的內(nèi)容是客觀存在的,并不以GPT知不知道這些內(nèi)容有任何的變化。GPT只是在模仿這些內(nèi)容的生成。當(dāng)然我們上節(jié)說過,這是一種基于“理解”的模仿,并不是單純記憶。
咱們舉個(gè)法律領(lǐng)域的例子。假設(shè)GPT的語料中有一些案件分析的文本。這些文本首先會交代一個(gè)案情,然后法官會分析解剖這個(gè)案件,給出這些案件的法律適用(法條),最后法官還會給出幾個(gè)以往的類似案例作為參照。我們使用ChatGPT做案件分析的時(shí)候,它其實(shí)是在模仿語料中的這個(gè)過程。但是如果大模型的法律法規(guī)訓(xùn)練得不夠充分,ChatGPT找不到合適的法條的時(shí)候,它知道這個(gè)位置需要生成一個(gè)法條,它就會運(yùn)用它的泛化能力編造一個(gè)最像的法條。ChatGPT不會說,我找不到合適的法條,因?yàn)樗鼘W(xué)習(xí)模仿的語料文本中不會發(fā)生這樣的事情。
造成ChatGPT胡編亂造的第二個(gè)原因是訓(xùn)練不充分。從某種角度來說,胡編亂造不是大模型的一種錯誤,而是對相關(guān)知識未充分訓(xùn)練的一種中間狀態(tài)。假設(shè)人類世界的知識是有限的(closed world),大模型裝下了所有的知識,并對之進(jìn)行了充分的訓(xùn)練,那么絕大多數(shù)胡編亂造的情況會消失。因?yàn)榇竽P涂梢郧宄刂乐R的界限在哪里,哪些是存在的,哪些是不存在的。
但是實(shí)際上,人類世界的知識可以說是無限的(open world),大模型雖然知道很多知識,但它并不知道邊界在哪里。訓(xùn)練語料中存在著大量的邊緣知識,出現(xiàn)的次數(shù)比較少,大模型沒有機(jī)會進(jìn)行充分的訓(xùn)練,以至于不能很好地理解掌握這部分知識。如果在對話中涉及到這部分邊緣知識,ChatGPT就會出現(xiàn)胡編亂造的現(xiàn)象。其實(shí)這就是大模型從不懂通向懂之間的一個(gè)未完成狀態(tài)。
下面我們看一個(gè)例子。我們讓ChatGPT和百度文心一言同時(shí)生成演員張涵予的生平介紹。ChatGPT給出的張涵予的信息貌似有模有樣,實(shí)際上都是胡謅的,出生時(shí)間和地點(diǎn)都是錯的。不過ChatGPT大體上知道張涵予是演電影的,而且也說對了其中的一部電影《湄公河行動》。百度文心一言給出的張涵予的信息基本上都是對的。我們知道,ChatGPT訓(xùn)練中使用的中文語料是很少的,而百度使用的語料絕大部分都是中文而且訓(xùn)練是比較充分的??梢钥闯觯?jīng)過充分訓(xùn)練之后大模型在演員張涵予生平介紹上的胡編亂造情況得到了大大的改善。
解決ChatGPT胡編亂造的問題可以從上述的兩個(gè)原因入手,還可以分為長期、短期兩類方案。最正統(tǒng)的長期方案就是通過與外界交互式的訓(xùn)練,讓ChatGPT擁有“自我”,可以根據(jù)“自我”的狀態(tài)調(diào)整對話的內(nèi)容。這樣,當(dāng)ChatGPT不擁有準(zhǔn)確地回答某些問題的知識的時(shí)候,它就會回答“我不知道”。實(shí)際上,OpenAI也正走在這條路上。基于人類反饋的強(qiáng)化學(xué)習(xí)(RLHF)就給了ChatGPT和外界交互的機(jī)會,它就不再僅僅是一個(gè)世界的旁觀者了。當(dāng)ChatGPT胡編亂造的時(shí)候,我們?nèi)祟惪梢詫λM(jìn)行糾正,告訴它這個(gè)時(shí)候正確的回答是“我不知道”。當(dāng)這種反饋訓(xùn)練達(dá)到足夠量級的時(shí)候,ChatGPT就可以將這種胡編亂造的場景和自身的知識掌握狀態(tài)聯(lián)系在一起,進(jìn)行泛化。GPT-4發(fā)布時(shí)公開的官方文檔也顯示出了RLHF正在有效地解決幻覺的問題:經(jīng)過RLHF訓(xùn)練之后的ChatGPT在TruthfulQA的問題集上有50%以上的改善(見下圖)。
理論上,我們從算法層面應(yīng)該也可以捕捉到ChatGPT胡編亂造的狀態(tài)。GPT-4發(fā)布時(shí)的官方文檔顯示出一個(gè)有趣的現(xiàn)象,預(yù)訓(xùn)練完成之后GPT-4在做MMLU測試集的時(shí)候,它對所選擇答案輸出的概率和它實(shí)際上答對這道題的正確率幾乎完全一致。這說明GPT-4對答案的正確與否是“心中有數(shù)”的。所以,當(dāng)ChatGPT“胡編亂造”時(shí)生成的文本,其相對應(yīng)的概率曲線或者entropy曲線可能也具有某種明顯特征,應(yīng)該可以和“胸有成竹”時(shí)生成文本的曲線區(qū)分開來。
解決ChatGPT胡編亂造的問題的第二條路就是讓大模型盡可能多地吸收語料知識,并對之進(jìn)行充分訓(xùn)練。多吸收各方面的語料知識就是擴(kuò)大大模型知識的范圍,使得用戶提出的問題基本上可以落在大模型邊緣知識以內(nèi)的部分,即大模型可以充分理解的知識范疇之中。充分訓(xùn)練就是讓大模型可以完全掌握并記憶住這些知識。前文中我們舉的那個(gè)張涵予的例子可以說明充分訓(xùn)練的必要性。
但是大模型的容量有限,不可能包含世界上所有的知識。就拿中文法律領(lǐng)域來說吧,全量案例加在一起就有1TB的數(shù)據(jù)量了。而1750億參數(shù)的GPT-3模型的總共容量也就只有1TB。所以,至少目前大模型是不可能包含全量的案例信息。那么我們在訓(xùn)練大模型的時(shí)候就會面臨一個(gè)語料的取舍問題,哪些是該放的,哪些是不該放的,以及訓(xùn)練程度問題。
拿法律領(lǐng)域來說,訓(xùn)練至少要做到對全部法律法規(guī)的準(zhǔn)確記憶,因?yàn)檫@是理解法律知識和關(guān)系的基礎(chǔ)。全量案例不宜于都加入到語料之中,因?yàn)檫@么做會造成同一模式的語料占比過高,容易破壞語料的多樣性,影響到大模型的泛化理解能力。
而準(zhǔn)確記憶和索引案例數(shù)據(jù)這個(gè)任務(wù)則交由外部的法律信息搜索引擎,比如北大法寶,來完成。通過虛擬人的即時(shí)學(xué)習(xí)能力,我們可以直接告訴ChatGPT對話機(jī)器人,“凡是需要引用實(shí)際案例的地方,請調(diào)用北大法寶來搜索案例”。ChatGPT可以理解你的命令,按照你的命令執(zhí)行,因?yàn)檫@個(gè)命令并不涉及到ChatGPT“自我”的狀態(tài),而只是對一個(gè)客觀知識(案例)的認(rèn)知和理解。最近微軟發(fā)布的154頁的GPT-4調(diào)研報(bào)告《通用人工智能火花》的中充分展示了ChatGPT在這方面的能力(見下圖)。ChatGPT可以在凡是需要數(shù)學(xué)計(jì)算的時(shí)候能夠自動調(diào)用計(jì)算器來解決問題。
所以,即使OpenAI在第一條“讓ChatGPT擁有自我”的路上受阻,我們?nèi)匀豢梢酝ㄟ^第二條路,充分訓(xùn)練+鎖定范圍,來有效地規(guī)避掉ChatGPT胡編亂造的問題。雖然ChatGPT“不知道”自己知不知道,但我們可以通過訓(xùn)練來控制它不知道的范圍。只要我們清楚它的知識范圍,我們就可以通過自動調(diào)用外部工具的方式來彌補(bǔ)它的不足。
審核編輯 :李倩
-
邏輯電路
+關(guān)注
關(guān)注
13文章
494瀏覽量
42656 -
OpenAI
+關(guān)注
關(guān)注
9文章
1100瀏覽量
6576 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1564瀏覽量
7814
原文標(biāo)題:ChatGPT的真相:強(qiáng)泛化的秘密以及眾多關(guān)鍵問題
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論