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