雖然我個人認為,如果把通過設置參數來控制如何拓展樹結構(比如控制搜索的寬度和深度),這種模式如果能被稱為Scaling law的話,多少有點勉強,若這樣,那我們可以說2006年AlphaGo出來就有Scaling law了。


但不管怎么稱呼它,無法忽視的是這種方法的可擴展性極好,無論是在RL訓練階段,還是LLM的Inference階段,只要改下參數配置來增加樹搜索的寬度和深度,就能通過增加算力提升效果,可擴展性好且方式靈活。從這點講,o1確實具有重要意義,因為這證明了它把怎么融合LLM和樹搜索這條路走通了,LLM模型能夠達到AGI的上限就被提高了一大截。


第三,在o1之后,小模型大行其道真正成為可能。小模型最近大半年也比較火,但從能力獲取角度看,其實還是有上限鎖定的,這個鎖定小模型上限的就是邏輯推理能力。上面提到了,小模型的能力特點是:語言能力很強不比大模型弱、世界知識不如大模型但是可以通過給更多數據持續提升、受限于模型規模,邏輯推理能力能提升但比較困難。

所以小模型的優化重點是世界知識和邏輯推理能力,而從o1 mini的效果(世界知識弱、邏輯推理強)可推出,之后我們可以采用“能力分治”(DCA,Divide-and-Conquer of Ability)的模式推進小模型的技術發展(參考上圖):把語言、世界知識及邏輯推理三個能力解耦,語言能力靠小模型自身、邏輯推理靠類似o1的通過RL獲得的深度思考能力,而世界知識可以靠外掛RAG獲得增強。


通過“能力分治”,小模型完全可能具備目前最強大模型的能力,這等于真正為小模型掃清了前進路上的障礙,而SLM做起來成本又比較低,很多人和機構都可以做這事,所以可以預測:之后這種DCA模式將會大行其道,形成一種新的研發小模型的范式。
第四,o1可能會引發“安全對齊”新的范式。O1在做安全對齊方面,大概采用了類似Anthropic的“AI憲法”的思路,就是說給定一些安全守則,指明哪些行為能做,哪些不能做,在o1邏輯推理能力提高之后,它遵循這些法則的能力也獲得了極大增強,安全能力比GPT 4o強很多。這可能引發安全對齊新的模式:大家可以先把模型的邏輯推理能力加強,然后在此之上采取類似“AI憲法”的思路,因為OpenAI o1證明這種模式可極大增強大模型的安全能力。
第五,“強化學習+LLM”的領域泛化能力,可能不局限于理科領域。強化學習適合解決Reward比較明確的復雜問題,典型的是數理化、Coding等有標準答案的學科,所以很多人會質疑o1是否能泛化到更寬的領域。確實,o1的思考能力能否泛化到沒有明確標準答案、Reward不好量化的領域是它發展的關鍵,泛化得好,則打開陽光大道,泛化得不好,領域局限性就會比較強。


我推測OpenAI可能已經找到了一些非數理學科的Reward定義方法,并將這個方法通過RL拓展到更多領域。既然o1可以讀懂并遵循安全規則,以 “AI憲法”的思路解決安全問題,我覺得由此可以推導出一種針對模糊標準的Reward賦予方法:就是說針對不好量化的領域,通過寫一些文字類的判斷標準或規則,讓大模型讀懂并遵循它,以此來作為是否給予Reward的標準,符合標準則Reward高,否則Reward低。例如,針對寫作文,就可以列出好文章的標準(結構清晰、文筆優美等規則),讓大模型據此來給Reward。如此就能拓展到很多領域。
當然,想要這么做可能要分步驟,先用好給Reward的數理問題增強模型的復雜推理能力到一定層級,這樣它就能看懂規則了,然后再做那些不好量化Reward的領域。(這都是我的猜測,沒有依據)
由上述分析可看出,o1這條技術方向不僅增強了模型的復雜邏輯能力,由此可能引發大模型研發很多重要方向的革新,這是為何我說o1重要的主要原因。

OpenAI o1的完整訓練過程推演

GPT 4等LLM模型訓練一般由“預訓練”和“后訓練”兩個階段組成(參考上圖)。“預訓練”通過Next Token Prediction來從海量數據吸收語言、世界知識、邏輯推理、代碼等基礎能力,模型規模越大、訓練數據量越多,則模型能力越強,我們一般說的Scaling Law指的是這一階段的模型擴展特性,也是LLM訓練最消耗算力資源的地方。“后訓練”則分為SFT、RM和PPO三個過程,統稱為人工反饋的強化學習(RLHF),這一階段的主要目的有兩個,一個是讓LLM能遵循指令來做各種任務,另一個是內容安全,不讓LLM輸出不禮貌的內容。而訓練好的模型推理(Inference)過程則是對于用戶的問題直接逐個生成Token來形成答案。


OpenAI o1的整個訓練和推理過程應與GPT 4這類典型LLM有較大區別。首先,“預訓練”階段應該是重新訓練的,不太可能是在GPT 4o上通過繼續預訓練得到。證據很好找,OpenAI官方一再宣稱o1 mini邏輯推理能力極強,但在世界知識方面很弱。如果是在其它模型上魔改的,世界知識不會比GPT 4o mini更弱,所以側面說明了是重新訓練的;另外,這也說明了o1這類側重邏輯推理的模型,在預訓練階段的數據配比方面,應該極大增加了邏輯類訓練數據比如STEM數據、代碼、論文等的比例,甚至我都懷疑o1 mini是否引入了通用數據都不好說,否則不需要老強調知識方面能力弱。


在“后訓練”階段,應該有一個環節是用來增強LLM模型的指令遵循能力的,也就是說RLHF階段應該是有的。因為o1在遵循指令方面能力并不弱,而且生成的Hidden COT片段里明顯也包含很多指令性的內容,如果遵循指令能力比較弱,估計對于生成Hidden COT也有負面影響。所以,推斷起來這個環節大概在“思考”階段之前。(但是RLHF階段未必有RM和PPO)。但這里和GPT 4對應的RLHF階段應有兩個重要的不同:首先,o1應該在這個階段沒有做內容安全方面的事情,大概率是挪到后面的階段了(也有可能這兩階段都做了?)。其次,這個階段大概率也會極大增強邏輯推理類的指令遵循數據比例,以此進一步加強基座模型的邏輯推理能力,原因我們等會專門說明。


接下來的階段,就是o1最大的特點,所謂引入了“系統2”的慢思考能力。ClosedAI只說用了RL強化學習,其它任何都沒提,技術保密工作一流。由此,我們只能推斷出o1融合了LLM和RL來實現模型“先想后說”的Think能力。

OpenAI o1應把“內容安全”相關的能力挪到了“Think”階段之后,而且做法和GPT 4應該也有很大不同。在o1通過Think階段進一步增強了它的邏輯推理能力之后,并沒有用與安全相關的Instruct數據去調整模型參數,而是轉為在比如System Prompt里引入人寫好的LLM應該遵循的若干安全規則,比如不能輸出制造有害產品比如毒品的細節內容等等。O1邏輯能力增強后,在輸出時基本能夠參考“安全條例說明書”,不輸出有害內容,這做法類似于之前Anthropic的“AI憲法”的思路(依據參考上圖)。而且,o1在內容安全方面的能力比GPT 4o強很多,這意味著將來大模型安全范式的巨大變化:應該先極大增強模型的邏輯推理能力,繼而采取類似“AI憲法”或者叫“AI安全說明書”的模式來做。很明顯如果這樣,安全這事情做起來就簡單多了,因為等于把LLM當人看了,你告訴他哪些能做,哪些不能做,當它邏輯能力強起來,現在就完全能看懂了,就這么回事。


以上是o1的訓練過程,在模型推理(Inference)階段,o1體現出了“先思考再發言”的特點,分為三個階段:首先通過思考,根據用戶Prompt的問題生成能體現思考過程的Hidden COT數據,因為很多Hidden COT很長,于是引入了“COT摘要”階段,從很長的Hidden COT里提取一些關鍵思考環節展示給用戶看看,最后根據COT輸出答案。


從上面內容可看出,o1無論在訓練還是模型inference階段,和傳統的LLM應該還是有很大區別的。此外,我在這里再展開講講兩個事情。


第一個,想要仿造模型來達到類似o1的效果,一個很容易想到的取巧的方式是:既不去專門增強基座模型的邏輯推理能力(比如大幅增加預訓練中邏輯類數據占比),也不做“慢思考”階段的RL訓練(因為不知道怎么做的),只是側重在模型inference階段加入“Think”的過程,比如想辦法引入最簡單的Best-of-N Sampling這種樹拓展策略,再寫寫Prompt提醒讓LLM自己要自我思考、自我反思,兩者相結合,也可以讓模型自己寫Hidden COT。這樣做,也能一定程度上提升模型的推理效果。但是,這種做法效果提升的天花板比較低,就是說你模型邏輯推理能力看著提高了一些,然后就會被卡住,即使再增加inference階段的算力(就是把采樣數量N比如從10個拓展到50個,類似這種。Inference-time Scaling law大概其實很可能就是這個意思,您覺得這做法是law還是不law呢?)其實也沒用。

這個結論來自于文獻“Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters”及“Are More LM Calls All You Need? Towards the Scaling Properties of Compound AI Systems”,它們證明了:對于簡單或者中等難度的邏輯推理問題,通過inference-time 增加算力,比如樹搜索等方式,比去增強模型的“預訓練”階段的邏輯推理能力來得效果要明顯;而對于高難度的邏輯推理問題,則只靠inference-time很難提升,有時還是負面作用,不如去增強模型“預訓練”階段的邏輯能力(參考上圖)。


這是為啥呢?您可以想想,其實里面的道理細想一下很好理解。這是因為對于簡單或中等難度的問題,模型在inference的時候很可能給出答案中的大部分步驟都是對的(或者多次采樣中多數是對的),只有個別步驟錯誤,導致最終回答錯誤。通過比如Best-of-N Sampling這種簡單樹搜索方法來增加輸出的多樣性,再加上靠譜的Verifier篩一篩,是比較容易把這個小錯誤修正過來的。但對于高難度的邏輯問題,因為模型輸出內容中大部分步驟可能都是錯的(或者多次采樣中大多數都是錯的,這種情況你投個票采取多數人意見看看,結果估計很悲催),你想靠inference-time增加算力無力回天。


我自己也是根據上述思考,才進一步反推出上面講的o1可能的訓練過程的:OpenAI o1的基座模型,不論是Pre-training還是Post-training階段,大概率極大增強了基座模型的復雜邏輯推理能力,這是它能在后續inference-time增加算力解決復雜問題的根基。


所以關于這個點的結論應該是這樣的:只靠inference-time增加算力,僅對容易和中等難度的邏輯問題有用,想要不斷提升模型的復雜推理能力,還需要繼續在Pre-Train和Post-Training階段下功夫。


講到這有人就問了:那我也沒錢自己訓練基座模型啊?這可如何是好?這其實是絕大多數人面臨的問題。其實拿來主義也應該可以,但是你得選那些邏輯推理能力強的基座模型,我估計代碼類的基座模型相對比較適合,然后想辦法在“Think”訓練和“Think”inference方面做點工作,感覺應該也是可以的,而且對算力的需求也到不了大多數人做不了的程度。


第二個展開講講的事情。其實跟第一個有關,我看現在很多人看了o1后都說,Scaling范式變了,只要去Scale Inference-time的算力,模型推理效果就能一直Scaling。很明顯這是進入誤區了,原因上面講了,如果只做Inference-time算力的拓展,模型效果天花板應該不會太高,歸根結底還得去拓展Pre-train或者Post-train階段模型的復雜邏輯推理能力,最起碼兩者是個相輔相成互相促進的作用,只談inference-time Scaling大概率是不對的。

o1應由多個模型構成

從o1的System Card可以明確看出,o1除了一個主模型外,至少還有一個相對獨立的“Hidden COT摘要模型”(參考上圖),它的作用是根據用戶輸入問題及生成的Hidden COT,提供一份簡潔且內容安全的COT摘要。所以,o1至少由兩個模型構成。


那么,問題是:除了主模型和摘要模型,還有其它模型存在嗎?我覺得大概率是有的。

我們可以從o1的價格入手分析。目前已知:o1 Preview比GPT 4o的輸入價格貴3倍,輸出價格貴4倍,o1 mini輸入和輸出價格都是GPT 4o的20倍(參考上圖)。

這里插入一段,解釋下為何大模型的輸入價格和輸出價格是不同的,這是因為在大模型推理(inference,相對模型訓練來說的,不是指邏輯推理)階段,分為Prefill和Decoding兩個階段(參考上圖)。Prefill階段首先把用戶的輸入prompt通過并行計算,產生每個Token 對應Self Attention的Key-Value,并存儲在KV Cache中,供Decoding階段產生每個Token時候計算Self Attention時候用,這個階段每個Token的Key-Value可并行計算,模型運行一次能輸出多個Token的KV,所以GPU利用率高;而Decoding階段根據用戶Prompt生成后續內容,但模型運行一次只能產生一個Token,所以無法有效利用GPU的并行計算特長,資源利用率不足。資源利用率的差異導致了輸出階段成本高,這是為何大模型一般輸出價格是輸入價格3到4倍的原因。


說回來,關于價格的核心問題是:為何比如o1 mini的輸入價格(輸入部分大模型的處理邏輯簡單,只產生Prompt對應的KV Cache,更容易分析)是GPT 4o mini的20倍?這是個很奇怪的點,仔細思考的話,這里應包含關于o1內部機制的很多線索。輸入價格對應Prefill階段,Prefill原則上只處理用戶輸入Prompt和Sys Prompt。Prefill階段價格貴20倍,只有兩個可能:
一種可能是用戶Prompt+Sys Prompt的輸入長度是GPT 4o mini輸入的20倍。用戶輸入的Prompt對o1和4o來說當然是一樣的,如果增加這么多輸入,只能是OpenAI往sys Prompt里塞入了很多東西。但是考慮到o1 Preview只比GPT 4o貴3倍,那么sys Prompt特別長的可能性就不大了,否則o1 Preview的輸入價格也應該比GPT 4o貴20倍才是。另外,如果只是sys Prompt帶來的價格上升,那么o1在Decoding階段就不應該那么貴了,因為sys Prompt 主要影響Prefill階段的計算成本(當然,如果KV Cache長了,Decoding在計算Self Attention的時候計算量也會增加,因為要看到更長的上文,但是以目前大模型對長文本的支持能力,成本不會高太多)。


所以,針對這種可能性,結論大概是:OpenAI可能往sys Prompt里塞入東西了(應該是上面提到的“安全規則手冊”啥的),但是并沒有達到20倍價格的差異。塞入很長的sys Prompt這條原因不能解釋20倍價格差距。


我們來考慮第二種可能性。如果假設輸入Prompt長度差異沒有太大,那么從Prefill計算機制角度來看,只能理解為o1 mini的模型總參數量是GPT 4o的20倍左右(除了摘要模型外,還有十多倍的差異)。這里又有兩種可能,一種是說o1 mini就一個模型,那么它參數量是GPT 4o的大約20倍,這個很明顯不成立,我們可以看到各種測試中o1 mini跑的速度挺快的,所以單個模型不可能太大;于是,剩下的唯一解釋就只能是:o1 mini除了一個主模型,一個摘要模型外,大概還有18個規模相當的其它模型??紤]到o1 Preview輸入價格只比GPT 4o貴三倍,可以理解為o1 Preview除了一個主模型,一個摘要模型,還有另外一個規模相當的其它模型。因為o1 Preview的總體工作機制應該和o1 mini是類似的,可知o1 Preview多出來的那一個模型,和o1 mini多出來的那18個模型(那為啥這18個模型不共享KV Cache呢?如果可以共享KV Cache的話,起碼在Prefill階段,18個模型可以縮減為1個模型,那么o1 mini的輸入價格只需要比GPT 4o mini貴3倍就夠了。既然仍然貴20倍,側面說明了這18個模型本身模型參數或者配置是有差異的,導致相互之間無法共享KV Cache),大概是干同一類事情的。而這個事情的性質呢,是模型個數可伸縮配置的,就是說你可以設置這個地方是部署1個、5個還是18個這類模型,而且這類模型相互之間還有些差異導致無法共享KV Cache。O1 mini在很多場景的效果要比o1 Preview效果好,一定程度上可能是跟這類模型的部署個數有關的,所以我推斷,這類模型大概率跟樹搜索有關。

綜合起來,也就是說,o1模型大概由三部分構成(參考上圖):一個主模型,一個摘要模型,還有一類可靈活配置個數的跟樹搜索相關的模型池子。如果我們自己想要給出技術方案逆向工程o1,你的技術方案可能就需要滿足這個約束條件,需要包含這些模型,并能解釋清楚這類模型池子的運作機制。

OpenAI O1可能采用的訓練數據

人工標注數據

首先,訓練o1肯定會人工標注一批COT思考過程,就是說拿到一批<問題,答案>數據,通過人工把解決問題的思考過程和步驟寫下來,形成<問題,思考過程(包括思考過程中出現的錯誤及錯誤修正過程),答案>。如果沒有人工標注過程,那么COT里出現的:Hmm,wait,…這種,如果是純靠LLM自己產生的,那估計LLM已經有意識了,這個概率很小,這些大概率最初來自于人工標注數據??梢杂眠@些數據SFT一下o1初始的模型,啟動模型的輸出模式,讓它熟悉這種表達方式,但是僅靠SFT肯定是不夠的。

合成數據

人工標注難度大、成本高,所以人工標注的COT數據數量不會太多,人工標注的問題是可擴展性太差,優點是質量比較高;之后可以采用合成數據的模式,一種最直觀的合成數據的方式就類似上面提到制作PRM標注數據的模式:從人工標注的COT里面截取一段人工標注片段,然后使用MCTS樹搜索方式去補齊后續推理過程,每個片段跑多次,有的最后答案正確有的錯誤,無論是正確還是錯誤,都可以作為合成數據來訓練o1模型。如果更激進一些,對于有確定標準答案的邏輯問題,可以通過不斷試錯的模式直接從問題開始搜索正確答案,這里搜索到的正確答案和錯誤答案都可以用來訓練o1模型(但是這貌似就已經是o1了?所以可能性不大)。

代碼COT數據的反向生成

有一種極大拓展代碼COT數據的辦法:我們有大量現成的各種代碼,可以教會大模型試著從代碼反向生成Hidden COT的推理步驟,這個應該是可行的,并能極大拓展Coding類型的COT數據。(類似的思路借鑒自:Planning In Natural Language Improves LLM Search For Code Generation)

數學COT的反向生成

AlphaProof這種能力強的數學解題系統,整體思路是首先把自然語言的數學問題通過一個模型轉化為形式化語言描述,然后使用lean及類似AlphaZero的模式,通過強化學習和樹搜索來不斷搜索并驗證中間推理步驟。這種方法效果是可以保證的,目前基本可達到IMO銀牌選手水準(參考上圖藍色部分)。但是這種需要轉化成形式化語言再解題的系統有一個問題,就是通用性差,基本只能用來解決數學題,很難擴展到其它領域。


受到代碼反向生成的啟發,我覺得也可以反向生成數學COT(參考上圖紅色部分)。既然AlphaProof可以構造從自然語言問題翻譯成形式化數學語言的神經網絡,那也可以構造一個反向生成的模型,就是把數學形式語言翻譯成自然語言,然后用這個翻譯系統把AlphaProof找到的解題推理過程,從形式化語言轉換成自然語言思考COT。當然,中間做錯的也可以用,因為它有明確的驗證系統,每一步即使錯了,為啥錯也知道,這些也可以翻譯成自然語言。這樣可以構造出千萬量級甚至上億量級的數學推理COT思維過程數據。我覺得這個思路大體是可行的。


OpenAI o1目前在數學和Coding方面效果最好,可知這方面的訓練數據是最多的,我不知道是否會采用類似反向生成的思路來自動構造COT數據,但貌似這種方法看上去可行性還比較高。

Reverse-o1:RL的關鍵要素及如何將RL與LLM融合

我們從這里開始推導o1可能以何種方式將RL與LLM融合起來,并把推導出的模型稱為Reverse-o1。


我們會先分析下在Hidden COT場景下RL的關鍵要素:狀態空間(State Space)、行為空間(Action Space)、獎勵模型(Reward Model)。至于RL方法,我推測采用類似AlphaGo/AlphaZero的概率較大,有幾個原因:


首先,據說OpenAI員工每天要讀好幾遍薩頓寫的“苦澀的教訓”,而里面提到“能夠發揮算力的通用方法,如搜索和學習,將最終大獲成功”,這里的搜索主要指的就是DeepMind AlphaGo的MCST方法,OpenAI員工耳濡目染不把搜索用起來做個實踐也說不過去不是?


第二,前幾天OpenAI官宣的o1主力成員采訪視頻里,有員工提到了他們一直以來都在嘗試如何將AlphaGo的搜索方法和LLM融合起來,這也是證據之一。所以,之后會簡單介紹下AlphaZero的工作原理,并嘗試將其和LLM融合起來構造復雜邏輯推理系統。

O1中RL的狀態空間:Token序列組成的連續狀態空間

關于o1的RL狀態空間,首先的問題是:這個狀態空間是離散的還是連續的?大概率是連續狀態空間,或者說最好把它看成是連續狀態空間。O1由LLM和RL組合而來,當用戶輸入問題時,很自然的,這些組成問題的Token序列作為一個整體可以看成第一個狀態(State1),State1的Token序列作為o1模型的輸入,o1在行為空間里選擇某個行為(至于行為空間如何定義后面再談),先不管這個行為是什么,反正選擇這個行為后,o1會輸出一個Token序列片段(不會是完整的Hidden COT,應該是其中的某個片段)。之后,o1把新生成的Hidden COT片段內容追加到State1之后,形成State2,再次作為o1的新輸入,o1根據新輸入選擇新的行為,輸出新的Token序列片段…..如此往復,直到Hidden COT輸出結束?;臼沁@么個過程。


o1的RL狀態空間不太可能由離散狀態構成,你很難清晰地劃分出若干具體狀態。當然,可以說極端情況下,每個Token形成狀態空間中的一個離散狀態,但是這樣基本沒有實際的可行性。如果是每個Token代表一個狀態S,首先這個狀態組合空間太大。假設Token詞典大小是10萬,2個Token組合空間就是10萬的平方,長度為n的Token序列,狀態空間就是10萬的n次方,基本是天文數字。其次,對于o1的RL來說,每輸入一個Token就需要選擇某個行為A,并生成下一個Token代表轉移到另一個狀態S’。如果RL過程帶有搜索,意味著每個Token需要做一次搜索,而我們從很多o1的網上例子可以看到,很多時候Hidden COT是非常長的,幾十上百K都有可能,這計算量基本是不可接受的。所以把每個Token看成離散狀態,不是不行,但顆粒度太細,感覺很難在實際中應用。

我覺得把o1的狀態空間看成由Token序列組成的連續狀態空間比較合適,上面例子盡管提到了State1或者State2,看著好像是離散狀態,這只是方便解釋過程而已(當然,如果把State1看成在巨大無比的Token組合空間中采樣的一個點,這沒問題)。就類似RL打游戲或者RL下圍棋,RL輸入的游戲(或圍棋)畫面由比如1024*1024個不同像素構成(不同像素可以類比為LLM的不同Token),由于像素組合空間過于巨大,很難清晰定義離散的一個一個State到底是什么,所以一般RL打游戲或者下圍棋都是把輸入圖像當作一個整體,看成連續狀態空間,通過一個神經網絡來映射到某個具體的行為上。O1的狀態空間和圖像是類似的(參考上圖),可以把一個Token片段類比RL打游戲對應的某個圖片輸入,看成由Token序列組成的連續狀態空間,經過o1的LLM+RL神經網絡映射到某個行為空間中的行為。


從上面分析可以看出,打游戲或者下圍棋采用的RL技術,大都是以連續狀態空間作為網絡輸入,而輸出大都是離散行為空間中的某個行為,所以很明顯這些地方采用的RL技術就比較適合用來作為o1的RL部分的解決方案,而采取離散狀態空間的RL模型,比如MDP類方法就不太適合。

O1中RL的可能行為空間:“思考因子(Thought-Factor)”離散行為空間

O1的RL技術方案,其中最關鍵的環節很有可能是如何定義行為(Action)空間。OpenAI 01的Hidden COT產生過程,本質上是在讓機器模仿人在解決復雜問題產生的思考過程,而人在思考復雜問題時,有比較固定且數量并不太多的“思考模式”或者可以叫“思考因子”。比如拿到一個復雜問題,我們一般會首先明確這個問題的目標是什么,然后把復雜問題拆解成幾個環節或者步驟,為了得到某一個具體步驟的解法,可能會提出一個假設,然后驗證這個假設是否成立,如果不成立,那么繼續提出新的假設,直到解決這個子問題…..我們也可能在過程中會進行驗算并發現某些中間環節出現錯誤,并把錯誤修正過來。


如果仔細分析OpenAI官網放出來的幾個Hidden COT,會發現是可以從里面歸納出一些典型的人類思考問題的一些隱含的“思考因子”的(參考上圖,我給出了一些具體的例子)。我覺得要是把Hidden COT看成一個一個Token構成的,RL這事情就很難做了(Hidden COT的狀態空間已經是連續非離散的,如果行為空間也是非離散的或者組合空間過大,RL很難建模。所以行為空間是離散的,這個極大概率為真,當然怎么定義離散的行為空間應有不同方法),在我的設想中,一個合理的方法是歸納出人類思考復雜問題的隱含的“思考因子”,以此作為候選的行為集合,比如:“拆解問題”、“復述目標”、“檢查結果”、“修正錯誤”、“提出假設”等等,總體數量應該不會太多,即使劃分得細致一些的話,估計也就幾十到上百種。而針對每個具體的“思考因子”,可以產生符合對應分布概率的Token片段,比如行為若是“提出假設”因子,則生成“Alternatively”這個Token的概率就比較大(通過PPO從訓練數據里學到的)。那么,Hidden COT片段很可能其真實面貌是長這樣的:


<ACT_Proposer-Start> Alternatively, perhaps combine the numbers in some way. <ACT_Proposer-End> (提出假設)<ACT_RephraseTarget-Start> Overall Task: Write a bash script that takes one argument (the string representing the matrix) and outputs its transpose in the same format.<ACT_RephraseTarget-End> (復述目標)


也就是說,OpenAI的Hidden COT的原始內容或者訓練數據,在形式上有可能是這樣的二級結構:


<Think_Start> (Hidden COT起始標記)……<ACT-1_Start>token token token…..<ACT-1_End> (思考因子1)<ACT-2_Start>token token token…..<ACT-2_End> (思考因子2)<ACT-3_Start>token token token…..<ACT-3_End> (思考因子3)……<ACT-n_Start>token token token…..<ACT-n_End> (思考因子n)<Think_End> (Hidden COT結束標記)

這種層級的hidden COT結構,能體現出RL和LLM的優勢結合,離散行為空間比如估算給定狀態S采取何種行為,即函數Q(S,A)的估算,這是RL擅長做的事情,而思考因子標簽中的Token生成則是LLM擅長的事情,LLM可以根據對應“思考因子”的類型,學習調整因子標簽內部Token的生成概率。上圖展示了如上所述二級“思考因子”離散行為空間后,o1的可能運作形式。在生成Hidden COT的過程中,輸入和輸出都帶有ACT行為Token的起始和結束符號,首先,O1根據當前的問題和已經生成的Hidden COT片段,預測下一個最可能采取的“思考因子”,以決定后面要采取怎樣的具體思考模式,然后在這個“思考因子”指導下,LLM生成具體的Token序列,以“思考因子”的結束Token作為這種思維模式的結束標記。并將本步輸出的Token序列并入輸入,來循環往復地生成下一步思考的對應行為及Token序列。(當然整個過程都是我的設想,沒有具體證據)。


那您會問:為啥我在給出的Hidden COT例子里看不到“思考因子”對應的起始和結束Token呢?可能展示給用戶的COT是過濾后的版本。你想,Hidden COT的起始和結束Token(<Think_Start>/<Think_End>),這兩個Token極大概率是會有的,您不也沒看到不是?說明輸出的是過濾后的COT,那么,原先是有“思考因子”標記,但顯示的時候被過濾掉,這也是有可能的。

O1中RL模型的獎勵模型(Reward Model)

Reward如何設置對于RL來說至關重要,之前LLM+RL的學術工作其實蠻多的,歸納一下的話,目前常用的Reward模型有兩種(參考上圖):結果獎勵模型(ORM,Output Reward Model)和過程獎勵模型(PRM,Process Reward Model )。


ORM的意思是訓練一個模型,不管推導過程有多少步,只對最后結果打分。如果對照Hidden COT看的話,意思是只有o1把Hidden COT完整地寫完了,ORM才給出一個獎勵信號,模型結果若和標準答案對上了,給獎勵1,如果答案錯誤,給獎勵-1,類似這種。很明顯,ORM的優點是反饋信號準確,比如對于數學題,模型要么做對了,要么做錯了,很明確,所以反饋信號就精準;但ORM的缺點是反饋稀疏,意思就是反饋信號少,這個很直觀,哪怕你推導過程寫10頁紙,反正最后只有一個反饋信號。(OpenAI 訓練大模型時RLHF階段的RM模型,就屬于ORM)


PRM的含義是訓練一個模型,能對中間每個過程都給予反饋信號,這樣在推導過程中錯在哪個步驟就很清楚,不用等到最后,所以它的特點是反饋信號豐富不稀疏。但問題來了,要訓練PRM就需要有每一步有標注的數據,這么多標注信號怎么來?常規做法是靠人工標注,比如去年很火的OpenAI的PRM工作“Let’s Verify Step by Step”,就是靠人工標注了80萬中間步驟反饋信號的數學題推導過程,而且證明了PRM效果要比ORM好。所以,PRM的優點是反饋多效果好,但是訓練數據制作成本太高,一般人做不了。

那有沒有相對成本低的方法來做給每一步做標注呢?有。我目前看到比較好的做法是這么做的(參考上圖):假設我們手上有一批有完整推導過程的數學題,可以先把第一個解題步驟抄過來,然后用MCTS樹靠搜索的方式去繼續往后推導,可以從這個步驟出發做多次推導,其中有些推導過程會得到正確答案,有的結果錯誤,原則上從這個步驟出發的多次推導中,通向正確答案比例越高,說明抄過來的這步推導過程對于得到正確答案比較重要,則可以標注一個高分,然后可以抄過來第二個解題步驟,依此處理…..這樣就能自動給每個推導步驟做質量標注。然后用這種數據去訓練PRM模型,PRM就能給每個推理步驟打分。但很明顯,通過這種數據訓練出來的PRM打分的精準性肯定比不上ORM。


那么OpenAI o1在訓練過程會采用ORM還是PRM呢?我估計兩者都會用。ORM精準,PRM反饋豐富,兩者各有優點,結合起來效果應會更好。另外,o1的官網提到了“Our large-scale reinforcement learning algorithm teaches the model how to think productively using its chain of thought in a highly data-efficient training process.”,這里的“data-efficient”,應該指的就是PRM。

AlphaZero的基本原理

這里會首先介紹下AlphaZero的基本工作原理,我們后面給出的Reverse-o1方案,核心是如何將RL和LLM融合起來,大框架主要參照AlphaZero的主體思路,所以這里做些說明以方便后續內容的理解。

2017年年底AlphaGo的棋類游戲通用版本Alpha Zero問世,不僅圍棋,對于國際象棋、日本將棋等其他棋類游戲,AlphaZero也以壓倒性優勢戰勝包括AlphaGo在內的最強的AI程序。

AlphaZero從技術手段上和AlphaGo相比并未有本質上的改進,主體仍然是MCST蒙特卡洛搜索樹加神經網絡的結構以及RL訓練方法,但是技術實現上簡單優雅很多(參考上圖)。主要改動包含兩處:一處是將AlphaGo的兩個預測網絡(策略網絡P和價值網絡V,策略網絡P主要用于預測在當前狀態S下,執行每個行為a也就是可能的落子位置的勝率,即函數P(S,a);而價值網絡V主要評估當前狀態S最終能夠贏棋的整體概率,即函數V(S),是一個在比如0到1之間的數值,V(S)數值越大,從當前局面S出發贏棋概率越高。)合并成一個網絡,同時產生兩類輸出P(S,a)和V(S);第二處是網絡結構從CNN結構升級為ResNet。AlphaZero完全放棄了從人類棋局來進行下棋經驗的學習,直接從一張白紙開始通過自我對弈的方式進行學習,并僅僅通過三天的Self Play便獲得了遠超人類千年積累的圍棋經驗。


AlphaZero結合了MCST和RL,MCST是主體,RL起到了加速搜索速度的作用。在Self Play過程中(參考上圖a),對于某個AI棋手,它會用MCST搜索,對當前狀態S下各個可能落子(Action)都去搜一下,每個位置經過搜索之后,能獲得每個落子位置贏棋的概率分布pai,從中選擇概率最大的位置來落子,之后另一個AI棋手也采用類似的思路去落子……這么一來一回直到分出勝負(z指出誰是勝者,Reward信號)。


到目前為止,貌似我們還沒看到神經網絡結構的作用,其實它主要是在MCST搜索某個落子位置的時候發揮作用。因為從某個落子位置出發開始搜索,可搜索空間實在太大,靠暴力搜索肯定行不通,所以策略網絡P和價值網絡V(AlphaZero已經融合為一個網絡了,分開說主要是為了方便闡述)的作用主要是引導搜索過程,優先搜索贏面大的路徑,剪枝掉贏面小的路徑,這樣來增加搜索效率。


在搜索過程中神經網絡參數固定不動,當一盤棋下完最終分出勝負,知道勝者后,可針對下棋路徑上經過的每個狀態S產生對應的訓練數據。對于策略網絡P來說,學習目標是MCST搜索獲得的當時狀態S出發落子概率分布pai,而對于價值網絡V來說,學習目標則是“最后的勝者z獲勝概率大”這一事實。然后根據這些訓練數據就可以調整神經網絡參數,這樣它在下一局對弈過程中能力會更強(可以看出AlphaZero的獎勵模型是ORM)。這樣通過無限重復的對弈過程,AlphaZero能力就越來越強。


應該意識到:對于AlphaZero來說,其本質其實還是MCST蒙特卡洛樹搜索。圍棋之所以看著難度大難以克服,主要是搜索空間實在太大,單純靠暴力搜索完全不可行。如果我們假設現在有個機器無限強大,能夠快速遍歷所有搜索空間,那么其實單純使用MCST樹搜索,不依靠RL,機器也能達到完美的博弈狀態。AlphaGo Zero通過自我對弈以及深度增強學習主要達到了能夠更好地評估棋盤狀態(V)和落子質量(P),優先選擇走那些贏面大的博弈路徑,這樣能夠舍棄大量的劣質路徑,從而極大減少了需要搜索的空間,自我進化主要體現在評估棋面狀態(P和V)越來越準,所以能越來越快地找到贏面最大的落子位置。而之所以能夠通過自我對弈產生大量訓練數據,是因為下棋是個規則定義很清晰的任務,到了一定狀態就能夠贏或者輸,無非這種最終的贏或者輸來得晚一些,不是每一步落子就能看到的。

LLM與RL融合后的Reverse-o1模型網絡結構

o1和下棋不同的一點是:除了RL,即使是Hidden COT,在背后也是靠一個Token一個Token輸出的,LLM一定還是其中的主體結構,但RL肯定也需要一個網絡結構去調整模型參數,來逐步學會內部的思考過程。所以,我們首先面臨的問題是:如何融合LLM和RL兩個模型,來獲得一個同時混合LLM和RL兩者功能的完整網絡結構。


上圖給出了一個我設想中的結構:主體仍然是基于Transformer的LLM模型(Dense或MOE都可以,mini版本應是Dense結構),當輸入“問題+已經生成的部分Hidden COT”(也就是由連續Token序列組成的當前狀態S)之后,經GPT網絡對當前狀態進行編碼。在LLM 輸出Head之上,可分化出兩個子結構:一個用于常規的LLM 預測Next Token,這與通常的LLM一致;在Head之上,可以搭建RL模型結構,這里參考了AlphaZero的思路,一個網絡兩個輸出。比如可以用FFN網絡結構,一方面輸出策略網絡P結果(P(S,a)),代表在當前狀態S下,下一步Action“思考因子”的分布概率pai,某個“思考因子”概率越大,則下一步這個Action被選中執行可能性越大;另外一方面會輸出價值網絡V結果(V(S)),代表當前狀態S通向最終正確答案的概率大小,概率越大說明當前狀態S質量越高,意味著目前已輸出的這部分Hidden COT整體質量較高。


到了這一步,當Hidden COT處于某個狀態S的時候,經過網絡可知下一步應該采取什么動作,也獲得了當前狀態S通向成功答案的概率。但目前仍缺少一部分內容,即在已知下一步“思考因子”行為后,對應的Hidden COT 一系列輸出的Tokens。


?一種簡單的方法是用LLM head之上的LLM部分持續輸出后續Tokens(有人工數據訓練的時候,可以用PPO來增加對應Token的輸出概率),在輸出后續Token的時候并不考慮RL的輸出,直到LLM輸出到<ACT_i-End>之后,再去判斷RL的輸出選擇動作…..持續此過程,結合LLM和RL輸出Hidden COT的模型就能運轉起來。

前文我們分析過,o1大概率會使用過程獎勵模型PRM,還有,它可能是由多個模型構成的。在這兩個約束條件下,可以如此改造上面的模型結構(參考上圖):在已知下一步“思考因子”后,不由主模型來生成后續Tokens,為了增加后續生成COT的質量,可采用Best-of-N Sampling的思路,由多個復制的Reverse-o1模型(不同副本可以設置不同的溫度參數,增加輸出的多樣性)各自給出一個Token序列,然后由離線訓練好的PRM作為評委打分,選擇得分最高的Token序列,作為本次“思考因子”后續的輸出Tokens。選出最佳內容后,可同步給主模型,主模型執行一次類似Prefill的操作,即可同步輸出最佳內容,然后開始下一輪的輸出……可如此辦理,這么做明顯生成的Token序列質量會更高。

MCST樹搜索下的Reverse-o1

我們仿照AlphaZero,引入主體結構MCST,它的運行流程如下(參考上圖):當用戶輸入問題后,Reverse-o1使用MCST樹,對于每個可能的“思考因子”進行搜索,在搜索時會用策略網絡P和價值網絡V來快速尋找最優搜索路徑,這樣得到所有“思考因子”的概率分布pai,概率數值越大則代表采取這類思考通向正確答案概率越高。之后選擇概率最大的“思考因子”作為當前狀態下的行為,并如上節內容所述,由Reverse-o1生成針對這個行為下的COT Tokens片段。將COT Tokens片段并入用戶問題,形成新的狀態……依次往后走,直到產生問題的答案,和標準答案對比后,要么對要么錯,由此得到對應的Output Reward。

仿照AlphaZero,從狀態S出發,搜索某個“思考因子”指向正確答案的概率時,以max(Q+U)的方式尋找最優下一狀態S’,而Q函數與價值網絡V(S)正相關,U函數與策略網絡P(S,a)正相關,所以Max(Q+U)的含義是通過價值網絡和策略網絡的指引,來尋找高質量的搜索路徑;當搜索到葉結點的時候,會進行節點擴展,并用策略網絡和價值網絡估算初始化相關搜索參數,之后由低向上更新最優路徑上所有狀態對應的Q函數。當每個候選的“思考因子”經過一輪搜索后會得到所有行為的分布概率pai,完成搜索步驟。O1搜索時與下棋不同的地方在于:如果要往下一狀態轉移,還需要根據當前選到的行為,產生對應的Hidden COT tokens,這個步驟可由上文講述的Best-of-N Sampling策略來完成。


當從問題開始,逐步生成Hidden COT片段后,走到答案階段,會獲得Output Reward,完成一次通過中間環節到答案的MCST搜索過程。如果答案正確,可設置Reward=1,答案錯誤可設置Reward=-1,在此基礎上針對走到答案所經過的所有中間狀態S構造訓練數據,來訓練策略網絡P和價值網絡V,策略網絡的學習目標是對應狀態MCST搜索到的行為概率分布pai,價值網絡的學習目標是Output Reward。


除此外,對于搜索過程每個被選中“思考因子”通過Best-of-N Sampling得到的對應Hidden COT tokens序列(也可以拿到PRM賦予這個tokens序列對應的Process Reward分數),則可以利用PPO(PRM的Reward作為PPO的Reward)來調整LLM模型參數,使得LLM之后在遇到這個“思考因子”后,提高這些Tokens的生成概率。


到目前為止,差不多可以結束o1的整個逆向工程之旅了,前文提到的一些約束條件(o1應該由多個模型構成、應該用了某種或者某幾種樹搜索、RPM和ORM應該都會用等)在設想中的Reverse-o1中基本都得到了體現。


但是,我個人覺得還有一個問題值得深入思考:“思考因子”是必須存在的嗎?畢竟這需要靠人工去歸納人類的潛在思維模式,仍然有比較強的人工痕跡存在,而且會增加人工標注數據的成本。這個問題我確實思考了好幾天,結論貌似是:整個框架還可以是這個框架,不用引入“思考因子”應該也是可以的,因文章已經太長,解釋起來有點復雜,這里先略過。

文章轉載自:張俊林:OpenAI o1原理逆向工程圖解

上一篇:

常見問題解答:什么是 API Key 密鑰?

下一篇:

Web API與REST API的區別?
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費