大型语言模型(LLM)作为智能体在开放环境中的自主运作,面临着传统单轮任务中不存在的独特挑战。与静态的问答或文本生成不同,智能体需要在多轮交互中做出连贯的决策序列,这带来了三个维度的核心难题:
在文本冒险游戏TextWorld中,智能体可能需要执行"拿起钥匙→打开门→取得宝剑→击败怪物"这样的多步序列。传统的单轮强化学习(如PPO)假设每个动作都能立即获得反馈,但在多轮场景中,只有最终击败怪物时才获得奖励。这种延迟反馈导致两个问题:
我们通过token级别的优势计算解决这个问题:对每个动作token计算GAE(Generalized Advantage Estimation),即使只有最终
ALFWorld中的具身任务展示了环境复杂性的三个关键维度:
实验数据显示,当对象复杂度从3增至12时,基础模型的成功率从17%骤降至8%。更值得注意的是,PPO带来的改进幅度从71个百分点(17%→88%)缩小到46个百分点(8%→54%),表明对象跟踪和操作比单纯的空间导航更具挑战性。
在SWE-Gym软件工程环境中,我们观察到:
这表明多轮RL训练出的状态跟踪和错误恢复等技能具有可转移性。就像程序员掌握调试技巧后,能快速适应新的编程语言一样。
基于TextWorld的实验揭示出有效的环境设计策略:
渐进式复杂度提升:
python复制# 环境配置示例
env_configs = [
{'rooms':2, 'objects':3, 'quest_length':4}, # 基础
{'rooms':8, 'objects':3, 'quest_length':4}, # 空间复杂度提升
{'rooms':2, 'objects':12, 'quest_length':4}, # 对象复杂度提升
{'rooms':4, 'objects':6, 'quest_length':8} # 均衡提升
]
关键发现:
ALFWorld中的实验展示了任务混合的微妙平衡:
| 训练任务类型 | 单任务测试成功率 | 全任务测试成功率 |
|---|---|---|
| 单一类型 | 63% | 59% |
| 4类型混合 | 82% | 80% |
| 6类型全混合 | 76% | 74% |
看似反常的是,4类型混合训练在单任务测试上优于6类型全混合。这表明:
TextWorld中的步数限制实验揭示:
| 最大步数 | 基础模型成功率 | PPO训练后成功率 |
|---|---|---|
| 6(1.5×) | 5% | 55% |
| 8(2×) | 9% | 73% |
| 12(3×) | 15% | 80% |
| 16(4×) | 17% | 88% |
建议采用"弹性步数预算"策略:
实验数据显示SFT和RL的最佳配比:
| SFT样本数 | RL回合数 | 训练环境成功率 | 复杂环境成功率 |
|---|---|---|---|
| 0 | 1000 | 54% | 11% |
| 60 | 400 | 85% | 59% |
| 100 | 0 | 95% | 55% |
关键结论:
不同RL算法在TextWorld的表现对比:
| 算法 | 理论特性 | 1.5B模型成功率 | 7B模型成功率 |
|---|---|---|---|
| Reinforce++ | 无偏但高方差 | 18% | 72% |
| RLOO | 无偏中等方差 | 51% | 97% |
| GRPO | 有偏低方差 | 18% | 79% |
| PPO | 有偏稳定 | 88% | 98% |
实践建议:
我们的token级PPO实现关键点:
python复制def calculate_gae(rewards, values, gamma=0.99, lam=0.95):
# rewards: (T,)
# values: (T,)
deltas = rewards[:-1] + gamma * values[1:] - values[:-1]
gae = np.zeros_like(rewards)
gae[-2] = deltas[-1]
for t in reversed(range(len(deltas)-1)):
gae[t] = deltas[t] + gamma * lam * gae[t+1]
return gae
# 仅对动作token计算clip损失
action_mask = (token_types == ACTION_TOKEN)
ratio = (new_logprobs - old_logprobs).exp()
surr1 = ratio * advantages
surr2 = torch.clamp(ratio, 1-eps, 1+eps) * advantages
policy_loss = -torch.min(surr1, surr2)[action_mask].mean()
TextWorld中不同奖励密度的表现:
| 奖励间隔(步) | PPO成功率 | RLOO成功率 |
|---|---|---|
| 10.22(稀疏) | 41% | 35% |
| 2.89(中等) | 29% | 55% |
| 1.17(密集) | 58% | 55% |
设计原则:
SWE-Gym中不同奖励源的性能差异:
| 奖励类型 | 成功率 | 训练稳定性 |
|---|---|---|
| 二进制验证 | 4.2% | 高 |
| 单元测试比例 | 22% | 中 |
| CodeRM-8B预测 | 7.2% | 低 |
| GPT-4.1预测 | 9.3% | 低 |
血泪教训:
基于实验的奖励设计方案:
python复制def calculate_reward(state, action, next_state):
# 基础环境奖励
env_reward = env.step(action).reward
# 对于编程任务
if is_programming_task:
test_results = run_unit_tests(action)
coverage = test_results['passed'] / test_results['total']
style_score = code_quality_check(action)
# 混合奖励
reward = (
0.6 * env_reward +
0.3 * coverage +
0.1 * style_score
)
# 对于文本任务
else:
progress = calculate_task_progress(state, next_state)
reward = (
0.8 * env_reward +
0.2 * progress
)
return clip(reward, -1, 1)
基于Qwen-7B的推荐配置:
环境准备阶段
监督微调阶段
强化学习阶段
课程进阶阶段
症状1:训练初期性能骤降
症状2:后期训练波动大
症状3:智能体行为退化
| 模型规模 | GPU内存 | 训练时间(TextWorld) | 推荐GPU数量 |
|---|---|---|---|
| 1.5B | 24GB | 8小时 | 1 |
| 7B | 80GB | 24小时 | 2-4 |
| 8B | 80GB | 30小时 | 4 |
内存优化技巧:
在实际部署中,我们发现三个被低估但至关重要的因素:
状态表示的一致性
code复制[房间] 厨房
[物品] 刀(柜台), 苹果(桌子)
[目标] 制作苹果派
动作空间的渐进扩展
灾难性遗忘的预防
对于希望尝试多轮RL的研究者,我的个人建议是从TextWorld的w2-o3-q4配置开始,采用Qwen-1.5B模型和以下简化配方: