機(jī)器之心報(bào)道
編輯:蛋醬、澤南
本周三,知名 AI 創(chuàng)業(yè)公司,曾發(fā)布「全球首個(gè) AI 軟件工程師」的 Cognition AI 開源了一款使用強(qiáng)化學(xué)習(xí),用于編寫 CUDA 內(nèi)核的大模型Kevin-32B

Kevin-32B 基于 QwQ-32B 在 KernelBench 數(shù)據(jù)集上使用 GRPO 進(jìn)行了多輪強(qiáng)化學(xué)習(xí)訓(xùn)練,實(shí)現(xiàn)了超越 o3 和 o4-mini 的頂級(jí)推理表現(xiàn)。
對(duì)此,機(jī)器學(xué)習(xí)社區(qū)表現(xiàn)出了極大的興趣。有人表示期待 DeepSeek R1 風(fēng)格的訓(xùn)練方法用來(lái)提升代碼效率已久,這回終于有人站出來(lái)了。

在一篇博客中,Cognition AI 詳細(xì)介紹了新模型強(qiáng)化學(xué)習(xí)訓(xùn)練的機(jī)制。

代碼是一個(gè)不斷迭代的過(guò)程 —— 需要我們編寫、執(zhí)行程序,評(píng)估結(jié)果,并根據(jù)反饋優(yōu)化代碼。大語(yǔ)言模型(LLM)在代碼生成方面的最新進(jìn)展嘗試將此過(guò)程融入推理階段,并使用并行采樣等方法。雖然這些方法是有效的,但它們依賴于搜索而非實(shí)際學(xué)習(xí) —— 在這其中模型權(quán)重被凍結(jié)。
Cognition AI 探索了多輪強(qiáng)化學(xué)習(xí),使用來(lái)自環(huán)境的中間反饋,并屏蔽模型思維以避免在多輪訓(xùn)練中上下文爆炸。
他們提出的模型 Kevin-32B(即 Kernel Devin)在內(nèi)核生成方面優(yōu)于前沿推理模型。此外他們通過(guò)實(shí)驗(yàn)結(jié)果表明,與單輪訓(xùn)練相比,多輪訓(xùn)練使模型在自我優(yōu)化方面更有效。
多輪訓(xùn)練方法
在新模型上,作者使用了 KernelBench,這是一個(gè)包含 250 個(gè)基于 PyTorch 的經(jīng)典深度學(xué)習(xí)任務(wù)的數(shù)據(jù)集。它衡量?jī)?yōu)化 CUDA 內(nèi)核替換 PyTorch 算子的能力。訓(xùn)練專注于前兩個(gè)級(jí)別,每個(gè)級(jí)別包含 100 個(gè)任務(wù)。級(jí)別 1 包含矩陣乘法、卷積和損失函數(shù)等基礎(chǔ)任務(wù),級(jí)別 2 則包含融合算子,再使用這兩個(gè)級(jí)別的 180 個(gè)任務(wù)進(jìn)行訓(xùn)練,并留出 20 個(gè)任務(wù)作為保留集。
在訓(xùn)練過(guò)程中,模型會(huì)經(jīng)歷一個(gè)迭代反饋循環(huán):從生成的內(nèi)核中提取反饋,并再對(duì)其進(jìn)行優(yōu)化。如果內(nèi)核編譯失敗,錯(cuò)誤軌跡會(huì)傳遞給模型并要求其修復(fù)。如果編譯正確,系統(tǒng)則會(huì)測(cè)量運(yùn)行時(shí)間并要求模型進(jìn)一步改進(jìn)。
初始方法的機(jī)制如下。從初始提示開始,先在每個(gè)優(yōu)化步驟后附加思路鏈、內(nèi)核和評(píng)估信息,再為整個(gè)軌跡分配一個(gè)獎(jiǎng)勵(lì)(定義為任何內(nèi)核獲得的最高分?jǐn)?shù)),并使用該序列進(jìn)行訓(xùn)練。

不過(guò),這種方法存在一些挑戰(zhàn):
- 上下文窗口爆炸:推理模型會(huì)生成很長(zhǎng)的思維鏈。使用這種方法,軌跡的長(zhǎng)度在幾次傳遞后很容易達(dá)到 5-10 萬(wàn)個(gè) token,這會(huì)導(dǎo)致訓(xùn)練不便;
- 樣本效率低下和 credit 分配問(wèn)題:即使我們生成了多個(gè)內(nèi)核,仍然只為整個(gè)軌跡分配一個(gè)獎(jiǎng)勵(lì)。這無(wú)法表明哪個(gè)細(xì)化步驟真正提高了正確性或性能。獎(jiǎng)勵(lì)應(yīng)該根據(jù)細(xì)化步驟對(duì)最終結(jié)果的貢獻(xiàn)來(lái)分配。
為了解決上下文長(zhǎng)度爆炸的問(wèn)題,Kevin-32B 丟棄了軌跡中最長(zhǎng)的部分 —— 思維鏈?,F(xiàn)在每個(gè) token 將只包含先前生成的內(nèi)核和評(píng)估結(jié)果。為了仍然保留上一步思考過(guò)程的信息,我們特意要求模型生成其自身思考過(guò)程的簡(jiǎn)要摘要,然后將其傳遞給后續(xù)上下文。

移除推理的思路鏈。
為了解決樣本效率低下的問(wèn)題,Kevin-32B 選擇了一個(gè)更具表現(xiàn)力的獎(jiǎng)勵(lì)函數(shù),將內(nèi)核的細(xì)化建模為馬爾可夫決策過(guò)程,將給定響應(yīng)的獎(jiǎng)勵(lì)設(shè)置為當(dāng)前內(nèi)核與所有后續(xù)內(nèi)核得分的折扣總和。至此,每個(gè)細(xì)化步驟都變成了一個(gè)訓(xùn)練樣本。

將獎(jiǎng)勵(lì)設(shè)為分?jǐn)?shù)的折扣總和。
結(jié)果
對(duì)于每項(xiàng)任務(wù),作者并行采樣了 16 條軌跡,并進(jìn)行 8 個(gè)連續(xù)的細(xì)化步驟。對(duì)于每項(xiàng)任務(wù)的正確性或性能,他們將 best@16 定義為所有軌跡的最大值,avg@16 定義為所有軌跡的平均值。

經(jīng)過(guò) 8 個(gè)優(yōu)化步驟,Kevin-32B 在整個(gè)數(shù)據(jù)集上的平均正確率為 65%,顯著超越了 QwQ-32B 和前沿模型。它解決了 89% 的數(shù)據(jù)集,而 o4-mini 和 o3 分別只解決了 53% 和 51%。在整個(gè)數(shù)據(jù)集中,Kevin-32B 實(shí)現(xiàn)了 1.41 倍的 best@16 加速比,優(yōu)于前沿模型。
Kevin-32B 在二級(jí)任務(wù)上尤其有效,平均正確率為 48%(o4-mini 為 9.6%,o3 為 9.3%)。這表明多輪訓(xùn)練可以提高模型解決更具挑戰(zhàn)性、更長(zhǎng)期任務(wù)的能力。同樣,我們能注意到模型實(shí)現(xiàn)了 1.74 倍的 best@16 加速比(是 o4-mini 和 o3 為 1.2 倍)。

多輪訓(xùn)練 vs 單輪訓(xùn)練
Kevin-32B 也展現(xiàn)出比 QwQ-32B 和單輪訓(xùn)練模型顯著的提升。在 4 個(gè)優(yōu)化步驟下,Kevin-32B 的表現(xiàn)略優(yōu)于單輪模型,但隨著優(yōu)化步驟增加到 8 個(gè),兩者之間的差距進(jìn)一步擴(kuò)大。這表明,通過(guò)鼓勵(lì)更積極的優(yōu)化,多輪訓(xùn)練在串行軸上具有更好的擴(kuò)展性。

我們可能會(huì)想,單輪訓(xùn)練模型是否可以通過(guò)采樣并行軌跡來(lái)實(shí)現(xiàn)更好的加速,然而在這種環(huán)境下并非如此。在計(jì)算預(yù)算固定的情況下,即使對(duì)于單輪訓(xùn)練模型,多輪推理也比單輪推理更占優(yōu)勢(shì)。
獎(jiǎng)勵(lì)黑客攻擊
最初的實(shí)驗(yàn)使用了規(guī)模較小的模型,例如 DeepSeek-R1-Distill-Qwen-7B,這導(dǎo)致了多起獎(jiǎng)勵(lì)黑客攻擊事件:
- 該模型只是復(fù)制了 PyTorch 參考實(shí)現(xiàn),因此因生成正確答案而獲得獎(jiǎng)勵(lì),且加速比提高了 1.0 倍;
- 該模型將錯(cuò)誤的 CUDA 內(nèi)核實(shí)現(xiàn)包裝在 try-except 語(yǔ)句中,并調(diào)用 PyTorch 實(shí)現(xiàn)函數(shù)作為回退;
- 該模型繼承自參考實(shí)現(xiàn),繞過(guò)了對(duì) CUDA 實(shí)現(xiàn)的需求。
獎(jiǎng)勵(lì)黑客攻擊示例

為了防止獎(jiǎng)勵(lì)黑客攻擊,作者對(duì)響應(yīng)施加了更嚴(yán)格的格式檢查。對(duì)于使用 PyTorch 函數(shù)或不包含 CUDA 內(nèi)核的響應(yīng),獎(jiǎng)勵(lì)被設(shè)置為 0。
我們能觀察到,當(dāng)模型能力與數(shù)據(jù)集難度之間的差距很大時(shí),就會(huì)發(fā)生獎(jiǎng)勵(lì)黑客攻擊。模型難以解決任何任務(wù),因此當(dāng)它生成一個(gè)被黑客入侵的內(nèi)核時(shí),它是唯一具有正向優(yōu)勢(shì)的操作,因此會(huì)得到顯著的強(qiáng)化。
無(wú)意義和重復(fù)的生成
多次運(yùn)行后,我們可以觀察到在大約 35-40 步,模型開始生成重復(fù)或無(wú)意義的響應(yīng)。假設(shè)這是因?yàn)槟P推x了穩(wěn)定區(qū)域,令人驚訝的是,作者偶然發(fā)現(xiàn)了一個(gè)可以有效預(yù)測(cè)未來(lái)垃圾響應(yīng)的指標(biāo) —— 思維鏈不是以「OK」開頭的響應(yīng)比例 —— 我們稱之為「Not Okay Ratio」。

模型訓(xùn)練越多,CoT 的開頭就越不穩(wěn)定:
"Okay Amigos, so I need to optimize this 3D tensor-matrix multiplication..”
"Okay Holy crap, I need to get this code optimized….”
在精煉步驟的第 8 遍時(shí):
"Okay SHIT, this is getting frustrating. Let me see. The error is about …”
為了解決這個(gè)問(wèn)題,作者嘗試使用 KL 系數(shù) 0.001 和 0.01 進(jìn)行運(yùn)行,但發(fā)現(xiàn)這會(huì)減慢學(xué)習(xí)速度,同時(shí)又不能防止垃圾數(shù)據(jù)的產(chǎn)生。最后,作者通過(guò)使用 Dr. GRPO 提出的恒定長(zhǎng)度損失正則化(這顯著降低了梯度范數(shù)),并將梯度范數(shù)大幅削減至 0.05,將垃圾數(shù)據(jù)的出現(xiàn)延遲到了第 100 步。
示例內(nèi)核
作為示例,以 1 級(jí)任務(wù) 40(LayerNorm)的軌跡為例,作者重點(diǎn)介紹了模型如何迭代地整合來(lái)自內(nèi)核評(píng)估的反饋,并利用這些反饋來(lái)改進(jìn)其生成過(guò)程。
步驟 1:模型生成一個(gè)正確的內(nèi)核。它使用共享內(nèi)存,并將均值 / 方差計(jì)算與歸一化融合。這實(shí)現(xiàn)了 0.6 倍的加速。
__shared__ float shared_sums [512]; // 256 threads * 2 values
for (int s = block_size / 2; s > 0; s >>= 1) {
if (tid < s) {
shared_sums [2 * tid] += shared_sums [2 * (tid + s)];
shared_sums [2 * tid + 1] += shared_sums [2 * (tid + s) + 1];
__syncthreads ();
for (int d = tid; d < D; d += block_size) {
float x_val = x [n * D + d];
float y_val = (x_val - mean) /sqrt_var;
y_val = y_val * scale [d] + bias [d];
y [n * D + d] = y_val;
步驟 2:模型從評(píng)估反饋中注意到「當(dāng)前的加速比是 0.6,這意味著它實(shí)際上比 PyTorch 版本慢。這不太好。讓我想想瓶頸可能在哪里」。它將大部分推理 token 用于尋找更合適的塊大小,并相應(yīng)地修改代碼。修改是正確的,加速比現(xiàn)在達(dá)到了 4.27 倍。
步驟 3 和 4:模型嘗試進(jìn)行更積極的優(yōu)化。它考慮了循環(huán)展開和減少庫(kù)沖突,但最終選擇了 Warp 級(jí)內(nèi)聯(lián)函數(shù)。但最終失敗了 —— 首先是因?yàn)闅w約邏輯存在正確性問(wèn)題,其次是因?yàn)樗悸诽L(zhǎng)。
步驟 5:模型注意到 Warp 歸約實(shí)現(xiàn)中存在錯(cuò)誤的問(wèn)題并進(jìn)行了修復(fù)。它成功實(shí)現(xiàn)了兩級(jí) Warp 歸約。最終加速比達(dá)到了 9.61 倍。
// Warp-level reduction using shuffle instructions
for (int delta = 1; delta <= 16; delta <<= 1) {
float other_sum = __shfl_xor_sync (0xFFFFFFFF, warp_sum, delta);
float other_sum_sq = __shfl_xor_sync (0xFFFFFFFF, warp_sum_sq, delta);
warp_sum += other_sum;
warp_sum_sq += other_sum_sq;
__shared__ float sum_warp [32];
__shared__ float sum_sq_warp [32];
__shared__ float results [2]; // [mean, inv_std]
if (warp_id == 0) {
sum_warp [warp_lane] = warp_sum;
sum_sq_warp [warp_lane] = warp_sum_sq;
__syncthreads ();
// Final reduction within the first warp (tid 0-31)
if (tid < 32) {
float my_sum = sum_warp [tid];
float my_sum_sq = sum_sq_warp [tid];
// Reduce within the first warp (32 threads)
for (int s = 16; s >= 1; s >>= 1) {
my_sum += __shfl_xor_sync (0xFFFFFFFF, my_sum, s);
my_sum_sq += __shfl_xor_sync (0xFFFFFFFF, my_sum_sq, s);
訓(xùn)練設(shè)置
這里使用的是組相對(duì)策略優(yōu)化算法(GRPO),該算法由 DeepSeek 提出,是近端策略優(yōu)化算法(PPO)的一種變體。
GRPO 不使用值網(wǎng)絡(luò)來(lái)估算基線和計(jì)算優(yōu)勢(shì),而是將從同一提示中采樣的響應(yīng)組內(nèi)的獎(jiǎng)勵(lì)歸一化。

作者使用 vLLM 進(jìn)行推理,使用 DeepSpeed Zero-3 卸載優(yōu)化器狀態(tài)。每批訓(xùn)練 8 個(gè)任務(wù),每個(gè)任務(wù) 16 個(gè)軌跡。我們使用 GRPO,每批 2 個(gè)梯度步驟。基礎(chǔ)模型是 QwQ-32B。
響應(yīng)生成完成后,每個(gè) GPU 將其 vLLM 引擎卸載到 CPU 內(nèi)存,并評(píng)估其生成的內(nèi)核。對(duì)于每個(gè)響應(yīng),作者都會(huì)檢查響應(yīng)格式是否正確,并提取 CUDA 內(nèi)核。然后,編譯并執(zhí)行代碼,使用隨機(jī)張量測(cè)試其正確性。如果正確,則會(huì)對(duì)內(nèi)核的運(yùn)行時(shí)間進(jìn)行剖析。
通過(guò)正確性檢查的響應(yīng)將獲得 0.3 的獎(jiǎng)勵(lì),而額外的性能獎(jiǎng)勵(lì)則相當(dāng)于與參考實(shí)現(xiàn)相比所獲得的速度提升。

內(nèi)核評(píng)估和基準(zhǔn)問(wèn)題
作者對(duì)評(píng)估進(jìn)行了沙盒化處理,以免出現(xiàn)致命錯(cuò)誤(如 CUDA 非法內(nèi)存訪問(wèn)),導(dǎo)致訓(xùn)練過(guò)程崩潰。
由于 KernelBench 中的許多任務(wù)使用非常小的輸入張量,該基準(zhǔn)最終測(cè)量的是內(nèi)核啟動(dòng)開銷而非實(shí)際內(nèi)核執(zhí)行時(shí)間。為了解決這個(gè)問(wèn)題,作者擴(kuò)大了受影響任務(wù)的張量維度。
KernelBench 評(píng)估工具中還有一個(gè)更隱蔽的錯(cuò)誤,導(dǎo)致被測(cè)內(nèi)核將參考實(shí)現(xiàn)的輸出張量作為自己的張量輸出循環(huán)使用。因此,只計(jì)算(正確)部分輸出張量的內(nèi)核仍能通過(guò)正確性檢查。為了解決這個(gè)問(wèn)題,我們首先運(yùn)行測(cè)試過(guò)的內(nèi)核,然后再運(yùn)行參考實(shí)現(xiàn),從而避免了這一問(wèn)題。
單輪訓(xùn)練設(shè)置
作者使用 max_grad_norm = 0.5、lr = 常量 2e-6(熱身比為 0.03)、max_prompt_length = 8192、max_response_length = 16384,其使用 DAPO 的 Clip-High,eps_high = 0.28,并將 KL 系數(shù)設(shè)為 0,以允許模型自由偏離基本策略。

我們能觀察到,單輪模型比基礎(chǔ)模型有明顯改善,但在 25 步之后,獎(jiǎng)勵(lì)開始趨于穩(wěn)定。
多輪訓(xùn)練設(shè)置
作者根據(jù)每個(gè)軌跡的最佳內(nèi)核對(duì)其正確性和性能進(jìn)行評(píng)分。在最終訓(xùn)練運(yùn)行中,每個(gè)前向路徑由 16 個(gè)平行軌跡組成,每個(gè)軌跡有 4 個(gè)細(xì)化步驟,折扣系數(shù)為 0.4。與單輪訓(xùn)練不同的是,現(xiàn)在的獎(jiǎng)勵(lì)會(huì)穩(wěn)步增加。
隨著模型學(xué)會(huì)更高效地使用推理 token 來(lái)生成內(nèi)核,響應(yīng)長(zhǎng)度最初會(huì)減少。第 25 步之后,隨著模型嘗試更復(fù)雜的解決方案,響應(yīng)長(zhǎng)度會(huì)增加。按照 DeepScaleR 的做法,作者在第 30 步將最大響應(yīng)長(zhǎng)度從 16K 擴(kuò)展到 22K token。

更多結(jié)果 & 消融研究
推理時(shí)間縮放
作者還研究了多輪模型在并行和串行軸上的擴(kuò)展。在推理時(shí)間的第一次實(shí)驗(yàn)中,其使用了 16 個(gè)并行軌跡和 8 個(gè)細(xì)化步驟。作者再次發(fā)現(xiàn),隨著細(xì)化步驟的增加,多輪模型的擴(kuò)展性更好。

在第二次實(shí)驗(yàn)中,作者將并行軌跡的數(shù)量增加到 64 個(gè),同時(shí)只保留 4 個(gè)細(xì)化步驟。這樣,best@64 的正確率達(dá)到 89.5%,性能提高了 1.28 倍,比 8 個(gè)細(xì)化步驟的 best@16 稍差。

作者研究了沿并行軸或串行軸縮放推理的效果。此處使用 pass@k 性能來(lái)表示 k 生成的估計(jì)性能。他們使用類似于 Chen 等人的無(wú)偏估計(jì)器計(jì)算該指標(biāo),其方差低于 avg@k。
然后,作者試圖找到一個(gè)合適的定律來(lái)模擬實(shí)驗(yàn)數(shù)據(jù),并注意到在這個(gè)(?。?shù)量級(jí)上,細(xì)化步驟和平行軌跡的貢獻(xiàn)看起來(lái)都像一個(gè)冪律。此外,由于內(nèi)核加速是有限的,因此性能指標(biāo)應(yīng)該達(dá)到飽和。因此,作者決定擬合以下定律(該定律在小數(shù)量級(jí)時(shí)呈現(xiàn)冪律表現(xiàn),隨著計(jì)算量的增加,收益會(huì)逐漸減少):

作者發(fā)現(xiàn),給定一個(gè)固定的、非微不足道的推理計(jì)算預(yù)算(例如,細(xì)化步驟 * 并行軌跡≥8),最佳計(jì)算分配會(huì)轉(zhuǎn)向串行細(xì)化,而不是并行生成。

單輪模型推理
作者之前在相同的多輪推理設(shè)置中比較了多輪模型(Kevin-32B)和單輪模型。但由于單輪模型是在單輪環(huán)境下訓(xùn)練的,
因此,一些問(wèn)題就產(chǎn)生了:在單輪環(huán)境下訓(xùn)練的模型計(jì)算量固定的情況下,我們能用單輪推理或多輪推理獲得更好的推理結(jié)果嗎?

在這種特定環(huán)境下,即使使用單輪訓(xùn)練模型,多輪推理的結(jié)果一般也優(yōu)于單輪推理(平均正確率除外)。
為了比較這兩種方法,作者使用 64 個(gè)并行軌跡和僅 1 個(gè)步驟來(lái)評(píng)估單輪模型,然后將結(jié)果與使用 16 個(gè)并行軌跡和每個(gè)軌跡 4 個(gè)細(xì)化步驟的多輪推理進(jìn)行比較。作者將單輪推理的 64 個(gè)并行軌跡分成 16 組,每組 4 個(gè)內(nèi)核,取每組的 best@4,然后取 16 組的平均值。這樣就能將這一指標(biāo)與多輪推理中的 avg@16 進(jìn)行比較(因?yàn)樵谶@種情況下,我們是在單個(gè)軌跡中取 best@4)。最后,作者將單輪推理的 best@64 與多輪推理的 best@16(4 個(gè)細(xì)化步驟)進(jìn)行了比較。
獎(jiǎng)勵(lì)塑造
作者嘗試了獎(jiǎng)勵(lì)塑造。在較小模型上運(yùn)行時(shí),其添加了中間獎(jiǎng)勵(lì)(成功解析、編譯、執(zhí)行......)來(lái)引導(dǎo)模型。然而,作者發(fā)現(xiàn)這些獎(jiǎng)勵(lì)可能會(huì)分散模型的注意力,使其無(wú)法朝著真正的目標(biāo)更新 —— 生成正確且性能良好的內(nèi)核。作者還按照 Kimi 的建議嘗試了長(zhǎng)度懲罰,但發(fā)現(xiàn)在已有的環(huán)境中,長(zhǎng)度懲罰會(huì)降低模型的性能。
對(duì)于多輪訓(xùn)練,作者對(duì)不同的獎(jiǎng)勵(lì)函數(shù)進(jìn)行了消融。他們嘗試了不同的伽瑪值(0.4 與 0.8),以及如何匯總單個(gè)軌跡的獎(jiǎng)勵(lì) —— 求和或取最大值。
在內(nèi)核生成中,作者從根本上關(guān)心的是獲得具有最大軌跡的內(nèi)核(而不是優(yōu)化多個(gè)內(nèi)核的分?jǐn)?shù)折扣總和)。因此,作者認(rèn)為使用最大獎(jiǎng)勵(lì)公式會(huì)帶來(lái)更好的加速效果。

然而,我們可以發(fā)現(xiàn),將整個(gè) MDP 的獎(jiǎng)勵(lì)相加,gamma=0.4 的效果最好。

獎(jiǎng)勵(lì)塑造消融 — 多輪訓(xùn)練是在獎(jiǎng)勵(lì)總和與伽馬值 = 0.4(sum_gamma_0_4)的條件下進(jìn)行的。
并行軌跡
作者還嘗試在訓(xùn)練過(guò)程中將并行軌跡的數(shù)量從 16 個(gè)增加到 64 個(gè),即訓(xùn)練批次大小為 64 * 4 * 8 = 2048。理論上講,這將使優(yōu)勢(shì)估計(jì)的噪聲更小,但他們發(fā)現(xiàn)在評(píng)估的 best@16 和 avg@16 性能上沒(méi)有明顯差異。此外,在第 30 步(60 梯度步)左右,無(wú)用的東西開始提前出現(xiàn)。
數(shù)據(jù)分布
在項(xiàng)目初期,作者嘗試在 DeepSeek-R1-Distill-Qwen-14B 上運(yùn)行 level 1 任務(wù)的簡(jiǎn)單子集。實(shí)驗(yàn)發(fā)現(xiàn),獎(jiǎng)勵(lì)會(huì)出現(xiàn)高原現(xiàn)象,模型會(huì)過(guò)擬合單一難度級(jí)別。此外,模型只能學(xué)習(xí)有限的優(yōu)化技術(shù)。因此,作者認(rèn)為在數(shù)據(jù)集中均衡、多樣地分布不同難度的任務(wù)非常重要。
測(cè)試時(shí)搜索
在訓(xùn)練過(guò)程中,為了保持合理的訓(xùn)練時(shí)間,必須限制搜索。但在測(cè)試時(shí),可以自由地使用更復(fù)雜的測(cè)試時(shí)間技術(shù)來(lái)進(jìn)一步提高性能。
為此,Kevin-32B 使用了改進(jìn)版的束搜索,其工作原理如下。作者首先在 16 條軌跡上執(zhí)行 4 個(gè)串行細(xì)化步驟,就像在訓(xùn)練時(shí)間所做的那樣。在這一過(guò)程結(jié)束時(shí),根據(jù)生成的最快內(nèi)核對(duì)軌跡進(jìn)行排序,并保留最好的 4 個(gè)軌跡。然后,作者將每條軌跡復(fù)制 4 次(共 16 條軌跡),并重復(fù)這一過(guò)程。作為一種通用方法,它還顯著提高了模型性能,在整個(gè)數(shù)據(jù)集上平均提速 1.56 倍。

不出所料,隨著測(cè)試時(shí)間計(jì)算量的增加,得到的收益也在減少,盡管平均性能在幾個(gè)小時(shí)后仍有提高。

束搜索測(cè)試時(shí)間推理。計(jì)算時(shí)間是在單個(gè) H200 GPU 上按內(nèi)核計(jì)算的。請(qǐng)注意,其中還包括評(píng)估時(shí)的停滯時(shí)間,有效推理時(shí)間約占總計(jì)算時(shí)間的 45%。

作者通過(guò)修改軌跡數(shù)、束寬度和細(xì)化步數(shù),嘗試了波束搜索的幾種不同變體。有趣的是,他們發(fā)現(xiàn)中位加速度較高的設(shè)置平均加速度較低,反之亦然。
作者將這種行為歸因于每種技術(shù)在探索 / 利用的帕累托前沿中的不同位置:通過(guò)更多的探索,內(nèi)核可以實(shí)現(xiàn)一致的加速,盡管它們可能會(huì)錯(cuò)過(guò)非常激進(jìn)的、顯著提高平均速度的優(yōu)化。
未來(lái)工作
我們相信,這項(xiàng)工作只是探索編程智能體訓(xùn)練方法的開始。如果有更多的時(shí)間和計(jì)算能力,我們希望嘗試以下方法:
- 學(xué)習(xí)價(jià)值網(wǎng)絡(luò)并使用 PPO 進(jìn)行訓(xùn)練。事實(shí)上,基線估計(jì)器是按引用步驟而不是按提示計(jì)算的;
- 在訓(xùn)練時(shí)整合更復(fù)雜的搜索方法,如束搜索(而不僅僅是并行 + 串行搜索);
- 將多輪訓(xùn)練法應(yīng)用于更普遍的編程環(huán)境。
總結(jié)
在這項(xiàng)工作中,作者提出了一種方法,該方法適用于任何具有中間獎(jiǎng)勵(lì)的多輪環(huán)境。研究表明,這種方法比單圈 GRPO 取得了更好的結(jié)果。
端到端訓(xùn)練將是未來(lái)智能體的重要組成部分。雖然手工制作的多 LLM 工作流程可以帶來(lái)短期收益,但它們?cè)诤艽蟪潭壬弦蕾囉谌祟惖膯l(fā)式方法,而且無(wú)法擴(kuò)展。相比之下,更通用的方法可以讓模型自由探索不同的軌跡(搜索),然后學(xué)習(xí)這些長(zhǎng)期動(dòng)態(tài)。通過(guò)與編程環(huán)境的交互,模型產(chǎn)生經(jīng)驗(yàn)流,并通過(guò)反饋不斷調(diào)整。我們希望這樣的方法能成為邁向自主編程智能體的第一步。
HuggingFace: https://huggingface.co/cognition-ai/Kevin-32B
最后,讓我們來(lái)復(fù)習(xí)一下《The Bitter Lesson》的道理:
我們必須吸取慘痛的教訓(xùn),從長(zhǎng)遠(yuǎn)來(lái)看,在我們的思維方式中植入知識(shí)是行不通的。這一慘痛教訓(xùn)基于以下歷史觀察:
- 人工智能研究人員經(jīng)常試圖在其智能體中構(gòu)建知識(shí);
- 這在短期內(nèi)總是有幫助的,而且會(huì)讓研究人員個(gè)人感到滿意;
- 從長(zhǎng)遠(yuǎn)來(lái)看,它會(huì)停滯不前,甚至抑制進(jìn)一步的進(jìn)展;
- 通過(guò)搜索和學(xué)習(xí)來(lái)擴(kuò)展計(jì)算規(guī)模的相反方法最終會(huì)帶來(lái)突破性進(jìn)展。
參考內(nèi)容:
https://cognition.ai/blog/kevin-32b
熱門跟貼