跳过正文

InstructGPT

·13721 字·28 分钟

1. 强化学习
#

1.1 强化学习基本概念
#

强化学习(Reinforcement Learning, RL)是一种让智能体(Agent)通过与环境(Environment)交互来**学习最优行为策略(Policy)**的机器学习方法。 其核心思想是:

智能体根据当前状态选择一个动作,通过环境反馈的奖励(Reward)来调整自己的策略,以最大化长期回报(Cumulative Reward)。

与监督学习和无监督学习的对比:

学习方式数据特征学习目标是否有标签
监督学习已知输入与正确输出学习从输入到输出的映射关系✅ 有标签
无监督学习只有输入数据发现数据的隐藏结构或聚类❌ 无标签
强化学习与环境交互获得奖励学习能获得最大长期回报的策略⚙️ 奖励信号取代标签

强化学习既不是监督学习,也不是无监督学习。 它通过与环境的交互、自主探索获得经验,从而优化策略,而不是依赖固定标签的数据。


1.2 为什么使用强化学习
#

强化学习适用于以下场景:

  1. 缺乏明确监督信号:例如机器人控制、游戏对战、自动驾驶等,无法为每一步提供准确标签;
  2. 决策过程依赖序列:当前的动作会影响未来的状态与奖励;
  3. 目标是最大化长期回报,而非即时准确率;
  4. 可通过环境交互不断改进策略,具有自适应与探索特性。

RL广泛应用于:

  • AlphaGo、Atari 游戏智能体;
  • 机器人控制;
  • 推荐系统;
  • RLHF(人类反馈强化学习)中的策略微调。

1.3 强化学习基本组成要素
#

强化学习系统通常由以下五个核心要素组成:

要素含义
Agent(智能体)执行动作、学习策略的主体
Environment(环境)与智能体交互并提供反馈(奖励和新状态)
State(状态)描述当前环境的情况
Action(动作)智能体在某一状态下可以执行的行为
Reward(奖励)环境在智能体执行动作后返回的数值反馈,用于衡量该动作的好坏

智能体的目标是通过不断试错学习到最优策略(Policy),以在长期内获得尽可能高的奖励。

交互过程:

  1. 智能体在状态 sts_t 下选择一个动作 ata_t
  2. 环境返回新的状态 st+1s_{t+1} 和奖励 rtr_t
  3. 智能体根据奖励调整策略;
  4. 循环往复,形成经验序列:(s0,a0,r0,s1,a1,r1,)(s_0, a_0, r_0, s_1, a_1, r_1, \dots),通常把这个序列称为Trajectory

1.4 强化学习的目标
#

强化学习的核心目标是:

学习一个最优策略 π(as)\pi^*(a|s),使得 期望累积奖励 最大化。形式化地,强化学习的目标可以表示为:

>J(π)=Eπ(as)[t=0γtrt]> > J(\pi) = \mathbb{E}_{\pi^*(a|s)}\left[ \sum_{t=0}^{\infty} \gamma^t r_t \right] >

其中:

  • π(as)\pi(a|s):策略(Policy),即在状态下选择动作的概率分布;

    可分为:

    • 确定性策略:a=π(s)\pi(s)
    • 随机策略π(as)=P(A=aS=s)\pi(a|s) = P(A=a|S=s)
  • rtr_t:在时刻 tt 获得的即时奖励;

  • γ[0,1)\gamma \in [0, 1):折扣因子(Discount Factor),用于平衡短期与长期收益;

  • 目标是通过优化策略 π\pi,使期望累积奖励 J(π)J(\pi) 最大化。

**注意:**这里的期望 Eπθ\mathbb{E}_{\pi_\theta} 实际上已经隐含了:

  • 环境状态转移的随机性;
  • 策略选择动作的随机性。

也就是说,这个期望是对所有可能轨迹的加权平均

1.5 价值函数
#

价值函数用于评价状态或动作的“好坏”,帮助智能体优化策略。

1. 状态价值函数

表示在给定策略 π\pi 下,从状态 ss 开始能获得的期望长期回报:

Vπ(s)=Eπ[t=0γtrt | s0=s] V^{\pi}(s) = \mathbb{E}_{\pi}\left[ \sum_{t=0}^{\infty} \gamma^t r_t \ \middle| \ s_0 = s \right]

它衡量了某个状态的“好坏”。


2. 动作价值函数

表示在给定策略 π\pi 下,从状态 ss 执行动作 aa 后能获得的期望长期回报:

Qπ(s,a)=Eπ[t=0γtrt | s0=s,a0=a] Q^{\pi}(s, a) = \mathbb{E}_{\pi}\left[ \sum_{t=0}^{\infty} \gamma^t r_t \ \middle| \ s_0 = s, a_0 = a \right]

它衡量了在某个状态下采取某个动作的“好坏”。


3. 动作价值函数与状态价值函数之间的关系

状态价值函数其实可以看作动作价值函数的期望(加权平均):

Vπ(s)=aπ(as)Qπ(s,a) V^{\pi}(s) = \sum_{a} \pi(a|s) \, Q^{\pi}(s, a)

也就是说:

状态价值函数是对该状态下所有可能动作的加权平均(权重是策略在该状态下选择该动作的概率)。


4. 优势函数

用于衡量一个动作相对于该状态下平均水平的优劣程度:

Aπ(s,a)=Qπ(s,a)Vπ(s) A^{\pi}(s, a) = Q^{\pi}(s, a) - V^{\pi}(s)

优势函数反映了动作 aa 相对于该状态下平均行为的增益程度,是许多强化学习算法(如PPO)的核心计算部分。

Aπ(s,a)>0A^{\pi}(s,a) > 0,则动作 aa 比策略平均表现更好; 若 Aπ(s,a)<0A^{\pi}(s,a) < 0,则动作 aa 较差。

1.6 探索与利用
#

在强化学习中,智能体(Agent)需要在未知环境中通过不断尝试来获得最大化长期奖励的策略。 然而,在学习过程中,智能体会面临一个关键的决策困境:

是继续利用已有的经验选择当前看来最优的动作,还是去尝试新的动作以获取更多潜在的知识?

这就是强化学习中著名的 “探索–利用权衡” 问题。

1. 探索(Exploration)

是指智能体有意识地尝试新的动作或策略,以发现可能带来更高奖励的行为。

即:

  • 在不确定的情况下进行尝试;
  • 通过探索新的状态–动作组合,获取更多关于环境的知识。

2. 利用(Exploitation)

是指智能体根据当前已有的知识,选择当前看来能够带来最高奖励的动作。

即:

  • 智能体使用已经学到的策略;
  • 根据现有的价值函数或策略评估,选择期望回报最高的行为。

3. 常见平衡方法

ε-贪心策略(ε-Greedy Policy)

  • 以概率 1ε1 - \varepsilon 选择当前最优动作;

  • 以概率 ε\varepsilon 随机选择一个动作进行探索。

  • 数学表达式:

    a={argmaxaQ(s,a),以概率 1ε随机动作,以概率 ε a = \begin{cases} \arg\max_a Q(s,a), & \text{以概率 } 1-\varepsilon \\ \text{随机动作}, & \text{以概率 } \varepsilon \end{cases}
  • 通常会让 ε\varepsilon 随时间逐渐减小,以在训练后期更多地利用已学知识。

Softmax 策略(Boltzmann Exploration)

  • 按照动作的 Q 值通过 Softmax 分布采样动作,使得较优动作被选择的概率更高:

    P(as)=eQ(s,a)/τaeQ(s,a)/τ P(a|s) = \frac{e^{Q(s,a)/\tau}}{\sum_{a'} e^{Q(s,a')/\tau}}
  • 参数 τ\tau(温度参数)控制探索程度:

    • τ\tau 大 → 行为更随机(高探索);
    • τ\tau 小 → 更倾向选择最优动作(高利用)。

1.7 Actor–Critic 架构
#

在强化学习中,我们通常需要同时解决两个问题:

  • 如何选择动作?(即策略问题)
  • 如何评估一个状态或动作的好坏?(即价值评估问题)

Actor–Critic 架构将这两个问题分开处理:

  • Actor(行动者):负责决策 —— 输出动作;
  • Critic(评估者):负责评估 —— 判断当前策略的好坏,并给出学习信号。

二者相互配合,共同完成策略优化。

1. Actor

Actor 是策略网络(Policy Network),它的任务是根据当前状态 sts_t,输出一个动作的概率分布 π(atst;θ)\pi(a_t|s_t;\theta)

  • 它决定“在当前状态下要采取什么行动”;
  • 通过梯度上升(Policy Gradient)优化策略参数 θ\theta,以最大化期望奖励。

策略目标函数为:

J(θ)=Eπθ[t=0γtrt] J(\theta) = \mathbb{E}_{\pi_\theta}\left[ \sum_{t=0}^{\infty} \gamma^t r_t \right]

Actor 通过梯度更新策略参数(推导过程见 此处

θJ(θ)=Eπθ[θlogπθ(atst)Aπ(st,at)] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta}\left[\nabla_\theta \log \pi_\theta(a_t|s_t) \, A^{\pi}(s_t, a_t)\right]

其中:

  • Aπ(st,at)A^{\pi}(s_t, a_t) 是优势函数,用于衡量当前动作相对平均水平的好坏;
  • 该项由 Critic 提供。

2. Critic

Critic 是价值函数网络(Value Network),用于评估当前策略的表现,给 Actor 提供“学习方向”。

Critic 的目标是预测状态或状态–动作的价值函数

  • 状态价值函数:Vπ(s)V^{\pi}(s)
  • 或动作价值函数:Qπ(s,a)Q^{\pi}(s, a)

Critic 的优化目标通常是最小化价值函数的均方误差(MSE):

L(ϕ)=Eπθ[(RtVϕ(st))2] L(\phi) = \mathbb{E}_{\pi_\theta}\left[\left(R_t - V_\phi(s_t)\right)^2\right]

其中:

  • Rt=k=tγktrkR_t = \sum_{k=t}^{\infty} \gamma^{k-t} r_k 为实际回报;
  • Vϕ(st)V_\phi(s_t) 为 Critic 网络估计的状态价值;
  • 参数 ϕ\phi为 Critic 的网络权重。

3. Actor 与 Critic 的交互过程

1️⃣ **状态输入:**智能体从环境中接收当前状态 sts_t

2️⃣ Actor 决策动作

  • 策略网络(Actor)根据当前状态输出一个动作分布:πθ(atst)\pi_\theta(a_t|s_t)
  • 从该分布中采样得到一个具体动作 ata_t

3️⃣ 环境反馈

  • 环境执行动作 ata_t 后,返回:
    • 奖励 rtr_t
    • 新状态 st+1s_{t+1}

4️⃣ Critic 价值评估

  • 价值网络(Critic)根据当前状态估计价值:Vϕ(st)V_\phi(s_t)
  • 同时可计算下一状态的价值预测:Vϕ(st+1)V_\phi(s_{t+1})
  • 得到当前动作的“经验回报”(即目标Q值):Qtarget(st,at)=rt+γVϕ(st+1)Q^{\text{target}}(s_t,a_t) = r_t + \gamma V_\phi(s_{t+1}) 引导式估计(bootstrapping)

5️⃣ 计算优势函数(Advantage)

  • 通过 Critic 的输出,计算动作的相对优劣:A(st,at)=Qtarget(st,at)Vϕ(st)A(s_t,a_t) = Q^{\text{target}}(s_t,a_t) - V_\phi(s_t)

    这个值表示“当前动作比平均水平好多少”。

6️⃣ Actor 参数更新(策略优化)

  • 使用优势函数指导 Actor 更新策略参数:θJ(θ)=E[θlogπθ(atst)A(st,at)]\nabla_\theta J(\theta) = \mathbb{E}\left[\nabla_\theta \log \pi_\theta(a_t|s_t) \, A(s_t,a_t)\right]

    A(st,at)>0A(s_t,a_t) > 0 时,该动作的概率将增加;反之减少。

7️⃣ Critic 参数更新(价值拟合)

  • Critic 通过最小化 MSE 损失函数来更新自身参数:

    L(ϕ)=(Qtarget(st,at)Vϕ(st))2L(\phi) = \left(Q^{\text{target}}(s_t,a_t) - V_\phi(s_t)\right)^2

    即让预测值 Vϕ(st)V_\phi(s_t) 更接近目标值 QtargetQ^{\text{target}}

8️⃣ 循环交互

  • 进入下一时间步 t+1t+1,重复整个过程。

1.8 总结
#

​ 强化学习是一种基于奖励反馈机制的自学习方法,其核心目标是通过交互学习最优策略。在现代人工智能系统(如 RLHF 框架)中,强化学习方法尤其在优化大语言模型(LLM)的行为策略方面发挥着关键作用。掌握强化学习的基础知识 —— 尤其是价值函数策略梯度Actor–Critic 架构 —— 是理解 RLHF 的前提条件。

2. GAE和重要性采样
#

2.1 GAE
#

1. TD 误差与基本优势估计

定义时间差分(TD)误差:

δt=rt+γV(st+1)V(st) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)

那么最简单的优势近似是:

A^t=δt \hat{A}_t = \delta_t

这就是 1-step Advantage Estimation。虽然方差小,但偏差较大。

2. n-step Advantage 与 GAE

​ GAE(广义优势估计,Generalized Advantage Estimation)由 Schulman 等人在 TRPO/PPO 中提出。它通过加权多步回报,在方差与偏差之间取得平衡

n步 TD 误差定义为:

At(n)=l=0n1(γ)lδt+l A_t^{(n)} = \sum_{l=0}^{n-1} (\gamma)^l \delta_{t+l}

比如:

  • n=1:只看一步(偏差大,方差小);
  • n=T:看整个序列(Monte Carlo,无偏但方差大)。

2. GAE 的核心思想

GAE 通过一个衰减因子 λ[0,1]\lambda \in [0,1],将所有 n-step 优势加权平均:

A^tGAE(γ,λ)=l=0(γλ)lδt+l \hat{A}_t^{GAE(\gamma,\lambda)} = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l}

或者用递推式写作:

A^t=δt+γλA^t+1 \hat{A}_t = \delta_t + \gamma \lambda \hat{A}_{t+1}

其中:

  • γ\gamma:折扣因子;
  • λ\lambda:平滑参数(控制偏差与方差权衡)。作用如下
λ 值行为说明
λ = 0等价于 1-step TD方差小、偏差大
λ = 1等价于 Monte Carlo Return方差大、无偏
0 < λ < 1折中方案(常用 λ=0.95)最佳性能实践值

2.2 重要性采样
#

在策略梯度中,我们希望最大化期望:

J(θ)=Eπθ[Rt] J(\theta) = \mathbb{E}_{\pi_\theta}[R_t]

但实际数据通常来自 旧策略 πθold\pi_{\theta_{old}},而不是当前策略 πθ\pi_\theta。为了重用旧数据,我们引入 重要性采样(Importance Sampling)

1. 重要性采样的基本原理

设有两个分布 p(x)p(x)q(x)q(x),如果我们只能从 q(x)q(x) 采样,但要计算 Ep[f(x)]E_p[f(x)], 则可以通过:

Ep[f(x)]=Eq[p(x)q(x)f(x)] E_p[f(x)] = E_q\left[ \frac{p(x)}{q(x)} f(x) \right]

这时 p(x)q(x)\frac{p(x)}{q(x)}称为 重要性权重(importance weight)

2. 应用于策略梯度

在策略梯度中:

θJ(θ)=Eπθ[θlogπθ(atst)At] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta}\left[ \nabla_\theta \log \pi_\theta(a_t|s_t) A_t \right]

但数据来自旧策略 πold\pi_{old},于是用重要性采样修正分布:

θJ(θ)=Eπold[πθ(atst)πold(atst)θlogπθ(atst)At] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_{old}}\left[ \frac{\pi_\theta(a_t|s_t)}{\pi_{old}(a_t|s_t)} \nabla_\theta \log \pi_\theta(a_t|s_t) A_t \right]

定义:

rt(θ)=πθ(atst)πold(atst)r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{old}(a_t|s_t)} 称为 重要性比(importance ratio)

3. PPO算法
#

具体算法介绍请看 零基础学习强化学习算法:PPO

3.1 PPO算法的背景与思想
#

在传统的 策略梯度方法(Policy Gradient) 中,我们的目标是最大化策略的期望回报:

J(θ)=Eπθ[Rt] J(\theta) = \mathbb{E}_{\pi_\theta}\left[ R_t \right]

更新方式为:

θJ(θ)=Eπθ[θlogπθ(atst)At] \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta}\left[ \nabla_\theta \log \pi_\theta(a_t|s_t) A_t \right]

但是这种直接更新有两个问题:

  1. 方差大 → 更新不稳定;
  2. 步长难控制 → 策略可能剧烈变化,导致性能退化。

于是,PPO 出现了:

它通过“约束策略更新幅度”来稳定训练, 同时结合 GAE 降低方差、结合 重要性采样 重用旧数据。

3.2 PPO核心目标函数
#

在 PPO 中,我们定义:

rt(θ)=πθ(atst)πθold(atst) r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}

这是 重要性比(importance ratio), 用于衡量新旧策略在同一状态下采取相同行动的相对概率。


原始目标(带重要性采样的策略梯度)

LPG(θ)=Et[rt(θ)A^t] L^{PG}(\theta) = \mathbb{E}_{t}\left[ r_t(\theta) \hat{A}_t \right]

其中 A^t\hat{A}_t 为优势函数估计(通常使用 GAE 计算)。


PPO 的关键创新:Clipped Objective

为了防止策略变化过大,PPO 引入“裁剪”操作:

LCLIP(θ)=Et[min(rt(θ)A^t,  clip(rt(θ),1ϵ,1+ϵ)A^t)] L^{CLIP}(\theta) = \mathbb{E}_{t}\left[ \min\Big( r_t(\theta)\hat{A}_t, \; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t \Big) \right]
  • rt(θ)r_t(\theta) 远离 1 时(即策略变化太大),更新会被裁剪;
  • ϵ\epsilon 是一个超参数(通常取 0.1~0.3)。

这样做能有效防止策略“走太远”,稳定训练。

3.3 GAE与PPO
#

PPO 仍是一个 Actor-Critic 结构:

  • Actor(策略网络) 更新基于 LCLIPL^{CLIP}
  • Critic(价值网络) 更新基于状态值误差。

其中 Advantage 使用 GAE 计算:

A^t=l=0(γλ)lδt+l,δt=rt+γV(st+1)V(st) \hat{A}_t = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l}, \quad \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)

GAE 优势:

  • 平滑优势估计;
  • 平衡偏差与方差;
  • 提高 PPO 策略更新的稳定性。

3.4 价值函数与熵正则项
#

PPO 的总损失函数通常包含三部分:

LPPO(θ)=Et[LCLIP(θ)c1(Vθ(st)Rt)2+c2S[πθ](st)] L^{PPO}(\theta) = \mathbb{E}_t[ L^{CLIP}(\theta) - c_1 (V_\theta(s_t) - R_t)^2 + c_2 S[\pi_\theta](s_t) ]

在实现中,定义损失为:

loss=LPPO(θ) loss=−L^{PPO}(\theta)

其中:

  • 第一项:策略目标(Actor 部分);
  • 第二项:价值函数损失(Critic 部分);
  • 第三项:熵正则项,用于鼓励探索(防止策略过早收敛);
  • c1,c2c_1, c_2 为权重超参数。

3.5 PPO 的训练流程(结合 GAE 与 IS)
#

Step 1:采样轨迹

从当前旧策略 πθold\pi_{\theta_{old}} 运行若干步,获得:{(st,at,rt,st+1)}\{(s_t, a_t, r_t, s_{t+1})\}


Step 2:计算优势函数(使用 GAE)

  1. 计算 TD 误差:δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)
  2. 递推得到 GAE:A^t=δt+γλA^t+1\hat{A}_t = \delta_t + \gamma \lambda \hat{A}_{t+1}
  3. 同时计算回报目标:Rt=A^t+V(st)R_t = \hat{A}_t + V(s_t)

Step 3:计算重要性比

rt=πθ(atst)πθold(atst) r_t = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}

Step 4:优化目标函数

最小化负的 PPO 损失(或最大化其相反数):

LCLIP=E[min(rtA^t,clip(rt,1ϵ,1+ϵ)A^t)] L^{CLIP} = \mathbb{E}\left[ \min(r_t \hat{A}_t, \text{clip}(r_t,1-\epsilon,1+\epsilon)\hat{A}_t) \right]

Step 5:更新网络

  • Actor:梯度上升最大化 LCLIPL^{CLIP}
  • Critic:最小化 (V(st)Rt)2(V(s_t) - R_t)^2
  • 更新旧策略θoldθ\theta_{old} \leftarrow \theta

循环执行以上步骤,直到收敛。

3.6 PPO 的两个常见变体
#

变体特点说明
PPO-Clip使用裁剪函数(最常见)稳定且计算简单
PPO-Penalty使用KL散度惩罚项控制新旧策略距离(但需调节系数 β)

PPO-Clip 的目标:

LCLIP=E[min(rtAt,clip(rt,1ϵ,1+ϵ)At)] L^{CLIP} = \mathbb{E}[\min(r_t A_t, \text{clip}(r_t,1-\epsilon,1+\epsilon)A_t)]

PPO-Penalty 的目标:

LKL=E[rtAtβDKL(πoldπθ)] L^{KL} = \mathbb{E}[r_t A_t - \beta D_{KL}(\pi_{old} \| \pi_\theta)]

3.7 常用超参数参考
#

参数含义常用值
γ折扣因子0.99
λGAE 衰减因子0.95
εPPO 裁剪范围0.1 – 0.3
c₁价值函数损失权重0.5
c₂熵项权重0.01
学习率优化器步长3e-4 (Adam)

3.8 总结
#

​ PPO = Policy Gradient + Importance Sampling + Clipping + GAE

​ 它在保持理论简洁性的同时,实现了高稳定性与强泛化能力,是当前最常用、性能最稳定的策略梯度算法之一。

4. RLHF框架
#

4.1 RLHF概述
#

RLHF(Reinforcement Learning from Human Feedback) 是一种结合了监督学习强化学习的训练方法,旨在让大语言模型(LLM)更好地符合人类偏好。其核心思想是:

通过人类反馈训练一个奖励模型(Reward Model),再利用强化学习算法优化语言模型,使其生成的回答更接近人类认为“好的”输出。

4.2 RLHF三阶段流程
#

1. 监督微调(SFT)

​ 在第一阶段,使用人工编写的高质量问答对(prompt–response)对基准语言模型进行监督微调。

​ 这一阶段的目标是让模型具备初步的对话能力和任务理解能力,为后续的偏好学习奠定基础。

输入: 人工标注的高质量问答数据集 输出: 监督微调后的初始模型(SFT Model)


2. 奖励模型训练(Reward Model Training)

​ 第二阶段引入偏好数据集(Preference Dataset)

​ 该数据集由基准模型生成多个回答,然后由人类标注者对回答进行两两比较,指出更优的回答。格式为 (prompt,chosen_response, rejected_response)

通过这种“偏好对比(Preference Comparison)”数据,可以训练一个**奖励模型(Reward Model)**,使其学会评估回答的优劣。

​ 这不是一个简单的回归(预测一个绝对分数),而通常是一个排序学习问题。最常用的损失函数是Bradley-Terry模型的对比损失: loss = -log(sigmoid(R(chosen) - R(rejected)))

​ 这个损失函数的核心思想是:最大化“被选中的回答”和“被拒绝的回答”之间的分数差。模型最终学会输出一个标量分数 R(prompt, response),这个分数代表了回答的质量。

输入: 偏好数据集(包含 prompt 及人类偏好排序的多个 response) 输出: 奖励模型 Reward Model,能够为任意 (prompt, response) 对打分

​ 奖励模型的输出通常是一个标量分数,表示该回答的“好坏程度”。该模型在强化学习阶段中充当“环境”的角色,用于提供奖励信号。


3. 强化学习阶段(Reinforcement Learning Fine-Tuning)

​ 在第三阶段,使用强化学习算法(如 PPO,Proximal Policy Optimization)优化语言模型,使其生成更高分的回答。

​ 这一阶段通常使用仅包含提示(prompt)的提示数据集(Prompt Dataset)

​ 训练过程如下:

  1. 模型根据 prompt 生成 response。
  2. 奖励模型对该 response 打分(即计算 reward)。
  3. 强化学习算法根据 reward 信号更新语言模型的策略参数,使得模型倾向于生成更高奖励的回答。

环境: 由提示数据集奖励模型共同构成。

智能体: 我们需要训练的模型(通常由SFT模型初始化),它的策略就是根据提示生成回答的概率分布。

动作: 生成下一个词元(token)。

状态: 当前的提示和已经生成的部分回答。

奖励: 当一个完整的回答生成后,奖励模型会给出一个奖励分数 R(prompt, response)

目标: 最大化奖励模型给出的期望奖励,使模型输出更符合人类偏好。

4.3 强化学习优化算法
#

在强化学习阶段,常用的算法包括:

  • Policy Gradient(策略梯度):通过梯度上升最大化期望奖励;
  • PPO(Proximal Policy Optimization):一种改进的策略优化算法,能够在稳定性与性能之间取得平衡,因而成为当前主流的RLHF优化方法(如ChatGPT使用的)。

4.4 总结
#

​ RLHF框架的核心思想是将人类偏好引入模型优化过程。 通过“人类反馈 → 奖励模型 → 强化学习”三阶段机制,语言模型不仅学习语言规律,更学习“人类认为好的”回答方式,从而在开放式任务中展现出更自然、更符合人类预期的行为。

5. InstructGPT
#

5.1 摘要与背景
#

​ 传统大规模自回归语言模型(GPT 系列)用下一个 token 的似然作为训练目标(无监督 / 自监督),因此,模型输出的“好坏”高度依赖训练语料的分布与质量,在“服从用户意图、真实与无害”这类目标上存在明显错配(misalignment)。为了解决这一点,作者提出用人类偏好(human preference)作为监督信号来微调模型,使模型“更会听指令、更真实、更少有毒内容”。

5.2 核心思想
#

​ InstructGPT 的核心是 RLHF(Reinforcement Learning from Human Feedback)三步流水线

  1. SFT(Supervised Fine-Tuning):人工编写/演示式示例(labeler demonstrations)对 GPT-3 进行监督微调,使模型初步“学会”如何按指令产出。
  2. RM(Reward Model)训练:对不同模型产出的若干候选回复,由人工对这些回复进行排序(ranking);训练一个模型 rθ(x,y) 来预测人工偏好(即哪个回复会被人工选为更好)。
  3. RL(PPO)微调:以 RM 的输出作为 reward,使用 PPO 对 SFT 模型进一步微调;为了防止策略漂移过大,在每个 token 上加入与 SFT 模型的 KL 惩罚(或把预训练梯度混入,见 PPO-ptx)。

创新点:

  1. 将"人类偏好"量化为可优化的目标函数
  2. 将复杂的价值观判断分解为可学习的奖励信号
  3. 在保持语言能力的同时优化对话质量

5.3 数据集:来源、格式与规模
#

​ 数据来源分为两类:labeler-written(由标注员构造的指令/示例)customer/API prompts(用户在 Playground 提交的真实提示)。论文把用于三类训练的集合列出(以“prompt 数目”计):

  • SFT 数据集(问答指令数据集)
    • train — labeler:11,295
    • train — customer:1,430
    • valid — labeler:1,550
    • valid — customer:103
  • RM(Reward Model)数据集(偏好数据集,用于训练排序模型)
    • train — labeler:6,623
    • train — customer:26,584
    • valid — labeler:3,488
    • valid — customer:14,399
  • PPO(RL)数据集(提示数据集,用于 RLHF,通常只用 customer prompts)
    • train — customer:31,144
    • valid — customer:16,185

其他数据相关要点:

  • 对每个 prompt,标注员会对模型生成的 K 个候选回复(K≈4–9) 做排名(ranking),这样会产生 up to K*(K−1)/2 对比较对,用于 RM 的训练。为了避免过拟合,论文对比较对做了特殊的批处理策略(把一个 prompt 的所有 K 个回复作为一个 batch 单元来训练 RM)。
  • 标注团队约 40 名承包标注员(contractors),通过筛选测试选出,以保证对“有害/有偏见内容”的敏感性和偏好判定的质量。

5.4 模型与训练目标
#

SFT(监督微调)

  • 用标注员示范(prompt → 人工写好的理想回复)做 标准的交叉熵监督训练,得到 SFT 基线模型( πSFT\pi_{SFT} )。

Reward Model(RM)的损失(pairwise ranking loss)

  • RM 的目标是给出一个标量评分 rθ(x,y)r_\theta(x,y),使得被人工偏好(更好的回复)在评分上高于被舍弃的回复。论文采用成对排序的 logistic(pairwise)损失,形式为(论文公式):
L(θ)=E(x,yw,y)D[logσ(rθ(x,yw)rθ(x,y))] \mathcal{L}(\theta) = -\mathbb{E}_{(x,y_w,y_\ell)\sim D}\left[\log \sigma\big(r_\theta(x,y_w)-r_\theta(x,y_\ell)\big)\right]

其中 ywy_w 是在一对中被标注为“更好”的回复,σ\sigma 为 sigmoid。直观上,这个损失推动 RM 使得被偏好的回复得分更高。论文在实现上把对同一 prompt 的 K 个回复一起作为一个 batch 元素来避免过拟合并加速。


RL(PPO)阶段的目标(带 KL 惩罚的期望 reward)

  • 用 RM 的标量 rθ(x,y)r_\theta(x,y) 作为 reward,使用 PPO 对策略 πRL\pi_{RL}(基于 SFT 初始化)做 max-reward 的强化学习。为避免模型为了追求 reward 而产生极端/不可控输出,加入 每个 token 的 KL 惩罚项(相对于 πRL\pi_{RL},并且论文还提出将预训练(pretrain)目标的梯度混入 RL 更新(称为 PPO-ptx),总体目标可以写成(论文给出的合并形式):
J(ϕ)=E(x,y)DπRLϕ[rθ(x,y)βlogπRLϕ(yx)πSFT(yx)]  +  γExDpretrain[logπRLϕ(x)] J(\phi)=\mathbb{E}_{(x,y)\sim D_{\pi_{\text{RL}}^\phi}}\Big[ r_\theta(x,y) - \beta\log\frac{\pi_{\text{RL}}^\phi(y\mid x)}{\pi_{\text{SFT}}(y\mid x)}\Big] \;+\; \gamma\,\mathbb{E}_{x\sim D_{\text{pretrain}}}\big[\log \pi_{\text{RL}}^\phi(x)\big]
  • 解释:第一项是期望 RM-reward 减去 β 倍的 KL(以 log 比例表示),第二项(系数 γ)是把预训练 log-likelihood 加回去以减轻 RL 导致的“性能回退”(alignment tax)。

5.5 训练流程
#

总体步骤:SFT → 收集候选回复与人工排序 → 训练 RM → 用 RM 做 reward,对 SFT 用 PPO 微调(可选混入 pretrain 梯度)。

详细流程与实现细节(论文中给出的关键点):

  1. 收集 prompt 与演示:从 InstructGPT Playground 的用户 prompt(customer)与标注员编写的 prompt(labeler)混合构成数据集;标注员为每个 prompt 编写示范回答(SFT 数据)。
  2. SFT 训练:用标注员示范训练 SFT 模型(cross-entropy)。
  3. 生成候选并做 ranking:用多种策略(不同 checkpoint /温度等)生成 K 个回复,标注员对 K 个回复做完整排序(K≈4–9),得到比较数据。论文采用将同一 prompt 的所有 K 个回复作为一个 batch 元素来训练 RM,能避免过拟合。
  4. 训练 RM:训练单一 6B reward model(论文最终选择用 6B RM,因为 175B RM 虽然在验证集上 loss 低但训练不稳定、计算成本更高),RM 用上面的 pairwise loss 训练(一般训练 1 个 epoch,lr ≈ 9e-6,batch size 64,训练对 epoch 很敏感,过多 epoch 会过拟合)。 RM 的初始化:用一个 6B GPT-3(在若干公开 NLP 数据集上 finetune 的 checkpoint)来初始化。
  5. PPO 微调(RLHF):把 RM 输出作为即时 reward 的 bandit 环境(每条交互是一个 prompt → single reply,episode 立即结束)。用 PPO 对策略进行优化,同时在 reward 中加入 每 token KL 惩罚(系数 β),并可选地把预训练 loss 的梯度混入(系数 γ,得到 PPO-ptx)以减轻在某些公共 NLP 任务上的性能回退。论文中 value-function 也用 6B 初始化并被用于 advantage 估计。

超参数/工程要点(论文中提及)

  • RM 训练:单 epoch,lr≈9e-6,batch=64;太多 epoch 会快速过拟合。
  • 对所有 PPO 模型都使用同一个 6B RM 与 6B value function(便于比较不同 policy model 尺寸的效果)。具体 policy 的 value learning rate:1.3B/6B 用 9e-6,175B 用 5e-6(论文给出实验细节)。

5.6 实验结果
#

人类偏好(primary claim):在作者的 API prompt 分布上,标注员显著更喜欢 InstructGPT(经过 RLHF 的模型)输出。甚至 1.3B 的 InstructGPT(PPO-ptx)在他们的测试集上比 175B 原始 GPT-3 更受偏好(也就是说,微调与对齐带来的质量提升可以超过单纯“更大模型参数量”的提升)。此外,175B 的 InstructGPT 比 175B GPT-3 优胜约 85% ± 3%,相比 few-shot 175B GPT-3 优胜 71% ± 4%

真实性(TruthfulQA)与杜绝 hallucination:在 TruthfulQA 基准上,InstructGPT 生成既真实又信息性的回答出现频率约为 GPT-3 的 2 倍;在“闭域任务”(输出不应包含输入中不存在的信息)中,InstructGPT 的编造(hallucination)率约 21%,而 GPT-3 为 41%

毒性(toxicity):使用 RealToxicityPrompts 做自动与人工评估,InstructGPT 在“被提示要尊重他人”的条件下生成的有毒回复 减少约 25%。在偏见(bias)评估(例如 Winogender、CrowS-Pairs)上并未显著好转。

性能退化(alignment tax):直接用 RLHF 可能会在某些公共 NLP 基准(如 SQuAD、DROP、HellaSwag、WMT 翻译)上出现回退;论文提出通过将预训练梯度混入(PPO-ptx)可以在不牺牲偏好得分的前提下显著降低这种回退。

5.7 局限性与讨论
#

偏好是“有界”的:RLHF 将模型对齐到特定标注员(约 40 人)的偏好集合,这 并不等同于普遍的人类价值;不同群体/不同标注员偏好可能不同,模型如何在更广泛的人群上泛化仍需研究。

RM 与 reward hacking 风险:RM 只是对人工偏好的近似,RL 阶段可能出现对 RM 的过度优化(并非真实的“更好”),因此论文采用 KL 惩罚与其它工程手段来缓解,但长期来看这是一个研究难点。

不彻底解决事实性与安全性问题:尽管在 TruthfulQA 和毒性上有改善,但 InstructGPT 仍会犯错、编造事实或在某些任务上表现不佳。论文把这当作未来工作方向。

5.8 结论
#

InstructGPT 的关键贡献不是提出全新的模型架构,而是展示了 用人类偏好来微调大型 LM(RLHF)是一个可行的、在实用上效果显著的对齐路径:能显著提升“按指令回答”和“更可信 / 更少有毒”这类行为,且在某些情况下,参数更少但经过 RLHF 的模型优于更大的未对齐模型。

三步流程(SFT → RM → PPO)是工程上可复现的管线;关键实践包括:用合适的 batch & ranking 策略训练 RM、用 KL(或 pretrain-mix)限制 RL drift、用单一稳定的 6B RM 作为所有策略的 reward 模型以降低不稳定性与计算开销。

参考:

RLHF框架

强化学习算法:Policy Gradient

强化学习算法:PPO

LLM 系列超详细解读 (四):InstructGPT:训练语言模型以遵从人类指令

InstructGPT 论文精读