论文笔记,标题:R1-Searcher: Incentivizing the Search Capability in LLMsvia Reinforcement Learning,代码开源,https://github.com/SsmallSong/R1-Searcher
整体内容很不错的一篇文章,可以回答很多常见问题。
比如:
- 字符串的答案怎么去设计规则奖励?
- 强化学习怎么数据怎么构造,怎么分步去设计?
- grpo还是别的算法?
- sft还是rl?
首先这个工作本身是希望,把模型思考+RAG通过强化学习结合到一起,让答案更准确。基础模型使用的qwen & llama。
所以设计这样的一个system prompt
简单来说就是,希望模型输出这样的格式,通过输出特殊token,触发搜索,然后再把检索到的内容拼接进去,继续生成。当然这个过程可以进行多次。
<think>
xxx
xxx
<begin\_of\_query>检索查询关键词<end\_of\_query>
<begin\_of\_documents>检索到的文档内容<end\_of\_documents>
xxxx
</think>
<answer>最终答案</answer>
2阶段训练,第一阶段主要是奖励格式,相对而言,这个格式改动比较大,所以单独设计了一个阶段来训练?让模型快速学会怎么使用检索模块。
第一阶段用到了一些中等难度的数据(低于20次推理的数据),不奖励答案正确性,只看格式奖励和召回标记触发次数来奖励,如下图,2个奖励求和。
第二阶段用格式奖励+正确答案是否正确的奖励,如下图,2个奖励求和。
评估预测answer和正确answer是否匹配,2个测录,一个是规则判断是否包含,一个是用大模型判断。
最后几个消融实验:
强化学习算法使用grpo还是Reinforce++?
grpo在在域外测试集上表现出更好的泛化能力, Reinforce++在域内测试集上表现出更高的学习效率。
SFT还是RL?
RL,在域内和域外测试集上都表现出更好的检索能力和泛化能力。SFT,虽然可以帮助模型生成检索查询,但查询的时机和相关性不如RL训练的模型。
SFT的模型更倾向于依赖模型的内部知识,更容易导致错误或误导性的答案。
强化学习数据设计
难度:
多样性:
难度更高,多数据集,都促使模型进行更多的检索来回答问题。然后模型在评估数据集上的性能也更好。