可验证奖励的强化学习(RLVR)
Reinforcement Learning with Verifiable Rewards (RLVR)
可验证奖励的强化学习
当答案可以被验证,强化学习就有了更硬的反馈信号
客观验证
使用确定性验证器替代主观人类反馈,使奖励信号更接近客观、可重复的评估。
轻量化训练
GRPO算法无需独立Critic网络,显著降低计算开销,适合轻量化模型。
推理优化
特别适用于数学、代码生成等需要精确推理的任务,提升模型逻辑能力。
RLVR解决的不是“偏好”,而是“对错”
许多大模型训练方法都在回答同一个问题:怎样让模型的输出更符合人类期待?RLVR关注的是另一个更窄、但更可操作的问题:当任务存在明确答案时,怎样让模型反复从“做对”与“做错”中学习。
可验证奖励的强化学习(RLVR)正是围绕这个问题形成的训练范式。它通过引入一个客观、自动化的"验证器"来替代传统强化学习中依赖人类反馈或复杂奖励模型的评估机制。在RLVR框架中,LLM作为智能体,接收任务提示并生成响应,该响应随后被送入验证器进行检验。验证器根据预设的规则或程序,判断模型的输出是否正确,并返回一个明确的奖励信号。这种直接的、基于结果正确性的反馈机制,使得模型能够通过不断的试错学习,优化其生成策略,从而更有效地解决具有明确答案的推理问题,如数学计算、代码生成和逻辑谜题等。
核心概念:把奖励锚定在可验证结果上
RLVR的动机:减少主观评分链条
可验证奖励的强化学习(Reinforcement Learning with Verifiable Rewards, RLVR)是一种新兴的、专为提升大语言模型(LLM)在逻辑推理和精确任务上表现而设计的训练范式。其核心思想在于,将强化学习(RL)的奖励信号直接与一个客观、可自动验证的正确性标准挂钩,而非依赖于主观的人类偏好或一个需要单独训练的奖励模型[175]。
核心优势
- 省去独立奖励模型的训练,降低计算开销
- 在可验证任务中降低奖励黑客(Reward Hacking)风险
- 奖励信号直接与任务目标对齐
- 特别适合轻量化模型的推理能力提升
RLVR与RLHF:一个优化偏好,一个优化正确性
| 特性 | RLHF | RLVR |
|---|---|---|
| 核心目标 | 对齐人类偏好,生成更受欢迎的回答 | 提升客观正确性,解决具体问题 |
| 奖励来源 | 基于人类偏好数据训练的独立奖励模型 | 基于任务内在规则的外部验证器 |
| 奖励性质 | 连续、主观的分数 | 二元(正确/错误)或基于明确规则 |
| 适用场景 | 开放域对话、创意写作等主观任务 | 数学推理、代码生成等客观任务 |
工作流程:生成、验证、再优化
RLVR的训练过程是一个迭代循环,通过不断的"生成-验证-优化"来逐步提升模型在目标任务上的表现。这个流程可以分解为四个关键步骤:
问题定义与提示工程
精心设计输入提示,包含系统指令和少样本示例,引导模型生成结构化输出。
思维链生成
模型生成包含详细推理过程的思维链,使用特定标签如
<think>和
<answer>来组织内容。
答案验证与奖励计算
从模型输出中提取答案,通过验证器进行客观检验,计算正确性奖励和格式奖励。
策略优化与模型更新
使用GRPO等算法,基于奖励信号更新模型参数,优化生成策略。
核心算法:用组内比较替代独立Critic
GRPO算法概述:相对优势来自同题多答
组相对策略优化(Group Relative Policy Optimization, GRPO)是一种专门为提升大语言模型(LLM)推理能力而设计的强化学习算法,它作为近端策略优化(PPO)的一种高效变体,在RLVR框架中扮演着核心角色[143]。
GRPO的核心创新
GRPO不再训练独立的Critic网络,而是采用一种更直接的方式估计优势:
- 对于每个提示,生成一组(Group)多个响应
- 计算组内奖励的均值和标准差
- 通过"白化"(whitening)计算每个响应的相对优势
- 优势 = (个体奖励 - 组平均奖励) / 组标准差
GRPO的数学原理
组内相对优势计算
对于一组响应 G,计算均值 μ 和标准差 σ:
μ = (1/G) × Σ(r_i)
σ = √[(1/G) × Σ(r_i - μ)²]
每个响应的相对优势:A_i = (r_i - μ) / σ
损失函数设计
L(θ) = E[min(ratio × A_i, clip(ratio, 1-ε, 1+ε) × A_i)] - β × D_KL(π_θ || π_ref)
其中 ratio = π_θ(y_i|x) / π_θ_old(y_i|x)
代码实战:把验证器接入训练循环
环境准备与依赖安装
# 安装核心依赖库
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121
pip install transformers==4.47.1
pip install trl
pip install peft
pip install datasets
这些库构成了RLVR训练的基础环境:
- PyTorch:深度学习框架
- Transformers:加载预训练模型和分词器
- TRL:Transformer Reinforcement Learning库,包含GRPOTrainer
- PEFT:参数高效微调,支持LoRA等技术
- Datasets:加载和处理数据集
核心代码实现
1. 加载模型与分词器
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# 加载轻量化模型和分词器
model_name = "gpt2" # 或 "Qwen2.5-Math-1.5B" 等
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# 设置 padding token
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
2. 定义提示模板与答案提取
def extract_answer(text):
"""从模型输出中提取答案"""
try:
answer_part = text.split("<answer>")[1].split("</answer>")[0]
return answer_part.strip()
except IndexError:
return ""
# 定义系统提示
SYSTEM_PROMPT = "Respond in the following format: <reasoning>...</reasoning><answer>...</answer>"
3. 实现奖励函数
def correctness_reward(completions, human_answers, **kwargs):
"""正确性奖励函数"""
rewards = []
for completion, human_answer in zip(completions, human_answers):
model_answer = extract_answer(completion)
reward = 1.0 if model_answer == human_answer else -1.0
rewards.append(reward)
return rewards
def formatting*reward(completions, \*\*kwargs):
"""格式遵循奖励函数"""
return [0.5 for * in completions] # 简化版本
4. 配置LoRA与GRPO参数
from peft import LoraConfig, get_peft_model, TaskType
from trl import GRPOConfig, GRPOTrainer
# 配置 LoRA
lora_config = LoraConfig(
r=8,
lora_alpha=16,
lora_dropout=0.05,
task_type="CAUSAL_LM",
)
# 应用 LoRA 到模型
model = get_peft_model(model, lora_config)
# 配置 GRPO 训练参数
training_args = GRPOConfig(
batch_size=4,
llm_batch_size=4,
num_epochs=5,
learning_rate=3e-4,
)
5. 加载数据并启动训练
from datasets import load_dataset
# 加载 GSM8K 数据集
def get_gsm8k_questions(split="train"):
dataset = load_dataset("gsm8k", "main", split=split)
def extract_xml_answer(example):
answer_text = example["answer"].split("####")[-1].strip()
return {
"prompt": [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": example["question"]}
],
"answer": answer_text
}
return dataset.map(extract_xml_answer)
train_dataset = get_gsm8k_questions(split="train")
# 初始化 GRPOTrainer
trainer = GRPOTrainer(
model=model,
args=training_args,
train_dataset=train_dataset,
tokenizer=tokenizer,
peft_config=lora_config,
correctness_reward=correctness_reward,
formatting_reward=formatting_reward,
)
# 启动训练
trainer.train()
# 保存训练好的模型
trainer.save_model("rlvr_tuned_model")
讨论与展望:可验证任务是优势,也是边界
面临的挑战
-
对可验证任务的依赖
仅适用于有明确正确答案的领域,难以扩展到主观性任务 -
奖励函数设计复杂
需要精心设计复合奖励函数,降低奖励黑客风险 -
模型能力限制
轻量化模型的基础能力限制了其在复杂任务上的表现
未来发展方向
-
算法创新
结合更多强化学习算法,如基于模型的RL、多智能体RL -
领域扩展
探索更可靠的验证器,将RLVR谨慎扩展到部分半开放任务 -
能力提升
设计更精细的奖励函数,提升模型推理和泛化能力
总结
RLVR的价值不在于取代RLHF,而在于把强化学习放回那些可以明确判定对错的任务中:数学、代码、结构化推理和部分工具调用。它为轻量化模型提供了一条更清晰的能力提升路径,但边界同样明确:验证器能覆盖哪里,奖励信号才真正可靠。未来的关键,不只是训练算法更高效,而是如何设计可信、可扩展、难以被钻空子的验证机制。
参考文献
引用
若想引用本文,请使用:
@misc{dong2025rlvr,
author = {Peijie Dong},
title = {可验证奖励的强化学习(RLVR)},
year = {2025},
month = aug,
day = {5},
howpublished = {\url{https://pprp.github.io/tech/RLVR/}},
url = {https://pprp.github.io/tech/RLVR/},
note = {Blog post. Accessed: 2026-04-28},
language = {Chinese}
}