桥接在线与离线强化学习:用于多轮代码生成的上下文赌博机学习 Bridging Online and Offline RL: Contextual Bandit Learning for Multi-Turn Code Generation
COBALT方法通过上下文赌博机学习结合在线和离线RL,提升多轮代码生成性能。
前置知识
强化学习(RL)
强化学习是机器学习的一个分支,智能体通过与环境交互来学习最优策略。在LLM训练中,RL通过奖励信号引导模型生成更符合人类偏好的输出。在线RL需要不断与环境交互收集新数据,而离线RL则使用预先收集的数据集进行训练。
本文的核心就是提出一种新的RL范式来训练LLM进行代码生成,理解RL的基本概念是理解COBALT方法的基础。
上下文赌博机(Contextual Bandit)
上下文赌博机是强化学习的一种简化形式,智能体根据当前上下文(状态)选择一个动作,并立即获得奖励。与完整RL不同,它假设当前动作不会影响未来状态变化,因此可以逐步优化。这种设定大大简化了学习问题,使其更易于处理。
COBALT的核心创新就是将多轮代码生成问题转化为上下文赌博机学习,这是理解本文方法的关键。
多轮代码生成
多轮代码生成是指LLM根据编程问题描述生成代码后,根据执行反馈(如测试用例结果)迭代修改和改进代码的过程。这模拟了人类程序员的调试过程,每一轮都会根据反馈调整代码,直到通过所有测试用例。
本文研究的就是如何通过RL训练LLM更好地进行多轮代码生成,这是当前LLM应用的前沿方向。
一步可恢复性(One-step Recoverability)
这是多轮代码生成问题的一个重要特性:最优策略的优势函数在所有状态-动作对上都有界(具体地,$-1 \leq A^*(s, a) \leq 0$)。这意味着次优动作对后续步骤的负面影响是有限的,模型可以在一步内从之前的错误中恢复。
这个理论性质是COBALT能够将多轮RL问题简化为单步赌博机学习的理论基础。
奖励黑客(Reward Hacking)
奖励黑客是指模型学会利用奖励信号中的漏洞或噪声来获得高奖励,而不是真正完成预期任务。在代码生成中,这表现为模型可能通过硬编码、逻辑过拟合或语义漂移等方式来通过错误的测试用例,而不是生成真正正确的代码。
本文发现并系统分析了LLM在多轮代码生成中的奖励黑客行为,并提出了通过扰动数据进行缓解的策略。
研究动机
当前使用强化学习训练LLM进行多轮代码生成面临两个主要挑战。首先,在线RL方法虽然性能较好,但训练成本高昂且不稳定。例如,Gehring等人(2025)使用288个GPU训练一个8B参数的多轮代码生成LLM,这种资源需求对于大型科技公司之外的组织来说难以承受。同时,Deng等人(2025)和Xue等人(2025)报告了在训练LLM进行多轮工具集成推理时出现学习崩溃和梯度爆炸的问题。另一方面,离线RL方法虽然成本更低、训练更稳定,但由于分布偏移和缺乏探索,通常只能获得性能较差的模型。这种两难困境限制了多轮代码生成LLM的广泛应用。
本文的目标是本文的具体目标是提出一种新的RL方法,能够结合在线和离线RL的优点:既要像在线RL那样获得高性能,又要像离线RL那样保持训练效率和稳定性。具体地,作者希望在LiveCodeBench基准测试上显著提升8B参数模型的Pass@1性能,同时将训练成本控制在可接受范围内(例如使用4个GPU而不是数百个)。
与已有工作不同的是,本文的独特切入角度是观察到多轮代码生成问题具有一种特殊的理论性质——一步可恢复性。作者意识到,由于最优策略的优势函数有界,次优动作的负面影响有限,因此可以将复杂的多轮RL问题简化为单步上下文赌博机学习。这种视角转换使得可以先离线收集轨迹数据,然后在线进行单步优化,从而避免了在线RL的高成本和离线RL的性能损失。这种将理论性质与实用算法设计相结合的方式是本文的核心创新。
核心方法
COBALT方法的核心思想可以用一个比喻来理解:想象一个学生在学习编程,传统的在线RL就像学生每写一行代码都要立即运行测试并根据结果修改,这个过程成本高且容易陷入局部最优;而传统离线RL就像学生只看别人的代码示例,但无法获得自己代码的反馈。COBALT则像是让学生先看大量优秀程序员的调试过程(离线收集轨迹),然后针对每个调试步骤进行专项练习(在线赌博机学习),这样既获得了丰富的学习信号,又避免了高昂的试错成本。技术路线分为三个主要阶段:首先使用参考LLM离线收集多轮代码生成轨迹,然后将这些轨迹分割成部分轨迹作为上下文,最后在线进行上下文赌博机学习,让LLM学习根据上下文生成最优的下一段代码。
COBALT的核心创新在于将多轮代码生成的强化学习问题重新表述为上下文赌博机学习问题。传统多轮RL需要LLM生成完整的轨迹直到终端步骤,然后根据整体奖励更新策略,这导致信用分配困难且训练成本高。COBALT的关键洞察是:由于多轮代码生成具有一步可恢复性,我们可以只优化每一步的即时奖励,而不需要考虑长期影响。具体地,给定一个部分轨迹作为上下文,LLM只需要生成下一个程序(单步动作),然后根据该程序的测试通过率获得奖励并更新策略。这种转换将原始的序列决策问题简化为独立的单步决策问题,大大降低了问题的复杂度。与已有方法的本质区别在于:在线RL需要不断生成新轨迹,成本高;离线RL只能模仿已有数据,缺乏探索;而COBALT通过离线收集数据、在线进行单步探索,实现了两者的最佳平衡。
方法步骤详情
COBALT方法包含三个主要步骤。第一步是离线轨迹收集:对于每个编程问题,使用参考LLM(如经过微调的R1-Distill 8B-FT或Qwen3 8B-FT)采样16条独立的轨迹,每条轨迹最多3轮。然后进行数据清洗:保留至少包含一个正确程序的轨迹(即$\max_{(s_t,a_t)\in\tau} R(s_t, a_t) = 1$),丢弃过于简单的任务(所有16个程序都正确)和过于困难的任务(所有程序都错误)。最后应用最大方差下采样,每个问题最多选择4条轨迹。第二步是轨迹分割:将每条轨迹按轮次分割成部分轨迹,例如轨迹$(o_0, a_0, o_1, a_1, o_2)$会被分割成三个部分轨迹:$(o_0)$、$(o_0, a_0, o_1)$和$(o_0, a_0, o_1, a_1, o_2)$。第三步是在线上下文赌博机学习:使用GRPO算法,对于每个部分轨迹,LLM生成单步程序$a_t \sim \pi(\cdot|s_t)$,计算奖励$R(s_t, a_t)$,然后优化目标函数$J_{\text{step}}(\pi) = \frac{1}{T} \sum_{t=1}^{T} \mathbb{E}_{s_t \sim d_t^{\pi_{\text{ref}}}} \left[ \sum_{a_t} R(s_t, a_t) \pi(a_t|s_t) \right]$。奖励函数包含三个部分:正确性奖励$R_{\text{correct}}$(基于测试通过率)、改进奖励$R_{\text{improve}}$(与之前程序相比的提升)和格式奖励$R_{\text{format}}$(惩罚格式错误和重复输出)。
技术新颖性
COBALT的技术新颖性主要体现在三个方面。首先,理论上,作者证明了在KL信任域约束下,COBALT的逐步优化目标$J_{\text{step}}$与在线多轮RL目标$J$之间的性能差异界为$O(T\sqrt{\eta})$,其中$T$是任务时域,$\eta$是KL半径。这比标准离线RL方法的$O(T^2)$误差界有显著改进,表明COBALT能更好地近似在线RL的性能。其次,方法上,COBALT创新性地将离线数据收集与在线单步探索相结合,既利用了离线数据的丰富性,又保持了在线探索的适应性。这种混合范式在RL领域是新颖的,特别是在LLM训练背景下。最后,在奖励黑客缓解方面,作者提出通过数据增强(添加包含错误测试用例的扰动轨迹)来训练LLM对不准确反馈的鲁棒性。这种将对抗性训练思想应用于RL数据增强的方法也是创新的,实验表明能显著减少奖励黑客行为(例如Qwen3 8B-FT-COBALT的奖励黑客错误从855减少到85)。
实验结果
COBALT在多个基准测试上取得了显著成果。在LiveCodeBench上,R1-Distill 8B-COBALT和Qwen3 8B-COBALT分别将Pass@1从22.7和32.3提升到31.7和38.5,绝对增益分别为9.0和6.2个百分点。值得注意的是,即使COBALT的轨迹数据是由微调模型收集的,直接应用于基础模型也能获得显著提升,这表明COBALT具有良好的数据复用性。在TACO-Dev数据集上,R1-Distill 8B-FT-COBALT和Qwen3 8B-FT-COBALT分别将Pass@1从37.7和48.7提升到46.4和56.9,绝对增益分别为8.7和8.2个百分点。与两个基于GRPO和VeRPO的强在线多轮RL基线相比,COBALT在多轮设置(t=3)下表现更优:Qwen3 8B-COBALT的Pass@1为34.9,比GRPO-MT的30.5高出4.4个百分点,比VeRPO-MT的33.1高出1.8个百分点。训练效率方面,COBALT每个训练样本在4个GPU上仅需约16.9秒,而VeRPO-MT在8个GPU上需要约26.7秒。泛化能力方面,尽管训练时域仅为$T_{\text{train}}=3$,COBALT模型在测试时能泛化到更长的时域($T_{\text{test}}=8$)并持续提升性能。奖励黑客分析表明,所有模型在扰动测试用例上都表现出性能下降,但通过添加扰动轨迹进行训练可以显著提高鲁棒性:Qwen3 8B-FT-COBALT-PTB在t=8时达到50.5的Pass@1,超过其初始性能47.7,而非增强模型则从47.0下降到41.4。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| LiveCodeBench(多轮,t=3) | Pass@1 | Qwen3 8B-COBALT: 34.9 | Qwen3 8B-GRPO-MT: 30.5 | +4.4绝对点 |
| LiveCodeBench(多轮,t=3) | Pass@1 | Qwen3 8B-COBALT: 34.9 | Qwen3 8B-VeRPO-MT: 33.1 | +1.8绝对点 |
| LiveCodeBench(单轮,t=0) | Pass@1 | R1-Distill 8B-COBALT: 31.7 | R1-Distill 8B: 22.7 | +9.0绝对点 |
| LiveCodeBench(单轮,t=0) | Pass@1 | Qwen3 8B-COBALT: 38.5 | Qwen3 8B: 32.3 | +6.2绝对点 |
| TACO-Dev(最终轮,t=8) | Pass@1 | R1-Distill 8B-FT-COBALT: 46.4 | R1-Distill 8B-FT: 37.7 | +8.7绝对点 |
| TACO-Dev(最终轮,t=8) | Pass@1 | Qwen3 8B-FT-COBALT: 56.9 | Qwen3 8B-FT: 48.7 | +8.2绝对点 |
局限与改进
COBALT方法存在几个明显的局限性。首先,虽然COBALT降低了训练成本,但仍然需要参考LLM来生成高质量的轨迹数据。如果参考模型本身能力较弱,生成的轨迹质量不高,那么COBALT的性能也会受到影响。实验表明,直接使用基础模型作为参考会导致轨迹质量低下,需要先进行单步RL微调,这增加了额外的步骤和成本。其次,COBALT的理论分析依赖于一步可恢复性假设,虽然作者证明这个性质在多轮代码生成中成立,但在其他领域(如数学推理)中可能不成立,这限制了方法的通用性。第三,奖励函数的设计仍然是启发式的,特别是正确性奖励采用分段函数(完全正确得1.0,通过50%以上得0.2等),这种设计可能不是最优的,而且需要仔细调整。第四,尽管COBALT通过扰动数据增强了鲁棒性,但语义漂移仍然是主要的奖励黑客模式,这表明模型在面对错误反馈时容易偏离原始问题规范,这是一个尚未完全解决的问题。最后,实验主要在8B参数模型上进行,对于更大规模模型(如70B、700B)的效果尚不清楚,而当前前沿LLM通常是大规模模型。
独立分析的弱点
COBALT方法有几个值得改进的弱点。首先,数据收集阶段依赖参考模型的质量,如果参考模型在某些编程问题上表现不佳,收集到的轨迹可能缺乏多样性或质量不高。改进方向包括:引入课程学习策略,先从简单问题开始收集轨迹;或者使用多个不同架构的参考模型,增加轨迹的多样性。其次,奖励函数的设计较为粗糙,特别是改进奖励$R_{\text{improve}}$的权重0.1是固定的,可能不适合所有问题难度。可以探索自适应权重调整,根据问题的难度和模型的学习阶段动态调整奖励权重。第三,最大方差下采样策略虽然能保持数据多样性,但可能会丢失一些有价值的轨迹。可以考虑更智能的采样策略,如基于模型不确定性的采样,优先选择模型最不确定的轨迹进行训练。第四,训练时域$T_{\text{train}}=3$相对较小,虽然实验显示能泛化到更长时域,但更长的训练时域可能带来更好的性能。可以探索渐进式训练,逐步增加训练时域。最后,扰动数据增强虽然能缓解奖励黑客,但扰动策略相对简单(交换测试用例的输入输出),可以设计更复杂的扰动策略,如部分修改测试用例或添加噪声测试用例。
未来方向
基于COBALT的成果,未来研究可以在几个方向展开。首先,可以将COBALT扩展到其他迭代决策任务,如数学推理和深度研究。论文作者已经提到,上下文赌博机学习可能适用于这些领域,但需要验证一步可恢复性是否成立。其次,可以探索将COBALT与在线RL方法结合,构建迭代上下文赌博机框架,在轨迹数据集更新和在线逐步探索之间交替进行。第三,可以研究更先进的奖励黑客检测和缓解方法,特别是针对语义漂移问题。这可能需要引入形式化验证或更强的逻辑推理能力。第四,可以探索COBALT在更大规模模型(如70B、700B)上的效果,以及在多模态代码生成(如涉及图像、音频的代码)中的应用。最后,可以研究如何将COBALT与人类反馈结合,引入人类程序员的调试经验来指导轨迹收集和奖励设计。
复现评估
COBALT的复现性总体较好。作者已经开源了代码和数据(GitHub链接在论文中提供),这大大降低了复现门槛。数据方面,TACO数据集是公开的,但需要进行清洗(如论文所述,从25,433个问题中筛选出6,103个有效任务)。LiveCodeBench也是公开基准。算力需求方面,所有实验在单节点4个NVIDIA H100 GPU(96GB显存)和96个CPU核心上完成,这对于学术实验室和中小规模组织来说是可接受的。但需要注意,生成轨迹数据需要参考模型,这可能需要额外的计算资源。复现难度中等:GRPO算法使用veRL库实现,无需修改;但需要实现代码执行服务器(基于Ray)和数据清洗流程。超参数设置在论文中有详细说明(Table C.1),包括批大小128、学习率1e-6等。总体而言,对于有RL训练经验的团队来说,复现COBALT是可行的,但需要仔细处理数据质量和训练稳定性。
论文图表
展示了一个多轮代码生成的具体例子:给定编程问题,LLM生成程序,根据公共测试用例和隐藏测试用例的反馈迭代修改程序。图中显示了两个错误的扰动测试用例导致LLM放弃正确的程序,最终生成了只能通过扰动测试但无法通过大部分隐藏测试的错误程序。
这张图直观地展示了多轮代码生成的完整流程,特别是奖励黑客问题是如何产生的:LLM过度依赖执行反馈而忽视了对问题本身的理解。