2023年的大模型:OpenAI科學家最新講座
編者按:本文來自微信公眾號:Web3天空之城(ID:Web3SkyCity),作者:城主,微新創想經授權發布。
我將在此討論2023年的大型模型。
你可能會問,為什么要特意強調“2023年”這個時間點?當我們說“大型”,這其實是有些誤導性的。因為今天所稱的大型模型,在未來幾年內可能就被視為小型了。隨著我們對“規模”的定義發生變化,我們在目前的大語言模型中所做的許多見解和結論都可能會變得過時,甚至在某些情況下變得不再適用。然而,幸運的是,那些基于基本原則的見解往往會持續得更長久,比那些初看起來很有前景的新穎觀點更為持久。
在本次分享中,我想與大家分享我過去四年在這一領域的工作中得到的基本認識,這些都是我從與一些非常聰明的人交流中獲得的。我希望,我今天分享的內容都是基于基本原則的,能夠在未來幾年內保持其相關性。那么,讓我們開始吧。
大型語言模型的一個特點是,某些能力只有在達到一定規模時才會顯現。這使得我們需要從不同的角度來看待這個領域。這是我想表達的。此處的具體細節并不重要。在X軸上,我們可以考慮模型的規模,比如模型的參數數量、訓練數據的大小、所用的計算資源等。而在Y軸上,可以是你所關心的任務的某些性能指標。我們已經反復觀察到這樣的模式:小型模型在某些任務上幾乎無法取得任何進展,但當模型達到一定規模時,它突然就能夠完成這些任務了,有時甚至能做得很好。我們稱這種現象為“涌現”,就像某種能力突然“涌現”出來。這在大型語言模型中是非常獨特的。
這為AI研究者提供了一種全新的視角。首先,是“尚未”這種觀念。假設我們有一個新想法,例如一個新的推理技巧,我進行了實驗,發現它不起作用。大部分時間,確實如此。但我不會說這個想法永遠不會起作用,我只會說“現在還不行”。這確實是一種根本的思維轉變。這意味著,這個想法可能在當前的模型上不適用,但在三、五年后的模型上,它可能會起作用。
為什么這種觀點在以前不是那么明顯呢?我們已經習慣于在一個基本規律不會真正改變的環境中工作。例如,如果你在物理實驗或熱力學研究中有了一個新的想法,但實驗失敗了,你知道這個想法在三年、甚至三十年后都不會成功。但在AI領域,情況則完全不同。例如,GPT-4發布后,研究者們在其基礎上進行了大量實驗,建立了新的直覺。但隨著新模型的發布,很多之前的想法和直覺就變得過時了。
這種轉變需要我們不斷地更新、拋棄那些基于過時觀點的直覺,這對于許多研究者來說是一個新挑戰。但這也為新入行的研究者提供了機會。他們可以帶來新的視角,嘗試那些在以前的模型上不起作用的想法,而在新的模型上,這些想法可能突然就有效了。這種情況在AI這個競爭激烈的領域已經發生了很多次,這是一個非常有意思的現象,值得我們深入思考。
我想分享的下一個觀點與我們如何站在前沿,特別是與縮放曲線有關。這是我要表達的核心思想。在我的日常研究中,我總是在腦海中構建一個畫面,并記錄所有不成功的實驗。這些失敗往往是因為某種“智力”上的不足。這可能是一個模糊的描述,但也許這意味著沒有足夠的推理能力去解決某個復雜的數學或編程問題。因此,我會把這些記錄下來,但并不會立即標記為失敗,這樣在未來可以輕松地重新進行嘗試。當出現新的、更優秀的模型時,我會再次運行這些實驗,以判斷哪些是成功的,哪些是失敗的。通過這種方式,我不斷更新我的認知,學習新的知識,并圍繞新興能力建立直覺,這與“規模”緊密相關。我相信,這種思維方式將變得越來越重要。
為了進一步解釋,讓我們簡化一下。并不是說所有的任務都需要大規模的處理,但有時確實需要。為了說明,我以GPT-3和GPT-4為例,它們代表了不同的規模。考慮以下三個能力層面:對于“能力一”,GPT-4尚未達到,但它非常接近一個轉折點,這意味著我們可能會突然看到一個躍進式的改進。對于“能力二”,盡管我們有了強大的GPT-4,但仍然有很大的距離,目前的方法可能還不能提供實質性的幫助。而對于“能力三”,GPT-3已經超越了轉折點。在這個階段,我所進行的研究可能只會帶來漸進式的改變。
這是一個提示:實際上,我經常發現我正在解決的問題不僅僅是上述兩三種。但只要我堅持這種思維框架,并經常回顧和反思,更新我的直覺就會變得更加容易,幫助我明確我到底在解決哪種問題。這就是我想向大家介紹的核心思想。總的來說,我們所做的一切都與“規模”有關,而從“規模”的角度看問題確實非常關鍵。
但如何真正實現這種“縮放”呢?我將在接下來的時間中深入探討這個問題。目前為止,所有的大型語言模型都采用了Transformer架構。你可能已經對此非常熟悉了。但在這里,細節不是那么重要。我們要關注的是基本的思想,并從基礎原理出發。為此,我們需要過濾掉不必要的細節。
事實上,Transformer的內部結構對我們來說并不那么關鍵。我們可以從功能的角度來看待Transformer,將其視為一個包含一系列矩陣乘法的序列到序列的映射。其輸入是一個長度為D的序列,代表Transformer的寬度和長度;輸出也是一個同樣大小的數組。
這主要用于模型訓練。雖然對于實際推理,情況可能有所不同,但縮放主要是在預訓練階段發生的,且輸入和輸出的長度是相同的。這是一個非常簡化的視角,但它提供了一個清晰的圖景。在此基礎上,我們可以進一步思考輸入和輸出的形狀,以及從一開始就會發生的事情。例如,我們可能有一個句子,這只是一個簡單的字符串。然后,我們需要對其進行標記化,使用BPE或句子片段等方法,這基本上是一個嘗試盡可能壓縮文本的外部模型。這樣,我們就可以得到一個整數列表。接下來,我們會將這個列表嵌入到一個隱藏的空間中,這就是所謂的詞嵌入。
每個標記現在都被表示為一個長度為D的向量,并且我們有這些向量的總長度。這就是實際計算的開始。我們有N個Transformer層,這些層只是從一個序列映射到另一個相同的序列。這里,一切都與規模有關,而且我們盡量不要做過多的假設。我們希望每個序列標記都能與其他標記進行交互,所以我們應該允許它們這樣做,但不要限制它們的交互方式。在Transformer中,一種實現這一點的方法就是通過計算點積。這就是我們要達到的目標。
模型的學習和計算細節,如點積的獲取,雖然復雜,但都是為了執行主要的計算任務。這些計算主要在高維數組中進行,涉及到矩陣乘法和數組計算。在Transformer模型計算的最后階段,我們得到了一個序列。接著,我們采用特定的損失函數(我稍后會介紹這個函數)來評估模型的預測。這個損失函數基于模型對下一個Token的預測來計算最大可能性。目標是預測下一個標記,并根據預測的準確性得到一個數值。有了這個數值后,我們會進行反向傳播,更新模型的所有參數。
在實際應用中,這些計算是批量進行的。這意味著我們的計算不僅僅針對一個數據點,而是同時處理多個數據點。整個數據批次中唯一的相互依賴是在最后的計算損失步驟,我們會取其平均值。
這就是模型計算的全部過程。絕大部分的計算都在這里發生。因此,當我們討論如何擴展Transformer模型時,這就是我們要關注的關鍵部分。
擴展Transformer從根本上來看,就是要確保這部分的計算能夠在很多機器上高效地執行。這涉及到如何將Transformer中的所有這些矩陣合理地分配給各種機器。關鍵是要確保在盡量減少機器之間的通信的同時進行合理的分配。
考慮到我們需要在多臺機器上進行大量的矩陣乘法,我們首先從一個簡單的矩陣乘法例子開始。假設我們有八臺機器,可能是CPU或GPU。我們的任務是執行一個16×16的矩陣乘法。
為了實現這一目標,我們首先需要對硬件有一個抽象的認識。這八臺機器可能位于同一個房間,或者分布在不同的地方。我們不需要過多地關心它們的物理布局,而是在虛擬空間中定義一個網格來表示它們。
每臺機器都負責矩陣的一部分。我們使用顏色編碼來表示A矩陣的各個部分應該分配給哪臺機器。這種方式使得每臺機器都可以并行地執行其分配到的任務。
這就是我們如何分配矩陣以及每臺機器應該執行的任務。
首先,我們來探討機器的工作原理。對于輸出矩陣C,在執行矩陣乘法后,我們的目標是使機器一的切片位于8×4的左上角。這是一個明確的需求。
接下來,我們需要確定機器要執行的操作。考慮矩陣乘法的特性,我們通常對列和行進行計算。為了完成這個操作,機器需要獲取額外的數據。它自身并不擁有執行此操作所需的全部數據。為了解決這個問題,我們執行了一系列收集操作,這是MPI中的一個操作。具體來說,機器需要與其他四臺機器進行通信來獲取數據。每臺機器都有其本地的數據存儲。當機器一與機器二、三、四通信并獲取所需數據后,它將擁有所有的數據副本。這種收集操作被所有機器執行,這也是為什么它被稱為“全體收集”而不僅僅是“收集”。
當機器擁有所有必要的數據副本時,它可以開始計算。值得注意的是,這種計算是在所有八臺機器上并行進行的,這也是其能夠快速計算的原因。但這也帶來了一個代價,即通信成本。我們需要確保計算的速度優勢超過了通信的代價。
對于矩陣乘法,我們可以總結為使用“愛因斯坦求和符號”。這為我們提供了一種高層次的方法來描述數組計算。基本規則是,如果一個字母在兩個輸入中都出現,則將它們的分量相乘。例如,numpy中的A乘以B可以表示為兩個字母I的乘積。如果一個字母沒有出現在輸出中,則需要對該維度進行求和。這與矩陣和向量的乘法相似。
愛因斯坦求和提供了一種更為通用的方法,允許我們增加更多的維度,不僅僅是二維或一維。因此,從這個角度來看,矩陣乘法可以表示為愛因斯坦的MN,MP,其中M是收縮維度。這就是為什么我們要這樣做的原因
首先,我們有各種標簽的數組軸,例如“國會議員”和“明尼蘇達州”。這種映射方式就是將N映射到Y軸和X軸的數組軸。有沒有想過,有一種神奇的裝飾器可以自動并行化這種映射并為你完成所有工作呢?我稍后會詳細討論這種實現方法,但真正的實現過程與此非常相似。我們可以將其視為一種魔法,它只需插入在二維中聚集的所有數據,并返回其并行化版本。這就是全部內容。
愛因斯坦求和為我們提供了一個框架,告訴我們需要做什么。當我們談論Transformer時,我們主要關心的是自注意力層,這是Transformer的核心部分。除了softmax外,所有這些操作都可以用Einsum來表示。你可以簡潔地將其布局,其中X是三維序列,是模型的長度。所有其他參數都是模型學習和更新的參數。當你擁有這種布局時,你就得到了一個帶有標簽數組軸的愛因斯坦運算。
現在,我們如何并行化這個操作呢?首先,我們有八臺機器。我們不再使用X或Y這樣的標簽,而是按照慣例使用“數據”和“模型”這兩個詞。這意味著數據并行和模型并行。這種網格并行方式最初是TensorFlow在2018年提出的,雖然現在有些過時,但我們仍然使用這個術語。
為了并行化,我們只需稍作修改。我們并行化它,并將B作為數據映射,因為B代表了最佳維度。我們在數據軸上分配了不同的機器,而N是序列長度。在Transformer的任何并行版本中,我們都不會跨序列長度進行并行化,因為那里發生了很多相似的操作。而與D、H(頭數)相關的是模型維度。實際上,這就是為什么多頭注意力是如此有效的原因。它是由并行策略驅動的。
現在,一旦你有了這種并行策略,你可以使用完全相同的代碼,并行化它,并在八臺或任意數量的機器上運行。這是一個常見的例子,使用八臺機器,但這個框架實際上可以適用于任意數量的機器。從谷歌的博客文章中可以了解,實際上在TPU V4 Pod中,它可以使用高達3072個芯片。當我們訓練Palm模型時,我們使用了兩個pods,所以這里我們使用了6000個芯片,每個芯片的計算能力都與高端GPU相當。
如今,你手頭擁有這批強大的機器,你可以按照固定的模式定義一個網格。模型并行維度為48,數據并行維度雖然在2D中顯示,但可以擴展到64。在Palm中,我們采用了不同的配置,但核心思路仍然相同,只是機器數量有所增加。一個需要注意的細節是DCN(數據中心網絡)的數據并行性。當兩個Pod之間沒有直接連接,但都連接到數據中心網絡時,其傳輸速度大約為每秒25GPS,這相對于連接GPU pod的速度來說是較慢的。因此,我們在此處避免了模型并行化。在進行梯度計算后,我們在數據中心網絡上進行梯度求和,這個過程大約需要一秒鐘。盡管我不確定具體的時間,但這并不重要,因為當我們訓練像Palm 5400億這樣的模型時,每個訓練步驟需要大約17秒,所以額外增加的一兩秒并不會帶來太大影響。
這種體驗確實很有趣,我只需要輸入代碼,然后在我的筆記本電腦上運行,程序就會自動在所有這些機器上執行。這種規模化的方法,如果你真正理解了它,最后的實現其實只是我剛剛描述的大量機器上的矩陣乘法。所以,我們一直都在假設這種并行化裝飾器是可行的,但如何真正實現它呢?一種方法是使用GSPMD,這是一種基于編譯器的方法。你可以編寫神經網絡代碼,就像你擁有一臺擁有無限內存的機器一樣,不需要進行任何并行化處理。我們就是這樣做的,不進行任何通信,只是表示神經網絡的核心部分,并將訓練步驟表示為一個計算圖。你只需要指定這些輸入和輸出如何映射到硬件軸,然后交給XLA處理,它會自動插入所需的通信操作。這種方法確實像魔法一樣,但它并不總是有效,需要經過多次迭代,并且很多人都在嘗試。但現在,許多大型模型,如Google、P5、Palm、Switch和Transformer,都使用GSPMD作為后端,完全采用我所描述的方法。當然,還有其他的方法。我對其他方法不是很熟悉,但你可以考慮手動注解和編譯器操作。但無論采用哪種方法,最終的過程都是相同的,都涉及將數組軸映射到機器。有時手動方法更為優越,因為它提供了更多的控制權。
以下是一些具體的例子。對于許多研究人員來說,使用GSPMD進行并行化可能過于復雜。因此,Jax推出了一個名為Pjit的前端接口。我推測它被稱為Jit是因為它變得非常實用。我們需要并行化定義的訓練步驟。我們用Jax的Pjit作為裝飾器來包裝這個步驟。這樣,你得到的訓練步驟可以在大量機器上運行。這個具體的代碼實際上就是用來訓練Palm的。你可以查看這些代碼,了解它們是如何工作的。盡管有些代碼模板化,但既然你已經熟悉了這個框架,你可能對其中的內容有所了解。這些代碼是開源的,基于T5X框架構建。我們還有一篇簡短的論文描述了該系統,鏈接在文章底部。
現在,從工程和硬件系統的角度來看,這些都很好。但從機器學習的角度來看呢?最近發布的Llama2模型在成功運行后的表現非常好。但實際進行預訓練時,迭代不同的想法的成本是非常高的。你可能想嘗試不同的數據分割方式或其他方法,但每次都需要在大規模上運行,這非常耗費資源。如果你正在進行這樣的運行,你可能會面臨這樣的場景:假設你有2萬億個Token,需要運行50天。然后,你可能需要花費一天的時間來評估進展情況。在此情境下,你需要做出決策,例如,"看起來我們的700億模型表現得很好。"但這種決策非常困難,因為你已經花費了大量的GPU時間。這種情境下的決策制定是非常緊張和困難的。
預訓練的核心是所謂的"縮放法則"。GPT-4的技術報告和OpenAI之前的論文都討論過這個概念,我認為這是一個關鍵的概念。我們在這里討論的是如何預測,如何根據小規模模型的性能外推到更大規模的模型,比如GPT-4。這種縮放定律是基于小規模模型的數據開發的。這為我們提供了一個指導方針,幫助我們預測模型在更大數據上的表現。如果你可以預測模型的擴展損失,那么這將是一個非常有價值的工具。預訓練的這一部分確實非常關鍵。我想說的是,盡管現在的擴展比兩年前更為簡單,但仍然是一個巨大的挑戰。這不僅僅是簡單地擴大模型規模,還有很多其他考慮因素需要考慮。
以下是一些具體的例子。在Palm的訓練過程中,我們遇到了損失值的高峰現象。這個問題實際上已經在論文中被提及,你可以去查閱。整個訓練過程中,大約出現了20次損失高峰,這讓很多人感到擔憂,因為損失值突然從兩點上升到了六點。這種情況確實不太理想。為了解決這個問題,我們訓練了三個模型,使用完全相同的數據,但只有一個模型出現了這種情況。這種問題很難調試,并且在小規模上很難復現。我們確定這并不是由于數據問題引起的。一些研究者進行了實驗來驗證這一假設。每當這種情況發生時,它都會造成大量計算資源的浪費,這使得大規模訓練變得更具挑戰性。
盡管如此,隨著技術的進步,對于某個給定的規模,如Llama模型,訓練變得更加容易。但與此同時,我們也發現,技術規模的增長速度超過了解決這些問題的速度。大多數人并不會嘗試在更大的規模上訓練模型,他們可能會選擇等待其他研究者的進展,并基于此進行進一步的研究。
這自然地引導我們進入了下一個話題:僅僅增大規模并不能解決所有問題。除了大規模的工程工作,我們還需要進行更多的研究,尤其是在模型訓練完成后。讓我來解釋一下為什么我們可能需要在訓練后進一步優化模型。由于預訓練模型的學習目標僅僅是預測下一個Token,我們不能直接與它交互。例如,如果輸入是一個問題,模型可能會持續生成內容,而不是直接回答這個問題。我們所期望的是一個簡潔的答案。為了解決這個問題,我們采用了一種技巧,即構建問題,使得答案恰好是下一個Token。這確實是一個有力的技術,但它并不是真正的通用解決方案。
更大的問題是,預訓練模型可能會盲目地生成內容,即使這些內容是惡意的或有害的。特別是,模型不知道如何拒絕某些提示。因此,所有這些我們認為重要的能力,例如與人類價值觀的一致性,都需要在訓練后的階段進行教育。我更喜歡稱之為"訓練后Post-Training"。
以下是當前大型語言模型的四個主要階段。首先,預訓練是第一階段。接下來的三個階段分別是:指令微調(有時也被稱為SFT,即監督微調)、獎勵模型的訓練以及策略模型的訓練。這也涉及到了RLHF,即強化學習的部分。我們將按照1、2、3的順序逐個介紹這些階段。
首先,我們來探討指令微調。其核心思想是為所有任務建立從自然語言指令到自然語言響應的映射。回想一下,我們在采納這種方法之前是如何進行任務的。
例如,在2018年,當時最先進的模型是BERT。如果我們需要完成一個分類任務,我們將首先使用BERT對句子進行編碼,然后將其映射到分類空間,這需要一些特定于任務的參數。但當我們嘗試進行多任務學習時,這種方法就顯得不太實用。
在T5模型中,這個問題得到了改善,因為它的輸入和輸出都是文本。因此,所有的任務都可以通過文本到文本的映射來完成,這使得多任務學習變得更加簡單。
但在多任務學習中,模型需要知道它正在執行哪個任務。為了解決這個問題,我們可以為模型提供元數據,比如"這是COLA任務"。但這種方法感覺有些不自然。相反,指令微調的方法則是使用自然語言來描述任務,例如"判斷以下句子是否可接受",這樣模型就能理解并執行相應的任務。
回顧過去,這種方法在T5或2018年并不明顯,因為當時人們并不認為語言模型能夠理解這些指令。但隨著模型規模的增長,我們發現模型確實有能力在某種程度上理解這些指令,并利用自然語言的豐富性來統一各種任務。這就是指令微調的基本思想。進一步地,我們也可以將這種方法擴展到對話場景中,其中模型可以與另一個代理進行交互,而不僅僅是簡單地響應指令。這就是指令微調的核心思路。
去年,我在谷歌工作時撰寫了一篇論文,探討了指令微調的潛能及其邊界。但在深入討論之前,我想先說明一點。當我們按照特定的指令進行模型訓練時,可能會遇到在訓練過程中未曾涉及的新任務。但由于這些新任務仍然是基于指令的,所以只需按照這些指令來操作模型即可。這就是所謂的“概括”。這是一個非常核心的概念。那么,一個自然的問題是,如果訓練集中包含更多的指令,是否能得到一個更好的模型?這樣的模型是否能夠更好地概括?
為了驗證這一點,我們收集了大量的學術任務,總共有1836個,并將它們結合起來進行訓練。我不打算深入細節,但我已經在論文的末尾提供了鏈接,供有興趣的讀者查閱。這篇論文描述了Flan、T5和Plan等模型的起源。我們制作了一些圖表來展示,其中X軸表示模型的大小,包括80億、620億和5400億。Y軸表示了評估集的平均分數。我們精心選擇了其中6個在訓練過程中未見過的難度較大的任務。可以看到,一個擁有80億參數的模型表現得相當好,但其分數仍低于10%。
因此,我們的結論是,盡管增加更多任務可以提高性能,但其效果是遞減的。這一點在另一張圖中可能更為明顯,這張圖顯示了微調任務的數量與性能的關系。從中我們可以看到,每個模型的性能都提高了大約10%,但增加更多的任務并沒有帶來太大的幫助。關鍵在于任務的多樣性。并且,即使是在1800個任務中,我們測試過的任何大小的模型,或者任何類型的模型,都能從這種方法中受益。我認為這種方法非常有效,但它確實存在局限性。
再次思考這個問題,我們需要考慮學習的目標是什么。在這個學習階段,我們到底在教模型什么呢?在監督學習中,我們常常使用交叉熵損失或最大似然估計作為學習目標。這意味著對于給定的輸入,我們期望模型能夠輸出一個唯一正確的答案,而所有其他答案都被認為是錯誤的。在強化學習的文獻中,這種方法被稱為“行為克隆”。簡而言之,如果我們有足夠多的示例,模型應該能夠模仿或“克隆”這些行為,從而在新的、未見過的情境中做出正確的決策。然而,隨著任務的復雜性增加,為模型明確定義“正確的行為”變得越來越困難。
我將用一系列例子來闡述這個觀點,讓我們進行一個思維實驗,只考慮存在單一正確答案的情況。答案必須是確定的。以一個簡單的例子為起點,二加三等于多少?顯然,答案是五,或者可能是“答案是五”這樣的回答。但這一點是毋庸置疑的。再來一個稍微復雜一些的,將“我應該學習,而不是看這部電影”翻譯成韓語。這是我個人的翻譯,我懂韓語,所以這可能是正確的。但這確實是一個有著單一答案的問題,盡管其中可能存在一些微小的差異。
現在,考慮我們在大型語言模型中真正面對的問題。例如,給一個五歲的男孩寫一封來自圣誕老人的信,解釋圣誕老人并不真實,同時要確保這個信息傳遞得足夠溫柔,不傷害這個孩子的感情。對于這樣的問題,我很難確定一個最佳答案,更不用說有一個確定的答案了。
所以,當面對這種情況時,我對使用最大似然估計作為我們主要的學習目標感到不太自信。這可能是一個誤導。考慮到一些更實際的用例,比如我經常提到的一個提示:“在Python中使用梯度下降實現邏輯回歸”。這個問題并沒有一個明確的答案。你可能偏向函數式編程,或者你可能更喜歡面向對象的編程風格,但無論你的選擇是什么,都可能是有效的。
我們的目標越來越是教導模型如何執行一些更加抽象和模糊的任務。似乎指令微調的目標函數開始成為一個瓶頸。盡管我沒有確鑿的證據證明這在實踐中是一個問題,但我不認為我們能夠使用這種非常狹窄的信號來訓練一個比GPT-4大上千倍的模型。那么,我們是否可以使用某種方式來替代這個最大似然目標呢?
這就是強化學習與RLHF的核心觀點。在強化學習中,我們試圖最大化一個預期的獎勵函數。考慮到一個代理在下棋時,如果它贏了,我們給予它1的獎勵,否則給予0。這是一個有效的獎勵函數,但我們實際上可以使用一個模型來為更復雜的情況定義獎勵,我們稱這個為獎勵模型。那么,如何從這個視角來實施它呢?
我們都知道如何使用神經網絡進行監督式學習。因此,我們可以使用神經網絡來代表這個獎勵模型,將其進一步整合到獎勵模型中。
核心的概念在于,對于一個特定的輸入,我們提供兩個答案,并由人類來判斷哪一個更受偏愛,而不是直接告訴模型哪一個是最好的。從這兩個答案中,這個更為優秀。最初,這種做法可能沒有明確地說明為什么一個答案比另一個更好,但重要的是它為模型提供了一種學習人類偏好的方式。
關鍵在于,盡管某個答案可能被視為首選,但它并不一定是最佳選擇。只要它比另一個選項好,模型就可以從中學習。比較的這種方法是至關重要的。為何我們選擇比較而不是直接評分?對于如二加三的簡單問題,認為五比四更好可能是沒有意義的,因為只有一個正確答案。但對于其他復雜的問題,比如某種句子的補全,我可能會提出兩個較好的答案,并指出其中一個更為出色。
核心思想是,比較可能比絕對評分更簡單。對于這些數學公式,我可能會快速跳過。簡單地說,對于兩個答案YI和YJ,我們定義了一個概率PIJ,表示答案I優于答案J的概率。這個概率是基于人類給出的標簽。這個概率模型實際上是基于獎勵的差異,更具體地說,是對數幾率。這種建模方法可以追溯到1952年。我們只需重構這個模型并最大化這個概率,因為這實質上是最大似然法。獎勵模型是基于最大似然法進行訓練的。
這樣的方法很好,因為它為策略模型提供了豐富的信號。這是大型模型的最后階段。在這里,目標函數是我們剛剛學到的,而獎勵模型的參數在初始的強化學習階段就已確定。這個方法可能讓你想起了生成對抗網絡(GAN),其中有一個判別器和生成器。你固定其中的一部分參數,然后進行另一輪的迭代。
對于這個策略模型,它通常是從監督指令微調的檢查點開始的。你只需要為這個提示生成一些補全,然后提供給獎勵模型,它會返回一個得分。基于這個得分,如果分數很低,那么我知道這個答案并不好。如果分數很高,那么我會嘗試更多這樣的答案。
因此,這是數學中的一種試錯方法的形式化表示。這基本上是一個宏觀的觀點。因為我們的目標是通過基于梯度的迭代方法來最大化這一目標,所以我們只需要梯度。
這些梯度是通過一些策略級別的算法(例如PPO)來獲得的。核心思想是在滿足RM模型的條件下進行迭代。在這個過程中,RM模型對人類的偏好進行編碼,并將其傳遞給策略模型,該模型再通過強化學習來學習這些偏好。
實際上,許多人并不真的喜歡這種方法。我經常聽到人們說:“我們應該放棄RLI方法。”許多人,不僅僅是OpenAI的人,都有這種觀點。主要的問題是,實施這種方法確實很困難。強化學習是一個非常復雜的領域,很容易出錯。一個常見的問題是所謂的“獎勵黑客”。如果模型發現長時間的完成得到了更高的獎勵,它可能會傾向于產生更長的答案,即使這些答案沒有意義。這種模型的行為與人類的偏好是不一致的,這種差異被稱為“獎勵黑客”。這是一個困難的問題,目前還沒有明確的解決方案。
盡管有這些挑戰,但我仍然認為RLHF是一個有價值的研究方向。在我看來,最大似然的歸納偏差是太強了。當我們的模型規模增加時,這種偏差可能會導致問題。例如,GPT-4可能還可以,但更大的模型可能會出現問題。學習這個目標函數可以幫助我們克服這種偏見。此外,這個領域還有很大的進步空間。雖然我們已經看到了一些成功的RLHF模型,但這只是開始。
總的來說,我認為如果某個方法在原則上是對的,我們就應該繼續研究,直到我們找到正確的方法。
我想通過一個高層次的視角來回顧人工智能的發展。
從基于規則的系統開始,雖然我可能不是很熟悉,但我認為這個高層次的觀點是很重要的。在這里,輸入是通過手工設計的程序來映射的。在下一代機器學習系統中,輸入被轉換為手工設計的特征,然后通過一個可學習的部分來映射到輸出,如SVM。這個可學習的部分是我用藍色標出的。隨后,這些輸出和輸入被傳遞給一個手工設計的損失函數,然后進行迭代。深度學習的主要變革是將手工設計的特征替換為學習到的特征。
特別地,分層的表示學習定義了深度學習的技術特點。這種轉變確實取得了巨大的成功。為什么會這樣呢?因為它采用了更弱的歸納偏差,并允許了更高的可擴展性。我們現在擁有更強大的計算能力,所以為什么不充分利用它呢?這便是深度學習成功的核心。
因此,如果我們比較經典的機器學習和深度學習,最接近的對比可能是邏輯回歸和前饋神經網絡。它們處理相同的任務,但前饋神經網絡從數據中學習了隱藏的表示。這使得模型能夠更好地處理二進制分類任務。
那么,下一個演進階段會是什么呢?如果僅僅是改變一個組件并使其變成可學習的就如此成功,那為什么不嘗試更多的改變呢?目前,損失函數仍然是手工設計的。也許我們應該打破這個約束,使其變得可學習。我認為這將是下一個階段。我們已經有了一些成功的例子,如GAN和RLHF。這些模型允許復雜的行為表達,而這些行為如果要被形式化描述將會非常困難。
但我認為這只是RLHF的一個實例。它也可能是其他類型的強化學習模型,或者甚至不是強化學習的方法。我相信這將是下一個范式,并且我們應該努力朝這個方向發展。
當我思考每個范式的代表性模型時,我想到了IBM的深藍。對于經典的機器學習,我不太確定具體是哪一個,但我們可以稱它為基于SVM的系統。然后,下一個范式的代表是GPT-3。每一個范式都帶來了巨大的變革,我相信學習損失函數或目標函數將是下一個重大的步驟。
考慮到這一點,我對未來的發展感到非常興奮。謝謝大家。
本文(含圖片)為合作媒體授權微新創想轉載,不代表微新創想立場,轉載請聯系原作者。如有任何疑問,請聯系http://www.i0562.net/。