目前我們已經介紹了大語言模型訓練的兩個主要階段。第一階段被稱為預訓練階段,主要是基于互聯網文檔進行訓練。當你用互聯網文檔訓練一個語言模型時,得到的就是所謂的 base 模型,它本質上就是一個互聯網文檔模擬器,我們發現這是個有趣的產物,需要數千臺計算機耗費數月時間訓練。它有點像互聯網的有損壓縮版本。雖然極其有趣,但它并不直接實用,因為我們并不需要生成互聯網文檔樣本。
我們想要向 AI 提問并讓它回答我們的問題。為此,我們需要一個助手。我們發現,實際上可以在后訓練的過程中,特別是在我們稱之為監督微調的過程中構建這樣一個助手。因此在這個階段,我們發現它在算法上與預訓練完全相同,不會有任何改變。唯一變化的是數據集。因此,我們不再局限于互聯網文檔,而是希望構建并精心打造一個優質的對話數據集。我們的目標是收集數百萬條涵蓋各類話題的人機對話記錄。從根本上說,這些對話內容都將由人類創造生成。
人類負責編寫提示詞,人類也負責撰寫理想回復。他們依據標注文檔來完成這些工作。在現代技術棧中,這些工作實際上并非完全由人工手動完成,如今他們其實得到了這些工具的大量協助。因此,我們可以利用語言模型來協助創建這些數據集。并且我們會對其進行全面測試。但歸根結底,這一切最終仍源自人類的精心篩選。所以我們創建了這些對話,這現在成為了我們的數據集。我們對其進行微調或繼續訓練,最終得到一個助手。
然后我們轉變了話題,開始討論這個助手可能帶來的一些認知影響。我們發現,如果不采取一些緩解措施,助手會出現幻覺現象。因此,我們認識到幻覺可能會很常見。然后我們研究了一些緩解這些幻覺的方法。接著我們發現這些模型相當出色,能在腦海中處理大量信息。但我們也發現它們可以借助工具來提升表現。我們可以借助網絡搜索來減少幻覺的產生,或許還能獲取一些更新的信息或類似的內容。或者我們可以利用代碼解釋器等工具,這樣大語言模型就能編寫代碼并實際運行它、查看結果。這些就是我們目前探討過的部分主題。
現在我想做的是介紹這個流程的最后也是最重要的階段,那就是強化學習。目前強化學習仍被認為屬于后訓練微調的范疇。但這是最后一個主要階段。這是一種不同的語言模型訓練方式,通常作為第三步進行。
十一、強化學習階段
上面提到的這些階段基本都是由獨立的團隊負責,有的團隊專門負責預訓練的數據工作,另一個團隊負責預訓練的訓練工作。此外,還有一個團隊專門負責對話生成,而另一個不同的團隊則負責監督微調。還會有一個團隊負責強化學習部分。這有點像這些模型的生產流水線過程:你先獲得基礎模型,然后微調成助手,接著進入強化學習階段。這就是大致的主要流程。
現在讓我們專注于強化學習,這是訓練的最后主要階段。首先,讓我解釋一下為什么要進行強化學習,以及從高層次來看它是什么樣的。那么現在我想試著解釋一下強化學習階段及其對應的含義,基本上,這就相當于上學的過程。
就像你上學是為了精通某項技能一樣,我們也要讓大語言模型接受學校教育。實際上,我們正在通過幾種范式來賦予它們知識或傳授技能。具體來說,當我們使用學校教材時,你會發現這些教材包含三大類信息——三類主要的知識模塊。

(藍色箭頭)首先你會注意到的是書本中存在大量解釋性內容,就像是背景知識之類的,當你閱讀這些說明性文字時,可以大致將其視為對這些數據的訓練,這就是為什么當你閱讀這些背景知識和上下文信息時,它有點像預訓練的過程,我們在這里構建了一個關于這些數據的知識庫,并對主題有了初步了解。
(紅色箭頭)接下來你會看到的主要信息是這些練習題的問題及其解決方案。簡單來說,這本書的作者作為人類專家,不僅給我們提出了問題,還提供了解決方案。這個解決方案基本上等同于一個理想助手的完美回答。也就是說,專家實際上是在向我們示范如何解決這個問題。當我們閱讀解決方案時,實際上是在用專家數據進行訓練。之后,我們就可以嘗試模仿專家的做法。這大致相當于擁有了 SFT 模型。所以基本上,我們已經完成了預訓練,并且已經涵蓋了專家模仿以及他們如何解決這些問題。
(綠色箭頭)學習的第三階段基本上是練習題。有時你會看到這里只有一個練習題,任何教科書的每章末尾通常都會有許多練習題。當然,我們知道練習題對學習至關重要,因為它們能讓你做什么呢?它們能讓你自己動手實踐,并探索解決問題的方法。在練習題中,你會看到一個問題的描述,但不會直接給出解法,不過通常會提供最終答案(一般在教科書的最后答案部分)。所以你知道自己要達到的目標答案,也有問題的陳述,但沒有具體的解題步驟。你正在嘗試實踐解決方案。你嘗試了很多不同的方法,看看哪種方法能最好地幫你找到最終解決方案。因此,你正在自己探索如何解決這些問題。
在這個過程中,你首先依賴于來自預訓練的背景信息,其次可能還會稍微模仿人類專家的做法。你或許可以嘗試類似的解決方案等等。我們已經完成了這些步驟,現在在這一部分,我們將嘗試進行實踐。因此,我們將獲得提示內容以及最終的答案,但我們不會得到專家級的解決方案。我們必須不斷自己實踐和嘗試。這正是強化學習的核心 所在。
強化學習
在前文中,我們曾演示過,小明買蘋果和橙子的計算題示例,我們把這個問題扔給 chatgpt,它可以每次都輸出一些不同的中間過程,并且最終計算的結果也是正確的,例如我們重復了 4 次,這里有四個可能的候選解決方案作為例子,它們都得出答案 3。現在,我想讓你意識到的是,如果你是負責創建對話的人類數據標注員,要將對話輸入訓練集,你應該做什么樣的選擇呢?實際上你可能并不確定該將其中哪個對話添加到數據集中。
其中一些對話會建立方程組,有些則只是用文字的形式討論問題,還有些則直接跳到解決方案。但我們必須明白并區分的是,解決方案的首要目的當然是得出正確答案。我們想要得到最終答案 3,這是這里的重要目的。但還有一個次要目的,就是我們也在努力讓它對人類友好,因為我們假設這個人想看到解決方案,他們想看到中間步驟,我們想很好地呈現它,等等。
所以這里有兩件不同的事情。第一件是向人類展示,第二件,我們實際上是在試圖得到正確的答案。所以讓我們暫時專注于得出最終答案。如果我們只關心最終答案,那么在這些選項中,哪個是最優的或者說最佳解決方案,能讓大語言模型得出正確答案?我們并不知道。
也許讓 token 更分散地展開會更有效,也許把它列成方程式會更好,也許通過討論來解決會更合適。從根本上說,我們并不清楚。我們不清楚的原因是,對你我或人類標注員而言容易或困難的任務,與對大語言模型來說的難易程度并不相同,它的認知方式與我們不同,對我來說輕而易舉的 token 序列,對 LLMs 來說可能是個巨大的跨越。
而且,由于一些書寫格式的問題,我們創建的許多 token 對 LLMs 來說可能毫無意義。我們只是在浪費 token,既然這些都無關緊要,為何要浪費這些 token 呢,如果我們唯一關心的是得到最終答案,而將呈現給人的問題分開考慮,那么我們實際上并不知道該如何標注這個例子。
我們不知道應該給大語言模型提供什么解決方案,因為我們不是大語言模型。這在數學案例中表現得非常明顯,但實際上這是一個普遍存在的問題。我們的知識并不等同于大語言模型的知識。這個大型語言模型實際上掌握了大量數學、物理、化學等領域的博士級知識。在很多方面,它確實比我們知道得更多。而我可能在解決問題時并沒有充分利用這些知識。
但反過來,我可能在解決方案中注入了一堆大語言模型參數中并不掌握的知識。這些突如其來的知識躍遷會讓模型感到非常困惑。因此,我們的認知方式存在差異。如果我們只關心最終解決方案并以經濟高效的方式實現目標,那我真的不知道該在這里寫些什么。簡而言之,我們目前并不擅長為 LLM 創建這些 token 序列。但我們真正希望的是讓大語言模型自己去發現適合它的 token 序列。它需要自行找出在給定提示下能可靠得出答案的 token 序列,它需要通過強化學習和試錯的過程來發現這一點。
強化學習的基本運作方式其實相當簡單。我們需要嘗試多種不同的解決方案,然后觀察哪些方案效果好,哪些效果不佳。所以我們要做的就是輸出提示,運行模型。模型會生成解決方案。然后我們會檢查這個解決方案。我們知道這道題的正確答案是 3 元。然后我們多重復運行幾次,每次模型都會給出不一樣的內容,每次得到的答案也可能正確,也可能不正確。
因此在實際操作中,你可能會針對同一個提示采樣數千個獨立解,甚至可能達到百萬量級。其中一些會是正確的,另一些則不太正確。基本上,我們希望做的是鼓勵那些能得出正確答案的解決方案。

這個示意圖,展示了大致的樣貌。我們有一個提示,然后我們并行嘗試了許多不同的解決方案。其中一些方案可能表現良好,因此它們得到了正確的答案,用綠色表示。有些解決方案可能效果不佳,甚至無法得出正確答案——也就是紅色。不過,眼前這個問題其實算不上最佳范例,因為它實在過于簡單。
但讓我們發揮一下想象力。假設綠色的代表好的,紅色的代表壞的。好的,我們生成了 15 個解決方案,其中只有 4(3 綠 1 黃)個得到了正確答案。那么現在我們要做的就是,基本上,我們希望鼓勵那些能得出正確答案的解決方案類型。所以,在這些紅色解決方案中出現的任何 token 序列,顯然在某個環節出了問題,它們并不是解決這個問題的好方法。那些綠色解決方案中的任何 token 序列,在這種情況下都表現得相當不錯。因此,我們希望在這類提示中更多地采用類似的做法。
而我們鼓勵未來這種行為的方式,本質上就是對這些序列進行訓練。但現在這些訓練序列并非來自專家的人工標注,也沒有人判定這就是正確的解決方案,這個解決方案源自模型本身。因此,模型在這里進行實踐,它嘗試了幾種解決方案,其中 4 種似乎奏效了,現在模型將對這些方案進行某種訓練。而這相當于一種認可,就像在說:“好吧,這個確實效果很好。所以我應該用這種方式來解決這類問題。”
為了傳達核心概念,或許可以簡單地理解為從這 4 個方案中選出最優的一個,比如標為黃色的這個。這個方案不僅得出了正確答案,可能還具有其他優點。也許它是最簡潔的,或者在某種程度上看起來最漂亮,或者你還能想到其他評判標準作為例子。但我們會認定這是最佳解決方案,并據此進行訓練。經過參數更新后,模型在未來遇到類似情境時,就會更傾向于選擇這條路徑。但必須記住,我們會在大量數學、物理等各種問題上運行多種多樣的提示。
因此,成千上萬的提示詞背后,可能對應著每個提示詞都有數千種解決方案。這一切幾乎是在同時發生的。隨著我們不斷迭代這一過程,模型會自行發現哪些 token 序列能引導它得出正確答案。這不是來自人類標注者的數據。模型就像在這個游樂場里玩耍。它知道自己想要達到什么目標,并且正在發現對它有效的序列。這些序列不需要任何思維跳躍。它們看起來可靠且符合統計規律,并充分利用了模型已有的知識。這就是強化學習的過程。這基本上就是一個不斷試錯的過程。我們會嘗試各種不同的解決方案,驗證它們的效果,并在未來更多地采用那些行之有效的方法。這就是強化學習的核心思想。
因此,結合之前的討論,我們現在可以看到,監督微調模型仍然是有幫助的,因為它有點像將模型初步引導到正確解決方案的附近。可以說,它是對模型的一種初始化,讓模型能夠生成解決方案,比如寫出解題步驟,或許還能理解如何建立方程組,或者以某種方式與解決方案進行"對話"。這樣,它就能讓你接近正確的解決方案。
但強化學習才是真正讓一切趨于完美的關鍵。我們會不斷探索適合模型的解決方案,找到正確答案并加以鼓勵,這樣模型就會隨著時間的推移逐漸變得更好。
以上就是我們訓練大語言模型的高層次流程。簡而言之,我們訓練 AI 的方式與教育兒童非常相似。唯一的區別在于,兒童是通過書籍的章節學習,在每本書的不同章節中完成各類訓練練習。而我們訓練 AI 時,更像是根據每個階段的特點分步驟進行。
首先,我們進行預訓練,這相當于閱讀所有的說明性材料。我們會同時瀏覽所有教材,閱讀所有解釋內容,并嘗試構建一個知識庫。接下來,我們進入監督微調階段,這一階段主要是研究人類專家提供的各種固定解法,涵蓋所有教材中的各類習題解答。而我們得到的只是一個 SFT 模型,它能夠模仿專家的行為,但某種程度上是盲目模仿。它更像是盡最大努力去猜測,試圖從統計角度模仿專家的行為。因此,當你查看所有解決方案時,這就是你所得到的結果。
最后,在最后一個階段,我們會在強化學習階段完成所有的練習題。我們只做所有教材中的練習題。這就是我們得到強化學習模型的方法。
事實上前兩個階段——預訓練和監督微調——已經存在多年,它們非常標準化,所有不同的大語言模型提供商都在采用。而最后一個階段,即強化學習訓練,目前仍處于發展初期,在該領域尚未形成統一標準。原因在于,我實際上跳過了這個過程中的大量細節,但此處我們暫不展開更多內容。
但高層次的理念的確非常簡單,就是一種不斷試錯學習的過程,但其中涉及大量細節和微妙的數學技巧——比如如何挑選最優解、訓練量如何把控、提示詞分布如何設計,以及如何設置訓練流程才能使其真正奏效。核心思想雖然極其簡單,卻需要調節無數細枝末節的參數。因此,要把這些細節做到位絕非易事。