後GPT 3.0時代,主流大模型技術精要詳解,走向AGI之路的大門已開

洋洋灑灑近三萬字,中國中文資訊學會理事、中科院軟體所博士、新浪微博機器學習團隊新技術研發負責人的張俊林回顧了大型語言模型(LLM)的發展歷程、技術迭代更新以及未來走向等方方面面的內容,並探討了通過超大 LLM 實現通用人工智慧(AGI)的可能性。

ChatGPT 出現後驚喜或驚醒了很多人。驚喜是因為沒想到大型語言模型(LLM,Large Language Model)效果能好成這樣;驚醒是頓悟到我們對 LLM 的認知及發展理念,距離世界最先進的想法,差得有點遠。我屬於既驚喜又驚醒的那一批,也是典型的中國人,中國人善於自我反思,於是開始反思,而這篇文章正是反思的結果。

實話實說,國內在 LLM 模型相關技術方面,此刻,距離最先進技術的差距進一步加大了。技術領先或技術差距這事情,我覺得要動態地以發展的眼光來看。在 Bert 出現之後的一到兩年間,其實國內在這塊的技術追趕速度還是很快的,也提出了一些很好的改進模型,差距拉開的分水嶺應該是在 GPT 3.0 出來之後,也就是 2020 年年中左右。在當時,其實只有很少的人覺察到:GPT 3.0 它不僅僅是一項具體的技術,其實體現的是 LLM 應該往何處去的一個發展理念。自此之後,差距拉得越來越遠,ChatGPT 只是這種發展理念差異的一個自然結果。所以,我個人認為,拋開是否有財力做超大型 LLM 這個因素,如果單從技術角度看,差距主要來自於對 LLM 的認知以及未來應往何處去的發展理念的不同

國內被國外技術甩得越來越遠,這個是事實,不承認也不行。前陣子網上很多人擔憂說國內 AI 現在處於 「危急存亡之秋」,我覺得倒也不至於這麼嚴重。君不見,這個世界上,具備這麼超前眼光的只有 OpenAI 一家嗎?包括 Google 在內,其實對於 LLM 發展理念的理解,明顯都落後 OpenAI 一個身位。現實是 OpenAI 表現過於優秀,把所有人都甩開了,不僅僅是國內。

我覺得,OpenAI 對 LLM 在理念及相關技術方面,領先國外的 Google、DeepMind 大約半年到一年的時間,領先國內大概兩年左右的時間。在 LLM 這個事情上,感覺梯隊很明顯,Google 應該是排在第二位,最能體現 Google 技術眼光的是 PaLM 和 Pathways,推出時間大概在 22 年 2 月到 4 月間,同一時期,OpenAI 推出的卻是 InstructGPT,從這裡就可以看出 Google 和 OpenAI 的差距了,至於為何這麼說,你看了我後面的正文後大概能理解。DeepMind 之前的重心一直在強化學習攻克遊戲和 AI for science 這些方面,切入 LLM 其實很晚,應該是 21 年才開始重視這個方向,目前也處於追趕狀態。Meta 就更不用說了,重心一直不在 LLM 上,目前感覺也發力開始追趕。這還是目前做得最好的一批機構,尚且如此,更何況國內呢?我覺得情有可原。至於 OpenAI 關於 LLM 的理念是什麼,我在本文的最後一部分,會談談我的認知。

本文梳理自 GPT 3.0 出現之後的主流 LLM 技術,在此之前的主流技術可以參考「乘風破浪的PTM,深度解讀預訓練模型的進展」。

我相信看完這兩篇文章,能夠讓您對 LLM 領域的技術脈絡,LLM 技術發展過程中出現過的不同發展理念,乃至未來可能的發展趨勢,有比較清晰的認知。當然,很多地方講的內容是我個人看法,有很大的主觀性,錯漏難免,所以還請謹慎參考。

本文試圖回答下面一些問題:ChatGPT 是否帶來了 NLP 乃至 AI 領域的研究正規化轉換?如果是,那會帶來怎樣的影響?LLM 從海量資料中學到了什麼知識?LLM 又是如何存取這些知識的?隨著 LLM 規模逐步增大,會帶來什麼影響?什麼是 In Context Learning? 為什麼它是一項很神秘的技術?它和 Instruct 又是什麼關係?LLM 具備推理能力嗎?思維鏈 CoT 又是怎麼做的?等等,相信看完,能讓您對這些問題有一個答案。

首先,在談 LLM 技術現狀前,先宏觀地談下我心目中的研究正規化轉換問題。這樣,我們才能 「先見森林,再見樹木」,對具體技術為何會是如此變化有個更清晰的認知。

潮流之巔:NLP 研究正規化的轉換

如果我們把時間線往前拉得更長一些,回到 NLP 領域的深度學習時代,在更長時間窗口內觀察技術變遷及其影響,可能會更容易看清其中的一些關鍵節點。我個人認為,在最近 10 年來 NLP 領域的技術發展過程中,可能存在兩次大的研究範型轉換。

正規化轉換 1.0: 從深度學習到兩階段預訓練模型

這個正規化轉換所涵蓋的時間範圍,大致在深度學習引入 NLP 領域(2013 年左右),到 GPT 3.0 出現之前(2020 年 5 月左右)

在 Bert 和 GPT 模型出現之前,NLP 領域流行的技術是深度學習模型,而 NLP 領域的深度學習,主要依託於以下幾項關鍵技術:以大量的改進 LSTM 模型及少量的改進 CNN 模型作為典型的特徵抽取器;以 Sequence to Sequence(或叫 encoder-decoder 亦可)+Attention 作為各種具體任務典型的總體技術框架。

在這些核心技術加持下,NLP 領域深度學習的主要研究目標,如果歸納一下,是如何有效增加模型層深或模型參數容量。就是說,怎麼才能往 encoder 和 decoder 裡不斷疊加更深的 LSTM 或 CNN 層,來達成增加層深和模型容量的目標。這種努力,儘管確實不斷增加了模型層深,但是從解決具體任務的效果角度看,總體而言,不算很成功,或者說和非深度學習方法相對,帶來的優勢不算大。

深度學習之所以不夠成功,我認為主要原因來自於兩個方面:一方面是某個具體任務有限的訓練資料總量。隨著模型容量的增加,需要靠更大量的訓練資料來支撐,否則即使你能把深度做起來,任務效果也做不上去。而在預訓練模型出現之前,很明顯這是 NLP 研究領域一個嚴重問題;另外一個方面是 LSTM/CNN 特徵抽取器,表達能力不夠強。意思是就算給你再多的資料也沒用,因為你不能有效地吸收資料裡蘊含的知識。主要應該是這兩個原因,阻礙了深度學習在 NLP 領域的成功突圍。

Bert/GPT 這兩個預訓練模型的出現,無論在學術研究角度看,還是工業應用角度來看,都代表了 NLP 領域的一個技術飛躍,並帶來了整個領域研究正規化的轉換。這種正規化轉換帶來的影響,體現在兩個方面:首先,是部分 NLP 研究子領域的衰退乃至逐步消亡;其次,NLP 不同子領域的技術方法和技術框架日趨統一,在 Bert 出現後一年左右,技術棧基本收斂到兩種技術模式中。關於這兩點,我們分頭來談。

影響一:中間任務的消亡

NLP 是一個宏觀研究領域的統稱,裡面有五花八門具體的子領域與子方向,如果仔細分析,從任務的性質角度,可以把這些任務分成兩大類:一類可以叫做 「中間任務」,一類可以稱為 「最終任務」。

典型的中間任務包括:中文分詞、詞性標註、NER、句法分析、指代消解、語義 Parser 等,這類任務一般並不解決應用中的實際需求,大多數是作為那些解決實際需求任務的中間階段或者輔助階段存在的,比如幾乎沒有需求說,我要一個句法 Parser,把這個句子的句法分析樹給使用者看看,使用者不需要看到這些 NLP 的中間階段處理結果,他只關心某個具體任務你有沒有幹好。「最終任務」 包括比如文字分類、文字相似性計算、機器翻譯、文字摘要等等,有很多。這類任務的特點是每個子領域都解決某個實際需求,任務結果基本能直接呈現給使用者,比如使用者確實存在給你一句英文,告訴他中文是什麼的需求。

按理說,「中間任務」 就不應該出現,而之所以會存在,這是 NLP 技術發展水平不夠高的一種體現。在技術發展早期階段,因為當時的技術相對落後,很難一步做好有難度的最終任務。比如機器翻譯,早期技術要做好機器翻譯是很困難的,於是科研人員就把難題分而治之,分解成分詞、詞性標註、句法分析等各種中間階段,先把每個中間階段做好,然後再拼起來完成最終任務,這也是沒辦法的事情。

但是自從 Bert/GPT 出現之後,其實就沒有必要做這些中間任務了,因為通過大量資料的預訓練,Bert/GPT 已經把這些中間任務作為語言學特徵,吸收到了 Transformer 的參數裡,此時我們完全可以端到端地直接解決那些最終任務,而無須對這種中間過程專門建模。這裡可能爭議最大的是中文分詞,其實道理也是一樣的,哪些字應該組成一個詞,這個其實你不用管,讓 LLM 自己當特徵去學就行了,只要對於解決任務有幫助,它自然會去學該學的合理分詞方式,也未必一定要和我們人類理解的分詞規則相同。

基於以上認知,其實在 Bert/GPT 一出現,你就應該得出這類 NLP 的中間階段的任務,會逐步退出歷史舞臺這個結論。

影響二:不同研究方向技術路線的統一

在說明具體影響前,我們先討論下另外一種 NLP 任務劃分方式,這對於理解後面內容有幫助。如果對 「最終任務」 進一步進行分類,又大致可以分為兩大不同類型的任務:自然語言理解類任務和自然語言生成類任務。如果排除掉 「中間任務」 的話,典型的自然語言理解類任務包括文字分類、句子關係判斷、情感傾向判斷等,這種任務本質上都是分類任務,就是說輸入一個句子(文章),或者兩個句子,模型參考所有輸入內容,最後給出屬於哪個類別的判斷。自然語言生成也包含很多 NLP 研究子方向,比如聊天機器人、機器翻譯、文字摘要、問答系統等。生成類任務的特點是給定輸入文字,對應地,模型要生成一串輸出文字。這兩者的差異主要體現在輸入輸出形式上

自從 Bert/GPT 模型誕生後,出現了明顯的技術統一趨向。首先,NLP 中不同的子領域,其特徵抽取器都逐漸從 LSTM/CNN 統一到 Transformer 上。其實,自 Bert 公開後不久,就應該意識到,這必然會成為技術趨勢。至於其原因,在幾年前我寫的這篇「張俊林:放棄幻想,全面擁抱 Transformer:自然語言處理三大特徵抽取器(CNN/RNN/TF)比較」中做了說明和分析,感興趣的同學可參考。

文章連結:https://zhuanlan.zhihu.com/p/54743941

而且,目前 Transformer 不僅統一了 NLP 諸多領域,也正在逐步地替換圖像處理各種任務中被廣泛使用的 CNN 等其它模型的進程之中,類似的,多模態模型目前也基本都採用了 Transformer 模型。這種 Transformer 從 NLP 出發,攻城略地逐步統一 AI 越來越多領域的趨勢,起始於 2020 年底出現的 Vision Transformer (ViT) ,之後蓬勃發展,到目前已大獲成功,且其繼續向更多領域拓展的勢頭會越來越迅猛。

其次,大多數 NLP 子領域的研發模式切換到了兩階段模式:模型預訓練階段 + 應用微調(Fine-tuning)或應用 Zero/Few Shot Prompt 模式。更準確地說,NLP 各種任務其實收斂到了兩個不同的預訓練模型框架裡:對於自然語言理解類任務,其技術體系統一到了以 Bert 為代表的 「雙向語言模型預訓練 + 應用 Fine-tuning」 模式;而對於自然語言生成類任務,其技術體系則統一到了以 GPT 2.0 為代表的 「自迴歸語言模型(即從左到右單向語言模型)+Zero /Few Shot Prompt」 模式。至於為何會分化成兩條技術路線,有其必然性,關於這點我們放在後面解釋。

這兩種模式,看似比較相像,但其背後蘊含了迥異的發展思路,也會導向不同的未來發展方向。不過遺憾的是,我們中的絕大多數人,在當時都低估了 GPT 這條發展路線的潛力,而把視覺中心聚焦到了 Bert 這種模式上。

正規化轉換 2.0: 從預訓練模型走向通用人工智慧 (AGI,Artificial General Intelligence)

這個正規化轉換所涵蓋的時間範圍,大致在 GPT3.0 出現之後(20 年 6 月左右),一直到目前為止,我們應該正處於這個正規化轉換過程中

ChatGPT 是觸發這次範型轉換的關鍵節點,但是在 InstructGPT 出現之前,其實 LLM 處於這次正規化轉換前的一個過渡期。

過渡期:以 GPT 3.0 為代表的 「自迴歸語言模型 + Prompting」 模式佔據統治地位

前面說過,在預訓練模型發展的早期,技術框架收斂到了 Bert 模式和 GPT 模式這兩種不同的技術範型,而且人們普遍更看好 Bert 模式一些,相當多數的後續技術改進,都是沿著 Bert 那條路走的。但是,隨著技術的繼續發展,你會發現,目前規模最大的 LLM 模型,幾乎清一色都是類似 GPT 3.0 這種 「自迴歸語言模型 + Prompting」 模式的,比如 GPT 3、PaLM、GLaM、Gopher、Chinchilla、MT-NLG、LaMDA 等,沒有例外。為什麼會這樣呢?背後一定有其必然性,我認為可能主要源於兩個原因。

首先,

首先,Google 的 T5 模型,在形式上統一了自然語言理解和自然語言生成任務的外在表現形式。如上圖所示,標為紅色的是個文字分類問題,黃色的是判斷句子相似性的迴歸或分類問題,這都是典型的自然語言理解問題。在 T5 模型裡,這些自然語言理解問題在輸入輸出形式上和生成問題保持了一致,也就是說,可以把分類問題轉換成讓 LLM 模型生成對應類別的字串,這樣理解和生成任務在表現形式就實現了完全的統一。

這說明自然語言生成任務,在表現形式上可以兼容自然語言理解任務,若反過來,則很難做到這一點。這樣的好處是:同一個 LLM 生成模型,可以解決幾乎所有 NLP 問題。而如果仍然採取 Bert 模式,則這個 LLM 模型無法很好處理生成任務。既然這樣,我們當然傾向於使用生成模型,這是一個原因。

第二個原因,如果想要以零示例提示語(zero shot prompting)或少數示例提示語(few shot prompting)的方式做好任務,則必須要採取 GPT 模式。現在已有研究(參考:On the Role of Bidirectionality in Language Model Pre-Training)證明:如果是以 fine-tuning 方式解決下游任務,Bert 模式的效果優於 GPT 模式;若是以 zero shot/few shot prompting 這種模式解決下游任務,則 GPT 模式效果要優於 Bert 模式。這說明了,生成模型更容易做好 zero shot/few shot prompting 方式的任務,而 Bert 模式以這種方式做任務,是天然有劣勢的。這是第二個原因。

但是問題來了:為什麼我們要追求 zero shot/few shot prompting 這種方式來做任務呢?要解釋清楚這個問題,我們首先需要搞清楚另外一個問題:什麼樣的 LLM 模型,對我們是最理想的?

上圖展示了一個理想的 LLM 該有的樣子。首先,LLM 應該具備強大的自主學習能力。假設我們把世界上能獲得的所有文字或者圖片等不同類型的資料餵給它,它應該能夠自動從中學習到裡面包含的所有知識點,學習過程不需要人的介入,並且能靈活應用所學知識,來解決實際問題。因為資料是海量的,要吸收所有知識,就要非常多的模型參數來儲存知識,所以這個模型必然會是一個巨無霸模型。

其次,LLM 應該能解決 NLP 任何子領域的問題,而不僅支持有限領域,甚至它應該可以響應 NLP 之外其它領域的問題,最好是任意領域的問題都能得到很好地回答

再者,當我們使用 LLM 解決某個具體領域問題的時候,應該用我們人類習慣的表達方式,就是說 LLM 應該理解人類的命令。這體現出讓 LLM 適配人,而不是反過來,讓人去適配 LLM 模型。人適配 LLM 的典型例子,比如絞盡腦汁去嘗試各種不同的 prompt,以試圖找到好的提示語,才能很好地解決手頭問題。關於這點,上圖在人類和 LLM 互動的接口層,舉了幾個例子,說明什麼是好的人使用 LLM 模型的接口形式。

看完這個理想中的 LLM,我們再回頭解釋上面遺留的問題:為什麼我們要追求 zero shot/few shot prompting 這種方式來做任務呢?有兩個原因。

第一,這個 LLM 模型規模必然非常巨大,有能力作出這個模型,或改動這個模型參數的機構必然很少。而任務需求方是千千萬萬的中小機構甚至是個人,就算你把模型開源出來,他們也無力部署這個模型,更不用說再用 Fine-tuning 這種模式去修改模型參數了。所以,我們應該追求不修正模型參數,就能讓任務需求方完成任務的方式,也就是應該採取 prompt 模式完成任務,而非 Fine-tuning 模式(由此可看出,soft prompting 技術方向是違背這個發展趨勢的)。模型製作方則將 LLM 作成公用服務,以 LLM as Service 的模式運行。作為服務支持方,考慮到千變萬化的使用者需求,所以 LLM 模型製作方更要追求讓 LLM 能完成儘可能多類型的任務,這是附帶的影響,也是為何超級大模型一定會追求走向 AGI 的現實因素。

第二,zero shot prompting 也好,few shot prompting 也好,甚至促進 LLM 推理能力的思維鏈(CoT,Chain of Thought)Prompting 也好,就是上圖中接口層中的現有技術。具體而言,zero shot prompting 的初衷,其實就是人類和 LLM 的理想接口,直接用人類所習慣的任務表述方式讓 LLM 做事情,但是發現 LLM 並不能很好地理解,效果也不好。經過繼續研究,轉而發現:對於某項任務,如果給 LLM 幾個示例,用這些示例來代表任務描述,效果會比 zero shot prompting 好,於是大家都去研究更好的 few shot prompting 技術。可以理解為,本來我們希望 LLM 能夠用人類常用的命令方式來執行某個任務,但是目前技術還做不到,所以退而求其次,用這些替代技術來表達人類的任務需求。

如果理解了上述邏輯,很容易得出如下結論:few shot prompting(也被稱為 In Context Learning)只是一種過渡時期的技術。如果我們能夠更自然地去描述一個任務,而且 LLM 可以理解,那麼,我們肯定會毫不猶豫地拋棄這些過渡期的技術,原因很明顯,用這些方法來描述任務需求,並不符合人類的使用習慣。

這也是為何我將 GPT 3.0+Prompting 列為過渡期技術的原因,ChatGPT 的出現,改變了這個現狀,用 Instruct 取代了 Prompting,由此帶來新的技術正規化轉換,併產生若干後續影響。

影響一:讓 LLM 適配人的新型互動接口

在理想 LLM 的背景下,我們再來看 ChatGPT,能更好理解它的技術貢獻。ChatGPT 應該是目前所有的現有技術裡,最接近理想 LLM 的技術方法。如果歸納下 ChatGPT 最突出特點的話,我會用下面八個字:「能力強大,善解人意」。

「能力強大」 這一點,我相信應該主要歸功於 ChatGPT 所依託的基礎 LLM GPT3.5。因為 ChatGPT 儘管加入了人工標註資料,但是量級只有數萬,這個規模的資料量,和訓練 GPT 3.5 模型使用的幾千億 token 級別的資料量相比,包含的世界知識(資料中包含的事實與常識)可謂滄海一粟,幾可忽略,基本不會對增強 GPT 3.5 的基礎能力發揮什麼作用。所以它的強大功能,應該主要來自於隱藏在背後的 GPT 3.5。GPT 3.5 對標理想 LLM 模型中的那個巨無霸模型。

那麼,ChatGPT 向 GPT 3.5 模型注入新知識了嗎?應該是注入了,這些知識就包含在幾萬人工標註資料裡,不過注入的不是世界知識,而是人類偏好知識。所謂 「人類偏好」,包含幾方面的含義:首先,是人類表達一個任務的習慣說法。比如,人習慣說:「把下面句子從中文翻譯成英文」,以此表達一個 「機器翻譯」 的需求,但是 LLM 又不是人,它怎麼會理解這句話到底是什麼意思呢?你得想辦法讓 LLM 理解這句命令的含義,並正確執行。所以,ChatGPT 通過人工標註資料,向 GPT 3.5 注入了這類知識,方便 LLM 理解人的命令,這是它 「善解人意」 的關鍵。其次,對於什麼是好的回答,什麼是不好的回答,人類有自己的標準,例如比較詳細的回答是好的,帶有歧視內容的回答是不好的,諸如此類。這是人類自身對回答質量好壞的偏好。人通過 Reward Model 反饋給 LLM 的資料裡,包含這類資訊。總體而言,ChatGPT 把人類偏好知識注入 GPT 3.5,以此來獲得一個聽得懂人話、也比較禮貌的 LLM。

可以看出,ChatGPT 的最大貢獻在於:基本實現了理想 LLM 的接口層,讓 LLM 適配人的習慣命令表達方式,而不是反過來讓人去適配 LLM,絞盡腦汁地想出一個能 Work 的命令(這就是 instruct 技術出來之前,prompt 技術在做的事情),而這增加了 LLM 的易用性和使用者體驗。是 InstructGPT/ChatGPT 首先意識到這個問題,並給出了很好的解決方案,這也是它最大的技術貢獻。相對之前的 few shot prompting,它是一種更符合人類表達習慣的人和 LLM 進行互動的人機接口技術。

而這必將啟發後續的 LLM 模型,繼續在易用人機接口方面做進一步的工作,讓 LLM 更聽話。

影響二:很多 NLP 子領域不再具備獨立研究價值

就 NLP 領域而言,這次正規化轉換,意味著很多目前獨立存在的 NLP 研究領域,將被納入 LLM 的技術體系,進而不再獨立存在,逐步消失。經過第一次正規化轉換,儘管 NLP 中很多 「中間任務」,繼續作為獨立研究領域存在不再必要,但是大多數 「最終任務」,仍然是以獨立研究領域存在的,只是切換成在 「預訓練 + fine-tuning」 框架下,面對領域獨有問題,陸續提出新的改進方案。

目前研究表明,很多 NLP 任務,隨著 LLM 模型規模增長,效果會大幅提升。據此,我覺得可得到如下推論:大多數某領域所謂 「獨有」 的問題,大概率只是缺乏領域知識導致的一種外在表象,只要領域知識足夠多,這個所謂領域獨有的問題,就可以被很好地解決掉,其實並不需要專門針對某個具體領域問題,冥思苦想去提出專用解決方案。也許 AGI 的真相超乎意料地簡單:你只要把這個領域更多的資料交給 LLM,讓它自己學習更多知識即可。

在這個背景下,同時,ChatGPT 證明了我們現在是可以直接去追求理想 LLM 模型的,那麼,未來的技術發展趨勢應該是:追求規模越來越大的 LLM 模型,通過增加預訓練資料的多樣性,來涵蓋越來越多的領域,LLM 自主從領域資料中通過預訓練過程學習領域知識,隨著模型規模不斷增大,很多問題隨之得到解決。研究重心會投入到如何構建這個理想 LLM 模型,而非去解決某個領域的具體問題。這樣,越來越多 NLP 的子領域會被納入 LLM 的技術體系,進而逐步消失。

我認為,判斷某個具體領域是否該立即停止獨立研究,其判斷標準可採取以下兩種方法,佔其一即可:第一,判斷某個任務,是否 LLM 的研究效果超過人類表現,對於那些 LLM 效果超過人類的研究領域,已無獨立研究的必要。舉個例子,GLUE 與 SuperGLUE 測試集合裡的很多工,目前 LLM 效果已超過人類表現,與這個資料集合密切相關的研究領域,其實就沒有繼續獨立存在的必要。第二,對比兩種模式的任務效果,第一種模式是用較大的領域專用資料進行 Fine-tuning,第二種是 few-shot prompting 或 instruct-based 方法。如果第二種方法效果達到或超過第一種方法,則意味著這個領域沒有繼續獨立存在的必要性。如果用這個標準來看,其實很多研究領域,目前 fine-tuning 效果還是佔優的(因為這種模式領域訓練資料量大),看似還可獨立存在。但是考慮到很多工隨著模型規模增大,few shot prompting 效果持續增長,隨著更大模型的出現,這個拐點很可能短期就會達到。

如果上述猜測成立,將意味著如下殘酷事實:對於很多 NLP 領域的研究人員,將面臨往何處去的選擇,是繼續做領域獨有問題呢?還是放棄這種看似前途不大的方式,轉而去建設更好的 LLM?如果選擇轉向去建設 LLM,又有哪些機構有能力、有條件去做這個事情呢?你對這個問題的回答會是什麼呢?

影響三:更多 NLP 之外的研究領域將被納入 LLM 技術體系

如果站在 AGI 的視角,參照之前描述的理想 LLM 模型,它所能完成的任務,不應侷限於 NLP 領域,或某一兩個學科領域,理想中的 LLM 應該是領域無關的通用人工智慧模型,它現在在某一兩個領域做得好,不代表只能做這些任務。ChatGPT 的出現,證明了現在這個時期,我們去追求 AGI 是有可行性的,而現在是拋開 「領域學科」 這個思維束縛的時候了。

ChatGPT 除了展示出以流暢的對話形式解決各種 NLP 任務外,也具備強大的程式碼能力。很自然的,之後越來越多其它的研究領域,也會被逐步納入 LLM 體系中,成為通用人工智慧的一部分

LLM 從 NLP 向外進行領域拓展,一個自然的選擇就是圖像處理及多模態相關任務。目前已經有些工作在嘗試把多模態融入,讓 LLM 成為一個支持多模態輸入輸出的通用人機接口,典型的例子包括 DeepMind 的 Flamingo 和微軟的 「Language Models are General-Purpose Interfaces」,上圖展示了這種方式的概念結構。

我的判斷是無論是圖像還是多模態,未來被融入 LLM 成為好用的功能,可能比我們想象的進度要慢。主要原因在於:儘管圖像領域最近兩年也一直在模仿 Bert 預訓練的路子,嘗試引入自監督學習,釋放模型自主從圖像資料中學習知識的能力,典型技術就是 「對比學習」 和 MAE,這是兩條不同的技術路線。然而,從目前效果來看,儘管取得了很大的技術進步,但貌似這條路尚未走通,這體現在圖像領域預訓練模型應用到下游任務,帶來的效果收益,遠不如 Bert 或 GPT 應用在 NLP 下游任務那樣顯著。所以,圖像預處理模型仍需深入探索,以釋放圖像資料的潛力,而這會遲滯它們被統一到 LLM 大模型的時間。當然,如果哪天這條路被趟通,大概率會復現 NLP 領域目前的局面,就是圖像處理各個研究子領域可能會逐步消失,被融入到大型 LLM 中來,直接完成終端任務。

除了圖像與多模態,很明顯,其它領域也會逐漸被納入到理想 LLM 中來,這個方向方興未艾,是具備高價值的研究主題。

以上是我對正規化轉換的個人思考,接下來,我們來梳理下 GPT 3.0 之後 LLM 模型的主流技術進展。如理想 LLM 模型所示,相關的技術其實可以分為兩大類;一類是關於 LLM 模型如何從資料中吸收知識,也包括模型規模增長對 LLM 吸收知識能力帶來的影響;第二類是關於人如何使用 LLM 內在能力來解決任務的人機接口,包括 In Context Learning 和 Instruct 兩種模式。思維鏈(CoT)prompting 這種 LLM 推理技術,本質上也屬於 In Context Learning,因為比較重要,我就把它們單獨拎出來講一下。

學習者:從無盡資料到海量知識

從目前研究結果看,Transformer 是足夠強大的特徵抽取器,尚不需要做特別的改進。那麼通過預訓練過程,Transformer 學到了什麼?知識是如何存取的?我們又如何修正錯誤知識?本節講述這方面的研究進展。

求知之路:LLM 學到了什麼知識

LLM 從海量自由文字中學習了大量知識,如果把這些知識做粗略分類的話,可以分為語言類知識和世界知識兩大類

語言類知識指的是詞法、詞性、句法、語義等有助於人類或機器理解自然語言的知識。關於 LLM 能否捕獲語言知識有較長研究歷史,自從 Bert 出現以來就不斷有相關研究,很早就有結論,各種實驗充分證明 LLM 可以學習各種層次類型的語言學知識,這也是為何使用預訓練模型後,各種語言理解類自然語言任務獲得大幅效果提升的最重要原因之一。另外,各種研究也證明了淺層語言知識比如詞法、詞性、句法等知識儲存在 Transformer 的低層和中層,而抽象的語言知識比如語義類知識,廣泛分佈在 Transformer 的中層和高層結構中。

世界知識指的是在這個世界上發生的一些真實事件(事實型知識,Factual Knowledge),以及一些常識性知識 (Common Sense Knowledge)。比如 「拜登是現任美國總統」、「拜登是美國人」、「烏克蘭總統澤倫斯基與美國總統拜登舉行會晤」,這些都是和拜登相關的事實類知識;而 「人有兩隻眼睛」、「太陽從東方升起」 這些屬於常識性知識。關於 LLM 模型能否學習世界知識的研究也有很多,結論也比較一致:LLM 確實從訓練資料中吸收了大量世界知識,而這類知識主要分佈在 Transformer 的中層和高層,尤其聚集在中層。而且,隨著 Transformer 模型層深增加,能夠學習到的知識數量逐漸以指數級增加(可參考:BERTnesia: Investigating the capture and forgetting of knowledge in BERT)。其實,你把 LLM 看作是一種以模型參數體現的隱式知識圖譜,如果這麼理解,我認為是一點問題也沒有的。

「When Do You Need Billions of Words of Pre-training Data?」 這篇文章研究了預訓練模型學習到的知識量與訓練資料量的關係,它的結論是:對於 Bert 類型的語言模型來說,只用 1000 萬到 1 億單詞的語料,就能學好句法語義等語言學知識,但是要學習事實類知識,則要更多的訓練資料。這個結論其實也是在意料中的,畢竟語言學知識相對有限且靜態,而事實類知識則數量巨大,且處於不斷變化過程中。而目前研究證明了隨著增加訓練資料量,預訓練模型在各種下游任務中效果越好,這說明了從增量的訓練資料中學到的更主要是世界知識。

記憶之地:LLM 如何存取知識

由上可知,LLM 確實從資料中學到了很多語言類及世界知識。那麼,對於某條具體的知識,LLM 把它儲存到了哪裡?又是如何提取出來的?這也是一個有意思的問題

顯然,知識一定儲存在 Transformer 的模型參數裡。從 Transformer 的結構看,模型參數由兩部分構成:多頭注意力(MHA)部分佔了大約參數總體的三分之一,三分之二的參數集中在 FFN 結構中。MHA 主要用於計算單詞或知識間的相關強度,並對全局資訊進行集成,更可能是在建立知識之間的聯繫,大概率不會儲存具體知識點,那麼很容易推論出 LLM 模型的知識主體是儲存在 Transformer 的 FFN 結構裡。

但這樣的定位,粒度還是太粗,無法很好回答具體某條知識是如何儲存與提取的,比如 「中國的首都是北京」 這條知識,以三元組表達就是 < 北京,is-capital-of,中國 >,其中 「is-capital-of」 代表實體間關係。這條知識它儲存在 LLM 的哪裡呢?

「Transformer Feed-Forward Layers Are Key-Value Memories」 給出了一個比較新穎的觀察視角,它把 Transformer 的 FFN 看成儲存大量具體知識的 Key-Value 儲存器。如上圖所示(圖左是原始論文圖,其實不太好理解,可以看做了註釋的圖右,更好理解些),FFN 的第一層是個 MLP 寬隱層,這是 Key 層;第二層是 MLP 窄隱層,是 Value 層。FFN 的輸入層其實是某個單詞對應的 MHA 的輸出結果 Embedding,也就是通過 Self Attention,將整個句子有關的輸入上下文集成到一起的 Embedding,代表了整個輸入句子的整體資訊。

Key 層的每個神經元節點,記載了一對 < Key,Value > 資訊。比如對於上圖中 FFN 第一個隱層的第

個節點

個節點

個節點

,也許就是它記載了 < 北京,is-capital-of,中國 > 這條知識。

節點對應的 key 向量,其實指的是節點

和輸入層每個節點的權重向量;而對應的 Value 向量,指的是節點

和 FFN 第二層的 Value 層每個節點形成連接的權重向量。每個神經元的 Key 向量,用於識別輸入中的某種語言或者知識模式,是一種模式探測器。如果輸入中包含它要檢測的某種模式,那麼輸入向量和

節點的 key 權重進行向量內積計算,加上 Relu,形成

的大數值響應,意味著

的大數值響應,意味著

的大數值響應,意味著

檢測到了這個模式,於是再把這個響應值,通過

節點的 Value 權重向量向 FFN 第二層傳播。這等價於將 Value 向量的值,用響應值加權,然後傳遞並體現到第二層 Value 層每個節點的輸出上。如此這般,FFN 的正向傳播計算過程,看起來就像是通過 Key 檢測到某種知識模式,然後取出對應的 Value,並把 Value 體現在 FFN 的第二層輸出上。當然,FFN 第二層每個節點,會收集 FFN 的 Key 層所有節點資訊,所以是一種混合響應,而 Value 層所有節點的混合響應,可以解讀為代表輸出單詞的概率分佈資訊。

聽著可能還是比較複雜,我們用個極端的例子來說明。我們假設上圖的節點

就是記載 < 北京,is-capital-of,中國 > 這條知識的 Key-Value 儲存器,它的 Key 向量,用於檢測」 中國的首都是…」 這個知識模式,它的 Value 向量,基本儲存了與單詞 「北京」 的 Embedding 比較接近的向量。當 Transformer 的輸入是 「中國的首都是 [Mask]」 的時候,

節點從輸入層探測到這個知識模式,所以產生較大的響應輸出。我們假設 Key 層其它神經元對這個輸入都沒有任何響應,那麼對應的 Value 層的節點,其實只會接收到 「北京」 這個 Value 對應的單詞 embedding,並通過

的大響應值,進行了進一步的數值放大。於是,Mask 位置對應的輸出,就自然會輸出 「北京」 這個單詞。基本就是這麼個過程,看著很複雜,其實很簡單。

而且這篇文章還指出,Transformer 低層對句子的表層模式作出反應,高層對語義模式作出反應,就是說低層 FFN 儲存詞法、句法等表層知識,中層和高層儲存語義及事實概念知識,這和其它研究結論是一致的。

要我猜,把 FFN 看成 Key-Value 儲存器這種思路,很可能不是最終的正確答案,但是距離最終正確答案的距離,估計也不太遠。

知識塗改液:如何修正 LLM 裡儲存的知識

既然我們已知具體的某條世界知識儲存在某個或者某些 FFN 節點的參數裡,自然會引發另外一個問題:我們能否修正 LLM 模型裡儲存的錯誤或者過時的知識呢?比如對於問題:「英國的現任首相是誰?」 鑑於近年來英國首相頻繁更迭,你猜 LLM 更傾向輸出 「鮑里斯」 還是更青睞 「蘇納克」?很明顯訓練資料中包含 「鮑里斯」 的資料會更多,這種情況很大可能 LLM 會給出錯誤回答,於是我們就有修正 LLM 裡儲存的過時知識的必要性。

如果歸納下,目前有三類不同方法來修正 LLM 裡蘊含的知識:

第一類方法從訓練資料的源頭來修正知識。「Towards Tracing Factual Knowledge in Language Models Back to the Training Data」 這篇文章的研究目標是:對於指定的某條知識,我們是否可以定位到是哪些訓練資料導致 LLM 學會了這條知識?答案是肯定的,這意味著我們可以逆向追蹤到某條知識對應的訓練資料來源頭。如果利用這項技術,假設我們想要刪除某條知識,則可首先定位到其對應的資料來源頭,刪除資料來源,然後重新預訓練整個 LLM 模型,這樣即可達成刪除 LLM 中相關知識的目的。但是這裡有個問題,如果修正一小部分知識,我們就需要重新做一次模型預訓練,這樣做明顯成本太高。所以這種方法不會太有發展前景,可能比較適合那種對於某個特定類別資料的一次性大規模刪除場合,不適合少量多次的常規知識修正場景,比如可能比較適合用來做去除偏見等去 toxic 內容的處理。

第二類方法是對 LLM 模型做一次 fine-tuning 來修正知識。一個直觀能想到的方法是:我們可以根據要修正成的新知識來構建訓練資料,然後讓 LLM 模型在這個訓練資料上做 fine-tuning,這樣指導 LLM 記住新的知識,遺忘舊的知識。這個方法簡單直觀,但是也有一些問題,首先它會帶來災難遺忘問題,就是說除了忘掉該忘的知識,還忘掉了不該忘的知識,導致這麼做了之後有些下游任務效果下降。另外,因為目前的 LLM 模型規模非常大,即使是做 fine-tuning,如果次數頻繁,其實成本也相當高。對這種方法感興趣的可以參考 「Modifying Memories in Transformer Models」。

另外一類方法直接修改 LLM 裡某些知識對應的模型參數來修正知識。假設我們想要把舊知識 < 英國,現任首相,鮑里斯 >,修正到 < 英國,現任首相,蘇納克 >。首先我們想辦法在 LLM 模型參數中,定位到儲存舊知識的 FFN 節點,然後可以強行調整更改 FFN 中對應的模型參數,將舊知識替換成新的知識。可以看出,這種方法涉及到兩項關鍵技術:首先是如何在 LLM 參數空間中定位某條知識的具體儲存位置;其次是如何修正模型參數,來實現舊知識到新知識的修正。關於這類技術的細節,可以參考 「Locating and Editing Factual Associations in GPT」 和 「Mass-Editing Memory in a Transformer」。理解這個修正 LLM 知識的過程,其實對於更深入理解 LLM 的內部運作機制是很有幫助的。

規模效應:當 LLM 越來越大時會發生什麼

我們知道,近年來,LLM 模型規模在快速增長,目前效果最好的 LLM 模型,其參數規模大都超過了千億(100B)參數規模。比如,OpenAI 的 GPT 3 的規模為 175B,Google 的 LaMDA 規模為 137B,PaLM 的規模為 540B,DeepMind 的 Gogher 規模為 280B 等,不一而足。國內也有中文巨型模型,比如智源 GLM 規模 130B,華為 「盤古」 規模 200B,百度 「文心」 規模 260B,浪潮 「源 1.0」 規模 245B。那麼,一個很自然的問題就是:隨著 LLM 模型規模不斷增長,會發生些什麼呢?

預訓練模型的應用往往是兩階段的:預訓練階段,及具體場景應用階段。在預訓練階段,其最佳化目標是交叉熵,對 GPT 這種自迴歸語言模型來說,也就是看 LLM 是否正確預測到了下一個單詞;而場景應用階段,一般要看具體場景的評價指標。一般我們的直覺是:如果 LLM 模型在預訓練階段的指標越好,自然它解決下游任務的能力就越強。然而,事實並非完全如此。現有研究已證明,預訓練階段的最佳化指標確實和下游任務表現出正相關關係,但是並非完全正相關。也就是說,只看預訓練階段的指標,來判斷一個 LLM 模型是否夠好,這是不夠的。基於此,我們分頭來看在這兩個不同階段,隨著 LLM 模型增大,有什麼影響。

首先,我們先看在預訓練階段,隨著模型規模逐步增大,會發生什麼。OpenAI 在 「Scaling Laws for Neural Language Models」 中專門研究了這個問題,並提出 LLM 模型所遵循的 「伸縮法則」(scaling law)。如上圖所示,這個研究證明:當我們獨立增加訓練資料量、模型參數規模或者延長模型訓練時間(比如從 1 個 Epoch 到 2 個 Epoch),預訓練模型在測試集上的 Loss 都會單調降低,也就是說模型效果越來越好

既然三個因素都重要,那麼我們在實際做預訓練的時候,就有一個算力如何分配的決策問題:假設用於訓練 LLM 的算力總預算(比如多少 GPU 小時或者 GPU 天)給定,那麼是應該多增加資料量、減少模型參數呢?還是說資料量和模型規模同時增加,減少訓練步數呢?此消彼長,某個要素規模增長,就要降低其它因素的規模,以維持總算力不變,所以這裡有各種可能的算力分配方案。最終 OpenAI 選擇了同時增加訓練資料量和模型參數,但是採用早停策略 (early stopping) 來減少訓練步數的方案。因為它證明了:對於訓練資料量和模型參數這兩個要素,如果只單獨增加其中某一個,這不是最好的選擇,最好能按照一定比例同時增加兩者,它的結論是優先增加模型參數,然後才是訓練資料量。假設用於訓練 LLM 的算力總預算增加了 10 倍,那麼應該增加 5.5 倍的模型參數量,1.8 倍的訓練資料量,此時模型效果最佳。

DeepMind 的一項研究(參考:Training Compute-Optimal Large Language Models)更深入地探究了這個問題,其基本結論和 OpenAI 的結論差不多,比如確實需要同時增加訓練資料量和模型參數,模型效果才會更好。而很多大模型在做預訓練的時候,並沒有考慮這一點,很多 LLM 大模型只是單調增加模型參數,而固定住了訓練資料量,這個做法其實是不對的,限制了 LLM 模型的潛力。但是它修正了兩者的比例關係,認為訓練資料量和模型參數是同等重要的,也就是說,假設用於訓練 LLM 的算力總預算增加了 10 倍,那麼應該增加 3.3 倍的模型參數量,3.3 倍的訓練資料量,這樣模型效果才最好。

這意味著:增加訓練資料量的重要性,比我們之前所認為的,還要重要。基於這個認知,DeepMind 在設計 Chinchilla 模型時,在算力分配上選擇了另外一種配置:對標資料量 300B、模型參數量 280B 的 Gopher 模型,Chinchilla 選擇增加 4 倍的訓練資料,但是將模型參數降低為 Gopher 的四分之一,大約為 70B。但是無論預訓練指標,還是很多下游任務指標,Chinchilla 效果都要優於規模更大的 Gopher。

這帶給我們如下啟示:我們可以選擇放大訓練資料,並同比例地減少 LLM 模型參數,以達到在不降低模型效果的前提下,極大縮小模型規模的目的。縮小模型規模有很多好處,比如在應用的時候,推理速度會快很多等,無疑這是一個很有前途的 LLM 發展路線

以上是從預訓練階段來看模型規模的影響,如果從 LLM 解決下游具體任務效果的角度來看,隨著模型規模增大,不同類型的任務有不同的表現,具體而言,有以下三類情況。

第一類任務完美體現了 LLM 模型的 scaling law,就是說隨著模型規模逐步放大,任務的表現越來越好,如上圖裡的(a)圖所示。這類任務通常符合如下共性:它們往往都是知識密集型任務,也就是說如果 LLM 模型包含的知識量越多,這類任務表現越好。而很多研究已經證明越大的 LLM 模型學習效率越高,也就是說相同訓練資料量,模型越大任務效果越好,說明面對的即使是同樣的一批訓練資料,更大的 LLM 模型相對規模小一些的模型,從中學到了更多的知識。更何況一般情況下,在增大 LLM 模型參數的時候,往往會同步增加訓練資料量,這意味著大模型可以從更多資料中學習更多的知識點。這些研究可以很好地解釋上圖,為何隨著模型規模增大,這些知識密集型的任務效果越來越好。大多數傳統的自然語言理解類任務,其實都屬於這種知識密集型任務,而很多工在近兩年獲得了極大的效果提升,甚至超過了人類表現。很明顯,這大概率是 LLM 模型的規模增長帶來的,而非歸功於某項具體的技術改進。

第二類任務展現出 LLM 具備某種 「湧現能力(Emergent Ability)」,如上圖(b)所示。所謂 「湧現能力」,指的是當模型參數規模未能達到某個閥值時,模型基本不具備解決此類任務的任何能力,體現為其性能和隨機選擇答案效果相當,但是當模型規模跨過閥值,LLM 模型對此類任務的效果就出現突然的性能增長。也就是說,模型規模是解鎖 (unlock) LLM 新能力的關鍵,隨著模型規模越來越大,會逐漸解鎖 LLM 越來越多的新能力。這是個很神奇的現象,因為它意味著如下讓人對未來可報樂觀預期的可能:或許很多工,目前 LLM 還不能很好地解決,甚至站在現在這個時刻的我們看起來,LLM 完全沒有能力解決這類任務,但因 LLM 具備 「湧現能力」,所以如果我們繼續推大模型,也許某一天它的這項能力就被突然解鎖了。LLM 模型的規模增長會給我們帶來意想不到的精彩禮物。

「Beyond the Imitation Game: Quantifying and extrapolating the capabilities of language models」 這篇文章指出,這類體現出 「湧現能力」 的任務也有一些共性:這些任務一般由多步驟構成,要解決這些任務,往往需要先解決多個中間步驟,而邏輯推理能力在最終解決這類任務中發揮重要作用。思維鏈(Chain of Thought)Prompting 是典型的增強 LLM 推理能力的技術,能大幅提升此類任務的效果,關於 CoT 技術,在隨後小節內容會做解釋,此處暫不展開。

問題是,為何 LLM 會出現這種 「湧現能力」 現象呢?上述文章以及 「Emergent Abilities of Large Language Models」 給出了幾個可能的解釋:

一種可能解釋是有些任務的評價指標不夠平滑。比如說有些生成任務的判斷標準,它要求模型輸出的字串,要和標準答案完全匹配才算對,否則就是 0 分。所以,即使隨著模型增大,其效果在逐步變好,體現為輸出了更多的正確字符片段,但是因為沒有完全對,只要有任何小錯誤都給 0 分,只有當模型足夠大,輸出片段全部正確才能得分。也就是說,因為指標不夠平滑,所以不能體現 LLM 其實正在逐步改善任務效果這一現實,看起來就是 「湧現能力」 這種外在表現。

另外一種可能的解釋是:有些任務由若干中間步驟構成,隨著模型規模增大,解決每個步驟的能力也在逐步增強,但是隻要有一個中間步驟是錯的,最終答案就是錯的,於是也會導致這種表面的 「湧現能力」 現象。

當然,上面的解釋目前還都是猜想,至於為何 LLM 會出現這種現象,還需要進一步更深入的研究。

還有少部分任務,隨著模型規模增長,任務的效果曲線展現出 U 形特性:隨著模型規模逐漸變大,任務效果逐漸變差,但是當模型規模進一步增長,則效果開始越來越好,呈現出 U 形增長趨勢,如上圖所示的粉紅色 PaLM 模型在兩個任務上的指標走勢。為何這些任務表現得如此特殊呢?「Inverse scaling can become U-shaped」 這篇文章給出了一種解釋:這些任務,內部其實隱含了兩種不同類型的子任務,一種是真正的任務,另外一種是 「干擾任務(distractor task)」。當模型規模小的時候,無法識別任意一種子任務,所以模型的表現跟隨機選擇答案差不多,當模型增長到中等規模的時候,主要執行的是干擾任務,所以對真正的任務效果有負面影響,體現為真正任務效果的下降,而當進一步增加模型規模,則 LLM 可以忽略干擾任務,執行真正的任務,體現為效果開始增長。

對於那些隨著模型規模增大,效果一直下降的任務,如果採用思維鏈(CoT)Prompting,則部分任務的表現轉換為遵循 Scaling law,即模型規模越大效果越好,而其它任務則轉換為 U 性增長曲線。這其實側面說明了:此類任務應屬於推理類型的任務,所以加入 CoT 後任務表現會發生質的變化。

人機接口:從 In Context Learning 到 Instruct 理解

一般我們經常提到的人和 LLM 的接口技術包括:zero shot prompting、few shot prompting、In Context Learning,以及 Instruct。這些其實都是表達某個具體任務的描述方式。不過如果你看文獻,會發現叫法比較亂。

其中 Instruct 是 ChatGPT 的接口方式,就是說人以自然語言給出任務的描述,比如 「把這個句子從中文翻譯成英文」,類似這種。zero shot prompting 我理解其實就是現在的 Instruct 的早期叫法,以前大家習慣叫 zero shot,現在很多改成叫 Instruct。儘管是一個內涵,但是具體做法是兩種做法。早期大家做 zero shot prompting,實際上就是不知道怎麼表達一個任務才好,於是就換不同的單詞或者句子,反覆在嘗試好的任務表達方式,這種做法目前已經被證明是在擬合訓練資料的分佈,其實沒什麼意思。目前 Instruct 的做法則是給定命令表述語句,試圖讓 LLM 理解它。所以儘管表面都是任務的表述,但是思路是不同的。

而 In Context Learning 和 few shot prompting 意思類似,就是給 LLM 幾個示例作為範本,然後讓 LLM 解決新問題。我個人認為 In Context Learning 也可以理解為某項任務的描述,只是 Instruct 是一種抽象的描述方式,In Context Learning 是一種例子示範的例子說明法。當然,鑑於目前這幾個叫法用的有點亂,所以上述理解僅代表個人看法。

所以我們此處只對 In Context Learning 和 Instruct 進行介紹,不再提 zero shot 和 few shot 了。

神秘的 In Context Learning

如果你細想,會發現 In Context Learning 是個很神奇的技術。它神奇在哪裡呢?神奇在你提供給 LLM 幾個樣本示例

,然後給它

,然後給它

,LLM 竟然能夠成功預測對應的

,LLM 竟然能夠成功預測對應的

,LLM 竟然能夠成功預測對應的

。聽到這你會反問:這有什麼神奇的呢?Fine-tuning 不就是這樣工作的嗎?你要這麼問的話,說明你對這個問題想得還不夠深入。

Fine-tuning 和 In Context Learning 表面看似都提供了一些例子給 LLM,但兩者有質的不同(參考上圖示意):Fine-tuning 拿這些例子當作訓練資料,利用反向傳播去修正 LLM 的模型參數,而修正模型參數這個動作,確實體現了 LLM 從這些例子學習的過程。但是,In Context Learning 只是拿出例子讓 LLM 看了一眼,並沒有根據例子,用反向傳播去修正 LLM 模型參數的動作,就要求它去預測新例子。既然沒有修正模型參數,這意味著貌似 LLM 並未經歷一個學習過程,如果沒有經歷學習過程,那它為何能夠做到僅看一眼,就能預測對新例子呢?這正是 In Context Learning 的神奇之處。這是否讓你想起了一句歌詞:「只是因為在人群中多看了你一眼 再也沒能忘掉你容顏」,而這首歌名叫 「傳奇」。你說傳奇不傳奇?

看似 In Context Learning 沒從例子裡學習知識,實際上,難道 LLM 通過一種奇怪的方式去學習?還是說,它確實也沒學什麼?關於這個問題的答案,目前仍是未解之謎。現有一些研究各有各的說法,五花八門,很難判斷哪個講述的是事實的真相,甚至有些研究結論還相互矛盾。這裡提供幾個目前的說法,至於誰對誰錯,只能你自己把握了。當然,我認為追求這個神奇現象背後的真相,是一個好的研究課題。

試圖證明 In Context Learning 沒有從例子中學習的工作是 「Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?」。它發現了:在提供給 LLM 的樣本示例

中,

中,

是否

是否

是否

對應的正確答案,其實並不重要,如果我們把正確答案

替換成隨機的另外一個答案

替換成隨機的另外一個答案

替換成隨機的另外一個答案

,這並不影響 In Context Learning 的效果。這起碼說明了一點:In Context Learning 並沒有提供給 LLM 那個從

對映到

對映到

的對映函數資訊

的對映函數資訊:

的對映函數資訊

,否則的話你亂換正確標籤,肯定會擾亂這個

對映函數。也就是說,In Context Learning 並未學習這個輸入空間到輸出空間的對映過程。

真正對 In Context Learning 影響比較大的是:

的分佈,也就是輸入文字

的分佈,也就是輸入文字

的分佈和候選答案

的分佈和候選答案

有哪些,如果你改變這兩個分佈,比如把

有哪些,如果你改變這兩個分佈,比如把

有哪些,如果你改變這兩個分佈,比如把

替換成候選答案之外的內容,則 In Context Learning 效果急劇下降。

總之,這個工作證明了 In Context Learning 並未學習對映函數,但是輸入和輸出的分佈很重要,這兩個不能亂改。

有些工作認為 LLM 還是從給出的示例學習了這個對映函數

,不過是種隱式地學習。比如 「What learning algorithm is in-context learning? Investigations with linear models」 認為 Transformer 能夠隱式地從示例中學習

的對映過程,它的激活函數中包含了一些簡單對映函數,而 LLM 通過示例能夠激發對應的那一個。而 「Why Can GPT Learn In-Context? Language Models Secretly Perform Gradient Descent as Meta-Optimizers」 這篇文章則將 ICL 看作是一種隱式的 Fine-tuning。

總而言之,目前這還是一個未解之謎。

神奇的 Instruct 理解

我們可以把 Instruct 當作一種方便人類理解的任務表述,在這個前提下,目前關於 Instruct 的研究可以分成兩種:偏學術研究的 Instruct,以及關於人類真實需求描述的 Instruct。

我們先來看第一種

我們先來看第一種:偏學術研究的

Instruct。它的核心研究主題是多工場景下,LLM 模型對 Instruct 理解的泛化能力。如上圖中 FLAN 模型所示,就是說有很多 NLP 任務,對於每個任務,研究人員構造一個或者多個 Prompt 模版作為任務的 Instruct,然後用訓練例子對 LLM 模型進行微調,讓 LLM 以同時學習多個任務。訓練好模型後,給 LLM 模型一個它沒見過的全新任務的 Instruct,然後讓 LLM 解決 zero shot 任務,從任務解決得是否足夠好,來判斷 LLM 模型是否有對 Instruct 理解的泛化能力。

如果歸納下目前的研究結論(可參考 「Scaling Instruction-Fine-tuned Language Models」/「Super-NaturalInstructions: Generalization via Declarative Instructions on 1600+ NLP Tasks」),能夠有效增加 LLM 模型 Instruct 泛化能力的因素包括:增加多工的任務數量、增加 LLM 模型大小、提供 CoT Prompting, 以及增加任務的多樣性。如果採取任意一項措施,都可以增加 LLM 模型的 Instruct 理解能力。

第二種是人類真實需求下的 Instruct,這類研究以 InstructGPT 和 ChatGPT 為代表。這類工作也是基於多工的,但是和偏向學術研究類工作最大的不同,在於它是面向人類使用者真實需求的。為什麼這麼說呢?因為它們用於 LLM 多工訓練的任務描述 Prompt,是從大量使用者提交的真實請求中抽樣而來的,而不是固定好研究任務的範圍,然後讓研究人員來寫任務描述 prompt。這裡所謂的 「真實需求」,體現在兩個方面:首先,因為是從使用者提交的任務描述裡隨機抽取的,所以涵蓋的任務類型更多樣化,也更符合使用者的真實需求;其次,某個任務的 prompt 描述,是使用者提交的,體現了一般使用者在表達任務需求時會怎麼說,而不是你認為使用者會怎麼說。很明顯,這類工作改出來的 LLM 模型,使用者體驗會更好。

InstructGPT 論文裡,也拿這種方法和 FLAN 那種 Instruct based 方法做了比較。首先在 GPT3 上用 FLAN 提到的任務、資料以及 Prompt 模版進行微調,來在 GPT 3 上覆現 FLAN 方法,然後和 InstructGPT 進行比較,因為 InstructGPT 的基礎模型也是 GPT3,所以只有資料和方法的差別,兩者可比,結果發現 FLAN 方法的效果,距離 InstructGPT 有很大的差距。那麼背後的原因是什麼呢?論文分析資料後認為,FLAN 方法涉及到的任務領域相對少,是 InstructGPT 涉及領域的子集,所以效果不好。也就是說,FLAN 論文裡涉及到的任務和使用者真實需求是不符的,而這導致在真實場景下效果不夠好。而這對我們的啟示是:從使用者資料中收集真實需求,這事情是很重要的。

In Context Learning 和 Instruct 的聯繫

如果我們假設 In Context Learning 是用一些例子來具象地表達任務命令,Instruct 是一種更符合人類習慣的抽象任務描述。那麼,一個很自然的問題是:它們之間有什麼聯繫嗎?比如,我們是否能夠提供給 LLM 完成某個任務的若干具體示例,讓 LLM 找出其對應的自然語言描述的 Instruct 命令?

目前有零星的工作在探索這個問題,我認為這個方向是很有研究價值的。先說答案,答案是:Yes,LLM Can。「Large Language Models Are Human-Level Prompt Engineers」 是做這個方向很有趣的工作,如上圖所示,對於某項任務,給 LLM 一些示例,讓 LLM 自動生成能夠描述這項任務的自然語言命令,然後它再用 LLM 生成的任務描述去測試任務效果。它使用的基礎模型是 GPT 3 和 InstructGPT,經過這項技術加持後,LLM 生成的 Instruct 的效果相比未採用這項技術的 GPT 3 以及 InstuctGPT 來說,指標有極大地提升,而且在一些任務上超過人類的表現。

這說明了:具象的任務示例和任務的自然語言描述之間,有種神秘的內在聯繫。至於這種聯繫到底是什麼?我們目前對此還一無所知。

智慧之光:如何增強 LLM 的推理能力

目前很多研究已證明 LLM 對於知識具有強大的記憶能力,但是,一般我們不會因為一個人記憶能力強,就說這人很聰明,是否具有強大的推理能力,往往是我們判斷一個人是否聰明的重要標準。類似的,如果 LLM 的效果想讓人覺得很驚豔,強大的推理能力是必備的。推理能力本質上是綜合運用很多相關知識點,去推匯出新知識或新結論。關於 LLM 的推理能力,是最近一年來 LLM 裡最重要和熱門的研究領域之一。於是,我們關心的問題就是:LLM 具備推理能力嗎?如果具備,那麼它的推理能力夠強嗎

這兩個問題目前的答案似乎應該是:當模型規模足夠大的時候,LLM 本身是具備推理能力的,在簡單推理問題上,LLM 已經達到了很好的能力,但是複雜推理問題上,還需要更多深入的研究

如果梳理現有 LLM 推理相關工作的話,我把它們歸到兩大類,體現出挖掘或促進 LLM 推理能力不同的技術思路:第一類研究比較多,可以統稱為基於 Prompt 的方法,核心思想是通過合適的提示語或提示樣本,更好地激發出 LLM 本身就具備的推理能力,Google 在這個方向做了大量很有成效的工作。第二類做法是在預訓練過程中引入程序程式碼,和文字一起參與預訓練,以此進一步增強 LLM 的推理能力,這應該是 OpenAI 實踐出的思路。比如 ChatGPT 肯定具備很強的推理能力,但它並不要求使用者必須提供一些推理示例,所以 ChatGPT 強大的推理能力,大概率來源於使用程式碼參與 GPT 3.5 的預訓練。

這兩種思路其實大方向是迥異的:利用程式碼增強 LLM 推理能力,這體現出一種通過增加多樣性的訓練資料,來直接增強 LLM 推理能力的思路;而基於 Prompt 的方法,它並不會促進 LLM 本身的推理能力,只是讓 LLM 在解決問題過程中更好地展示出這種能力的技術方法。可以看出,前者(程式碼方法)治本,後者治標。當然,兩者其實也是互補的,但從長遠看,治本的方法更重要。

基於 Prompt 的方法

這方面工作非常多,如果歸納一下的話,大致可以分為三條技術路線。

第一種思路是直接在問題上追加輔助推理 Prompt。這種方法簡單直接,但在眾多領域都很有效。這個做法是由 「Large language models are zero-shot reasoners」 提出的,也被稱為 zero-shot CoT。具體而言,分為兩個階段(如上圖所示),第一階段在提問的問題上追加 「Let’s think step by step」 這句提示語,LLM 會輸出具體的推理過程;第二階段,在第一階段的問題後,拼接 LLM 輸出的具體推理過程,並再追加 Prompt=「Therefore, the answer (arabic numerals) is」,此時 LLM 會給出答案。如此簡單的操作,卻可以大幅增加 LLM 在各項推理任務中的效果,比如在數學推理測試集 GSM8K 上,加上提示語後,推理準確率直接從原先的 10.4% 提升到了 40.4%,可謂神奇。

為什麼 LLM 會具備給一句 「Let’s think step by step」 提示語,就能列出詳細的推理步驟並算出答案呢?其原因目前尚無定論,我的猜測是:很可能因為預訓練資料裡面存在大量的此種資料,就是以 「Let’s think step by step」 開頭,然後後面是詳細的推理步驟,最後給出答案,而 LLM 在預訓練的時候記住了這些模式。而當我們輸入這個提示語的時候,激發 LLM 模糊得 「回憶」 起某些例子的推導步驟,於是即可模仿這些例子進行步驟推理並給出答案。當然這只是我的無依據推論,若事實真的如此,如果你看過後面介紹的標準 CoT 做法,會發現 Zero-shot CoT 本質上和標準 CoT 很可能沒什麼區別,只是標準 CoT 由人工來寫推理步驟的示例,而 Zero-shot CoT 大概率是通過提示語,激活了記憶中的某些包含推理步驟的示例,很可能是如此區別。而標準 CoT 效果比 Zero-Shot CoT 效果好也完全可以理解,因為畢竟靠 LLM 回憶示例,精準性估計不會太高,而人工給出的示例,準確性是有保障的,所以自然標準 CoT 效果會更好。

這側面說明了一個道理,就是 LLM 本身是具備推理能力的,只是我們沒有辦法把它的這種能力激發出來而已,通過合適的提示語來進行兩步提示,就在一定程度上可以釋放出它的這種潛力。另外,對於中文,很可能存在另外一個黃金提示語,比如 「詳細解題思路如下」,類似這種,因為中文語料在講解推理步驟的時候,經常用的引導句和 「讓我們一步一步來思考」 應該是不同的,這是明顯的西方說法,而探索出這個中文黃金提示語,其實也是很有必要的。

第二種思路一般被稱為基於示例的思維鏈(few-shot CoT,Chain of Thought)Prompting。這個方向目前是 LLM 推理研究的主方向,很多工作都是在這個思路上做的,我們簡單介紹幾個效果顯著的代表性工作,基本能代表 CoT 的技術發展方向。

CoT 的主體思想其實很直白;為了教會 LLM 模型學會推理,給出一些人工寫好的推理示例,示例裡把得到最終答案前,一步步的具體推理步驟說清楚,而這些人工寫的詳細推理過程,就是思維鏈 Prompting,具體例子可參照上圖中藍色文字部分。CoT 的意思是讓 LLM 模型明白一個道理;就是在推理過程中,步子不要邁得太大,否則很容易出錯,改變思維模式,化大問題為小問題,步步為營,積小勝為大勝。最早明確提出 CoT 這個概念的文章是 「Chain of thought prompting elicits reasoning in large language models」,論文發佈於 22 年 1 月份,雖然做法很簡單,但是應用 CoT 後 LLM 模型的推理能力得到了巨大提升,GSM8K 數學推理測試集準確率提高到 60.1% 左右。當然,這種給出詳細推理步驟和中間過程的思想,並非 CoT 最早提出的,更早一些的 「scratchpad」 技術(可參考:Show Your Work: Scratchpads for Intermediate Computation with Language Models)首先採用了類似的思路。

CoT 提出不久,很快在 22 年 3 月份,一項被稱為 「Self-Consistency」 的改進技術就將 GSM8K 測試集準確率提高到 74.4%,提出這項改進的論文是 「Self-Consistency Improves Chain of Thought Reasoning in Language Models」。「Self-Consistency」 的思路也很直觀(參考上圖):首先可以利用 CoT 給出幾個寫了推理過程的示例,然後要求 LLM 對給定的問題進行推理,如果是 CoT,直接輸出一個推理過程和答案,整個過程就結束了。「Self-Consistency」 則不然,它要求 LLM 輸出多個不同的推理過程和答案,然後採用投票的方式選出最佳答案,思路非常簡單直接,但是效果也確實好。「Self-Consistency」 其實是教導 LLM 學會這麼一個道理:孔乙己說過茴香豆的 「茴」 字有四種寫法,類似的,一個數學題的正確解法也可以有很多種,每個不同的推導過程都指向最終的答案。條條大路通羅馬,雖說也有個別迷路走到北京的,但是迷路的畢竟是少數,看看大多數人走到哪裡,哪裡就是正確答案。簡單的方法往往蘊含著深刻的哲學含義,是不是這道理?

再往後,「On the Advance of Making Language Models Better Reasoners」 這個工作在 「Self-Consistency」 基礎上,進一步集成了 「從一個 Prompt 問題拓展到多個 Prompt 問題、檢查推理中間步驟的正確性以及對多個輸出的回答加權投票」 這三個改進點,將 GSM8K 測試集準確率提高到 83% 左右。

第三種思路體現了一種分治演算法的思想

第三種思路體現了一種分治演算法的思想。當然這個所謂 「分治」 是我歸納的,別人沒這麼說。這種思路的核心思想是:對於一個複雜的推理問題,我們把它分解成若干容易解決的子問題,一一解決掉子問題後,我們再從子問題的答案推導複雜問題的答案。你看這確實比較類似分治演算法的思想吧。我個人覺得,這種思路可能才是揭示問題本質、最終解決 LLM 複雜推理問題正宗的道路。我們以 「Least-to-most prompting」 技術為例來說明這種思路的一種具體實現方式,如上圖所示:它分為兩個階段,第一個階段,從原始問題我們可以得知最終要問的問題是什麼,我們假設最終問題是 Final Q,然後從原始問題填充 Prompt 模版:「如果要解決 Final Q 問題,那麼我需要先解決」,然後把原始問題和這個 Prompt 交給 LLM,讓 LLM 模型給出答案,等於讓 LLM 給出最終問題的前置子問題 Sub Q;接下來我們進入第二個階段,讓 LLM 先回答剛才拿到的子問題 Sub Q,並拿到對應的答案,然後原始問題拼接子問題 Sub Q 及對應答案,再去問 LLM 最終那個問題 Final Q,此時 LLM 會給出最後的答案。如此這般,體現出拆解子問題,並從子問題的答案逐步找出最終答案的思路。

程式碼預訓練增強 LLM 推理能力

以上是目前利用 Prompt 激發 LLM 模型推理能力的三種主流做法,而關於 LLM 的推理能力,目前還觀察到一個有趣且費解的現象:除了文字外,如果能夠加入程序程式碼一起參與模型預訓練,則能大幅提升 LLM 模型的推理能力。這個結論從不少論文的實驗部分都可以得出(可以參考:AUTOMATIC CHAIN OF THOUGHT PROMPTING IN LARGE LANGUAGE MODELS/Challenging BIG-Bench tasks and whether chain-of-thought can solve them 等論文的實驗部分)。

上圖給出了一份實驗資料,來自於論文 「On the Advance of Making Language Models Better Reasoners」,其中 GPT3 davinci 就是標準的 GPT 3 模型,基於純文字訓練;code-davinci-002(OpenAI 內部稱為 Codex)是同時在 Code 和 NLP 資料上訓練的模型。如果比較兩者效果,可以看出,不論採用具體哪種推理方法,僅僅是從純文字預訓練模型切換到文字和 Code 混合預訓練模型,在幾乎所有測試資料集合上,模型推理能力都得到了巨大的效果提升,比如我們以 「Self Consistency」 方法為例,在大多資料集合上的性能提升,都直接超過了 20 到 50 個百分點,這是很恐怖的性能提升,而其實在具體推理模型層面,我們什麼也沒做,僅僅是預訓練的時候除了文字,額外加入了程序程式碼而已。

除了這個現象,從上圖資料中,我們還可以得出其它一些結論,比如 GPT 3 這種純文字預訓練模型,其實是具備相當程度的推理能力的,除了在 GSM8K 這種數學推理上效果比較差外,其它推理資料資料集合表現也還可以,前提你需要採用合適的方法,來激發出它本身就具備的這種能力;再比如,text-davinci-002,也就是在 code-davinci-002 基礎上加入 instruct fine-tuning 後的模型(就是加入 InstructGPT 或 ChatGPT 模型的第一步),其推理能力要弱於 Codex,但是有其它研究表明它在自然語言處理任務又要強於 Codex。而這貌似說明了,加入 instruct fine-tuning,會損害 LLM 模型的推理能力,但是會在一定程度上提升自然語言理解能力。而這些結論其實都是很有意思的,也能啟發後續進一步的思考和探索。

那麼,一個自然的疑問是:為何預訓練模型可以從程式碼的預訓練中獲得額外的推理能力?確切原因目前未知,值得深入探索。我猜測可能是因為原始版本的 Codex(只使用程式碼訓練,可參考文獻:Evaluating Large Language Models Trained on Code)的程式碼訓練是從文字生成程式碼,而且程式碼中往往包含很多文字註釋,本質上這類似於預訓練模型做了 < 文字,Code > 兩種資料的多模態對齊工作。而資料中必然包含相當比例的數學或邏輯問題的程式碼、描述和註釋,很明顯這些數學類或邏輯推理類的資料,對於解決下游數學推理問題是有幫助的,我猜大概率原因在此。

關於 LLM 推理能力的思考

上面介紹了 LLM 推理的主流技術思路和現有的一些結論,接下來談談我對 LLM 模型推理技術的思考,以下內容純個人推斷,沒有太多證據,還請謹慎參考。我的判斷是:雖然最近一年來,關於激發 LLM 的推理能力,這方面的技術進展很快,也取得了很大的技術進步,但是總體感覺是,我們可能走在正確的方向上,但是距離接觸到真正的問題本質還有一段距離,對此要有更深入的思考和探索

首先,我比較贊同上述分治演算法的主體思路,對於複雜的推理問題,我們應該把它拆解成若干簡單的子問題,因為子問題對於 LLM 來說回答正確的概率就大很多,讓 LLM 一一回答子問題後,再逐步推匯出最終答案。受到 「Least-to-most prompting」 技術的啟發,如果進一步思考,我覺得 LLM 推理本質上很可能會是如下兩種可能的其中之一:不斷和 LLM 進行互動的圖上推理問題,抑或是不斷和 LLM 進行互動的程序流程圖執行問題。

先說圖上推理問題,如上圖所示,假設我們有辦法能夠把複雜問題拆解成由子問題或者子步驟構成的圖結構,圖中的節點是子問題或者子步驟,圖中的邊代表了子問題之間的依賴關係,就是說只有回答好子問題 A,才能回答子問題 B,而且圖中大概率存在循環結構,就是反覆做某幾個子步驟。假設我們能夠得到上述的子問題拆解圖,那麼可以根據依賴關係,引導 LLM 一步一步按照圖結構,回答必須首先回答的子問題,直到推匯出最終答案。

再說程序流程圖問題,參考上圖,假設我們有辦法把複雜問題拆解成子問題或子步驟,併產生一個由子步驟構成的類似程序流程圖的結構,在這個結構裡,有些步驟會反覆執行多次(循環結構),有些步驟的執行需要進行條件判斷(條件分支)。總而言之,在執行每個子步驟的時候和 LLM 進行互動,得到子步驟的答案,然後按照流程不斷執行,直到輸出最終答案。類似這種模式。假設這個思路大致正確的話,也許可以從這個角度來解釋為何加入程式碼會增強預訓練模型的推理能力:大概率因為 < 文字,程式碼 > 的多模態預訓練模型,在模型內部是通過類似這種隱含的程序流程圖作為兩個模態的橋樑,將兩者聯繫起來的,即由文字描述到隱含的流程圖,再對映到由流程圖產生具體的程式碼。也就是說,這種多模態預訓練,可以增強 LLM 模型從文字構建出隱含的流程圖並按照流程圖執行的能力,也就是加強了它的推理能力。

當然,上述思路最大的問題是,我們如何根據文字描述的問題,能夠靠 LLM 模型,或者其它模型,得到圖結構或者流程圖結構?這個可能是其中的難點。一種可能的思路就類似繼續增強文字和更高質量的程式碼預訓練,走隱式學習內部隱含結構的方法。而目前的 CoT 技術,如果套到上述思路來思考的話,可以這麼理解:標準 CoT,其實就是靠自然語言文字來描述圖結構或者程序流程圖的;而 「Least-to-most prompting」 技術,則是試圖根據最後一個圖節點,靠倒推來試圖推匯出其中的圖結構,但是很明顯,目前的方法限制了它倒推的深度,也就是說它只能推匯出非常簡單的圖結構,這正是限制它能力的所在。

未來之路:LLM 研究趨勢及值得研究的重點方向

這裡列出一些我個人認為比較重要的 LLM 研究領域,或值得深入探索的研究方向。

探索 LLM 模型的規模天花板

儘管繼續推大 LLM 模型的規模,這事看似沒有技術含量,但是其實這個事情異常重要。我個人判斷,自從 Bert 出現以來,到 GPT 3,再到 ChatGPT,大概率這些給人印象深刻的關鍵技術突破,核心貢獻都來自於 LLM 模型規模的增長,而非某項具體技術。說不定,揭開 AGI 真正的鑰匙就是:超大規模及足夠多樣性的資料、超大規模的模型,以及充分的訓練過程。再者,做超大規模的 LLM 模型,對技術團隊的工程實現能力要求是非常高的,也不能認為這事情缺乏技術含量。

那麼繼續推大 LLM 模型規模,有什麼研究意義呢?我覺得有兩方面的價值。首先,如上所述,我們已知,對於知識密集型的任務,隨著模型規模越大,各種任務的效果會越來越好;而對很多推理類型的有難度的任務,加上 CoT Prompting 後,其效果也呈現出遵循 Scaling law 的趨向。那麼,很自然的一個問題就是:對於這些任務,LLM 的規模效應,能將這些任務解決到何種程度?這是包括我在內,很多人關心的問題。其次,考慮到 LLM 具備的神奇的 「湧現能力」,如果我們繼續增加模型規模,它會解鎖哪些讓我們意想不到的新能力呢?這也是很有意思的問題。考慮到以上兩點,我們仍然需要不斷增大模型規模,看看模型規模對解決各類任務的天花板在哪裡。

當然,這種事情也就只能說說,對 99.99% 的從業者來說,是沒有機會和能力做這個事情的。要做這個事情,對研究機構的財力及投入意願、工程能力、技術熱情,都有極高的要求,缺一不可。能做這事情的機構,粗估下來,國外不超過 5 家,國內不超過 3 家。當然,考慮到成本問題,未來也許會出現 「股份制大模型」,就是有能力的幾家機構合作,群策群力,一起來共建超級大模型的現象。

增強 LLM 的複雜推理能力

正如之前對 LLM 推理能力的敘述,儘管 LLM 在最近一年推理能力得到了很大的提升,但是很多研究(參考:Limitations of Language Models in Arithmetic and Symbolic Induction/Large Language Models Still Can’t Plan)表明,目前 LLM 能夠解決得比較好的推理問題,往往都相對簡單,LLM 的複雜推理能力仍然薄弱,比如即使是簡單的字符複製推理或者加減乘除運算,當字串或者數字非常長的時候,LLM 推理能力會極速下降,再比如行為規劃能力等複雜推理能力很弱。總而言之,加強 LLM 的複雜推理能力,應該是 LLM 未來研究中最重要的環節之一。

前文有述,加入程式碼加入預訓練,這是一種直接增強 LLM 推理能力的方向。這個方向目前研究尚顯不足,更像是實踐經驗的總結,探索背後的原理,並進而引入更多類型除程式碼外的新型資料來增強 LLM 的推理能力,這可能是更本質提升推理能力的方向。

LLM 納入 NLP 之外更多其它研究領域

目前的 ChatGPT 擅長 NLP 和 Code 任務,作為通向 AGI 的重要種子選手,將圖像、視訊、音訊等圖像與多模態集成進入 LLM,乃至 AI for Science、機器人控制等更多、差異化更明顯的其它領域逐步納入 LLM,是 LLM 通往 AGI 的必經之路。而這個方向才剛剛開始,因此具備很高的研究價值。

更易用的人和 LLM 的互動接口

如前所述,ChatGPT 的最大技術貢獻即在此。但是很明顯,目前的技術並不完美,肯定還有很多命令 LLM 理解不了。所以,沿著這個方向,尋找更好的技術,來讓人類使用自己習慣的命令表達方式,而 LLM 又能聽懂,這是個新的,且非常有前景的技術方向。

建設高難度的綜合任務評測資料集

好的評測資料集,是引導技術不斷進步的基石。隨著 LLM 模型逐步增大,任務效果快速提升,導致很多標準測試集快速過時。也就是說,這些資料集合相對現有技術來說,太容易了,在沒有難度的測試集合下,我們不知道目前技術的缺陷和盲點在哪裡。所以構建高難度的測試集合,是促進 LLM 技術進步的關鍵所在。

目前行業應出現了一些新的測試集,有代表性的包括 BIGBench、OPT-IML 等。這些測試集合體現出一些特性,比如相對 LLM 現有技術具備一定的難度、綜合了各種各樣多種類型的任務等。

受到 ChatGPT 的啟發,我覺得除此外應納入另一考慮因素:體現真實使用者需求。就是說,這些任務的表述由使用者真實發起,這種方式構建出來的 LLM 模型,才能解決使用者實際需求。

除此外,相信 LLM 會快速將能力溢出到 NLP 之外的領域,而如何融入更多其它領域的評測資料,也是需要提前去考慮。

高質量資料工程

對於預訓練模型來說,資料是其根本,預訓練過程可以理解為從資料中吸取其中所包含知識的過程。因此,我們需要進一步加強對高質量資料的挖掘、收集及清洗等工作。

關於資料,需要考慮兩個方面:資料的質量和數量。而根據 T5 的對比實驗,我們可以得出結論:在數量和質量兩個因素裡,質量優先,正確的道路應該是在保證資料質量的前提下,再去增大資料規模。

資料質量,包括資料的資訊含量以及資料的多樣性等多個衡量標準,比如 Wiki 明顯就屬於世界知識密度極高的高質量資料,這是從資訊含量來說的;而增加資料類型的多樣性,無疑是激發 LLM 各種新能力的根本,比如加入問答網站的資料,對於 LLM 的 QA 能力提升是有直接幫助的。多樣化的資料賦予了 LLM 更好解決更多不同類型任務的能力,所以,這可能是資料質量裡最關鍵的標準。

關於資料數量,原則上網際網路上公開發布的資料都可以納入 LLM 模型的預訓練過程。那麼,它的極限在哪裡?「Will we run out of data? An analysis of the limits of scaling datasets in Machine Learning」 對此進行了估算,結論是到 2026 年左右,高質量的 NLP 資料將會用光,低質量 NLP 資料會在 2030 到 2050 年用光,而低質量圖像資料會在 2030 到 2060 年用光。而這意味著:要麼到時我們有新類型的資料來源,要麼我們必須增加 LLM 模型對資料的利用效率。否則,目前這種資料驅動的模型最佳化方式將會停止進步,或者收益減少。

超大 LLM 模型 Transformer 的稀疏化

目前規模最大的 LLM 中,有相當比例的模型採取了稀疏(Sparse)結構,比如 GPT 3、PaLM、GLaM 等,GPT 4 大概率也會走稀疏模型路線。之所以採用 Sparse 化的模型,主要好處是它可以極大減少 LLM 的訓練時間和線上推理時間。Switch Transformer 論文裡指出:在相同算力預算的前提下,使用稀疏化 Transformer,相對 Dense Transformer,LLM 模型的訓練速度可以提升 4 倍到 7 倍。為何 Sparse 模型可以加快訓練和推理時間呢?這是因為儘管模型參數巨大,但是對於某個訓練實例,Sparse 模型通過路由機制,只使用整個參數中的一小部分,參與訓練和推理的活躍參數量比較少,所以速度快。

我認為未來超大的 LLM 模型大概率會收斂到稀疏模型。主要有兩個原因:一方面,現有研究表明(參考:Large Models are Parsimonious Learners: Activation Sparsity in Trained Transformers),標準的 Dense Transformer 在訓練和推理時,它本身也是稀疏激活的,就是說只有部分參數會被激活,大部分參數沒有參與訓練和推理過程。既然這樣,我們不如直接遷移到稀疏模型;另外,毫無疑問 LLM 模型的規模會繼續推大,而高昂的訓練成本是妨礙其進一步擴大模型的重要阻力,使用稀疏模型可以極大降低超大模型的訓練成本,所以隨著模型規模越大,稀疏模型帶來的收益越明顯。考慮到這兩個方面,大概率未來更大的 LLM 模型會採用稀疏模型方案。

那為何目前其它大規模模型不走稀疏模型的路線呢?因為 Sparse 模型存在訓練不穩定、容易過擬合等問題,不太容易訓練好。所以,如何修正稀疏模型面臨的問題,設計出更容易訓練的稀疏模型,是很重要的未來研究方向。

取經之路:復刻 ChatGPT 時要注意些什麼

如果希望能復刻類似 ChatGPT 這種效果令人驚豔的 LLM 模型,綜合目前的各種研究結論,在做技術選型時需要重點權衡如下問題:

首先,在預訓練模式上,我們有三種選擇:GPT 這種自迴歸語言模型,Bert 這種雙向語言模型,以及 T5 這種混合模式(Encoder-Decoder 架構,在 Encoder 採取雙向語言模型,Decoder 採取自迴歸語言模型,所以是一種混合結構,但其本質仍屬於 Bert 模式)。我們應選擇 GPT 這種自迴歸語言模型,其原因在本文正規化轉換部分有做分析。目前看,國內 LLM 在做這方面技術選型的時候,貌似很多都走了 Bert 雙向語言模型或 T5 混合語言模型的技術路線,很可能方向走偏了。

第二,強大的推理能力是讓使用者認可 LLM 的重要心理基礎,而如果希望 LLM 能夠具備強大的推理能力,根據目前經驗,最好在做預訓練的時候,要引入大量程式碼和文字一起進行 LLM 訓練。至於其中的道理,在本文前面相關部分有對應分析。

第三,如果希望模型參數規模不要那麼巨大,但又希望效果仍然足夠好,此時有兩個技術選項可做配置:要麼增強高質量資料收集、挖掘、清理等方面的工作,意思是我模型參數可以是 ChatGPT/GPT 4 的一半,但是要想達到類似的效果,那麼高質量訓練資料的數量就需要是 ChatGPT/GPT 4 模型的一倍(Chinchilla 的路子);另外一個可以有效減小模型規模的路線是採取文字檢索(Retrieval based)模型 + LLM 的路線,這樣也可以在效果相當的前提下,極大減少 LLM 模型的參數規模。這兩個技術選型不互斥,反而是互補的,也即是說,可以同時採取這兩個技術,在模型規模相對比較小的前提下,達到超級大模型類似的效果。

第四,超級大模型因為模型規模大,所以訓練成本過高,導致很少有機構有能力去做這件事。而且由上文分析可見,繼續不斷推大 LLM 模型規模是肯定會發生、也應該去做的事情。於是,如何通過技術手段降低 LLM 的訓練成本就很重要。LLM 的特徵抽取器 Sparse 化是有效降低模型訓練及推理成本的技術選擇。由此可見,隨著模型越來越大,LLM 模型 Sparse 化是一個應該考慮的選項。

第五,ChatGPT 是目前最接近理想 LLM 的技術方案,而理想中的 LLM 應該是以一個幾乎無所不能的基礎通用大模型作為依託,來支持各種各樣的上層任務類型。目前看,支持越來越多的任務類型,主要是通過增加 LLM 預訓練資料的多樣性來達成的,資料多樣性越好,LLM 能夠支持的任務類型就越豐富。所以,應該重視通過增加資料多樣性來增加 LLM 新能力的思路

第六,易用的人機操作接口。人類用他們自己習慣的表達方式來描述任務,而 LLM 要能夠理解這些 Instruct 的真實含義。另外,也要注意這些 Instruct 是符合人類真實需求的,就是說,要從終端使用者那裡收集任務表述方式,而不能靠研發人員自己的臆想或猜測。ChatGPT 給我最大的啟發其實是這一點,至於是否用增強學習我倒覺得不重要,其它替代技術應該也能做類似的事情

ChatGPT: 為什麼是 OpenAI

為什麼是 OpenAI 作出了 ChatGPT,而不是其它機構呢?我們在這裡可以做個簡單分析。

在本文開頭,我們提到了 OpenAI 看待 LLM 的理念。OpenAI 是怎麼看待 LLM 的呢?回顧它不斷推出的技術,可以看出,它其實從 GPT 1.0 開始,基本就堅定地把 LLM 看做是通往 AGI 的一條必由之路。具體而言,在 OpenAI 眼中,未來的 AGI 應該長這個樣子:有一個任務無關的超大型 LLM,用來從海量資料中學習各種知識,這個 LLM 以生成一切的方式,來解決各種各樣的實際問題,而且它應該能聽懂人類的命令,以便於人類使用。其實對 LLM 發展理念的理解,在前半部分,就是 「構建一個任務無關的超大型 LLM,讓它從海量資料中學習各種知識」,這一點幾乎是大家的共識,能體現出 OpenAI 眼光的其實是後半部分。

OpenAI 的理念比較超前,對自我定位從一開始就定得比較高,始終堅定不移地探索上述方式是否可以實現 AGI。OpenAI 之所以能作出 ChatGPT,勝在一個是定位比較高,另一個是不受外界干擾,態度上堅定不移。

我們可以回顧下它走的一些關鍵路程:GPT 1.0 走的是生成模式的自迴歸語言模型路線,比 Bert 出來的還早些。Bert 證明了:雙向語言模型對於很多 NLP 理解類任務,效果比自迴歸這種單向語言模型效果更好。儘管如此,GPT 2.0 並沒有因此切換到雙向語言模型這條路上,仍然走文字生成的路,而且開始嘗試零示例(zero shot)prompt 和少量示例(few shot)prompt。其實這時候, OpenAI 心目中的 AGI 已經開始浮出水面,逐漸顯示出輪廓了。只是因為 zero shot/few shot 效果比 Bert+fine-tuning 差的比較遠,所以大家都沒太當回事,甚至不理解它為什麼要始終堅持走單向語言模型的路線。這個時候,我估計即使是 OpenAI 自己,也不一定能確保這條路肯定能走通。

但是,這不妨礙它繼續在這條路上往後走。GPT 3.0 已經展示出了比較強大的 zero shot/few shot prompt 能力,這時候 OpenAI 心目中的 AGI 已經完全漏出水面,輪廓清晰,而且它的效果也證明了這條路,是有較大可能走得通的。GPT 3.0 是一個決定 LLM 發展方向的叉路口和分水嶺,與之對應的另外一條路是 「Bert+fine-tuning」 模式。在這個岔路口,不同的從業者選擇走上了不同的道路,後面的技術差距也是從這裡開始拉開的。很遺憾地是,國內很多從業者選擇繼續在 「Bert+fine-tuning」 這條路上往後走,這也是造成今天落後局面的一個關鍵時間節點。再往後,就是 InstructGPT 和 ChatGPT 了,OpenAI 通過 ChatGPT 證明了一點;雖然我們距離真正的 AGI,可能還有很長的路要走,但是通過超大 LLM 走向 AGI 這條路,目前看是可行的

相關文章

區塊鏈 (Blockchain) 是工業4.0的領引者

區塊鏈 (Blockchain) 是工業4.0的領引者

區塊鏈 (Blockchain) 是一種革命性的技術,它迅速顛覆了許多行業,它可以解決當今企業最緊迫要解決的效率問題。隨著區塊鏈的出現,世界...

一個時代有一個時代的計算架構

一個時代有一個時代的計算架構

李根 豐色 發自 凹非寺 Can Machines Think? 這是阿蘭·圖靈在1950年論文《計算機器和智慧》中的經典提問,圍繞著圖靈的...