大模型基礎:GPT 家族與提示學習
從 GPT-1 到 GPT-3.5
GPT(Generative Pre-trained Transformer)是 Google 于2018年提出的一種基于 Transformer 的預訓練語言模型。它標志著自然語言處理領域從 RNN 時代進入 Transformer 時代。GPT 的發展歷史和技術特點如下:
- GPT-1
2018年6月, Google 在論文 “Improving Language Understanding by Generative Pre-Training” 中首次提出 GPT 模型。GPT-1 使用 12 層 Transformer 解碼器堆疊而成,每層包含一個 multi-head self-attention 模塊和一個全連接前饋網絡。在一個包含網頁、書籍等的大規模文本數據集上進行了無監督預訓練,根據下游任務進行微調,展示了其在語言理解和生成任務上的強大能力, 是語言模型發展歷史上的重要里程碑。GPT-1 的貢獻在于證明了 Transformer 結構也可以進行無監督預訓練, 并可以捕獲語言的長距離依賴特征。GPT-1的提出推動了后續GPT模型系列的發展與革新。
- GPT-2
2019年2月, OpenAI 發布 GPT-2 模型。GPT-2 使用更大規模的數據集,包含40GB文本數據,規模比GPT-1大40倍。GPT-2基于GPT-1進行改進,提出了一種簡化的 Transformer 解碼器結構。GPT-2 展示了強大的語言生成能力, 可以根據提示文本進行長段落語言生成。GPT-2 繼承 GPT-1的設計思路, 通過擴大模型和數據集規模, 優化模型結構, 給出了一個更強大的預訓練語言模型, 顯示了該方向的發展前景。
- GPT-3
2020年5月,OpenAI 發布GPT-3,引起了廣泛關注。GPT-3使用了1750億參數,是迄今為止最大的語言模型。GPT-3沿用了 Transformer 解碼器結構,但進一步擴大了模型寬度和深度, 包含了96層Transformer塊, 具有更強的表示能力。訓練數據集達到了4000億字的海量文本數據, 遠超之前的GPT模型。這為GPT-3提供了豐富的世界知識。GPT-3在問答、翻譯、總結等多項任務上都展現出強大的零樣本學習能力,展現出接近人類的語言處理能力。GPT-3的關鍵創新在于提出了In-Context Learning概念, 可以理解提示并根據上下文進行回答,例如在問答任務中,只需在prompt提供問題及一個QA示例,GPT-3就可以學習回答同類問題,在千億級參數量級的模型上,In-Context Learning 的能力才初步顯現,可以從5-10個示例中獲取新任務和概念信息。這種學習方式更貼近人類的學習模式。GPT-3 使語言模型產生了質的飛躍, 具有廣泛的應用前景。
模型 | 發布時間 | 模型規模 | 層數 | 數據集 | 主要貢獻 |
---|---|---|---|---|---|
GPT-1 | 2018年6月 | 117M參數 | 12層 | BooksCorpus 數據集(8000本書) | 首個無監督預訓練的Transformer語言模型 |
GPT-2 | 2019年2月 | 1.5B參數 | 48層 | WebText 數據集(450GB文本) | 展示了規模對生成質量的重要性 |
GPT-3 | 2020年5月 | 175B參數 | 96層 | CommonCrawl 數據集(45TB文本) | 規模再次擴大,上下文學習能力, prompt engineering |
ChatGPT:贏在哪里
ChatGPT 是技術和商業的成功結合。
-
模型訓練:雖然GPT-3和ChatGPT都是基于Transformer的語言模型,但在訓練數據和目標函數上有所不同。GPT-3主要是用大量的非結構化文本進行訓練的,而ChatGPT則在GPT-3的基礎上進行了進一步的訓練,這包括使用與對話相關的數據集和更適合對話任務的訓練目標。
-
對話管理:在對話管理方面進行了優化,以提供更自然、連貫的對話體驗。這包括保持對話的上下文、處理多輪對話、以及在一個對話中處理多個話題等。
-
用戶輸入處理:這包括理解和響應各種類型的查詢,如信息查詢、任務請求、小說式的輸入等。
-
輸出生成:生成更貼近人類的輸出。這包括使用更復雜的生成策略、生成更長的響應、以及更好地處理模糊或不確定的輸入等。
-
安全性和道德規范:還進行了一些改進以提高模型的安全性和符合道德規范。這包括對模型的過濾和調節,以防止生成不適當或有害的內容,以及對模型進行額外的評估和測試,以確保其在各種情況下都能表現良好。
GPT-4:一個新的開始
2022年8月,GPT-4 模型訓練完成。2023年3月14日,OpenAI 正式發布 GPT-4。 與GPT-3和GPT-3.5相比,
GPT-4在各方面都有所優化和提升:
-
多模態模型: GPT-4支持圖像輸入,出色的視覺信息理解能力使得GPT-4能對接更多樣化的下游任務,如:描述不尋常圖像中的幽默、總結截屏文本以及回答包含圖表的試題。在文本理解能力上,GPT-4 在中文和多輪對話中也表現出遠超 GPT-3.5 的能力。
-
擴展上下文窗口:gpt-4 and gpt-4-32k 分別提供了最大長度為8192和32768個token的上下文窗口。這使得 GPT-4可以通過更多的上下文來完成更復雜的任務,也為 思維鏈(CoT)、思維樹(ToT)等后續工作提供了可能。
-
GPT+生態 :借助GPT-4強大能力,依托 ChatGPT Plugin 搭建AIGC應用生態商店(類似 App Store)
-
應用+GPT :GPT-4已經被應用在多個領域,包括微軟Office、Duolingo、Khan Academy等。
提示學習(Prompt Learning)
-
Prompt learning 是一種使用預訓練語言模型的方法,它不會修改模型的權重。在這種方法中,模型被給予一個提示(prompt),這個提示是模型輸入的一部分,它指導模型產生特定類型的輸出。這個過程不涉及到對模型權重的修改,而是利用了模型在預訓練階段學習到的知識和能力。
-
In-context learning 是指模型在處理一系列輸入時,使用前面的輸入和輸出作為后續輸入的上下文。這是Transformer模型(如GPT系列)的一種基本特性。例如,當模型在處理一個對話任務時,它會使用對話中的前幾輪內容作為上下文,來生成下一輪的回答。這個過程也不涉及到對模型權重的修改。
總的來說,prompt learning 和 in-context learning都是利用預訓練語言模型的方法,它們都不會修改模型的權重。它們的主要區別在于,prompt learning關注的是如何通過設計有效的提示來引導模型的輸出,而in-context learning則關注的是如何利用輸入序列中的上下文信息來影響模型的輸出。
- Prompt tuning,又稱為"prompt engineering",是一種優化技術,它涉及到尋找或生成能夠最大限度提高模型性能的提示。這可能涉及到使用啟發式方法、人工智能搜索算法,或者甚至是人工選擇和優化提示。Prompt tuning的目標是找到一種方式,使得當給定這個提示時,模型能夠生成最準確、最相關的輸出。
思維鏈(Chain-of-Thought, CoT):開山之作
Chain-of-thought(CoT) prompting 是一種利用自然語言編程的技巧,可以提高ChatGPT在復雜推理問題上的準確率。思維鏈提示的原理是參考人類解決問題的方法,從輸入問題開始的一系列自然語言形式的推理過程,直到得到最后輸出結論。思維鏈就是讓語言模型逐步推理,通過依次生成多個中間步驟z1,z2,…,zn(這些中間過程稱為thoughts),前面的生成結果會作為后續的模型輸入,直到得到最終結果y。
思維鏈提示的實現方法大致如下:
首先,選擇一個適合思維鏈提示的任務,例如數學、常識或符號推理等,需要多步驟的推理過程。然后,為任務準備一些樣例,每個樣例包含輸入問題、思維鏈和輸出結論。思維鏈是一系列自然語言形式的推理步驟,從輸入問題開始,直到得到輸出結論。接著,將樣例作為上下文輸入給大語言模型,例如GPT-3或PaLM等,讓模型學習樣例中的推理模式。最后,給模型一個新的輸入問題,讓模型生成思維鏈和輸出結論。模型會根據樣例中的推理模式,生成一系列合理的推理步驟,并給出最終的答案。
這就是思維鏈提示的基本實現方法。當然,還有一些改進和優化的方法,例如使用多數投票、自洽性檢查、自我訓練等等。
假設您想讓 ChatGPT 回答一個數學問題:
一、如果您直接給出問題,ChatGPT 回答不一定正確,例如:Q: 一個人以每小時5公里的速度騎自行車,騎了1小時后,又以每小時10公里的速度騎了2小時,他一共騎了多少公里?那么ChatGPT可能會直接給出答案,但不一定正確,也不會顯示推理過程。二、提供思維鏈示例,那么ChatGPT可能會按照類似的方式給出答案和推理過程,并且更可能正確。例如:Q: 一個人以每小時5公里的速度騎自行車,騎了1小時后,又以每小時10公里的速度騎了2小時,他一共騎了多少公里?
A: 思維鏈:
第一段路程 = 速度 x 時間 = 5 x 1 = 5公里
第二段路程 = 速度 x 時間 = 10 x 2 = 20公里
總路程 = 第一段路程 + 第二段路程 = 5 + 20 = 25公里 輸出結論:25公里Q: 一個人以每小時10公里的速度騎自行車,騎了半小時后,又以每小時15公里的速度騎了1小時,他一共騎了多少公里?
CoT Prompting 作為一種促進語言模型推理的方法具有幾個吸引人的特點:
-
首先,從原則上講,CoT 允許模型將多步問題分解為中間步驟,這意味著可以將額外計算資源分配給需要更多推理步驟的問題。
-
其次,CoT 提供了對模型行為的可解釋窗口,提示了它可能是如何得出特定答案的,并提供了調試推理路徑錯誤之處的機會(盡管完全描述支持答案的模型計算仍然是一個未解決問題)。
-
第三,在數學應用題、常識推理和符號操作等任務中都可以使用思維鏈推理(CoT Reasoning),并且在原則上適用于任何人類能夠通過語言解決的任務。
-
最后,在足夠大規模現成語言模型中很容易引發 CoT Reasoning ,只需在少樣本提示示例中包含一些連貫思路序列即可。
通過思維鏈,我們可以看到大語言模型的強與弱:
-
它強在,模型規模的提高,讓語義理解、符號映射、連貫文本生成等能力躍升,從而讓多步驟推理的思維鏈成為可能,帶來“智能涌現”。
-
它弱在,即使大語言模型表現出了前所未有的能力,但思維鏈暴露了它,依然是鸚鵡學舌,而非真的產生了意識。
沒有思維鏈,大模型幾乎無法實現邏輯推理。但有了思維鏈,大語言模型也可能出現錯誤推理,尤其是非常簡單的計算錯誤。Jason Wei 等的論文中,曾展示過在 GSM8K 的一個子集中,大語言模型出現了 8% 的計算錯誤,比如6 * 13 = 68(正確答案是78)。
自洽性(Self-Consistency): 多路徑推理
谷歌研究者提出一種名為「self-consistency」(自洽性)的簡單策略,不需要額外的人工注釋、訓練、輔助模型或微調,可直接用于大規模預訓練模型。顯著提高了大型語言模型的推理準確率。該研究在三種大型語言模型上評估一系列算術推理和常識推理任務的自洽性,包括 LaMDA-137B、PaLM-540B 和 GPT-3 175B。研究者發現,對于這幾種規模不同的語言模型,自洽方法都能顯著提高其推理能力。與通過貪心解碼(Wei et al., 2022)生成單一思維鏈相比,自洽方法有助于在所有推理任務中顯著提高準確性,如下圖 2 所示。
具體步驟如下:
首先,使用一組手動編寫的思維鏈示例對語言模型進行提示;
接著,從語言模型的解碼器中采樣一組候選輸出,生成一組不同的候選推理路徑;
最后,通過在生成的答案中選擇最自洽的答案來集成結果。
在實驗調查中,研究者發現思維鏈提示與相結合,會比單獨使用僅考慮單一生成路徑的思維鏈產生好得多的結果。
思維樹(Tree-of-Thoughts, ToT): 續寫佳話
Tree of Thoughts(TOT),它允許語言模型在解決問題的中間過程進行探索,通過考慮多種不同推理路徑并進行評估,同時具備向前看跟向后回溯的能力以獲得更佳決策選擇。
TOT 使語言模型可以去探索多個推理路徑。把解決問題視作在一棵樹上的搜索,樹上的每個節點代表當前的狀態s=[x,z1,…,zi],狀態包括原始的問題以及到目前為止的思考過程。一個完整的Tree of Thoughts包括以下4個過程:
-
Thought decomposition 思維分解
如何將推理中間過程 分解 成多個想法步驟。不同于CoT會在沒有明確分解的情況下連續對thoughts采樣,ToT 會根據問題屬性去設計和分解中間的想法過程。每個想法應該足夠小,使得語言模型可以生成有潛力跟多樣的樣本(生成一本書就太長了,很難保證連貫性),同時又應該足夠大,使得語言模型可以評估該想法解決問題的潛力(只生成一個token就太小,很難去評估對于解決問題的幫助)。
-
Thought generator 思維生成,根據當前狀態生成候選想法。
-
State evaluator 狀態評估。
讓狀態評估器評估它們對于解決問題的幫助,以確定哪些狀態值得繼續探索,以及以何種方式探索。
-
Search algorithm 搜索算法。
Tree of Thought支持插入多種依賴于樹的搜索算法,論文中探索了其中兩種相對簡單的搜索算法。 a) BFS,廣度優先算法,每一步中保留最優潛力的K個狀態。 b) DFS,深度優先算法,優先探索最優潛力的狀態,直到得到最終結果(解決了問題),或者超過當前狀態被評估不可能解決問題就停止,如果是后者的話可以退回父節點,繼續進行探索。
從概念上講,ToT 作為LM通用問題求解方法具有幾個優勢:
(1) 泛化性。IO、CoT、CoT-SC 和自我完善都可以看作是ToT的特殊情況(即有限深度和廣度的樹;圖1)
(2) 模塊化。基本LM以及思考分解、生成、評估和搜索過程都可以獨立變化。
(3) 適應性。可以適應不同的問題屬性、LM能力和資源約束。
(4) 方便性。無需額外訓練
ToT 為復雜推理問題提供了一種新的解決方案,雖然用戶可以靈活調整其中的模塊,但是往往需要更多的資源(例如更多次數的模型調用)才能提升某個任務下的表現。雖然目前這種方式沒涉及模型訓練,但是利用ToT的相關任務來微調語言模型可以進一步提升語言模型解決問題的能力,例如將模型訓練中預測下一個token的任務改成考慮下一個段落的選擇。