训练时扩展:STaR、GRPO、DAPO让小模型推理匹敌大模型 📅 发布时间:2026/8/30 7:35:46 👁 浏览次数: 这次我们来看斯坦福 CS329A《自我改进 AI 智能体》第六讲的核心内容训练时扩展Test-Time Training / Training-Time Scaling如何让小模型在推理任务上逼近甚至匹敌大模型。课程重点讲了三个算法——STaR、GRPO、DAPO以及它们背后的强化学习训练链路。这一讲的信息量很大而且非常实用。如果你正在做开源模型的推理能力增强、数学推理 / 代码生成任务或者在纠结“小模型到底能不能通过训练策略追平大模型”这篇文章可以直接收藏。我会把课程主线拆成三部分训练时扩展解决什么问题STaR、GRPO、DAPO 三个算法的设计思路和区别以及这套方法落到工程上时环境准备、训练配置、效果验证和常见坑分别是什么。外部推理模型往往存在三个问题一是调用成本高二是延迟不可控三是在特定垂直场景下效果不稳定。而训练时扩展的核心思路是与其在推理时依赖更大的模型不如在训练阶段让模型通过自我生成、自我评判、自我改进来提升能力。这个思路在数学推理、代码生成、Agent 任务规划等场景里已经被验证有效。需要先说明一点本文是基于课程公开材料与技术原理做的梳理不包含任何未经确认的本地实测数据。文中涉及的显存占用、训练时长、收益曲线等都需要按实际代码库和硬件环境重新验证。1. 核心能力速览能力项说明课程来源斯坦福 CS329A《自我改进 AI 智能体》第六讲核心主题训练时扩展Training-Time Scaling与小模型推理能力增强关键算法STaR、GRPO、DAPO适用任务数学推理、代码生成、Agent 规划、多步决策模型规模重点讨论小模型如 1B~7B 级别通过训练策略匹敌大模型训练范式自我生成理由 - 过滤正确样本 - 策略优化迭代推理阶段不需要额外的大模型参与运行的是训练好的小模型显存需求取决于基座模型和训练框架需按实际环境测试奖励信号可验证奖励答案正确性 / 测试用例 / 规则优于模型评判接口能力训练完成后可导出为标准 HF 模型接入推理服务批量任务训练阶段支持批量采样和批量过滤适合离线任务从材料看这一讲的核心主张是推理能力的提升并不只能靠“把模型做大”还可以靠“把训练策略做对”。STaR、GRPO、DAPO 三个算法分别代表了这个方向的三个关键节点。2. 三个算法拆解STaR、GRPO、DAPO2.1 STaR自我训练推理器STaR 全称 Self-Taught Reasoner是训练时扩展最早期的代表性方法之一。它的思路非常直接可以概括为四步循环让模型对训练问题生成推理过程和答案。根据最终答案是否正确来过滤样本。把生成正确的推理样本混入训练集继续微调模型。重复这个过程模型逐步学会产生更可靠的推理链。STaR 的核心贡献在于证明了“自我生成 正确性过滤”就能持续提升推理能力而不需要额外的人工标注推理过程。原始训练数据只需要问题和答案推理链由模型自己生成。这个方法的局限也很明显如果模型能力太弱生成正确推理的概率很低过滤后的有效样本会非常少训练效率不高。所以 STaR 后续还有一些改进版本例如对生成失败的样本提供答案提示后重新生成或者混合多个模型生成结果来增加多样性。从工程角度看STaR 最适合作为基线方法。它的实现成本低训练循环容易理解适合先用它验证“训练时扩展是否对当前任务有效”。2.2 GRPO去掉 Critic 模型的策略优化GRPO 全称 Group Relative Policy Optimization是 DeepSeekMath 中提出的强化学习训练算法。它在 PPO 基础上做了一处关键简化不再训练一个独立的 Critic 价值模型而是通过组内相对比较来计算优势函数。具体做法是对同一个问题采样一组回答然后根据奖励对这组回答排序或打分用“当前回答在组内的相对位置”代替绝对价值函数。这样做有几个明显的好处省掉了 Critic 模型的训练和推理开销显存和算力需求明显下降。优势估计完全基于组内相对比较对奖励尺度不敏感训练更稳定。更适合使用规则奖励的场景比如数学答案匹配、代码测试用例通过率。GRPO 的损失函数仍然保留了策略比率和裁剪机制但去掉了价值函数项。这个设计让强化学习训练可以更轻量地跑在小规模模型上。从这一讲的角度看GRPO 是训练时扩展里最值得工程化的算法之一。它解决了策略优化阶段“需要额外模型参与”的问题让小模型训练链路更加闭环。2.3 DAPO开放环境下解决 GRPO 的不稳定问题DAPO 全称 Decoupled Alignment and Policy Optimization是 2025 年提出的改进算法重点关注 GRPO 在开放任务和长时间推理场景中的不稳定问题。课程中重点提到 DAPO 的几个改进点Clip-Higher放宽策略更新的上限裁剪避免模型在探索阶段因为裁剪过于激进而停止改进。动态采样根据模型当前能力动态调整采样策略避免无效样本占比过高。Token 级策略梯度损失让模型在长推理链的每一步都能获得更细粒度的更新信号而不是只在整个序列结束后统一更新。过短惩罚鼓励模型生成更完整的推理链防止模型学会“偷懒式”的短回答。DAPO 的意义在于它把训练时扩展从“能跑”推向了“稳定地跑”。在数学推理、代码生成这类奖励信号清晰的任务上DAPO 的收敛速度和最终效果通常优于原始 GRPO。2.4 三个算法的关系算法核心思路关键改进适用阶段STaR自我生成 正确性过滤 迭代微调无需人工标注推理链冷启动、baselineGRPO组内相对优势替代 Critic 模型去掉价值模型降低 RL 成本策略优化主阶段DAPO改进 GRPO 在开放任务中的稳定性Clip-Higher、动态采样、Token 级 loss长推理、复杂任务三个算法不是互斥关系而是可以组合成一条完整训练链路先用 STaR 让模型学会生成基础推理链再用 GRPO 或 DAPO 做策略优化最后用过滤后的高质量样本做一轮监督微调。3. 训练时扩展 vs 推理时扩展这一讲的核心概念是“训练时扩展”。为了理解它需要先把它和“推理时扩展”区分开。推理时扩展的代表方法是 Chain-of-Thought 和 Best-of-N 采样。它的思路是在推理阶段让模型生成更多候选推理链然后选一个最好的。这种方式不需要改动模型权重但每次推理都要付出额外计算成本而且如果模型本身不会生成高质量推理链采样再多也意义不大。训练时扩展的思路则完全不同。它把“生成更好推理链”的能力直接写进模型权重里。在训练阶段模型反复生成推理链、接收正确性反馈、更新策略。训练完成后模型本身就具备更强的推理能力推理时不再需要额外的大模型参与。从成本结构来看推理时扩展推理成本随采样数量线性增长适合偶尔需要高准确率的场景。训练时扩展训练成本集中在一段时间内推理时成本与普通模型一致适合高频调用场景。课程观点是这两者可以结合。如果预算充足可以在训练时扩展的基础上再叠加推理时 Best-of-N 采样效果通常优于单独使用任何一种。4. 小模型凭什么匹敌大模型这一讲最有冲击力的结论是小模型在训练时扩展之后可以在特定任务上匹敌大模型。这个结论背后有三个技术支撑。第一任务难度集中在特定类型时小模型的容量瓶颈并不明显。数学竞赛题、代码题、逻辑推理题这些任务的难度主要来自推理链的长度和正确性而不是知识广度。小模型在知识储备上不足但通过大量正确推理链的训练可以学会“如何推理”这件事本身。第二可验证奖励让训练信号更干净。大模型评判可能存在偏差但数学答案是否匹配、代码能否通过测试用例这类信号是客观的。小模型只要能从训练数据中学会“哪种推理方向更容易通向正确答案”能力就会快速提升。第三强化学习阶段允许模型探索超出监督数据范围的推理路径。监督微调只能让模型模仿训练数据中的推理方式而 RL 阶段模型可以自由尝试新的推理链只要最终答案正确就给予正向奖励。这个探索空间是训练时扩展能够超越传统微调的关键原因。从实际效果看训练时扩展并不能让小模型在所有任务上都追平大模型。它更适合任务结构清晰、奖励信号可验证、推理链可复现的场景。5. 实验环境准备与前置条件如果你打算复现 STaR、GRPO 或 DAPO 的训练流程需要准备以下环境。5.1 硬件环境训练阶段对硬件的要求主要取决于基座模型规模和训练框架。以下是通用参考具体数值需结合实际代码库确认模型规模最低显存参考推荐配置1B 级别24GB 左右单张 A100 / 40907B 级别40GB 以上多卡并行或单张 A100 80G13B 及以上80GB 以上多机多卡如果是纯 CPU 环境可以跑通数据生成和过滤流程但策略优化阶段不建议在 CPU 上训练收敛速度过慢。5.2 软件环境需要安装的基础组件包括Python 3.10 或更高版本。PyTorch 2.xCUDA 版本需匹配显卡驱动。Transformers、Accelerate、DeepSpeed。如果你要复现 GRPO / DAPO建议使用支持这些算法的 RL 框架例如 veRL、OpenRLHF 或 TRL。安装命令示例pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install transformers datasets accelerate deepspeed pip install trl不同 RL 框架的安装方式差异较大建议先阅读对应项目的 README。不要直接混装多个 RL 框架的依赖容易冲突。5.3 数据准备需要准备的数据格式通常包含问题文本。标准答案或验证器脚本。可选提示词模板。数学推理任务的数据可以组织成以下形式{ question: 一个矩形的长是 8宽是 5求面积。, answer: 40 }代码生成任务需要准备测试用例验证器例如{ prompt: 编写一个函数输入两个整数返回它们的和。, test_cases: [ {input: [1, 2], expected: 3}, {input: [10, -5], expected: 5} ] }推荐把所有原始数据放在独立目录不要与训练代码混在一起。6. 训练流程设计与测试方案6.1 阶段一STaR 基座推理能力预热先让模型学会生成基础推理链。伪代码逻辑如下for epoch in range(num_epochs): for batch in train_data: # 让模型生成推理链和答案 outputs model.generate( batch[question], max_new_tokens512, temperature0.7, do_sampleTrue ) # 判断答案是否与标准答案一致 correct_mask verify_answer(outputs, batch[answer]) # 过滤出正确样本 selected_samples select_correct(outputs, correct_mask) # 将正确推理链作为监督数据继续微调 if len(selected_samples) 0: train_loss supervised_finetune(model, selected_samples)这一步的关键观察点有两个过滤后的样本数量是否充足。如果正确率太低说明基座模型能力与任务难度差距太大建议先做一轮任务相关的监督微调。迭代后验证集正确率是否持续上升。如果两轮迭代后没有明显提升需要考虑增加采样数量或更换基座模型。6.2 阶段二GRPO / DAPO 策略优化在 STaR 预热之后进入策略优化阶段。以 GRPO 为例训练循环大致是for step in range(total_steps): # 采样一组问题 questions sample_questions(batch_size8) # 对每个问题生成一组回答 responses policy_model.generate(questions, num_return_sequences8) # 计算规则奖励 rewards compute_rule_rewards(questions, responses, verifier) # 计算组内相对优势 advantages compute_group_relative_advantages(rewards, group_size8) # 更新策略模型 policy_loss grpo_loss(responses, advantages, old_logprobs) policy_model.backward(policy_loss) policy_model.step()GRPO 训练时要注意两个关键参数group_size每个问题采样的回答数量。太小会导致优势估计不稳定太大会增加显存和训练时长。从课程和常见实践看8 到 16 是常用区间。clip_range策略更新的裁剪范围。如果训练过程出现 loss 剧烈波动考虑调小裁剪范围。如果你用的是 DAPO需要在 GRPO 基础上额外开启 Clip-Higher 和 Token 级损失。具体开关名称以你选择的 RL 框架文档为准。6.3 阶段三效果验证训练完成后不要只看训练集 loss。建议做一个独立的验证脚本包含以下检查项从验证集中随机抽取 100 到 200 道题。使用基础模型和训练后模型分别生成答案。统计答案正确率。统计推理链平均长度。检查是否有明显退化的回答格式。一个可用的验证脚本模板from transformers import AutoModelForCausalLM, AutoTokenizer model_name ./trained_model model AutoModelForCausalLM.from_pretrained(model_name) tokenizer AutoTokenizer.from_pretrained(model_name) questions load_validation_questions() correct 0 total 0 for q in questions: prompt build_prompt(q[question]) inputs tokenizer(prompt, return_tensorspt) outputs model.generate( **inputs, max_new_tokens512, temperature0.0, do_sampleFalse ) response tokenizer.decode(outputs[0], skip_special_tokensTrue) if verify_answer(response, q[answer]): correct 1 total 1 print(fAccuracy: {correct / total:.4f})判断训练是否成功的标准要提前定好是正确率绝对值还是相对基座模型的提升幅度还是推理链可读性。不同任务标准不一样。7. 资源占用与性能观察方法训练时扩展的资源占用集中在两个阶段数据采样阶段和策略更新阶段。数据采样阶段模型做的是生成任务显存占用与max_new_tokens和batch_size直接相关。如果你在 24GB 显存环境下跑 7B 模型建议把batch_size调小到 1同时减少num_return_sequences。策略更新阶段显存占用除了模型参数外还要保存优化器状态、梯度、旧策略的 logprobs。这里有几个降低显存的方法使用 DeepSpeed ZeRO Stage 2 或 Stage 3。开启梯度累积增大有效 batch size 而不增加单步显存。使用混合精度训练在训练开始前测试 fp16 或 bf16 是否稳定。把采样和训练拆成两个进程采样完成后释放生成缓存再做策略更新。性能观察建议重点看这几个指标每步训练时间如果单步超过预期优先检查采样速度。有效样本率GRPO 训练中如果组内奖励普遍偏低说明模型还在探索阶段可以考虑降低任务难度或增加采样数。KL 散度策略模型和参考模型之间的差异如果增长过快说明策略更新太激进需要调小学习率或增大 KL 惩罚系数。8. 常见问题与排查方法问题现象可能原因排查方式解决方案STaR 过滤后有效样本太少基座模型能力不足或任务难度过高统计生成答案的正确率先做任务相关 SFT 预热或使用答案提示重新生成GRPO 训练 loss 剧烈波动clip_range 过大或组内奖励方差过高查看组内奖励分布和 KL 散度调小 clip_range、增加 group_size、调大 KL 系数推理链越训越短奖励函数没有鼓励长推理链检查输出长度统计引入过短惩罚或 DAPO 的长度激励显存不足batch size / 采样数过大观察 OOM 时的显存占用开启梯度累积、减小 num_return_sequences、使用 DeepSpeed验证集正确率没有提升训练数据和验证数据分布差异大检查数据来源统一数据格式增加领域内验证集策略模型输出格式混乱奖励函数没有约束格式检查生成样例在提示词中强格式输出并在奖励函数中加入格式项多个 RL 框架依赖冲突同时安装了多个训练框架检查 pip list使用独立 conda 环境隔离依赖训练卡住不更新数据加载器阻塞或采样进程死锁查看日志和进程状态减小 DataLoader 预取数量设置超时时间9. 最佳实践与使用建议9.1 先小规模验证再全量训练不要直接上几千条数据跑全量训练。先用 100 条数据验证数据格式、奖励函数和训练循环没有问题再逐步扩大到全量。这样可以避免在数据格式错误或奖励函数设计有误时浪费算力。9.2 奖励函数优先用可验证信号数学任务用标准答案匹配代码任务用测试用例通过率Agent 任务用环境返回的成功标志。可验证信号比模型评判更稳定更不容易被模型钻空子。9.3 完整保留训练中间产物建议把每个阶段的模型权重、采样数据、过滤后的样本、训练日志都保存下来。这样训练效果不理想时可以回溯到具体阶段排查问题。9.4 合规与授权提醒使用训练时扩展技术时需要注意以下几点训练数据必须来自合法渠道不得包含未授权的内容。如果任务涉及人脸、声音、隐私信息必须确认数据授权范围。模型发布或商用前要评估训练数据中是否存在版权风险。小模型的能力提升不代表可以绕过内容安全审核上线前要做内容安全测试。9.5 训练链路需要版本管理STaR / GRPO / DAPO 的训练脚本、数据版本、模型版本、奖励函数版本都建议纳入版本管理。这组训练流程迭代周期长没有版本管理很容易出现“训练结果复现不出来”的问题。10. 总结与下一步这一讲最值得记住的点是小模型匹敌大模型不是靠参数量而是靠训练策略把推理能力逼出来。STaR 负责让模型学会生成推理链GRPO 负责用强化学习增强推理策略DAPO 负责解决开放任务中的训练不稳定问题。三者组合起来就是一套完整的训练时扩展方案。建议你最先验证的功能是用一个小规模的数学推理数据集先跑通 STaR 的“生成-过滤-微调”循环再接入 GRPO 做策略优化。整个链路跑通之后你会发现最大的坑通常不在算法本身而在数据格式、奖励函数和超参配置上。最容易踩的坑有两个一是奖励函数设计得不够干净模型会钻空子生成格式正确但逻辑错误的推理链二是策略更新的稳定性控制不好模型在探索过程中出现能力退化。下一步可以关注的扩展方向包括训练时扩展与推理时扩展的组合使用、多轮 Agent 任务上的规则奖励设计、以及如何把训练好的小模型部署到实际业务系统里做高频推理。建议先把这一讲里的三个算法吃透再逐步扩展应用场景。