0%

后训练之名词解释

认识陌生名词。

以下内容是我个人笔记,用来反复回忆重要名词的,也着重记录了一些数学的推导过程。

(但是,名词之间的逻辑关系较弱,可能不太适合初学建立知识体系。)


Exposure Bias:暴露偏差

Compounding Errors:误差积累

强化学习的目标:

RLHF 的策略优化目标函数(带 KL 惩罚):

上式中

是单个蒙特卡洛样本估计项。而上式的最优化闭式解是:

也可以简写为:

最优化闭式解中,常有 $Z$ 是归一化常数,

所以也可以记为:

最优化闭式解证明

固定输入 $x$,将目标函数写成:

概率分布需要满足归一化约束:

构造拉格朗日函数:

对 $\pi(y\mid x)$ 求偏导:

令偏导等于零:

整理得:

两边取指数:

由于

与 $y$ 无关,所以它可以作为归一化常数。定义:

最终得到:

也就是:

对应的最优目标值为:

这里的闭式解针对的是最优概率分布 $\pi^*$,而不是神经网络参数 $\theta$。参数化语言模型的最优参数

通常没有闭式解,需要使用 PPO 等数值优化方法近似求解。


Full KL:比较教师和学生在完整词表上的概率分布。$q$ 是教师:

Top-K KL:只比较教师概率最高的 $K$ 个 token。在 Top-K 内重新归一化后计算:

Sampled-token log-ratio:比较 rollout 中实际采样到的 token,

PG-style objective:使用策略梯度形式训练,

重要性采样比:

SFT:监督微调,$x$ 为输入,$y$ 为回答,

GKD:广义知识蒸馏,2306.13649

PPO:近端策略优化。

优势函数:

广义优势估计:

其中 $\delta_t$ 是 TD error 时序差分误差:

GAE 为什么可以估计 Advantage?

Advantage 是

对于固定的 MDP 和策略 $\pi$,$A^\pi(s_t,a_t)$ 是一个确定的真实量。

GAE 是根据随机采样轨迹得到的随机估计量,

即:

若 $V=V^\pi$ 时,$\delta_t$ 本身就是 Advantage 的无偏估计。令:

对 $s_t,a_t$ 取条件期望:

因此:

而,未来的 TD residual 的条件期望为 0。首先:

而:

所以:

这是因为:

因此,在 Markov 环境并且后续动作按照 $\pi$ 采样时:

因此,

即:

另一个视角,GAE 的另一个本质:多个 $k$-step Advantage Estimator 的加权平均。定义:

它也可以写成:

例如:

GAE 等价于:

因为:

当 $V=V^\pi$ 时,对于任意 $k$:

所以 GAE 是一组无偏 estimator 的加权平均,因此:

实际真实训练中,是神经网络,

而不是精确的:

因此,

GAE 在实际情况下可能有 bias。


PPO 的 surrogate objective,式子中,CPI 代表 Conservative Policy Iteration:

加入 clipping 限制,得 PPO 的 clipped objective:

为什么 PPO surrogate 是正确的?

TL;DR:PPO surrogate 在旧策略处提供与原 reward objective 相同的 policy gradient。

  • PPO 的基础 surrogate objective 为:

  • 在旧策略处:

  • 对 surrogate 求梯度:

  • 又因为:

    所以在旧策略处:

  • 根据 Policy Gradient Theorem:

  • 因此:

  • PPO-Clip 在旧策略处有:

    此时尚未触发 clipping,因此局部上:

    从而:

综上,PPO surrogate 与真实 return objective 在旧策略处具有相同的一阶梯度。

surrogate 在旧策略附近是原目标的合理局部替代。

但离旧策略远时,局部一致性越不能保证。

因此需要 clipping 或 KL constraint / penalty 限制策略更新幅度。

可以用代理目标代替真实 return objective 做局部优化。前提:proximal。要让新策略保持在旧策略附近。

此前提是 PPO 的名字。


surrogate objective:替代目标函数。常常:重要性采样、局部有效的一阶近似。

policy gradient 目标:最大化期望 reward,

经典 REINFORCE 的梯度:

由于自回归分解(autoregressive factorization):

所以:

上式是,只有一个最终 reward $R(y)$ 的 vanilla REINFORCE 中,同一个最终 reward 会作用于整条轨迹上的所有 token。

一般 vanilla REINFORCE 用 $G_t$,定义 $G_t$,

使用 return $G_t$,得到 reward-to-go 形式的 REINFORCE 梯度:

为什么可以把整条轨迹的 return R 换成 G?

对于第 $t$ 步,整条轨迹的 return 可以拆成:

因此:

可以写成:

其中,第 $t$ 步之前的 reward 在选择当前动作 $a_t$ 之前就已经发生,因此给定 $s_t$ 后,它们不依赖当前动作 $a_t$。

注意对于任意不依赖当前动作 $a_t$ 的量 $C$,都有:

这是因为:

因此下式中期望贡献为 $0$:

所以:


而 baseline $V(s_t)$ 定义 Advantage:

于是: