传统 RAG 只在开头检索一次;ReAct 式工具调用又常靠提示或监督轨迹,搜索操作本身不可微,端到端梯度走不通。 Search-R1 把搜索引擎当作 RL 环境的一部分:模型在 rollout 中自己生成 <search>,拿回 <information>,再继续想或作答;训练信号只有最终答案的 EM。 真正让训练稳下来的是检索 token 损失掩码——只对模型自己生成的 token 算策略梯度。
问题不是「能不能搜」,而是「搜的动作怎么进训练目标」。 搜索返回的是外部文本,不可微;如果把它当普通 token 一起算损失,模型会被检索内容本身牵着走。论文把搜索建成环境,用 PPO/GRPO 只优化模型自己生成的推理、查询与答案 token(§3.1)。
奖励极简:答对为 1,答错为 0。 没有格式奖励、没有神经奖励模型、没有过程标注,奖励就是 EM(a_pred, a_gold)(§3.4、Eq.4)。搜索时机与查询词完全靠 rollout 探索出来。
主结果有明确增益,但不是每个单元格都赢。 Qwen2.5-7B-Base 平均 EM 从 RAG 的 0.304 升到 0.431(+0.127,相对 +41.8%);3B-Instruct 从 0.270 升到 0.325(+0.055,相对 +20.4%),但在 NQ、PopQA 两个单元格低于 RAG(Table 2)。
版本内部有一处口径冲突,页面不替它消解。 v5 PDF 摘要与 §4.4 写 7B 相对提升 24%,引言贡献段写相对提升 41%;推断两者可在 Table 2 找到不同的分母(详见 §07)。PPO 与 GRPO 也不是一边倒:四组模型里 PPO 只在 7B-Base 上领先(Table 3)。
先把两个约束摆在一起:问题需要多轮取信息,而「取信息」这一步不在语言模型的可微计算图里。
LLM 的参数化知识有截止日期,面对需要外部事实的问题会过时或编造。标准 RAG 把用户问题当查询,一次取回若干段落拼进上下文;对「某演员参演、某导演执导的电影是哪部」这类多跳问题,第一次检索往往只能拿到其中一跳,后面没有再查的机会(§1)。
把搜索引擎当工具是另一条路:提示模型输出搜索调用,或监督微调一组「思考—行动—观察」轨迹。提示法受限于模型是否在预训练里见过类似格式;SFT 法则需要大量高质量轨迹,而且搜索操作本身不可微,不能把梯度从答案反传到查询词(§1)。论文把这两条路的共同缺口概括为三个挑战:
把检索到的上下文塞进 rollout 后,序列里同时有模型 token 和外部 token;如果两者都算损失,优化目标会被检索内容污染。论文的解法是检索 token 掩码(§3.1)。
模型要能根据上一轮检索结果决定继续搜还是作答,而不是固定「先搜一次再答」。这要求 rollout 支持动态动作次数(§1、§3.2)。
过程奖励需要标注「哪一步搜索有用」,成本高且主观;只给最终对错,能不能学出有意义的搜索行为,是论文要验证的核心问题(§1、§3.4)。
论文的立场是:不教过程,只给结果。模型在七个 QA 数据集上评测;训练集只合并 NQ 与 HotpotQA,其余五个数据集用于域外评测(§4.3)。这也意味着页面后面看到的增益,必须区分「同分布」与「域外」两类列。
论文把对照做得比较整齐:同一检索器、同一知识库、同样三条段落、同一训练数据、同一预训练模型。
Direct Inference 直接作答;CoT 先写推理再作答。两者都只依赖参数化知识,用来标出「不接外部知识」的下限(§4.2)。
RAG 一次检索后生成;IRCoT 用思维链交替触发检索;Search-o1 把搜索嵌入推理流程。它们都不更新模型参数,检索策略来自提示或固定规则(§4.2)。
SFT 用标注数据训练;Rejection Sampling 从同一数据集采样五条候选,只保留答案正确的轨迹再微调。后者已经用到多轮搜索交互,是较强的对照(§4.2)。
R1-base / R1-instruct 用与 Search-R1 相同的训练数据和 RL 方法,但 rollout 里没有搜索引擎。它隔离出「RL 本身」与「搜索增强」的差别(§4.2)。
这套对照的关键在于:Search-R1 的增益不能简单归因于「模型更大」或「训练数据更多」。论文明确说,所有方法共享同一检索器、同一知识库、同一检索段落数、同一训练数据和同一预训练 LLM(§4.2)。剩下的差别主要是:搜索是否作为策略的一部分被 RL 优化。
不过,「同一训练数据」也有边界:训练集只有 NQ 与 HotpotQA 的合并,七个评测集里 TriviaQA、PopQA、2Wiki、Musique、Bamboogle 都是域外。主表给出论文的七列混合 Avg,同时逐列标注同分布/域外;讨论时不把 Avg 当成唯一结论。
方法可以拆成三件事:rollout 怎么交错、奖励怎么给、检索 token 怎么从损失里排除。
模型与环境的交互被写成一个序列:问题 x 进入策略 πθ,模型生成 <think>…</think> 的推理;当它输出 <search>query</search> 时,系统截取查询词、调用检索器 R,把返回段落包进 <information>…</information> 追加到序列;模型可以继续下一轮,直到输出 <answer>…</answer>(§3.2、Algorithm 1)。动作预算上限 B = 4,默认每次取 top-3 段落。
奖励设计刻意做减法。论文不用格式奖励,理由是学到的模型已经能保持结构;也不用神经奖励模型,理由是 LLM 对奖励形式敏感,且训练奖励模型会带来额外计算与复杂度(§3.4)。因此训练信号只有 EM:答对为 1,答错为 0。搜索几次、什么时候搜、查询词怎么写,全部由策略在 rollout 中探索。
PPO 与 GRPO 原本都在整条 rollout 序列上算 token 级损失。Search-R1 的序列里混着检索器返回的段落,这些 token 不是模型生成的;对它们算策略梯度,会让模型去「拟合」检索内容,而不是学习如何搜索和推理。论文引入指示函数 I(y_t):模型生成的 token 取 1,检索 token 取 0,PPO 目标与 GRPO 的 KL 项都只累加 I(y_t)=1 的位置(§3.1、Eq.2、Eq.3)。
论文的原话是:这能 “stabilize training while preserving the flexibility of search-augmented generation”(§3.1)。注意它没有改变奖励,也没有改变 rollout;只是把检索内容从优化目标里排除。
PPO 与 GRPO 共用这套掩码。PPO 需要额外的 value 模型,用 GAE 估计优势;GRPO 不训练 critic,而是对同一问题采样一组回答,用组内相对奖励当基线,并把 KL 直接加进损失(§3.1)。论文默认用 PPO,但在 §5.1 比较了两者(结果见后文)。
把训练成本摊开看:这套方法不是「一次前向」的轻量微调,而是每个变体都要跑完整 RL。
策略学习率 1e-6,value 模型 1e-5;warm-up 比例分别为 0.285 与 0.015;GAE 的 λ = 1、γ = 1。训练 500 步(Appendix B.2)。
策略学习率同样是 1e-6,每个 prompt 采样 5 条回答,训练 500 步;batch 与序列长度配置与 PPO 相同(Appendix B.2)。
总 batch size 512,mini-batch 256,micro-batch 64;最大序列长度 4,096 token,最大回答长度 500,检索内容最多 500 token(Appendix B.2)。
vLLM 的 tensor parallel size 为 1,GPU 显存利用率 0.6;采样温度与 top-p 都是 1.0;KL 系数 β = 0.001,clip 比例 ε = 0.2。训练用梯度检查点、FSDP 与 CPU offloading(Appendix B.2)。
3B/7B 实验的硬件是单节点 8 张 H100。PPO 与 GRPO 共用这套配置;每 100 步存一次 checkpoint,训练发散时取最近一个稳定 checkpoint 评测,否则取最后一步(Appendix B.2)。检索器是 E5,知识库是 2018 年 Wikipedia dump,默认取三条段落(§4.3)。
论文没有给出总 GPU 小时数,也没有给出每个变体的实际墙钟时间。因此页面不把「500 步」换算成「低成本」:3B/7B 的 Base/Instruct 与 PPO/GRPO 对照、以及 14B 的 Base/Instruct 主结果都是独立训练,成本要按变体累加。14B 的主结果在 Appendix C / Table 5,但附录 B.2 的超参段落只点名 3B 与 7B,未单独说明 14B 是否使用同一套超参,也未给出 14B 的训练硬件与步数。
图中红色虚线是检索内容:它进入上下文,但不进入策略梯度。
这张图里有两个容易混淆的点。第一,<information> 是环境返回的观察,不是模型动作;它被拼进序列只是为了给下一轮提供上下文。第二,奖励只在整条轨迹结束后给一次,不是每一步都给。因此 PPO 的 value 与 GRPO 的组内基线,都是在「整条轨迹的最终结果」上做信用分配,而不是判断某一次搜索是否「有用」(§3.2、§3.4)。
先看主表,再看 PPO/GRPO 与掩码消融;所有数字都是 Exact Match,不是 F1。
Table 2 覆盖 Qwen2.5-7B 与 3B 的 Base/Instruct 四种设置。7B-Base 的 Search-R1 平均 0.431,比 RAG 的 0.304 高 0.127,相对提升 41.8%(0.127 / 0.304)。7B-Instruct 从 0.304 到 0.385,高 0.081,相对 26.6%。3B-Base 从 0.270 到 0.303,高 0.033,相对 12.2%;3B-Instruct 从 0.270 到 0.325,高 0.055,相对 20.4%。
| 模型 / 方法 | NQ† | TriviaQA⋆ | PopQA⋆ | HotpotQA† | 2wiki⋆ | Musique⋆ | Bamboogle⋆ | Avg |
|---|---|---|---|---|---|---|---|---|
| Qwen2.5-7B-Base / Instruct | ||||||||
| Direct Inference | 0.134 | 0.408 | 0.140 | 0.183 | 0.250 | 0.031 | 0.120 | 0.181 |
| CoT | 0.048 | 0.185 | 0.054 | 0.092 | 0.111 | 0.022 | 0.232 | 0.106 |
| IRCoT | 0.224 | 0.478 | 0.301 | 0.133 | 0.149 | 0.072 | 0.224 | 0.239 |
| Search-o1 | 0.151 | 0.443 | 0.131 | 0.187 | 0.176 | 0.058 | 0.296 | 0.206 |
| RAG | 0.349 | 0.585 | 0.392 | 0.299 | 0.235 | 0.058 | 0.208 | 0.304 |
| SFT | 0.318 | 0.354 | 0.121 | 0.217 | 0.259 | 0.066 | 0.112 | 0.207 |
| R1-base | 0.297 | 0.539 | 0.202 | 0.242 | 0.273 | 0.083 | 0.296 | 0.276 |
| R1-instruct | 0.270 | 0.537 | 0.199 | 0.237 | 0.292 | 0.072 | 0.293 | 0.271 |
| Rejection Sampling | 0.360 | 0.592 | 0.380 | 0.331 | 0.296 | 0.123 | 0.355 | 0.348 |
| Search-R1-base (PPO) | 0.480 | 0.638 | 0.457 | 0.433 | 0.382 | 0.196 | 0.432 | 0.431 |
| Search-R1-instruct (PPO) | 0.393 | 0.610 | 0.397 | 0.370 | 0.414 | 0.146 | 0.368 | 0.385 |
| Qwen2.5-3B-Base / Instruct | ||||||||
| Direct Inference | 0.106 | 0.288 | 0.108 | 0.149 | 0.244 | 0.020 | 0.024 | 0.134 |
| CoT | 0.023 | 0.032 | 0.005 | 0.021 | 0.021 | 0.002 | 0.000 | 0.015 |
| IRCoT | 0.111 | 0.312 | 0.200 | 0.164 | 0.171 | 0.067 | 0.240 | 0.181 |
| Search-o1 | 0.238 | 0.472 | 0.262 | 0.221 | 0.218 | 0.054 | 0.320 | 0.255 |
| RAG | 0.348 | 0.544 | 0.387 | 0.255 | 0.226 | 0.047 | 0.080 | 0.270 |
| SFT | 0.249 | 0.292 | 0.104 | 0.186 | 0.248 | 0.044 | 0.112 | 0.176 |
| R1-base | 0.226 | 0.455 | 0.173 | 0.201 | 0.268 | 0.055 | 0.224 | 0.229 |
| R1-instruct | 0.210 | 0.449 | 0.171 | 0.208 | 0.275 | 0.060 | 0.192 | 0.224 |
| Rejection Sampling | 0.294 | 0.488 | 0.332 | 0.240 | 0.233 | 0.059 | 0.210 | 0.265 |
| Search-R1-base (PPO) | 0.406 | 0.587 | 0.435 | 0.284 | 0.273 | 0.049 | 0.088 | 0.303 |
| Search-R1-instruct (PPO) | 0.341 | 0.545 | 0.378 | 0.324 | 0.319 | 0.103 | 0.264 | 0.325 |
这张表最重要的读数不是平均分,而是哪些列没有赢。3B-Instruct 的 Search-R1 在 NQ 上是 0.341,低于 RAG 的 0.348,低 0.007,相对低 2.0%;PopQA 上是 0.378,低于 RAG 的 0.387,低 0.009,相对低 2.3%;TriviaQA 上只高 0.001。3B-Base 对 Rejection Sampling 也在 Musique(0.049 vs 0.059,低 0.010)和 Bamboogle(0.088 vs 0.210,低 0.122)上落后。
14B 的主结果在 Table 5。Search-R1-Base 平均 0.479,RAG 是 0.281,高 0.198,相对 70.5%;相对不带搜索的 R1-Base(0.357)高 0.122,相对 34.2%。Search-R1-Instruct 平均 0.433,比 RAG 高 0.152,相对 54.1%;比 R1-Instruct 的 0.339 高 0.094,相对 27.7%。但 Instruct 在 Bamboogle 上是 0.480,低于 R1-Base 的 0.488,低 0.008——「14B 全面更好」同样不成立。
| Qwen2.5-14B 方法 | NQ† | TriviaQA⋆ | PopQA⋆ | HotpotQA† | 2wiki⋆ | Musique⋆ | Bamboogle⋆ | Avg |
|---|---|---|---|---|---|---|---|---|
| Direct Inference | 0.198 | 0.531 | 0.184 | 0.217 | 0.253 | 0.045 | 0.160 | 0.227 |
| CoT | 0.190 | 0.495 | 0.148 | 0.269 | 0.297 | 0.054 | 0.432 | 0.269 |
| IRCoT | 0.114 | 0.375 | 0.166 | 0.230 | 0.248 | 0.102 | 0.312 | 0.221 |
| Search-o1 | 0.347 | 0.635 | 0.241 | 0.268 | 0.161 | 0.099 | 0.416 | 0.310 |
| RAG | 0.327 | 0.585 | 0.376 | 0.279 | 0.160 | 0.051 | 0.192 | 0.281 |
| SFT | 0.361 | 0.467 | 0.150 | 0.248 | 0.278 | 0.089 | 0.160 | 0.250 |
| R1-base | 0.369 | 0.626 | 0.270 | 0.306 | 0.326 | 0.117 | 0.488 | 0.357 |
| R1-instruct | 0.334 | 0.628 | 0.253 | 0.294 | 0.325 | 0.108 | 0.432 | 0.339 |
| Search-R1-base (PPO) | 0.486 | 0.676 | 0.480 | 0.468 | 0.470 | 0.241 | 0.528 | 0.479 |
| Search-R1-instruct (PPO) | 0.424 | 0.660 | 0.442 | 0.436 | 0.379 | 0.210 | 0.480 | 0.433 |
论文 §5.1 的结论分三层:GRPO 在四组设置里都收敛更快,因为不需要 critic 的 warm-up;PPO 训练更稳,GRPO 在长步数后会出现 reward collapse;两者最终训练奖励接近(§5.1、Figure 2a、Figure 5)。Table 3 的最终分数则更细:7B-Base 上 PPO 的 0.431 比 GRPO 的 0.350 高 0.081,相对 23.1%;其余三组都是 GRPO 略高——7B-Instruct 0.396 vs 0.385(GRPO 高 0.011,相对 2.9%),3B-Base 0.312 vs 0.303(高 0.009,相对 3.0%),3B-Instruct 0.336 vs 0.325(高 0.011,相对 3.4%)。
7B-Base:PPO 0.431,GRPO 0.350。绝对差 0.431 − 0.350 = 0.081;相对 GRPO 0.081 / 0.350 × 100 = 23.1%。
3B-Instruct:GRPO 0.336,PPO 0.325。绝对差 0.336 − 0.325 = 0.011;相对 PPO 0.011 / 0.325 × 100 = 3.4%。这两组方向相反,不能概括成「PPO 更好」。
Table 4 只给 Qwen2.5-7B-Base、PPO 的对照:带掩码 0.431,不带掩码 0.343,高 0.088,相对 25.7%。Table 6 补了 3B-Base:带掩码 0.303,不带掩码 0.262,高 0.041,相对 15.6%。两个规模方向一致,但 3B 的增益更小。
7B-Base:带掩码 0.431,不带 0.343。绝对差 0.431 − 0.343 = 0.088;相对不带掩码 0.088 / 0.343 × 100 = 25.7%。
3B-Base:带掩码 0.303,不带 0.262。绝对差 0.303 − 0.262 = 0.041;相对不带掩码 0.041 / 0.262 × 100 = 15.6%。Table 4 与 Table 6 的前两行数字完全相同(0.431 / 0.343);推断它们来自同一次 7B 训练,但原文未明确说明两次实验是否独立。
默认 top-3 不是随便定的。Table 7 在 7B-Base、PPO 上比较 top-1/3/5:top-3 平均 0.431,比 top-1 的 0.375 高 0.056(相对 14.9%),比 top-5 的 0.400 高 0.031(相对 7.8%)。top-5 在训练前期收敛最快,但后期奖励下滑;论文的解释是 top-1 召回不足、top-5 引入噪声(Appendix G)。Table 7 只引用 Avg,逐数据集数字未转录。
GRPO 的 group size 也有反直觉结果。Table 8 在 7B-Base、GRPO 上比较 size=1/3/5:size=1 平均 0.410,比 size=5 的 0.350 高 0.060(相对 17.1%),比 size=3 的 0.363 高 0.047(相对 12.9%)。论文的解读是:更大的 group 收敛更快、训练奖励更高,但更容易崩溃;size=1 更稳、域外泛化更好(Appendix H)。注意 size=1 时 GRPO 退化为 REINFORCE。Table 8 只引用 Avg,逐数据集数字未转录。
把三个消融合在一起看,Search-R1 的「关键旋钮」不是模型规模,而是检索内容是否进损失、检索几条、以及 GRPO 的组大小。模型规模当然也重要:7B-Base 比 3B-Base 高 0.128 平均 EM,但原文没有报告受控的缩放实验,这个差值不能直接当成 scaling law。
这些不是「不足」的泛泛清单,而是直接影响页面数字能推广到哪里的条件。
EM 只适用于有唯一标准答案的问答。开放生成、多答案、需要部分匹配的任务,0/1 奖励会把正确答案判错。论文明确把「更复杂的格式奖励」留作未来工作(§3.4),并在结论把「更复杂的奖励机制」列为方向(§6)。
NQ、TriviaQA、PopQA、HotpotQA、2wiki、Musique、Bamboogle 覆盖通用与多跳问答,但没有代码、网页操作、科学推理等任务。页面不能把结论外推到「所有 Agent 任务」(§4.1)。
论文把检索器当成给定的黑盒,没有测试检索质量下降时的鲁棒性,也没有做 query rewriting 与检索器的联合优化。top-k 只做到 5,不能说明更大 k 的趋势(§4.3、Appendix G)。
3B/7B 的 Base/Instruct、PPO/GRPO 都是独立训练;14B 只给 PPO 主结果,没有 14B 的 PPO/GRPO 对照,也没有 14B 的掩码消融。论文没有报告 GPU 小时,也没有报告多次运行的方差或显著性检验(Appendix B.2、Table 5)。
结果层面的边界更具体。第一,平均分赢不等于逐单元格赢:3B-Instruct 在 NQ、PopQA 上低于 RAG;3B-Base 在 Musique、Bamboogle 上低于 Rejection Sampling;14B-Instruct 在 Bamboogle 上低于 R1-Base(Table 2、Table 5)。第二,PPO 与 GRPO 的胜负随设置翻转:PPO 只在 7B-Base 上明显领先,另外三组 GRPO 略高;论文仍选 PPO 作默认,理由是训练更稳,而不是最终分数全面更高(§5.1、Table 3)。第三,训练稳定性与最终分数不是同一个指标:GRPO 收敛快但可能 collapse,PPO 慢但稳;页面不把「更稳」写成「更高」。
版本口径必须单独说清。v5 PDF 摘要写的是 7B 相对提升 24%、3B 相对提升 20%;§4.4 正文也写相对提升 24% 与 20%。但 v5 引言贡献段写的是相对提升 41% 与 20%。用 Table 2 复算:7B 相对 RAG 是 41.8%(0.127 / 0.304),相对 Rejection Sampling 是 23.9%(0.083 / 0.348);3B 相对 RAG 是 20.4%(0.055 / 0.270),相对 Rejection Sampling 是 22.6%(0.060 / 0.265)。推断:若 24% 取 Rejection Sampling 的 23.9%、41% 取 RAG 的 41.8%,则两者对应不同分母;原文未说明 24% 的分母是哪一个,而且 Rejection Sampling 不属于摘要所称的 RAG baselines,页面因此并列,不替它选一个。另需注意:arXiv abs 页的元数据仍显示 41%/20%,而 v5 PDF 摘要为 24%/20%;点开链接看到 41% 时,不是本页抄错。
还有一个容易被忽略的实现条件:随机种子、数据顺序、检索索引版本都没有在正文里给出。论文没有报告多次运行的均值 ± 方差,也没有说明表内数字是否来自单次训练;页面把表内数字当作单次训练后的评测点(推断)。页面里的所有差值都是「表内两个点估计相减」,不是统计显著性的结论。