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


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


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

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


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


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

OpenAI o1的完整訓(xùn)練過程推演

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


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


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


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

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


以上是o1的訓(xùn)練過程,在模型推理(Inference)階段,o1體現(xiàn)出了“先思考再發(fā)言”的特點(diǎn),分為三個(gè)階段:首先通過思考,根據(jù)用戶Prompt的問題生成能體現(xiàn)思考過程的Hidden COT數(shù)據(jù),因?yàn)楹芏郒idden COT很長(zhǎng),于是引入了“COT摘要”階段,從很長(zhǎng)的Hidden COT里提取一些關(guān)鍵思考環(huán)節(jié)展示給用戶看看,最后根據(jù)COT輸出答案。


從上面內(nèi)容可看出,o1無論在訓(xùn)練還是模型inference階段,和傳統(tǒng)的LLM應(yīng)該還是有很大區(qū)別的。此外,我在這里再展開講講兩個(gè)事情。


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

這個(gè)結(jié)論來自于文獻(xiàn)“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”,它們證明了:對(duì)于簡(jiǎn)單或者中等難度的邏輯推理問題,通過inference-time 增加算力,比如樹搜索等方式,比去增強(qiáng)模型的“預(yù)訓(xùn)練”階段的邏輯推理能力來得效果要明顯;而對(duì)于高難度的邏輯推理問題,則只靠inference-time很難提升,有時(shí)還是負(fù)面作用,不如去增強(qiáng)模型“預(yù)訓(xùn)練”階段的邏輯能力(參考上圖)。


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


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


所以關(guān)于這個(gè)點(diǎn)的結(jié)論應(yīng)該是這樣的:只靠inference-time增加算力,僅對(duì)容易和中等難度的邏輯問題有用,想要不斷提升模型的復(fù)雜推理能力,還需要繼續(xù)在Pre-Train和Post-Training階段下功夫。


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


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

o1應(yīng)由多個(gè)模型構(gòu)成

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


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

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

這里插入一段,解釋下為何大模型的輸入價(jià)格和輸出價(jià)格是不同的,這是因?yàn)樵诖竽P屯评恚╥nference,相對(duì)模型訓(xùn)練來說的,不是指邏輯推理)階段,分為Prefill和Decoding兩個(gè)階段(參考上圖)。Prefill階段首先把用戶的輸入prompt通過并行計(jì)算,產(chǎn)生每個(gè)Token 對(duì)應(yīng)Self Attention的Key-Value,并存儲(chǔ)在KV Cache中,供Decoding階段產(chǎn)生每個(gè)Token時(shí)候計(jì)算Self Attention時(shí)候用,這個(gè)階段每個(gè)Token的Key-Value可并行計(jì)算,模型運(yùn)行一次能輸出多個(gè)Token的KV,所以GPU利用率高;而Decoding階段根據(jù)用戶Prompt生成后續(xù)內(nèi)容,但模型運(yùn)行一次只能產(chǎn)生一個(gè)Token,所以無法有效利用GPU的并行計(jì)算特長(zhǎng),資源利用率不足。資源利用率的差異導(dǎo)致了輸出階段成本高,這是為何大模型一般輸出價(jià)格是輸入價(jià)格3到4倍的原因。


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


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


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

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

OpenAI O1可能采用的訓(xùn)練數(shù)據(jù)

人工標(biāo)注數(shù)據(jù)

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

合成數(shù)據(jù)

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

代碼COT數(shù)據(jù)的反向生成

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

數(shù)學(xué)COT的反向生成

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


受到代碼反向生成的啟發(fā),我覺得也可以反向生成數(shù)學(xué)COT(參考上圖紅色部分)。既然AlphaProof可以構(gòu)造從自然語言問題翻譯成形式化數(shù)學(xué)語言的神經(jīng)網(wǎng)絡(luò),那也可以構(gòu)造一個(gè)反向生成的模型,就是把數(shù)學(xué)形式語言翻譯成自然語言,然后用這個(gè)翻譯系統(tǒng)把AlphaProof找到的解題推理過程,從形式化語言轉(zhuǎn)換成自然語言思考COT。當(dāng)然,中間做錯(cuò)的也可以用,因?yàn)樗忻鞔_的驗(yàn)證系統(tǒng),每一步即使錯(cuò)了,為啥錯(cuò)也知道,這些也可以翻譯成自然語言。這樣可以構(gòu)造出千萬量級(jí)甚至上億量級(jí)的數(shù)學(xué)推理COT思維過程數(shù)據(jù)。我覺得這個(gè)思路大體是可行的。


OpenAI o1目前在數(shù)學(xué)和Coding方面效果最好,可知這方面的訓(xùn)練數(shù)據(jù)是最多的,我不知道是否會(huì)采用類似反向生成的思路來自動(dòng)構(gòu)造COT數(shù)據(jù),但貌似這種方法看上去可行性還比較高。

Reverse-o1:RL的關(guān)鍵要素及如何將RL與LLM融合

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


我們會(huì)先分析下在Hidden COT場(chǎng)景下RL的關(guān)鍵要素:狀態(tài)空間(State Space)、行為空間(Action Space)、獎(jiǎng)勵(lì)模型(Reward Model)。至于RL方法,我推測(cè)采用類似AlphaGo/AlphaZero的概率較大,有幾個(gè)原因:


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


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

O1中RL的狀態(tài)空間:Token序列組成的連續(xù)狀態(tài)空間

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


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

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


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

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

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


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


<ACT_Proposer-Start> Alternatively, perhaps combine the numbers in some way. <ACT_Proposer-End> (提出假設(shè))<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> (復(fù)述目標(biāo))


也就是說,OpenAI的Hidden COT的原始內(nèi)容或者訓(xùn)練數(shù)據(jù),在形式上有可能是這樣的二級(jí)結(jié)構(gòu):


<Think_Start> (Hidden COT起始標(biāo)記)……<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結(jié)束標(biāo)記)

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


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

O1中RL模型的獎(jiǎng)勵(lì)模型(Reward Model)

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


ORM的意思是訓(xùn)練一個(gè)模型,不管推導(dǎo)過程有多少步,只對(duì)最后結(jié)果打分。如果對(duì)照Hidden COT看的話,意思是只有o1把Hidden COT完整地寫完了,ORM才給出一個(gè)獎(jiǎng)勵(lì)信號(hào),模型結(jié)果若和標(biāo)準(zhǔn)答案對(duì)上了,給獎(jiǎng)勵(lì)1,如果答案錯(cuò)誤,給獎(jiǎng)勵(lì)-1,類似這種。很明顯,ORM的優(yōu)點(diǎn)是反饋信號(hào)準(zhǔn)確,比如對(duì)于數(shù)學(xué)題,模型要么做對(duì)了,要么做錯(cuò)了,很明確,所以反饋信號(hào)就精準(zhǔn);但ORM的缺點(diǎn)是反饋稀疏,意思就是反饋信號(hào)少,這個(gè)很直觀,哪怕你推導(dǎo)過程寫10頁(yè)紙,反正最后只有一個(gè)反饋信號(hào)。(OpenAI 訓(xùn)練大模型時(shí)RLHF階段的RM模型,就屬于ORM)


PRM的含義是訓(xùn)練一個(gè)模型,能對(duì)中間每個(gè)過程都給予反饋信號(hào),這樣在推導(dǎo)過程中錯(cuò)在哪個(gè)步驟就很清楚,不用等到最后,所以它的特點(diǎn)是反饋信號(hào)豐富不稀疏。但問題來了,要訓(xùn)練PRM就需要有每一步有標(biāo)注的數(shù)據(jù),這么多標(biāo)注信號(hào)怎么來?常規(guī)做法是靠人工標(biāo)注,比如去年很火的OpenAI的PRM工作“Let’s Verify Step by Step”,就是靠人工標(biāo)注了80萬中間步驟反饋信號(hào)的數(shù)學(xué)題推導(dǎo)過程,而且證明了PRM效果要比ORM好。所以,PRM的優(yōu)點(diǎn)是反饋多效果好,但是訓(xùn)練數(shù)據(jù)制作成本太高,一般人做不了。

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


那么OpenAI o1在訓(xùn)練過程會(huì)采用ORM還是PRM呢?我估計(jì)兩者都會(huì)用。ORM精準(zhǔn),PRM反饋豐富,兩者各有優(yōu)點(diǎn),結(jié)合起來效果應(yīng)會(huì)更好。另外,o1的官網(wǎng)提到了“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”,應(yīng)該指的就是PRM。

AlphaZero的基本原理

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

2017年年底AlphaGo的棋類游戲通用版本Alpha Zero問世,不僅圍棋,對(duì)于國(guó)際象棋、日本將棋等其他棋類游戲,AlphaZero也以壓倒性優(yōu)勢(shì)戰(zhàn)勝包括AlphaGo在內(nèi)的最強(qiáng)的AI程序。

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


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


到目前為止,貌似我們還沒看到神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的作用,其實(shí)它主要是在MCST搜索某個(gè)落子位置的時(shí)候發(fā)揮作用。因?yàn)閺哪硞€(gè)落子位置出發(fā)開始搜索,可搜索空間實(shí)在太大,靠暴力搜索肯定行不通,所以策略網(wǎng)絡(luò)P和價(jià)值網(wǎng)絡(luò)V(AlphaZero已經(jīng)融合為一個(gè)網(wǎng)絡(luò)了,分開說主要是為了方便闡述)的作用主要是引導(dǎo)搜索過程,優(yōu)先搜索贏面大的路徑,剪枝掉贏面小的路徑,這樣來增加搜索效率。


在搜索過程中神經(jīng)網(wǎng)絡(luò)參數(shù)固定不動(dòng),當(dāng)一盤棋下完最終分出勝負(fù),知道勝者后,可針對(duì)下棋路徑上經(jīng)過的每個(gè)狀態(tài)S產(chǎn)生對(duì)應(yīng)的訓(xùn)練數(shù)據(jù)。對(duì)于策略網(wǎng)絡(luò)P來說,學(xué)習(xí)目標(biāo)是MCST搜索獲得的當(dāng)時(shí)狀態(tài)S出發(fā)落子概率分布pai,而對(duì)于價(jià)值網(wǎng)絡(luò)V來說,學(xué)習(xí)目標(biāo)則是“最后的勝者z獲勝概率大”這一事實(shí)。然后根據(jù)這些訓(xùn)練數(shù)據(jù)就可以調(diào)整神經(jīng)網(wǎng)絡(luò)參數(shù),這樣它在下一局對(duì)弈過程中能力會(huì)更強(qiáng)(可以看出AlphaZero的獎(jiǎng)勵(lì)模型是ORM)。這樣通過無限重復(fù)的對(duì)弈過程,AlphaZero能力就越來越強(qiáng)。


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

LLM與RL融合后的Reverse-o1模型網(wǎng)絡(luò)結(jié)構(gòu)

o1和下棋不同的一點(diǎn)是:除了RL,即使是Hidden COT,在背后也是靠一個(gè)Token一個(gè)Token輸出的,LLM一定還是其中的主體結(jié)構(gòu),但RL肯定也需要一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)去調(diào)整模型參數(shù),來逐步學(xué)會(huì)內(nèi)部的思考過程。所以,我們首先面臨的問題是:如何融合LLM和RL兩個(gè)模型,來獲得一個(gè)同時(shí)混合LLM和RL兩者功能的完整網(wǎng)絡(luò)結(jié)構(gòu)。


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


到了這一步,當(dāng)Hidden COT處于某個(gè)狀態(tài)S的時(shí)候,經(jīng)過網(wǎng)絡(luò)可知下一步應(yīng)該采取什么動(dòng)作,也獲得了當(dāng)前狀態(tài)S通向成功答案的概率。但目前仍缺少一部分內(nèi)容,即在已知下一步“思考因子”行為后,對(duì)應(yīng)的Hidden COT 一系列輸出的Tokens。


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

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

MCST樹搜索下的Reverse-o1

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

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


當(dāng)從問題開始,逐步生成Hidden COT片段后,走到答案階段,會(huì)獲得Output Reward,完成一次通過中間環(huán)節(jié)到答案的MCST搜索過程。如果答案正確,可設(shè)置Reward=1,答案錯(cuò)誤可設(shè)置Reward=-1,在此基礎(chǔ)上針對(duì)走到答案所經(jīng)過的所有中間狀態(tài)S構(gòu)造訓(xùn)練數(shù)據(jù),來訓(xùn)練策略網(wǎng)絡(luò)P和價(jià)值網(wǎng)絡(luò)V,策略網(wǎng)絡(luò)的學(xué)習(xí)目標(biāo)是對(duì)應(yīng)狀態(tài)MCST搜索到的行為概率分布pai,價(jià)值網(wǎng)絡(luò)的學(xué)習(xí)目標(biāo)是Output Reward。


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


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


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

文章轉(zhuǎn)載自:張俊林:OpenAI o1原理逆向工程圖解

上一篇:

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

下一篇:

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

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)