Skip to content

人类反馈强化学习

Reinforcement Learning from Human Feedback

先用人类偏好训练一个奖励模型,再让模型通过强化学习去最大化这个奖励。

如果说得更直白一点:

预训练只会“续写最像数据的文本”,而 RLHF 想让模型学会“生成人更喜欢、更有帮助的回答”。

RLHF 这条路线最早在强化学习环境中被系统化:让人去比较两段轨迹,模型从这些比较中学出一个奖励函数,再用 RL 优化这个奖励。后来它被迁移到语言模型上,典型代表是文本风格控制、摘要和 InstructGPT。

为什么需要 RLHF

只做语言模型预训练,优化目标通常是 next-token prediction:

LLM(θ)=tlogπθ(xtx<t).

这个目标擅长让模型学会“什么文本在训练语料里最可能出现”,但它不直接等价于“回答是否有帮助、是否诚实、是否安全”。因此,语言模型的预训练目标和真实产品目标之间会出现错位。

在摘要场景里,这个问题也很明显:像 ROUGE 这样的自动指标只是代理指标,不等于人类真正关心的“摘要质量”。RLHF 的价值就在于:把难以手写成公式的人类偏好,转成可学习的奖励信号。

一个标准的 RLHF 流程

在语言模型里,最经典的 RLHF 流程通常分成三步:

  1. 先做 SFT(supervised fine-tuning),得到一个能基本按指令回答的初始策略;
  2. 收集人类偏好比较数据,训练 reward model
  3. 用强化学习去优化这个 reward model,同时用 KL 约束避免策略跑得太远。

InstructGPT 基本就是这条三阶段路线:SFT -> RM -> PPO

第一步:SFT

假设输入 prompt 是 x,人工示范答案是 y=(y1,,yT),那么 SFT 的训练目标就是普通的 teacher-forcing 交叉熵:

LSFT(θ)=t=1Tlogπθ(ytx,y<t).

这一步的作用不是“最终对齐”,而是先给模型一个足够好的起点。因为如果初始策略太差,后面无论是采样比较数据,还是训练 reward model,都会很困难。

第二步:收集偏好数据

对同一个 prompt x,我们让模型生成多个候选回答,然后让标注者比较哪一个更好。

最简单的情形是二选一:给定同一个 prompt x 下的两个回答 ywyl,其中 yw 是人类更偏好的 winner,yl 是 loser。

所以偏好数据的基本形式可以写成:

(x,yw,yl).

这类数据和监督学习里的“唯一标准答案”很不一样。RLHF 通常不要求人类给出精确分数,而是只要求人类回答:

这两个回答里,你更喜欢哪一个?

这样做的一个好处是:比较通常比打绝对分数更容易、更稳定。

第三步:训练奖励模型

奖励模型记成 rϕ(x,y),输入是 prompt 和完整回答,输出是一个标量分数。这个分数越高,表示模型越相信“人类会偏好这个回答”。

最常见的做法是用 Bradley–Terry / logistic 形式建模偏好概率:

P(ywylx)=exp(rϕ(x,yw))exp(rϕ(x,yw))+exp(rϕ(x,yl)).

把分子分母同时除以 exp(rϕ(x,yl)),就得到:

P(ywylx)=σ(rϕ(x,yw)rϕ(x,yl)),

其中 σ(z)=11+ez 是 sigmoid。

奖励模型损失是怎么来的

既然训练数据告诉我们“在这对回答里,人类更喜欢 yw”,那最自然的目标就是最大化这个事件的似然:

maxϕlogP(ywylx).

等价地,最小化负对数似然:

LRM(ϕ)=logσ(rϕ(x,yw)rϕ(x,yl)).

如果写成对整个比较数据集 D 的期望,就是:

LRM(ϕ)=E(x,yw,yl)D[logσ(rϕ(x,yw)rϕ(x,yl))].

这个损失非常好理解:

  • 如果奖励模型给 winner 的分数明显高于 loser,那么括号里的差值大,sigmoid 接近 1,loss 很小;
  • 如果它把 loser 评得更高,那么差值会变小甚至为负,loss 就会变大。

所以 reward model 学到的不是“真实世界奖励”,而是:

一个尽量和人类偏好排序一致的标量函数。

第四步:用 RL 优化策略

有了奖励模型以后,最朴素的想法就是直接最大化期望奖励:

maxθExD,yπθ(x)[rϕ(x,y)].

但如果只盯着 reward model 最大化,会出现一个严重问题:

策略可能会学会“钻奖励模型的空子”,生成在人类看来并不好、但能骗过 reward model 的回答。

因此,RLHF 通常不会只优化 rϕ,而是会加上一个 KL 正则项,让当前策略别偏离参考策略太远。最常见的写法是:

J(θ)=Ex,yπθ[rϕ(x,y)βKL(πθ(x)πref(x))].

这里:

  • πθ 是当前策略;
  • πref 是参考策略,通常就是 SFT 模型;
  • β 控制“追求奖励”和“别跑太远”之间的权衡。

为什么要加 KL

KL 约束的直觉很重要。

奖励模型只在有限的比较数据上训练过,所以它只在某个分布附近比较可信。如果策略为了拿高分,跑到一个很奇怪的区域,reward model 可能就会严重失真。加上 KL 后,策略就会被拉回参考模型附近,避免过度优化。

在语言模型里,由于序列概率可以按 token 分解:

logπθ(yx)=tlogπθ(ytx,y<t),

所以 KL 惩罚也常写成逐 token 的形式:

logπθ(yx)πref(yx)=tlogπθ(ytx,y<t)πref(ytx,y<t).

这也是为什么 InstructGPT 里会说“对每个 token 加一个来自 SFT 模型的 KL penalty”。

TIP

logπθ(yx)

表示:

当前模型参数是 θ 时,给定输入 x,生成回答 y 的概率。

因为语言模型是一个 token 一个 token 生成的,所以整段回答概率可以拆成:

πθ(yx)=t=1Tπθ(ytx,y<t)

比如:

x = "法国首都是哪里?",y = "法国首都是巴黎。"

πθ(yx)=P()×P()×P()×P()

为什么要加 log?

因为连乘很多小概率会非常小,不方便算。

第五步:为什么常用 PPO

到这里,目标已经有了:让策略拿更高奖励,同时不要离参考策略太远。接下来就需要一个真正能优化策略的 RL 算法。

经典 RLHF 里最常用的是 PPO。它的核心策略目标写成:

LCLIP(θ)=E^t[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t)],

其中

rt(θ)=πθ(atst)πθold(atst).

在语言模型的 RLHF 里,可以把:

  • 状态 st 理解成 prompt + 已生成前缀
  • 动作 at 理解成“下一个 token”;
  • 回答结束时 reward model 给出一个序列级奖励,再结合 KL 与 value/advantage 估计,把信用分配回各个 token。

也就是说,RLHF 里的 PPO 不是把语言模型当普通分类器训练,而是把“生成一整条回答”看成一条轨迹来优化。

RLHF 到底做了什么

如果把整个流程压成一句话,就是:

  • 预训练告诉模型:什么文本像互联网文本
  • SFT 告诉模型:什么回答像人工示范
  • Reward model 告诉模型:人类在多个候选里更偏好哪种回答
  • RL 告诉模型:怎样系统性地提高这种偏好分数,同时别跑偏太远

所以 RLHF 的本质不是“再做一次普通微调”,而是把训练目标从“拟合数据分布”进一步改成“优化人类偏好”。

RLHF 的优点

RLHF 最重要的优点,是它能处理那些很难手写成准确损失函数的目标。

比如:

  • 一个回答是否真正 helpful;
  • 一个摘要是否真的抓住重点;
  • 一个回复是否显得诚实、稳妥、不过度自信。

这些目标很难直接写成标准监督学习标签,但人类通常能做相对稳定的比较判断。因此,偏好学习 + 奖励建模就成了一条很自然的路线。

RLHF 的局限

RLHF 也不是“有了人类反馈就万事大吉”。至少有三类问题需要记住。

第一,reward model 不等于真实人类偏好。它只是用有限比较数据学出来的近似模型,所以可能学偏、学浅、或者抓住错误捷径。

第二,会发生 reward hacking / over-optimization。也就是策略越来越会讨好 reward model,但不一定越来越符合真实人类偏好。

第三,它对标注群体敏感。优化出来的模型,往往是在对齐“某一批标注者的偏好”,而不是抽象意义上的“全人类价值”。

总结

RLHF = 先学会模仿人,再学会赢得人的偏好。

重点

SFT:

LSFT(θ)=tlogπθ(ytx,y<t)

Reward model:

LRM(ϕ)=logσ(rϕ(x,yw)rϕ(x,yl))

RLHF 的策略目标(带 KL):

J(θ)=E[rϕ(x,y)βKL(πθπref)]

RLHF 的标准路线是:先用监督微调得到一个初始策略,再利用人类比较数据训练奖励模型,最后用 PPO 等强化学习算法去最大化奖励模型,同时加入 KL 正则防止策略偏离参考模型太远。它的核心价值在于:把“人类更喜欢什么回答”这种难以直接写成公式的目标,转化为一个可以训练、可以优化的学习问题。