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