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