讀完收獲很多,能幫大家更好地理解、學習大模型。原文有2.8w字,我提煉了核心要點,閱讀需要10min。
ChatGPT的出現給很多人帶來了驚喜和醒悟。有人驚喜地發(fā)現大型語言模型(LLM)的效果如此出色,而有人則意識到我們對LLM的認知和發(fā)展理念距離世界先進水平還有很大差距。我是既驚喜又醒悟的一員,也是典型的中國人,善于自我反思。因此,我開始反思,并將這篇文章作為反思的結果。
我認為,OpenAI在LLM的理念和相關技術方面領先于國外的Google和DeepMind大約半年到一年的時間,領先國內大約兩年左右。在LLM這個問題上,梯隊很明顯,Google應該排在第二位,最能體現Google技術眼光的是PaLM和Pathways,推出時間大約在2022年2月到4月之間。同一時期,OpenAI推出的是InstructGPT,從這里可以看出Google和OpenAI的差距。至于為什么這么說,你看了后面的內容就能理解。DeepMind之前的重點一直在強化學習攻克游戲和AI for science等方面,對LLM的關注比較晚,大約是在2021年才開始重視這個方向,目前仍在追趕狀態(tài)。Meta在LLM上的關注更少,重點一直不在LLM上,目前也在努力追趕。這些機構是目前做得最好的,即便如此,國內的差距也是可以理解的。至于OpenAI關于LLM的理念是什么,我會在本文的最后一部分談談我的認知。
本文試圖回答一些問題:ChatGPT是否帶來了NLP乃至AI領域的研究范式轉換?如果是,那會帶來怎樣的影響?LLM從海量數據中學到了什么知識?LLM又是如何存取這些知識的?隨著LLM規(guī)模逐步增大,會帶來什么影響?什么是In Context Learning?為什么它是一項很神秘的技術?它和Instruct又是什么關系?LLM具備推理能力嗎?思維鏈CoT又是怎么做的?等等。通過閱讀本文,您將對這些問題有一個答案。
在談到LLM技術現狀之前,我先宏觀地談一下我心目中的研究范式轉換問題,這樣我們才能更清晰地理解具體技術的變化。
如果我們回顧NLP領域的技術發(fā)展,可能會發(fā)現兩次大的研究范式轉換。第一次轉換是從深度學習到兩階段預訓練模型,時間跨度大約是2013年至2020年。在Bert和GPT模型出現之前,NLP領域主要依賴于深度學習模型,其中核心技術是改進的LSTM和CNN模型以及Sequence to Sequence+Attention的總體技術框架。然而,深度學習在NLP領域的應用并沒有取得很大的成功,主要原因是數據量的限制和特征抽取器的表達能力不夠強。Bert和GPT模型的出現改變了這一現狀,引領了NLP領域的技術轉變。這種轉變帶來了兩個影響:一是中間任務的消亡,二是不同研究方向技術路線的統一。
第二次轉換是從預訓練模型走向通用人工智能(AGI),時間跨度大約是2020年至今。ChatGPT是這次轉換的關鍵節(jié)點,它實現了理想LLM模型的接口層,讓LLM適應人類的習慣命令表達方式。這對于提高LLM的易用性和用戶體驗至關重要。這次轉換將進一步推動LLM模型的發(fā)展,納入更多的研究領域,逐步實現通用人工智能。
在這個背景下,很多NLP子領域將不再具備獨立研究的價值,因為LLM模型可以通過吸收更多的領域知識來解決這些問題。同時,更多NLP之外的研究領域也將被納入LLM技術體系,成為通用人工智能的一部分。圖像處理和多模態(tài)任務是其中的一個自然選擇。
總的來說,LLM模型的發(fā)展趨勢是追求規(guī)模越來越大的模型,通過增加預訓練數據的多樣性來涵蓋更多的領域知識。人機接口技術也將繼續(xù)改進,讓LLM更好地適應人類的表達方式。這些技術轉變將對NLP領域和其他研究領域產生深遠影響。
接下來,我們來梳理下GPT 3.0之后LLM模型的主流技術進展。
Transformer是一種強大的特征抽取器,通過預訓練過程,它可以學習到豐富的知識。這些知識可以分為語言類知識和世界知識兩大類。
語言類知識包括詞法、詞性、句法、語義等與自然語言理解相關的知識。研究表明,Transformer可以學習各種層次的語言學知識,并且這些知識在模型的不同層次中有所分布。淺層的語言知識如詞法、詞性、句法等存儲在低層和中層,而抽象的語言知識如語義類知識則廣泛分布在中層和高層。
世界知識指的是關于真實事件和常識性知識的知識。研究表明,Transformer可以從訓練數據中吸收大量的世界知識,并且這些知識主要分布在中層和高層,尤其集中在中層。隨著模型層數的增加,LLM可以學習到更多的世界知識。因此,可以將LLM看作是一種以模型參數體現的隱式知識圖譜。
對于訓練LLM模型所需的數據量,研究表明,對于語言學知識來說,使用1000萬到1億單詞的語料就足夠了,但要學習事實類知識,則需要更多的訓練數據。隨著訓練數據量的增加,預訓練模型在各種下游任務中的效果也會越好。因此,從增量的訓練數據中學到的更多是世界知識。
LLM模型將知識存儲在Transformer的模型參數中。模型參數由多頭注意力(MHA)和前饋神經網絡(FFN)兩部分組成。MHA主要用于計算單詞或知識之間的相關強度,并對全局信息進行集成。而FFN部分存儲了具體的知識。一種觀點認為,FFN可以看作是一個存儲大量具體知識的Key-Value存儲器。FFN的第一層是Key層,用于識別輸入中的語言或知識模式。第二層是Value層,用于存儲與Key層對應的具體知識。FFN的輸入層是通過Self Attention得到的整個輸入句子的整體信息。FFN的正向傳播過程可以看作是通過Key層檢測知識模式,然后取出對應的Value,并體現在輸出上。
修正LLM模型中存儲的知識有幾種方法。一種方法是從訓練數據的源頭進行修正。通過追蹤某條知識對應的訓練數據源頭,可以刪除相關的數據源,然后重新預訓練整個LLM模型。另一種方法是對LLM模型進行fine-tuning,根據新知識構建訓練數據,讓LLM模型在這個數據上進行fine-tuning。還有一種方法是直接修改LLM模型參數中存儲的知識。這些方法都有各自的優(yōu)缺點,需要根據具體情況選擇合適的方法。
隨著LLM模型規(guī)模的增大,對于預訓練階段來說,增加訓練數據量和模型參數規(guī)模是提高模型效果的關鍵。研究表明,同時增加訓練數據量和模型參數規(guī)模效果最好。此外,隨著模型規(guī)模的增大,LLM在不同類型的任務上表現也有所不同。對于知識密集型任務,隨著模型規(guī)模增大,任務效果越來越好。對于某些任務,隨著模型規(guī)模的增大,任務效果呈現出U形增長曲線。對于一些任務,LLM具備一種"涌現能力",當模型規(guī)模足夠大時,任務效果突然出現性能增長。這些現象都需要進一步深入研究。
In Context Learning和Instruct是兩種不同的任務描述方式。In Context Learning是通過給出具體示例來描述任務,而Instruct是一種更抽象的任務描述方式。目前的研究表明,LLM可以從給定的示例中學習到Instruct的描述,但是關于LLM是如何實現這種學習的,目前還沒有確切的答案。
在增強LLM的推理能力方面,目前的研究主要集中在兩個方向。一種是基于Prompt的方法,通過合適的提示語或示例來激發(fā)LLM的推理能力。另一種是在預訓練階段引入程序代碼,以增強LLM的推理能力。這兩種方法可以互相補充,但從長遠來看,增加訓練數據的多樣性和引入代碼參與預訓練是更為重要的。
基于Prompt的方法在激發(fā)LLM模型推理能力方面有著重要作用。可以將其分為三條技術路線。
第一種思路是在問題上追加輔助推理Prompt。這種方法簡單直接,但在眾多領域都很有效。具體做法是在問題前追加提示語,例如"Let’s think step by step",然后將LLM的輸出與問題拼接,再追加提示語"Therefore, the answer is",這樣可以大幅增加LLM在各項推理任務中的效果。
第二種思路是基于示例的思維鏈(Chain of Thought)Prompting。這個方向是LLM推理研究的主要方向。通過給出人工編寫的推理示例,詳細描述每個推理步驟,讓LLM模型學會推理。這種方法可以顯著提升LLM模型的推理能力。
第三種思路體現了一種分治算法的思想。將復雜的推理問題分解成若干容易解決的子問題,然后逐步解決子問題,最終推導出整個問題的答案。這種思路類似于分治算法,可能是揭示問題本質、解決LLM復雜推理問題的道路。
此外,加入代碼預訓練可以顯著增強LLM模型的推理能力。通過在預訓練過程中加入代碼數據,可以提升LLM模型在推理任務中的表現。這可能是因為代碼數據中包含了數學類或邏輯推理類的數據,對解決下游數學推理問題有幫助。
總體而言,LLM模型具備推理能力,只是我們需要合適的方法來激發(fā)它。未來的研究可以集中在增強LLM的復雜推理能力、探索LLM在NLP之外領域的應用、改進人機交互接口、構建高難度的綜合任務評測數據集等方向。此外,還可以研究如何提高LLM模型的訓練效率,如稀疏化模型等技術選項。
最后,要注意在復刻類似ChatGPT的模型時,選擇合適的預訓練模式、引入代碼數據進行預訓練、注意數據質量和多樣性、降低模型規(guī)模的同時保持效果、設計易用的人機交互接口等。這些選擇將有助于實現強大的LLM模型。