Reinforcement Learning1-RLHF
RLHF
参考文献
Papers
从传统的策略方法开始
基于策略的强化学习用参数化概率分布
目标函数——最大化reward:
其中
其中,特定的轨迹
- 策略
:在状态 下,agent有多大概率选择行为 - 状态转移概率
:在状态 下,进行行为 后,环境有多大的概率转移到状态
进行求导:
由蒙特卡洛方法来近似梯度,采样
最后,有参数更新公式:
因此,有算法:

一些进一步的设计
回合制奖励
若是可以简化奖励形式为回合制,
未来总奖励
定义
如果我们考虑因果关系,那么第
则有:
其中,通过倒序计算的方式计算
自然策略梯度算法
传统梯度下降算法:
其局限性:
- 参数
的小幅度变化会导致策略 的小幅度变化,但是这个前提是 处在欧氏空间,往往 并不处于欧氏空间中 - 所以参数
的小幅度变化很可能会导致策略 的剧变 - 在强化学习中,对于这个事情非常敏感,若是更新错过了奖励峰值并落入了次优策略区域,那么未来的样本批次可能不会提供太多有意义的信息,导致模型陷入了糟糕的正反馈中从而崩溃
- 适当调小
或许可以缓解这个问题,但是 的设定非常困难,且 过小会导致更新收敛极其缓慢
所以,一个很直觉的事情是,我们需要在限制策略变化量的条件下,最大化奖励
对于
所以目标转换为:
对于限制条件
对这个泰勒展开式进行计算:
将其求一阶导得:
将
由于
将其求二阶导得:
令
对
使用Fisher矩阵可以大大减少计算量
所以,原式变为:
那么原优化问题就转化为:
由拉格朗日乘子法,构造拉格朗日函数:
对
解得最优更新方向为:
令
所以:
其中,
更新规则替换为:
TRPO (Trust region policy optimization)
自然策略梯度算法仍然有以下的问题:
- 步长难以进行确定
- Fisher矩阵的计算成本过高
TRPO 试图寻找一个步长,确保每次更新后的表现一定比之前好
所以,我们尝试采用原策略预期回报添加新策略预期优势的方式来度量更新前后的表现差异:
其中,优势函数定义为:
- 降低方差使得梯度的方向更加稳定
- 解决“全正奖励”问题,从而做到抑制低于平均水平的动作,而不只是抑制负奖励动作
引入状态的折扣分布,
引入近似误差,使用当前策略近似更新策略:
进行重要性采样:
:从旧的经验池里取数据 :重要性权重,衡量了“如果用新策略代替旧策略,这个动作出现的可能性变大了还是变小了” :优势函数,衡量这个动作相对于平均水平是好还是坏,其中前一项是Q-Function,而后一项是通过引入一个价值模型评估当前状态的价值
则定义替代优势为:
单调改进定理
定义两者之间的误差项:
误差可以写为:
第一项
由折扣分布:
写成矩阵形式为:
是初始状态分布 是状态转移矩阵,其元素
求和得:
所以有:
对等式两边取范数:
对于
利用
对于
所以有:
第二项
注意到在旧策略下,优势函数的期望为零,即
那么第二项可以改写为:
令
则总的式子:
其中,
为了方便优化,我们将总变差距离
所以有:
那么:
所以,我们得到定理:
现在,我们可以找到一个下界函数
只要我们能找到一个新策略,使得
所以说,这是一个理论保证,保证了模型理论提升的下界,并且可以将其用于“改进检查”,至于具体的算法,仍然使用自然梯度法,只是有所改进
自然梯度法改进
优化问题为:
解得:
其中,
更新规则为:
改进1: 共轭梯度法
观察到,我们要算的都是
具体算法如下:
初始化:
, 残差 , 搜索方向循环:
- 计算
- 计算步长
- 更新解:
- 更新残差:
- 更新搜索方向:
- 计算
如此方法,经过有限常数次之后即可收敛
令
对于
这样第一步可以计算:
第二步可以计算:
这样的话,这个部分的时间复杂度就从
综上来说,时间复杂度从
改进2:回溯线性搜索
从最大步长
不断尝试减小步长
检查条件1——性能提升:
检查条件2——约束满足:
一旦满足条件,立即更新
PPO (Proximal Policy Optimization)
TRPO在计算上尽管已经实现了一定的优化,但是TRPO仍然过于复杂,且兼容性差
所以我们希望避免复杂的二阶计算方式,通过一阶计算(约束)来模拟实现类似的“信任区域”的效果
首先,对于TRPO来讲,有一个根本上的优化目标:
PPO角度1:自适应 KL 散度惩罚系数(Adaptive KL Penalty Coefficient)
利用多轮小批量随机梯度下降,优化如下带 KL 惩罚的目标函数:
计算实际 KL 散度:计算
自适应调整
- 如果
,则减小惩罚: - 如果
,则加大惩罚:
更新后的
PPO角度2: 剪切目标函数 (Clipped Objective)
- 公式
通过将比率限制在 之间,移除了当比率超出该区间时继续优化目标的动力 - 只有在概率比率的变化会让目标函数变好(增加收益)时才忽略多余的变动,而当变动让目标变差时,我们依然会保留这些变化

- 优势为正 (
):目标函数在 时进入平台期,防止策略过度偏向某些动作 - 优势为负 (
):目标函数在 时进入平台期,防止策略因过度惩罚某些动作而崩溃
实际算法
结合上面的讨论,我们得到了如下的目标函数:
其中:
是超参数 表示熵奖励(鼓励探索) 是均方误差损失 , 的产生方式大概有如下两种:- Rewards-to-go:计算从
时刻开始到序列结束的所有折扣奖励总和, - TD 目标:结合当前的优势估计,
- Rewards-to-go:计算从
具体实现而言:
运行策略
将这一选择进行推广,我们可以使用广义优势估计:
其中
具体算法如下:

PPO算法是典型的Actor-Critic Style架构,需要训练一个策略网络,一个估值网络
RLHF:传统PPO算法在LLM中的具体应用形式
SFT
在下游任务上,用高质量数据集使用监督学习微调预训练好的大模型,由此获得模型
奖励建模阶段
使用 SFT 模型 对提示词
假设人类的这种偏好背后隐藏着一个潜藏奖励模型
引入 Bradley-Terry (BT) 模型,人类认为
假设有一组标注数据
由最大似然估计:
训练后,为了确保奖励信号的稳定性,常常对奖励值进行归一化处理,使得奖励总期望为0:
在大模型当中,具体实现过程也有一定的特点:
- 初始化:直接复用 SFT 模型的参数作为起点
- 改动:移除原有的输出层,在 Transformer 的最后一层之上添加一个 线性投影层
- 输出: 最终输出一个标量值代表得分
RL微调阶段
四个组件:
| 模型 | 记号 | 是否训练 | 核心作用 |
|---|---|---|---|
| Actor (策略模型) | ✅ | 生成回答,被 PPO 更新 | |
| Reference | ❌ | 约束 Actor 模型 | |
| Reward Model | ❌ | 给完整回答打分 | |
| Critic (估值模型) | ✅ | 估计期望回报,降低方差 |
计算流程
- Actor模型进行采样
先给定 prompt
- Reference模型计算 KL 约束项
Reference模型是一个冻结的SFT后的模型:
KL惩罚如下:
- Reward模型给最后的、针对于完整回答的奖励:
- 在token-level上构造reward:
训练目标
Actor模型的训练目标
对于估值模型来说,我们希望它能够做到如此预测:
那么就有优势函数:
根据传统的PPO Objective:
其中,
那么Actor模型的训练目标就变为:
Critic模型的训练目标
自然地,估值网络的训练目标变为:
估值网络的存在价值
若是不是估值网络,其梯度公式则变为:
从理论上来说,这是完全正确的
但是在 LLM + RLHF 场景下:
- 序列极长:
- 奖励稀疏: 真正的奖励几乎只出现在最后一步
- 惩罚耦合: KL 散度惩罚项强烈耦合整个序列
这导致
所以,我们引入一个只与状态有关,与动作无关的基准值
因此梯度改写为:
显然,使得方差最小的值是:
这正是价值函数希望学得的





