从 RLVR 到 RLSVR(GitHub 仓库)

TLDR AI 论文

摘要

介绍 RLSVR,一种任务转换范式,通过自对弈游戏中的自验证奖励将 RLVR 扩展到开放式任务,并在 SpyRL 和 Vision-Zero 中实例化。它提升了 LLM 在摘要生成、创意写作和数学推理方面的表现。

RLSVR 将 RLVR 扩展到固有可验证问题之外,通过将开放式任务转换为带有规则和结果的代理环境,从而生成自己的奖励信号。SpyRL 通过多智能体自对弈展示了该方法,其中预设角色和投票使评估自动化。
查看原文
查看缓存全文

缓存时间: 2026/08/04 13:30

wangqinsi1/RLSVR Source: https://github.com/wangqinsi1/RLSVR # 🕵️ SpyRL:自我对弈强化学习 ### 从 RLVR 到 RLSVR:任务转换引发开放式 LLM 自我改进的自验证奖励 > 🎉 已收录至 COLM 2026! arXiv (https://arxiv.org/abs/2607.23802) 许可证 模型 (https://huggingface.co/SpyRL) 基于 verl (https://github.com/volcengine/verl) 构建 概述 自监督学习,但用于 RLVR。我们将开放式任务转化为多智能体游戏,其规则自动生成完全可验证的奖励,使 LLM 能够超越数学和代码领域实现可扩展的自我改进。 > ### 🎯 本仓库同时托管 Vision-Zero(ICLR 2026) > Vision-Zero:通过策略性游戏化自我对弈实现可扩展的 VLM 自我改进 (https://github.com/wangqinsi1/RLSVR/tree/vision-zero) — > 视觉-语言对应版本,其中相同的自我对弈思想应用于图像对。 > → 代码位于 vision-zero (https://github.com/wangqinsi1/RLSVR/tree/vision-zero) 分支 ## 📋 目录 - 🎯 概述 - 📊 性能结果 - 🤖 模型 - 🚀 快速开始 - 🎲 游戏机制 - 📂 仓库结构 - 💪 训练 - 📊 评估 - 📄 引用 — ## 🎯 概述 借鉴自监督学习通过构造前置任务从数据自身获取监督信号的原理,我们提出了 具有自验证奖励的强化学习(RLSVR),这是一种基于任务转换的训练范式,旨在将 RLVR 扩展到开放式任务。RLSVR 将开放式任务转换为可验证的代理环境,其内部规则和交互结果自动生成奖励信号。我们以 SpyRL 实例化 RLSVR,这是一个受 谁是卧底? 启发的多智能体自我对弈环境。智能体获得不对称信息,完成相同的目标任务,并通过投票识别指定的卧底。由于卧底身份是预先确定的,投票结果提供了完全可验证的奖励,而成功识别与输出质量密切相关。 > 🏆 在 Qwen3-8B 上,SpyRL 在摘要和创意写作任务上分别达到 75.4% 和 77.3% 的 A/B 胜率,并在七个数学基准上将 Qwen3-4B/8B 分别提升 8.97% 和 6.16% —— 而 R-Zero 和 Absolute Zero 在开放式任务上仅获得微小增益。 ### ✨ 关键特性 🎮 超越可验证领域的自我对弈 先前的自我对弈框架(R-Zero、Absolute Zero)是提出者–求解者循环,需要可验证的求解者信号来引导难度。SpyRL 无需任何信号:奖励来自 游戏规则,因此它可以扩展到不存在真实答案的摘要和创意写作任务。 🔍 无需验证器的可验证奖励 环境分配卧底身份,因此 r_D = 1[vote == spy] 在构造上就是可检查的。表现奖励是投票数的零和函数,使卧底和平民保持真正的竞争,而不是共同漂移。 🗳️ 集体而非逐点的评判 每位玩家都投票,奖励在组内归一化(GRPO 风格)。单个检测者的误判会被多数投票否决,而不是成为整个学习信号——比单验证器流水线稳健得多。 📄 廉价的文档级数据 表现阶段仅需要原始文档——报告、故事提示、数学密集型网络文本。无需问题级监督、无标签、无偏好对。切换领域只需更换语料库。 — ## 📊 性能结果 ### 📝 摘要 与未训练基础模型相比的 ROUGE-L 和 GPT-4o A/B 胜率(%)。 | 方法 | GovReport | | Multi-News | | QmSum | | VcSum | | SamSum | | |—|—|—|—|—|—|—|—|—|—|—| | | ROUGE | A/B | ROUGE | A/B | ROUGE | A/B | ROUGE | A/B | ROUGE | A/B | | Qwen3-4B | 30.2 | 51.2 | 23.1 | 52.1 | 21.3 | 52.4 | 15.1 | 51.8 | 43.2 | 50.9 | | + R-Zero | 32.1 | 56.8 | 22.4 | 48.2 | 21.5 | 55.2 | 15.6 | 51.2 | 42.8 | 48.1 | | + Absolute Zero | 33.2 | 58.8 | 25.2 | 61.2 | 22.7 | 56.4 | 18.3 | 62.8 | 46.1 | 68.5 | | + SpyRL | 36.7 | 74.6 | 26.4 | 80.2 | 25.3 | 68.4 | 19.1 | 70.2 | 48.2 | 76.2 | | Qwen3-8B | 29.0 | 50.2 | 23.1 | 51.4 | 19.2 | 52.8 | 14.9 | 53.1 | 44.3 | 51.6 | | + R-Zero | 29.4 | 51.3 | 22.2 | 50.2 | 18.8 | 47.9 | 14.9 | 55.3 | 44.8 | 52.9 | | + Absolute Zero | 32.5 | 62.5 | 23.2 | 50.3 | 19.1 | 53.2 | 15.8 | 58.2 | 46.2 | 70.6 | | + SpyRL | 34.1 | 78.2 | 25.8 | 68.5 | 23.2 | 78.2 | 19.1 | 72.5 | 48.5 | 79.5 | ### ✍️ 创意写作 与未训练基础模型相比的 A/B 胜率(%),基于四个标准评判。 | 方法 | WritingPrompts | | | | | WritingBench | | | | | |—|—|—|—|—|—|—|—|—|—|—| | | 新颖性 | 情感 | 连贯性 | 一致性 | 总体 | 新颖性 | 情感 | 连贯性 | 一致性 | 总体 | | Qwen3-4B | 51.2 | 50.0 | 52.3 | 51.0 | 51.2 | 50.8 | 51.5 | 50.9 | 52.1 | 51.0 | | + R-Zero | 48.3 | 44.3 | 51.2 | 48.8 | 48.8 | 46.5 | 46.5 | 43.2 | 46.2 | 46.5 | | + Absolute Zero | 54.5 | 52.2 | 50.2 | 52.8 | 54.0 | 55.2 | 54.8 | 55.7 | 55.4 | 55.2 | | + SpyRL | 84.3 | 76.8 | 72.3 | 70.1 | 81.3 | 76.2 | 75.7 | 68.5 | 68.0 | 75.1 | | Qwen3-8B | 52.2 | 51.8 | 50.6 | 51.0 | 51.5 | 50.4 | 51.1 | 51.3 | 52.4 | 51.8 | | + R-Zero | 52.3 | 54.2 | 51.2 | 49.5 | 52.2 | 52.3 | 52.1 | 52.5 | 53.4 | 52.0 | | + Absolute Zero | 55.3 | 52.8 | 57.4 | 56.8 | 56.4 | 56.5 | 55.8 | 58.2 | 57.9 | 58.1 | | + SpyRL | 77.3 | 76.2 | 74.2 | 75.0 | 76.5 | 78.1 | 77.4 | 71.0 | 71.2 | 78.1 | ### 🧮 数学与通用推理 | 方法 | GSM8K | Math500 | AIME 24 | AIME 25 | Minerva | MMLU-Pro | GPQA-D | |—|—|—|—|—|—|—|—| | Qwen3-4B | 84.5 | 68.2 | 10.3 | 6.7 | 42.3 | 51.6 | 26.3 | | + R-Zero | 88.7 | 72.8 | 10.3 | 6.7 | 47.1 | 52.8 | 27.8 | | + Absolute Zero | 89.3 | 76.2 | 12.2 | 13.4 | 41.9 | 52.6 | 35.3 | | + SpyRL | 93.4 | 79.5 | 13.3 | 20.0 | 47.8 | 57.4 | 41.3 | | Qwen3-8B | 91.8 | 74.2 | 15.3 | 12.1 | 49.3 | 58.1 | 33.3 | | + R-Zero | 92.1 | 78.4 | 15.3 | 14.2 | 52.5 | 61.7 | 34.3 | | + Absolute Zero | 92.0 | 76.6 | 18.4 | 18.2 | 52.9 | 62.5 | 36.8 | | + SpyRL | 93.5 | 81.2 | 20.0 | 23.3 | 56.3 | 63.1 | 39.8 | > 关键洞察: 基于投票的表现奖励与真实质量紧密相关。在 100 场游戏中,吸引更多怀疑票的玩家始终被 GPT-4o 排在更低位置——游戏在不需要任何裁判的情况下,衡量了我们真正关心的指标。 — ## 🤖 模型 所有检查点均在 🤗 SpyRL (https://huggingface.co/SpyRL) 下发布,并可直接使用普通 transformers 加载——聊天模板和分词器与基础模型保持不变。 | 模型 | 基础 | 任务 | 头条结果 | |—|—|—|—| | 模型 (https://huggingface.co/SpyRL/SpyRL-Qwen3-4B-Math) | Qwen3-4B-Instruct-2507 | 数学推理 | 7 个基准平均提升 +8.97% | | 模型 (https://huggingface.co/SpyRL/SpyRL-Qwen3-8B-Math) | Qwen3-8B | 数学推理 | 7 个基准平均提升 +6.16% | | 模型 (https://huggingface.co/SpyRL/SpyRL-Qwen3-4B-Writing) | Qwen3-4B-Instruct-2507 | 创意写作 | 81.3% A/B 胜率 | | 模型 (https://huggingface.co/SpyRL/SpyRL-Qwen3-4B-Summarization) | Qwen3-4B-Instruct-2507 | 摘要 | 74.6% A/B 胜率,ROUGE-L +6.5 | python from transformers import AutoModelForCausalLM, AutoTokenizer model_id = "SpyRL/SpyRL-Qwen3-4B-Math" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto") 无需发布数据集——每个任务直接从 Hub 流式加载其语料库(ccdv/govreport-summarization、euclaise/writingprompts、nvidia/Nemotron-CC-Math-v1)并即时构建游戏。 — ## 🚀 快速开始 需要 Python ≥ 3.10、CUDA 12.x 以及单个节点 8 张 ≥ 80 GB 的 GPU(参考配置使用张量并行 8)。 bash git clone -b SpyRL https://github.com/wangqinsi1/RLSVR.git cd RLSVR conda create -n spyrl python=3.10 -y && conda activate spyrl bash setup.sh # verl 核心 + vLLM + SpyRL 依赖,然后进行冒烟检查 bash spyrl/train_summarization.sh # 或 train_creative_writing.sh / train_math_reasoning.sh 语料库在首次使用时从 Hugging Face Hub 拉取——无需手动下载或预处理。如果语料库需要认证,请设置 HF_TOKEN。 不通过 setup.sh 安装 bash pip install -e ".[spyrl]" # verl 核心 + vLLM + SpyRL 依赖 pip install flash-attn --no-build-isolation # 可选,加速注意力 python spyrl/check_install.py # 验证智能体循环已注册到 verl 的注册表 pip install .(非可编辑模式)同样可用——启动脚本从克隆的树中读取游戏环境,因此无论如何请保留克隆目录。 — ## 🎲 游戏机制 任务 每个任务通过不同的信息退化算子 g(·) 和不同的表现目标实例化相同的两阶段游戏: | 任务 | 语料库 | 玩家做什么 | 卧底的劣势 | |—|—|—|—| | 摘要 | ccdv/govreport-summarization (https://huggingface.co/datasets/ccdv/govreport-summarization) | 用一段话总结政府报告 | 报告 20% 的连续跨度被 * 遮蔽 | | 创意写作 | euclaise/writingprompts (https://huggingface.co/datasets/euclaise/writingprompts) | 根据提示写一个故事 | 提示 20% 的连续跨度被 * 遮蔽 | | 数学推理 | nvidia/Nemotron-CC-Math-v1 (https://huggingface.co/datasets/nvidia/Nemotron-CC-Math-v1) | 设计 并 解决一个基于文档的问题 | 文档 40% 的连续跨度被 * 遮蔽 | 检测者必须在 \boxed{...} 内回答——一个玩家编号,或不确定时的 N/A——奖励解析器正是读取这个。 ### 两种奖励 检测(可验证——环境知道卧底是谁): r_D(i) = 1[v_i == u] 在检测者组内进行 GRPO 风格归一化。 表现(角色间零和,完全由票数 m 驱动): r_P(spy) = −β · (m_u − m̄_c) r_P(civilian j) = (β / n_c) · (m_u − m̄_c) − λ · (m_j − m̄_c) 第一项使卧底和平民处于直接竞争;第二项惩罚任何比同伴吸引更多怀疑的平民,因此“表现好”具体意味着“比看到相同信息的其他人更好”。由于信息不对称使得两种角色的原始奖励分布不可比,角色优势估计 在计算优势之前减去每个角色的 EMA 基线(verl/utils/spyrl_reward.py 中的 _RoleBaselines)。 ### 交替优化 两个阶段通过单个标志交替训练: | trainer.training_phase | 行为 | |—|—| | interactive (默认) | 每 interactive_cycle_length 步在 decision → clue 之间交替 | | clue | 仅训练表现阶段 | | decision | 仅训练检测阶段 | 在 clue 阶段,每位玩家生成一次 rollout(num_players × num_rounds);在 decision 阶段,rollout.n 个检测者评判同一个缓存的游戏。参见 verl/trainer/ppo/ray_trainer.py 中的 RayPPOTrainer._get_interactive_training_phase。 > i️ 代码中的 clue 对应论文中的 表现阶段,decision 对应 检测阶段。 — ## 📂 仓库结构 与本论文相关的所有内容集中在三处:spyrl/ 下的启动脚本、进行游戏的智能体循环,以及定义游戏的数据集/奖励。 SpyRL/ ├── spyrl/ # ← 从这里开始:启动脚本 │ ├── README.md # 每个脚本的参考 │ ├── env.sh # 共享路径、缓存、模型和 GPU 默认值 │ ├── train_summarization.sh # GovReport(并行表现阶段) │ ├── train_creative_writing.sh # WritingPrompts(并行表现阶段) │ ├── train_math_reasoning.sh # Nemotron-CC-Math(并行表现阶段) │ ├── check_install.py # 安装后冒烟检查 │ └── ablations/ # 顺序变体、无卧底、语料库替换 │ ├── verl/experimental/agent_loop/ # 游戏逻辑:一次 rollout = 一整局游戏 │ ├── govreport_parallel_agent_loop.py # 玩家独立写作 │ ├── govreport_two_player_agent_loop.py # 玩家轮流写作,看到同伴内容 │ ├── writingprompts_parallel_agent_loop.py │ ├── writingprompts_two_player_agent_loop.py │ ├── nemotron_cc_math_parallel_agent_loop.py │ ├── nemotron_cc_math_two_player_agent_loop.py │ └── nemotron_cc_math_no_spy_clue_agent_loop.py # “无卧底”消融 │ ├── verl/utils/dataset/ # 环境:语料库、角色、提示 │ ├── govreport_spotdiff_parallel_dataset.py # + GovReportSpotDiffParallelPromptBuilder │ ├── govreport_spotdiff_dataset.py │ ├── writingprompts_spotdiff_parallel_dataset.py │ ├── writingprompts_spotdiff_dataset.py │ ├── nemotron_cc_math_spotdiff_parallel_dataset.py │ ├── nemotron_cc_math_spotdiff_dataset.py │ ├── nemotron_cc_math_no_spy_clue_dataset.py # “无卧底”消融 │ └── dclm_baseline_spotdiff_dataset.py # 语料库消融 │ ├── verl/utils/ │ ├── spyrl_reward.py # 两个耦合奖励 + 角色优势估计 │ └── spyrl_no_spy_reward.py # “无卧底”消融的奖励 ├── verl/trainer/ppo/ray_trainer.py # 阶段交替 + 阶段相关的 rollout 重复 └── setup.sh # 一键安装 所有三个任务都有两种风格,每种风格都是一对 : - **并行**——所有玩家根据各自的私有观察并发生成。在检测阶段之前,没有人看到其他人的输出,卧底的输入被*部分*遮蔽。这是主脚本运行的版本。 - **双人**(顺序)——玩家轮流发言,每个人都能看到到目前为止的完整记录;卧底最后发言,因此可以尝试重建缺失的信息。此处的退化更为严重(写作和数学任务完全没有输入)。可在 `spyrl/ablations/` 下获得。 --- ## 💪 训练 bash bash spyrl/train_summarization.sh # GovReport 上的摘要 bash spyrl/train_creative_writing.sh # WritingPrompts 上的创意写作 bash spyrl/train_math_reasoning.sh # Nemotron-CC-Math 上的数学推理 每个旋钮都有默认值;通过环境变量覆盖常见项: | 变量 | 默认值 | 含义 | |---|---|---| | `SPYRL_MODEL` | `Qwen/Qwen3-4B-Instruct-2507` | 用作 actor 和参考策略的基础模型 | | `SPYRL_OUTPUT_DIR` | `./outputs` | 检查点和 rollout 记录存放位置 | | `SPYRL_NUM_GPUS` / `SPYRL_NNODES` | `8` / `1` | 每节点 GPU 数(也是 vLLM 张量并行大小)、节点数 | | `NUM_PLAYERS` | `5`(GovReport 为 4) | 组大小 `n` | | `MASK_FRACTION` | `0.2` / `0.4` | 卧底输入中被遮蔽的比例(数学为 0.4) | | `TRAINING_PHASE` | `interactive` | `interactive` \| `clue` \| `decision` | | `SPYRL_LOGGER` | `["console"]` | 传递给 `trainer.logger`,例如 `'["console","wandb"]'` |bash SPYRL_MODEL=Qwen/Qwen3-8B NUM_PLAYERS=5 bash spyrl/train_summarization.sh 其他一切均为普通 Hydra 覆盖,追加到命令末尾:bash bash spyrl/train_math_reasoning.sh actor_rollout_ref.actor.optim.lr=5e-7 trainer.total_epochs=3 每次运行都会将检查点写入 `outputs//`,并将每步一整局游戏的人类可读记录写入 `outputs//rollouts.txt`——每位玩家的提示和输出、检测者提示、每个投票、是否正确,以及由此产生的奖励。如果训练看起来异常,该文件就是原因所在:bash tail -f outputs/govreport_summarization/rollouts.txt `` 变体和消融(顺序表现阶段、“无卧底”、非数学语料库)位于 spyrl/ablations/;完整的每个脚本参考请参见 spyrl/README.md。 参考超参数

相似文章

超越可验证的RL(8分钟阅读)

TLDR AI

本文分析讨论了使用可验证奖励的强化学习(RLVR)在数学和编程中的局限性,以及将强化学习扩展到主观或不可验证任务(如规划或科学发现)所面临的挑战。文章还探讨了RLHF和Constitutional AI等技术作为对齐的替代方案。

锁入口,内开阔:RLVR 如何缩窄解空间

arXiv cs.LG

本文通过分析多样性在何处丧失,研究了带有可验证奖励的强化学习如何缩窄大语言模型推理的解空间,发现其集中于轨迹的“入口”处。研究证明,无需牺牲准确性,即可通过干预措施恢复解的广度。