讓模型像人一樣思考
一、背景
2024年9月OpenAI發(fā)布的o1-preview模型展現(xiàn)出了在解決復(fù)雜問題上的強大邏輯思維能力。相比之前傳統(tǒng)的Chat類模型,o1類模型在解決問題時會構(gòu)建出長序列的思維鏈chain-of-thought(CoT)進行推理,通過問題拆解、中間步驟驗證、思維探索等方法,最終找到問題的正確解答方法。OpenAI對o1模型的介紹中也著重強調(diào)了CoT的重要性【1】。
類似于人類在回答一個困難問題時可能會思考很長時間,o1 在解決問題時也采用了鏈?zhǔn)剿季S。通過強化學(xué)習(xí),o1 學(xué)會了優(yōu)化自己的思維鏈條并改進使用的策略。它學(xué)會了識別和糾正自己的錯誤,學(xué)會將復(fù)雜的步驟拆解成更簡單的部分,學(xué)會在當(dāng)前方法無效時嘗試不同的解決方案。這個過程顯著提升了模型的推理能力。
我們分別測試了ChatGPT與OpenAI o1-preview對"strawberry"單詞中字母"r"的數(shù)量的回答,發(fā)現(xiàn)o1-preview不僅給出了正確答案,還展示了它獲取答案的推理過程。
o1-preview的出現(xiàn)激起了人工智能領(lǐng)域?qū)Υ竽P屯评砟芰μ剿鞯睦顺?。至今已?jīng)涌現(xiàn)出了QwQ,DeepSeek等許多性能比肩o1的開源模型。與此同時,研究者們探索出了多種模型思維鏈生成的構(gòu)建方法。本文就目前最主流的有監(jiān)督學(xué)習(xí)SFT + 強化學(xué)習(xí)RL方法進行一些簡單介紹,希望能夠給到讀者一些啟發(fā)。
二、構(gòu)建流程
構(gòu)建模型思維鏈背后的關(guān)鍵技術(shù),正是強化學(xué)習(xí)。強化學(xué)習(xí)通過獎懲機制,激勵模型進行探索,促進其在任務(wù)執(zhí)行中的持續(xù)優(yōu)化。與傳統(tǒng)的有監(jiān)督微調(diào)方法相比,強化學(xué)習(xí)強調(diào)更多的探索和自我優(yōu)化,能夠幫助模型突破數(shù)據(jù)本身的局限,學(xué)會更多的推理模式和思維方式。下面就SFT和強化學(xué)習(xí)在思維鏈中的應(yīng)用分別進行介紹。
1.有監(jiān)督微調(diào)SFT
有監(jiān)督微調(diào)SFT是一種非常高效的讓模型學(xué)習(xí)“模仿”生成思維鏈來解決問題的訓(xùn)練方法。通過在預(yù)先構(gòu)建好的CoT數(shù)據(jù)中進行teacher learning,SFT可以讓不具備生成長CoT內(nèi)容或者CoT效果比較差的基礎(chǔ)模型性能得到大幅提升。SkyThought通過在數(shù)學(xué)問題中進行研究,作者發(fā)現(xiàn)使用高質(zhì)量CoT數(shù)據(jù)進行SFT,模型就能夠達到比肩o1-preview的效果【2】。
然而僅使用CoT數(shù)據(jù)進行SFT會存在幾點問題:
- 目前CoT的數(shù)據(jù)主要通過API蒸餾高性能o1類模型生成,這些模型本身的CoT生成能力決定了使用生成數(shù)據(jù)SFT后的模型上限。
- CoT數(shù)據(jù)的人工標(biāo)注成本昂貴,在SFT的后期,模型性能的提升可能對高質(zhì)量數(shù)據(jù)的需求成指數(shù)級增加。
- SFT方式是一種確定性的學(xué)習(xí)方式,目前還沒有研究發(fā)現(xiàn)僅通過SFT能夠讓模型出現(xiàn)超出數(shù)據(jù)范圍的探索能力,這可能會限制模型學(xué)會通用推理能力。
為了解決上面的問題,我們需要借助強化學(xué)習(xí)的力量。目前幾乎所有的研究人員都將SFT作為強化學(xué)習(xí)的前置訓(xùn)練,以此加速強化學(xué)習(xí)的訓(xùn)練。值得一提的是,在最近開源的DeepSeek-R1技術(shù)報告中,作者發(fā)現(xiàn)即使不使用SFT直接在基礎(chǔ)模型上進行強化學(xué)習(xí)訓(xùn)練,模型也能學(xué)會生成思維鏈,而且在訓(xùn)練到一定階段,模型的思維鏈中還會自發(fā)性地涌現(xiàn)出反思這類行為。不過作者也提到,這種直接強化學(xué)習(xí)得到的模型生成的內(nèi)容可讀性會比較差【3】。因此,SFT作為RL的前置訓(xùn)練還是有必要的。
2.強化學(xué)習(xí)訓(xùn)練
強化學(xué)習(xí)RL早已在人工智能領(lǐng)域大量應(yīng)用,無論是之前名噪一時的AlphaGo,還是最近幾年大模型訓(xùn)練中的RLHF,強化學(xué)習(xí)已被證明可以應(yīng)用在進一步提升SFT后的模型性能。在介紹如何應(yīng)用RL提升模型長CoT能力之前,我們先簡單回顧下RL的幾個重要概念。
(1)結(jié)果監(jiān)督法
結(jié)果監(jiān)督方法顧名思義,是指只利用最終的結(jié)果來對整個策略步驟進行優(yōu)化的方法。
數(shù)據(jù)生成:結(jié)果監(jiān)督的數(shù)據(jù)一般可通過人工標(biāo)注或者模型生成獲得。在使用模型生成時,一般會采用拒絕采樣reject sampling的方法。對于數(shù)學(xué)這類有明確答案的問題,我們可以直接比較生成的最終答案和gt是否匹配,不匹配的數(shù)據(jù)直接刪除。對于代碼問題,可以通過執(zhí)行測試樣例的方法剔除錯誤數(shù)據(jù)。
模型訓(xùn)練:結(jié)果獎勵模型ORM一般采用二分類模型,通過標(biāo)注的數(shù)據(jù)來判斷結(jié)果是否正確。所以直接在數(shù)據(jù)上進行有監(jiān)督訓(xùn)練即可。
(2)過程監(jiān)督法
過程監(jiān)督方法是對思維鏈的每步推理都進行評分,因此PRM是一種針對思維鏈訓(xùn)練的改進獎勵模型。相比于結(jié)果監(jiān)督,過程監(jiān)督的獎勵更加稠密,因此訓(xùn)練時穩(wěn)定性和效率會更好。這里我們可以參考OpenAI的比對試驗,相比于結(jié)果監(jiān)督模型ORM,過程監(jiān)督模型PRM在每個問題生成的N個候選答案中找到正確答案的概率更大,并且隨著N的增加,其與ORM之間的差距會進一步拉大【4】。
數(shù)據(jù)生成:OpenAI開源的過程監(jiān)督數(shù)據(jù)集PRM800K質(zhì)量比較高,采用的是人工標(biāo)注的方法,只可惜PRM800K數(shù)據(jù)集只有數(shù)學(xué)問題。除了人工標(biāo)注方法外,也可以通過模型生成,感興趣的可以參考Math-Shepherd中的方法【5】。
模型訓(xùn)練:過程獎勵模型本質(zhì)上是一個輸出標(biāo)量分值的模型,不同的研究者會使用不一樣的訓(xùn)練方法,可以參考Math-Shepherd中的方法將整個推理過程輸入,mask掉步驟以外的tokens,這樣可以提高訓(xùn)練效率。最近也發(fā)現(xiàn)一篇清華研究者提出的使用隱式獎勵訓(xùn)練PRM的方法,這種方法可以直接使用ORM數(shù)據(jù)來訓(xùn)練,也很有參考價值【6】。
結(jié)果監(jiān)督和過程監(jiān)督方法對比
優(yōu)點 | 缺點 | |
結(jié)果監(jiān)督 |
|
|
過程監(jiān)督 |
|
|
強化學(xué)習(xí)訓(xùn)練
無論是使用結(jié)果獎勵模型還是過程獎勵模型,有了這些模型我們就可以對策略模型的輸出結(jié)果打分,然后使用PPO這類強化學(xué)習(xí)算法不斷調(diào)整模型參數(shù),讓模型自己優(yōu)化思維鏈。
3.解碼策略
o1類模型的推理除了正常的序列解碼之外,還可以結(jié)合蒙特卡洛樹搜索(Monte Carlo Tree Search,MCTS)來增加思維鏈的搜索空間,從而提高模型找到正確答案的概率。
蒙特卡洛樹搜索是一種通過模擬隨機游戲過程來尋找最優(yōu)策略的算法。該算法的主要步驟可以分為四個階段【7】:
- 選擇(Selection):從根節(jié)點開始,按照一定的策略(如使用UCT方法)選擇一個子節(jié)點,直到到達一個尚未完全展開的節(jié)點
- 擴展(Expansion):在選擇的節(jié)點上開展新的子節(jié)點
- 模擬(Simulation):從擴展的新節(jié)點開始,進行隨機模擬直到到達終止?fàn)顟B(tài)
- 回溯(Backpropagation):將模擬的結(jié)果反饋回樹的上層節(jié)點,更新這些節(jié)點的狀態(tài)信息
相比于每個節(jié)點都隨機采樣的方法,MCTS依靠(Upper Confidence Bound applied for Trees,UCT)算法實現(xiàn)了搜索過程中規(guī)避掉已充分探索的低概率獲勝節(jié)點,成為找到最佳決策路徑的一種非常高效的搜索算法。
UCT值的計算方法
Q:截止到本輪rollout為止,該節(jié)點的累積reward
N:截止到本輪rollout為止,該節(jié)點的累積被訪問次數(shù)
N_parent:截止到本輪rollout為止,該節(jié)點的父節(jié)點累積被訪問次數(shù)
c:探索權(quán)重,c值越大,MCTS越傾向于選擇選擇累積被訪問次數(shù)較少的節(jié)點
通過UCT的公式,搜索的前期一般將c設(shè)置的比較大,對節(jié)點充分探索。在探索后期將c值減小,從而更多采樣獲勝概率高的路徑,提高評估準(zhǔn)確性。
MCTS方法在大模型推理中的應(yīng)用
在這里我們以微軟的開源工作rStar來詳細(xì)介紹MCTS是如何應(yīng)用在大模型推理階段的。首先假設(shè)我們已提前訓(xùn)練好一個具有CoT能力的模型M,并且在模型M中預(yù)先定義了5個行動策略,A1、A2、A3、A4和A5。它們分別代表了模型在推理的每一步可以選擇的行動,如重構(gòu)問題、拆解問題,推理下一步等等。在每次回答問題之前,模型會先根據(jù)設(shè)定的rollouts數(shù)量用MCTS方法構(gòu)建樹,然后再從所有的有效回答中選擇最佳的一個返回給用戶。
上面的描述可能不容易理解,我們可以通過一次rollout過程來幫助我們理解。首先我們把原始問題看作是樹的根節(jié)點,從根節(jié)點出發(fā)我們進行一次MCTS。在第一次搜索階段,因為根節(jié)點下面都沒有子節(jié)點,所以MCTS會選擇根節(jié)點,而在后續(xù)探索中,如果一個節(jié)點之前已經(jīng)被探索過,MCTS會根據(jù)其子節(jié)點的UCT值選擇最大的一個。接著,我們對根節(jié)點進行拓展,MCTS會將所有可能的子節(jié)點都擴展出來,然后從中隨機選擇一個。后面的模擬就是會不斷重復(fù)選擇-擴展,直到到達葉子節(jié)點(節(jié)點生成了最終答案,或者節(jié)點到達了最大步驟限制)。這樣一個從根節(jié)點到葉子節(jié)點的路徑稱之為1個rollout。我們可以發(fā)現(xiàn),在一次rollout過程中,MCTS是有可能在一些擴展階段生成出葉子節(jié)點(但是沒有被選擇)。此外,實際推理過程中,模型在每個節(jié)點都會生成多個sample,每個sample都會被當(dāng)作一個節(jié)點,以此拓展搜索空間。
在多輪rollouts之后,我們就得到了一棵相對完整的樹,之后在rStar中,作者使用了另一個打分模型從所有的有效結(jié)果路徑中找到一個評分最高的路徑作為最終結(jié)果【8】。
三、總結(jié)
模型思維鏈能力的構(gòu)建離不開SFT和RL的共同訓(xùn)練。SFT作為RL的前置訓(xùn)練用來提升模型思維鏈內(nèi)容的基礎(chǔ)質(zhì)量,因此需要保證數(shù)據(jù)的質(zhì)量。RL訓(xùn)練用于進一提高模型思維鏈的探索能力,其中結(jié)果監(jiān)督和過程監(jiān)督兩種方法各有利弊,應(yīng)結(jié)合自身情況選擇。
參考資料:
【1】??https://openai.com/index/learning-to-reason-with-llms/??
【2】??https://novasky-ai.github.io/posts/sky-t1/??
【3】??https://github.com/deepseek-ai/DeepSeek-R1?tab=readme-ov-file??
【4】??https://arxiv.org/abs/2305.20050??
【5】??https://arxiv.org/abs/2312.08935??
【7】??https://en.wikipedia.org/wiki/Monte_Carlo_tree_search??
【8】???https://zhuanlan.zhihu.com/p/9154878387??
本文轉(zhuǎn)載自 ??AI遇見云??,作者: AI遇見云
