看到ChatGPT的華麗誕生,,心情很復(fù)雜,既高興、驚喜,也感到恐慌,高興和驚喜的是沒有預(yù)料到這么快就見證了自然語言處理(NLP)技術(shù)的重大突破,,體驗(yàn)到通用技術(shù)的無限魅力,??只诺氖荂hatGPT幾乎可以高質(zhì)量地完成NLP中的大多數(shù)任務(wù),,逐漸認(rèn)識到很多NLP的研究方向遇到了極大挑戰(zhàn),。
總體而言,ChatGPT最令人非常驚艷的是它的通用性,,相比于GPT-3需要通過設(shè)計(jì)非常精巧的提示來實(shí)現(xiàn)效果并不太好的各種NLP能力,,ChatGPT已經(jīng)讓用戶感受不到提示的存在。作為一個(gè)對話系統(tǒng),,ChatGPT讓用戶自然提問便可實(shí)現(xiàn)從理解到生成的各種任務(wù),,而且性能在開放領(lǐng)域幾乎都達(dá)到了當(dāng)前最佳水平,很多任務(wù)超越了針對特定任務(wù)單獨(dú)設(shè)計(jì)的模型,,并且在代碼編程領(lǐng)域表現(xiàn)卓越,。具體而言,自然語言理解能力(尤其是用戶意圖理解能力)十分突出,,無論是問答,、聊天、分類,、摘要,、翻譯等任務(wù),盡管回復(fù)不一定完全正確,,但是幾乎都能夠領(lǐng)會用戶意圖,,理解能力遠(yuǎn)超預(yù)期。相比于理解能力,,ChatGPT的生成能力更加強(qiáng)大,,可以針對各種問題生成具有一定邏輯且多樣化的長文本??偟膩碚f,,ChatGPT表現(xiàn)出的更多是驚艷,是通向AGI的初步階段,,一些技術(shù)瓶頸解決后會更加強(qiáng)大,。
對于ChatGPT表現(xiàn)案例的總結(jié)已經(jīng)非常多了,這里主要總結(jié)一下自己對ChatGPT技術(shù)問題的一些思考,,算是與ChatGPT斷斷續(xù)續(xù)交互兩個(gè)多月的一個(gè)簡單總結(jié),。由于無法了解ChatGPT的具體實(shí)現(xiàn)技術(shù)和細(xì)節(jié),所以幾乎都是主觀猜想,,肯定有很多不對的地方,,歡迎一起探討。
1. ChatGPT的通用性為何做得如此之好,?
只要使用過ChatGPT,,我們就會發(fā)現(xiàn)它不是一個(gè)傳統(tǒng)意義上的人機(jī)對話系統(tǒng),,實(shí)際是一個(gè)以自然語言為交互方式的通用語言處理平臺。2020年的GPT-3雖然擁有了通用能力的雛形,,但是需要精心設(shè)計(jì)提示語來觸發(fā)相應(yīng)功能,,而ChatGPT允許用戶采用非常自然的提問就可以準(zhǔn)確識別意圖完成各種功能。傳統(tǒng)方法往往先進(jìn)行用戶意圖識別,,再針對不同意圖調(diào)用相應(yīng)功能的處理模塊,,例如通過用戶數(shù)據(jù)識別出摘要或翻譯意圖,再調(diào)用文本摘要或機(jī)器翻譯模型,。傳統(tǒng)方法在開放域的意圖識別準(zhǔn)確率不夠理想,,而且不同功能模塊各自為戰(zhàn)無法共享信息,難以形成強(qiáng)大的NLP通用平臺,。ChatGPT突破了各自為戰(zhàn)的模式,,不再區(qū)分不同功能,統(tǒng)一認(rèn)為是對話過程中的一種特定需求,。那么,,ChatGPT的通用性為何做得如此之好呢?一直在思考這個(gè)問題,,由于沒有條件實(shí)驗(yàn)證實(shí),,所以僅能猜想。根據(jù)Google的Instruction Tuning研究工作FLAN,,當(dāng)模型達(dá)到一定規(guī)模(e.g. 68B)且Instruction任務(wù)的類型達(dá)到一定數(shù)目(e.g. 40),,模型就涌現(xiàn)出對新意圖的識別能力。OpenAI從其開放的API中收集了全球用戶各種任務(wù)類型的對話數(shù)據(jù),,根據(jù)意圖分類和標(biāo)注,,然后在175B參數(shù)GPT-3.5上進(jìn)行Instruction Tuning,自然就涌現(xiàn)出了通用的意圖識別能力,。
2. 為什么面向?qū)υ挼奈⒄{(diào)沒有遭遇災(zāi)難性遺忘問題,?
災(zāi)難性遺忘問題一直是深度學(xué)習(xí)中的一個(gè)挑戰(zhàn),經(jīng)常因?yàn)樵谀硞€(gè)任務(wù)上訓(xùn)練后就喪失了在其他任務(wù)上的性能,。例如,,一個(gè)30億參數(shù)的基礎(chǔ)模型,先在自動(dòng)問答數(shù)據(jù)上進(jìn)行微調(diào),,然后在多輪對話數(shù)據(jù)上進(jìn)行微調(diào),,結(jié)果會發(fā)現(xiàn)模型的問答能力大幅度下降。ChatGPT似乎不存在這個(gè)問題,,其在基礎(chǔ)模型GPT-3.5上進(jìn)行了兩次微調(diào),,第一次依據(jù)人工標(biāo)注的對話數(shù)據(jù)進(jìn)行微調(diào),第二次根據(jù)人類反饋的強(qiáng)化學(xué)習(xí)進(jìn)行微調(diào),微調(diào)使用的數(shù)據(jù)很少,,尤其是人類反饋的打分排序數(shù)據(jù)更少,微調(diào)后竟然仍然表現(xiàn)出強(qiáng)大的通用能力,,而并沒有完全過擬合到對話任務(wù),。這是個(gè)非常有趣的現(xiàn)象,也是我們沒有條件驗(yàn)證的現(xiàn)象,。猜測可能有兩方面的原因,,一方面是ChatGPT使用的對話微調(diào)數(shù)據(jù)實(shí)際可能包含了非常全面的NLP各種任務(wù),正如InstructGPT中對用戶使用API的問題分類可以發(fā)現(xiàn),,很多都不是簡單的對話,,還有分類、問答,、摘要,、翻譯、代碼生成等等,,因此,,ChatGPT實(shí)際是對若干任務(wù)同時(shí)進(jìn)行了微調(diào);另一方面,,可能當(dāng)基礎(chǔ)模型足夠大之后,,在較小數(shù)據(jù)上的微調(diào)不會對模型產(chǎn)生很大影響,可能僅在基礎(chǔ)模型參數(shù)空間非常小的鄰域中優(yōu)化,,所以不會顯著影響基礎(chǔ)模型的通用能力,。
3. ChatGPT的大范圍上下文連續(xù)對話能力是如何做到的?
使用ChatGPT時(shí)就會發(fā)現(xiàn)它一個(gè)讓人十分驚訝的能力,,即使和ChatGPT交互了十多輪,,它仍然還記得第一輪的信息,而且能夠根據(jù)用戶意圖比較準(zhǔn)確地識別省略,、指代等細(xì)粒度語言現(xiàn)象,。這些對我們?nèi)藖碚f似乎不算問題,但是在NLP的研究歷史中,,省略,、指代等問題一直是一個(gè)難以逾越的挑戰(zhàn)。此外,,在傳統(tǒng)對話系統(tǒng)中,,對話輪次多了之后,話題的一致性難以保障,。但是,,ChatGPT幾乎不存在這個(gè)問題,即使輪次再多,似乎都可以保持對話主題的一致性和專注度,。猜測這個(gè)能力可能有三方面的來源,。首先,高質(zhì)量的多輪對話數(shù)據(jù)是基礎(chǔ)和關(guān)鍵,,正如Google的LaMDA,,OpenAI也采用人工標(biāo)注的方式構(gòu)造了大量高質(zhì)量多輪對話數(shù)據(jù),在此之上進(jìn)行的微調(diào)將會激發(fā)模型的多輪對話能力,。其次,,基于人類反饋的強(qiáng)化學(xué)習(xí)因?yàn)樘嵘四P突貜?fù)的擬人性,也會間接增強(qiáng)模型多輪對話的一致性能力,。最后,,模型對8192個(gè)語言單元(Token)的顯式建模能力使其幾乎可以記憶普通人一整天的對話數(shù)據(jù),在一次對話交流中很難超出這個(gè)長度,,因此,,所有對話歷史都已經(jīng)被有效記憶,從而可以顯著提升連續(xù)多輪對話的能力,。
4. ChatGPT的交互修正能力是如何煉成的,?
交互修正能力是智能的一種高級體現(xiàn),對我們來人說稀松平常的事情卻是機(jī)器的痛點(diǎn),。在交流過程中,,被指出問題后我們會立刻意識到問題所在并及時(shí)準(zhǔn)確地修正相關(guān)信息。對于機(jī)器而言,,意識到問題,、識別問題范圍并更正對應(yīng)信息的每一步都不是一件容易的事情。ChatGPT出現(xiàn)之前尚未看到過具有較強(qiáng)交互修正能力的通用模型,。與ChatGPT交互后就會發(fā)現(xiàn),,無論是用戶更改自己之前的說法還是指出ChatGPT的回復(fù)中存在的問題,ChatGPT都能夠捕捉到修改意圖,,并準(zhǔn)確識別出需要修改的部分,,最后能夠做出正確的修正。目前為止,,沒有發(fā)現(xiàn)任何模型相關(guān)的因素與交互修正能力直接相關(guān),,也不相信ChatGPT具有實(shí)時(shí)學(xué)習(xí)的能力,一方面是重啟對話后ChatGPT可能還會犯相同錯(cuò)誤,,另一方面是基礎(chǔ)大模型的優(yōu)化學(xué)習(xí)從來都是從高頻數(shù)據(jù)中總結(jié)頻繁模式,,一次對話無論如何也難以更新基礎(chǔ)模型。相信更多的是基礎(chǔ)語言大模型的一種歷史信息處理技巧,,不太確定的因素可能包括:(1)OpenAI人工構(gòu)建的對話數(shù)據(jù)中包含一些交互修正的案例,,微調(diào)后擁有了這樣的能力,;(2)人工反饋的強(qiáng)化學(xué)習(xí)使得模型輸出更加符合人類偏好,從而在信息修正這類對話中表現(xiàn)得更加遵循人類的修正意圖,;(3)可能大模型達(dá)到一定規(guī)模(e.g. 60B)之后,,原始訓(xùn)練數(shù)據(jù)中的交互修正案例就被學(xué)到了,模型交互修正的能力自然就涌現(xiàn)出來了,。
5. ChatGPT的邏輯推理能力是如何學(xué)到的,?
當(dāng)我們詢問ChatGPT一些邏輯推理相關(guān)的問題時(shí),它并不是直接給出答案,,而是展示出詳細(xì)的邏輯推理步驟,最后給出推理結(jié)果,。雖然雞兔同籠等很多案例表明ChatGPT并沒有學(xué)會推理本質(zhì),,而僅僅學(xué)會了推理的表面邏輯,但是展示的推理步驟和框架基本是正確的,。一個(gè)語言模型能夠?qū)W習(xí)到基本的邏輯推理模式已經(jīng)極大超越了預(yù)期,,其推理能力溯源是非常有趣的一個(gè)問題。相關(guān)對比研究發(fā)現(xiàn),,當(dāng)模型足夠大,,并且程序代碼與文本數(shù)據(jù)混合訓(xùn)練時(shí),程序代碼的完整邏輯鏈就會遷移泛化到語言大模型,,從而大模型就擁有了一定的推理能力,。這種推理能力的習(xí)得有點(diǎn)神奇,但是也能理解,,可能代碼注釋是從邏輯代碼到語言大模型推理能力遷移泛化的橋梁,。多語言能力應(yīng)該也是類似的道理。ChatGPT的訓(xùn)練數(shù)據(jù)絕大部分是英文,,中文數(shù)據(jù)占比極少,,然而我們發(fā)現(xiàn)ChatGPT的中文能力雖然比不上英文,但是也非常強(qiáng)大,。訓(xùn)練數(shù)據(jù)中的一些中英對照的平行數(shù)據(jù)可能就是英文能力遷移到中文能力的橋梁,。
6. ChatGPT是否針對不同下游任務(wù)采用不同的解碼策略?
ChatGPT有許多驚艷的表現(xiàn),,其中一個(gè)是它可以針對同一個(gè)問題生成多種不同的回復(fù),,顯得很睿智。比如,,我們不滿意ChatGPT的回答,,可以點(diǎn)擊“重新生成”按鈕,它立刻會生成另一種回復(fù),,若還是不滿意可以繼續(xù)讓其重新生成,。這一點(diǎn)在NLP領(lǐng)域并不神秘,對于語言模型來說是它的一個(gè)基本能力,也就是采樣解碼,。一個(gè)文本片段的后面可能接不同的詞語,,語言模型會計(jì)算每個(gè)詞語出現(xiàn)的概率,如果解碼策略選擇概率最大的詞語輸出,,那么每次結(jié)果都是確定的,,就無法生成多樣性回復(fù)。如果按照詞匯輸出的概率分布進(jìn)行采樣,,例如,,“策略”的概率是0.5,“算法”的概率是0.3,,然后采樣解碼輸出“策略”的可能性就是50%,,輸出“算法”的可能性就是30%,從而保證了輸出的多樣性,。因?yàn)椴蓸舆^程是按照概率分布進(jìn)行的,,即使輸出結(jié)果多樣,但是每一次都是選擇概率較大的結(jié)果,,所以多種結(jié)果看起來都相對比較合理,。對比不同類型的任務(wù)時(shí),我們會發(fā)現(xiàn)ChatGPT的回復(fù)多樣性針對不同下游任務(wù)差別比較大,。針對“如何”,、“為什么”等“How”、“Why”型任務(wù)時(shí),,重新生成的回復(fù)與之前的回復(fù)無論是表達(dá)方式還是具體內(nèi)容具有較大差異,,針對機(jī)器翻譯、數(shù)學(xué)應(yīng)用題等“What”型任務(wù)時(shí),,不同回復(fù)之間的差異非常細(xì)微,,有時(shí)幾乎沒有變化。如果都是依據(jù)概率分布的采樣解碼,,為何不同回復(fù)之間的差異如此之小,。猜測一種理想情況可能是“What”型任務(wù)基礎(chǔ)大模型學(xué)習(xí)到的概率分布非常尖銳(Sharp),例如學(xué)到的“策略”概率為0.8,,“算法”概率為0.1,,所以大多數(shù)時(shí)候采樣到相同的結(jié)果,也就是前面例子中80%的可能性都會采樣到“策略”,;“How”,、“Why”型任務(wù)基礎(chǔ)大模型學(xué)習(xí)到的概率分布比較平滑(Smooth),例如“策略”概率為0.4,,“算法”概率為0.3,,所以不同時(shí)候可以采樣到差異性較大的結(jié)果,。如果ChatGPT能夠?qū)W習(xí)到任務(wù)相關(guān)的非常理想的概率分布,那確實(shí)非常厲害,,基于采樣的解碼策略就可以適用于所有任務(wù),。通常,關(guān)于機(jī)器翻譯,、數(shù)學(xué)計(jì)算,、事實(shí)性問答等答案比較確定或者100%確定的任務(wù),一般采用基于貪婪解碼,,也就是每次輸出概率最高的詞語,。如果希望輸出相同語義的多樣性輸出,大多采用基于柱搜索的解碼方法,,但較少采用基于采樣的解碼策略,。從與ChatGPT的交互看,所有任務(wù)它似乎都采用了基于采樣的解碼方法,,真是暴力美學(xué)。
7. ChatGPT能否解決事實(shí)可靠性問題,?
答案缺乏可靠性是目前ChatGPT面臨的最大挑戰(zhàn),。特別是針對事實(shí)性和知識性相關(guān)的問答,ChatGPT有時(shí)候會一本正經(jīng)地胡編亂造,,生成虛假信息,。即使讓它給出來源和出處或者參考文獻(xiàn),ChatGPT通常也會生成一個(gè)不存在的網(wǎng)址或者從未發(fā)表過的文獻(xiàn),。不過,,ChatGPT通常會給用戶一種比較好的感覺,也就是很多事實(shí)和知識它似乎都知道,。實(shí)際上,,ChatGPT就是一個(gè)語言大模型,語言大模型本質(zhì)就是一種深度神經(jīng)網(wǎng)絡(luò),,深度神經(jīng)網(wǎng)絡(luò)本質(zhì)就是一種統(tǒng)計(jì)模型,,就是從高頻數(shù)據(jù)中習(xí)得相關(guān)模式。很多常見的知識或事實(shí),,在訓(xùn)練數(shù)據(jù)中出現(xiàn)頻率高,,上下文之間的模式比較固定,預(yù)測的詞語概率分布就比較尖銳,,熵比較小,,大模型容易記住,并在解碼過程中輸出正確的事實(shí)或知識,。但是,,有很多事件和知識即使在非常龐大的訓(xùn)練數(shù)據(jù)中也很少出現(xiàn),,大模型便無法學(xué)習(xí)到相關(guān)模式,上下文之間的模式比較松散,,詞語預(yù)測的概率分布比較平滑,,熵比較大,大模型在推理過程中容易產(chǎn)生不確定性的隨機(jī)輸出,。這是包括ChatGPT在內(nèi)所有生成式模型的固有問題,。如果仍然延續(xù)GPT系列架構(gòu),基礎(chǔ)模型不做改變,,從理論上講是難以解決ChatGPT回復(fù)的事實(shí)可靠性問題,。和搜索引擎的結(jié)合目前看是非常務(wù)實(shí)的一種方案,搜索引擎負(fù)責(zé)搜索可靠的事實(shí)信息來源,,ChatGPT負(fù)責(zé)總結(jié)和歸納,。如果希望ChatGPT解決事實(shí)回答的可靠性問題,可能需要進(jìn)一步提升模型的拒識能力,,也就是過濾掉模型確定無法回答的那些問題,,同時(shí)還需要事實(shí)驗(yàn)證模塊來驗(yàn)證ChatGPT回復(fù)的正確性。希望下一代GPT能夠在這個(gè)問題上取得突破,。
8. ChatGPT能否實(shí)現(xiàn)實(shí)時(shí)信息的學(xué)習(xí),?
ChatGPT的交互修正能力使得它看起來似乎擁有了實(shí)時(shí)的自主學(xué)習(xí)能力。正如上述討論,,ChatGPT可以依據(jù)用戶提供的修改意圖或者更正信息,,立刻修正相關(guān)回復(fù),表現(xiàn)出實(shí)時(shí)學(xué)習(xí)的能力,。實(shí)則不然,,學(xué)習(xí)能力體現(xiàn)的是學(xué)到的知識是普適的,可以運(yùn)用在其他時(shí)間和其他場合,,但是ChatGPT并沒有展現(xiàn)出這個(gè)能力,。ChatGPT只是在當(dāng)前的對話中能夠根據(jù)用戶反饋進(jìn)行了修正,當(dāng)我們重啟一個(gè)對話,,測試相同的問題時(shí),,ChatGPT還會犯相同或類似的錯(cuò)誤。一個(gè)疑問是為何ChatGPT不將修改后正確的信息存儲到模型中呢,?這里有兩方面的問題,。首先,用戶反饋的信息并不一定是正確的,,有時(shí)候故意引導(dǎo)ChatGPT做出不合理的回答,,只是因?yàn)镃hatGPT在基于人類反饋的強(qiáng)化學(xué)習(xí)中加深了對用戶的依賴程度,所以ChatGPT在同一個(gè)對話過程中會非常相信用戶的反饋,。其次,,即使用戶反饋的信息是正確的,,但因?yàn)榭赡艹霈F(xiàn)頻率不高,基礎(chǔ)大模型不能根據(jù)低頻數(shù)據(jù)更新參數(shù),,否則大模型就會對某些長尾數(shù)據(jù)進(jìn)行過擬合從而失去通用性,。所以,讓ChatGPT實(shí)時(shí)進(jìn)行學(xué)習(xí)非常困難,,一種簡單直觀的方案就是每經(jīng)過一段時(shí)間就利用新的數(shù)據(jù)微調(diào)ChatGPT,。或者采用觸發(fā)機(jī)制,,當(dāng)多個(gè)用戶提交相同或相似反饋時(shí)觸發(fā)模型的參數(shù)更新,,從而增強(qiáng)模型的動(dòng)態(tài)學(xué)習(xí)能力。