较难无痛的各种PO眼保健操:VPG TRPO PPO DPO GRPO

Intro

本文旨在以或数学或物理或ML的「直觉」+ 少量关键位置的精确数学推导来描述我所理解的Policy Gradient系列常用于大模型后训练的RL算法。
在学习本文资料之前,本人没有任何的强化学习背景,有一些不厉害的统计学与计算机科学背景。对于本文所引用的资料学习难度,对本人来说属于不伤脑的极限状态,偶发一些完全超出知识体系的内容就当语文书背了算了。
本文的主要知识脉络来源于OAI此教程(https://spinningup.openai.com/en/latest/user/introduction.html
其他引用paper
 

Basement Problem in RL

强化学习的基本问题假设与符号约定见OAI教程,本文不再重复 建议先阅读此处Introduction的三个部分: https://spinningup.openai.com/en/latest/spinningup/rl_intro.html
notion image
强化学习讨论的是一个跟交互有关的问题。
以下围棋为例,Agent(棋手),Environment(对手)。从棋手本人视角,根据盘面( )思考下一个落子的地方( ),对手会根据新的盘面落子;对手落子完毕,对棋手本人,会获得一个新的盘面( )。而如果这个时候有一个围棋上帝,他算尽了所有的盘面,告诉棋手刚刚的 给他带来了多少胜率的增加( 假设就是胜利结局除以总结局的比例,只是其中一种 的表达方式 );那么经过足够多的训练数据后,理论上就拥有了一个输入 ,能够输出正确的 ,以获得更高的 的模型;输入 ,输出 的模型就叫做策略模型policy或者
Policy Gradient的方法就是通过建模这个学习过程,然后通过找出梯度向量来提升目标函数。
其中,有一些可以前置思考的点
(1) 这样的值从样本数据中获得的跟「ground truth」也许非常遥远。比如战争游戏等带有迷雾/信息不全特征的interaction loop,我们只能获得一个观察(observation),是 的一个在低维空间上的投影。而 ,在真实世界里,甚至是不可能获得的,只能通过一类统计函数,想方设法表达出来。当然,如果有围棋上帝,那么他可以通过minimax树的计算来表达棋手的落子跟最佳点的落子之间的胜率差,这可以认为是一种「ground truth」。
(2)没想好

VPG:Vanilla Policy Gradient

J函数的定义

用语文话来说就是,在Policy Gradient的框架下,我们求解的目标是获得一个在样本数据下的最优策略 是环境的状态空间, 是action空间。训练必须要有监督信号,有一个标量函数定义 的好坏,这个函数就是
类比下围棋,一盘棋谱是有一个轨迹( )生成的,轨迹的元素是 ,即状态→行动→新状态loop的过程。这个轨迹可以视为对 的一次采样。对于某一个特定的轨迹来说,从 采样出来的概率是 ;同时 由每一次action决策与环境状态转移概率的连乘共同决定。即:
notion image
每一条完整的轨迹,我们都可以通过一些不同的统计函数对其定义reward,也就是
从整体样本空间的角度,评价具体的 的好坏,就是对 概率分布的期望,即
下棋来说,就是AI下棋,一盘下得很臭,两盘下得很好,如何评估?首先,随机性来源于自身的策略 存在采样(模型输出分布,随机采样根据分布决定action),以及 也有随机性。下得臭的棋局对AI来说,他的出现概率是可计算的,而下得好的棋局同样。因此,同样是两胜一负,如果一个策略函数 生成臭棋的概率小,另一个 生成臭棋的概率大;在同样的三个reward计算中, 就是远好于对方的策略。公式来说就是
notion image
再换一句话,我们可以认为,环境是客观存在的一种概率分布,这种客观包括状态转移,以及对状态的奖励。Policy Gradient的行为是在客观存在的奖励体系中,找出一个贴合奖罚分布的决策机制,使得采用高奖励的动作概率更高,低奖励的动作概率更低。
 

J函数对 的梯度

notion image
原始Policy Gradient的精华就是以上的推导过程。
其中我认为最重要的是第三步,使用Log-derivative trick,将「概率分布的梯度」转换为「概率和log概率分布的梯度的乘积」。
首先,这一步是统计、机器学习中的常用技巧,来源于求导的基本公式
是我们的老朋友了,几乎所有的机器学习模型都是在学习log likelihood的梯度。
除了数值计算上的便利,这一变换更深远的意义在于,在原始公式中的 的求导,是一个混合环境概率的连乘公式。而环境概率这一值,我们大多数情况下是无法获得的。而取了log之后,将连乘转变为连加,将与 无关的项变成了单独的项,不再是必须得系数。再取梯度后,这些讨人厌的不知道怎么找的数据都消失了。
notion image
notion image
从这个公式出发, 就是log策略概率的梯度的和,可以通过样本计算到得的。
 

降低variance的过程

从统计性质上说,上文得到的 的梯度的无偏估计的一种,评价梯度的好坏除了无偏是一个必要条件外,稳定性/收敛速度也是很重要的。这就需要降低梯度的variance来提高迭代效率。
 
第一个显然的insight是对于 ,原始定义是整条链路的reward之和,也就是以下的公式。这显然不合理,我们不能用过去发生的奖励来“鼓励”之后执行的决策。举个例子,围棋手布局下得很好,前序的state让他有了很大的优势;中期打了个大勺让对手差点反败为胜。棋局最终是赢的, 的绝对值,不会特别地小,但这不能反应这局棋在前后期决策质量上的分布差异。前序的action我们应该给它很高的reward,后序的臭棋我们应该给它很低的reward,而不是被前序“平均”掉,认为后序手其实“还行”。这样模型就不会在这局棋中学坏。换言之,我们要学习的是单纯地根据state做出action的平均后果,而不是如何复现整个的轨迹。
notion image
notion image
修改后的梯度公式,赋予了奖励系数时序性,避免了奖励的后向“泄露”。同时,在数学上可以证明,该梯度的期望依然是无偏的,而且variance更小。
 
第二点,沿着这个路径,我们会发现,梯度的variance的来源就是奖励系数,这个跟 无关的常量。前文说到,奖励本身存在一定的概率性和可能的由计算定义带来的方差。减去一个跟 无关的,只跟 有关的函数,就可以减少方差。而可以证明 的最优选择是 ,即后序的奖励和的期望。这个证明我不会,但结论是需要引入一个模型预估 ,也就是PPO里常说的critic Model;而 函数就是reward model。
notion image
 

TRPO: Trust Region Policy Optimization

TRPO的标准形式是长这样的:
notion image
 
TRPO中的TR(Trust Region)来自公式中 的KL散度的约束。文中定义这样一个约束,通过一系列证明和推导(暂时不大看得懂)以确保对 的更新,能够使得performace function(文中是类似J函数的一个目标)的值是增加的。
 
而从新定义的目标函数 ,是在梯度上和原始形式等价的,称为surrogate objective function的形式。也是通过一系列看不太懂的过程中推导出来的。
其实第一次看到 的形式是在deepseek的paper中关于GRPO的论述。当时硬看公式的一个理解是跟“学习率”相似的一个值。而这个学习率是一个分布,通过对优势函数的提升比例的分布来学习到更好的策略。这样相比原始形式,对了一个“对比”的含义,确保了“总的来说,在 的邻域”内,比老策略好。
 
TRPO的求解是又一个比较复杂的问题。这里面运用了三个基本的数学技巧(1)泰勒展开(2)拉格朗日对偶法,求强对偶问题的解 (3)共轭梯度法求海森矩阵。最终求得了一个更新 的近似解析解。
 
(1)泰勒展开
notion image
KL divergence的展开第一项为0,应该展开到第二项,因此引入了KL divergence对 的二阶梯度信息,即Hessian Matrix。
近似展开后,问题形式变换成以下:
notion image
(2)拉格朗日对偶
在解凸问题时的常用手段,得到 的解析解
notion image
(3)共轭梯度法
由于直接求解 参数量的平方。因此引入共轭梯度法来迭代求解 替代值。
 

最终算法

 
notion image
最终的TRPO Algorithm如上。
是从样本中计算的策略梯度,与VPG是一样的。其中 ;Q值从样本的 中来,V函数从样本的 中来。
是通过共轭梯度法求解到的替代求解 的近似值。
的更新中,相比解析解的公式,增加了一个调节超参 ,是因为解析解是近似地从泰勒展开而来,需要可调节的参数调整方差。
的参数,是一个MSE问题。
 
 

PPO:Proximal Policy Optimization

PPO在我看来是VPG和TRPO两者结合的一个经验公式。没有太多的数学道理,简单实用。重新定义了目标函数,看似复杂其实非常简洁,就是在TRPO目标函数的基础上,加上了clip + min的裁剪。
notion image
TRPO的理论看似高深美妙,但实用有以下缺陷:实现复杂;需要计算二阶梯度信息。
从过往经验来看,漂亮的理论都胜不过Adam这样的一阶方法。可能就是一阶方法小步快跑比较“有机会”鲁棒,而最优化方法对数据/分布的假设太强,容易在实践中被打破。
 
PPO从公式来说,就是将新旧策略的概率比,控制在 ]之间。物理含义是,如果新策略距离旧策略太远,他“提升过多”或“降低过多”的奖励,就会被减少权重。
 
KL Divergence是一种偏硬的正则措施,且为了求解KLD,二阶泰勒展开会引入二阶导。clip并不在更新结果上限制新旧 的分布距离,而是在奖励的监督信号上对「过分的更新」做惩罚。同时,PPO的 相比 TRPO的 ,提供了更容易理解的超参物理量。
 
另外,一阶SGD方法也提供一个便利。在TRPO中,我们一个网络只能解决一个问题,需要通过解析解更新Policy Network,需要通过 的MSE估计 作为降方差的baseline。一阶方法可以通过混合的多头loss,同时给Policy Network和Reward Model提供梯度。即:
notion image
下图为PPO-Clip Algorithm
notion image
 

DPO: Direct Preference Optimization

DPO的Direct体现在,他没有采用Policy Optimization这一套强化学习的建模;这个PO其实不是PO。而是在大模型后训练上引入了类似对比学习的框架。
notion image
DPO的公式非常直观,也有明确的物理含义
notion image
忽略paper中一大堆论证过程,从「直觉」上来说。
公式中的第一项相当于
A和B的含义是win/lose数据在待优化策略上的比特信息,两者相减是一种类KL散度的度量;最大化A-B或最小化B-A,就是梯度的来源。
为什么不直接优化比特信息的二重差分,而是还要套一层sigmoid变成概率?
其中一个角度是,我们拿到的label是一个偏好分布坍缩后的真值,并不是比特信息的能量差。第二个角度上sigmoid函数的梯度能够防止数值优化上的问题。二者从底层来说似乎是一致的,指向了人类偏好的选择服从统计物理中的玻尔兹曼分布。或者GPT告诉我这叫做「二能级系统的占据概率公式」。
 
而从数据收集/数据质量的维度考虑,相比Reward数据,DPO所需的数据在单人评估上,潜在标准更加一致;监督信号的噪声更小,数据更易收集。

GRPO: Group Relative Policy Optimization

 
回到PPO的算法问题,我们收集到了一个带人类评分的偏好数据集,如:
第一,数据集制作需要时间,第二数据集的是在同一个Policy(LLM)上求解的,算法又要考虑新策略与旧策略的距离度量不宜过大。
 
GRPO提出了一个在一类任务上的无需打标的更加on-policy的策略梯度方法。
notion image
notion image
其中,总的来说GRPO的surrogate object形式与PPO是一致的。在样本数量上,对单个Prompt上做了扩展。PPO是在原始策略上,用一个prompt( ),生成response( ),交给人类打分( );GRPO是,用一个prompt( ),采样生成 个response( ),每个输出交给规则打分( )。同时参与训练的reward,不再是PPO中 的绝对值,而是 相对同源response组的归一化相对值。
从两个「直觉」角度解析。第一,组内相对优势就是「提拔」模型求解空间中,「做对」的部分,提高其相对优势的概率分布;第二点,相比类PPO的 的优势函数,计算的是「某一个动作」发生时的「样本观测到的动作-状态奖励」 - 「预测状态奖励」;而GRPO计算的优势函数是「G个动作」分别发生时 「样本观测到的动作-状态奖励」- 「样本观测到的状态奖励」。从learning的可解释上,就是样本变多+预估环节变少,非常有利于学习。
此类方法只能运用在有「解」的数据中,答案形式如选择题,简单填空等可以work。
Prev
Paged Attention&Orca Paper笔记与解读
Next
GPU分布式训练缩写眼保健操:PP、DP、DDP、MP、ZeRO、FSDP
Loading...