作者: 引线小白-本文永久链接:httpss://www.limoncc.com/post/c0a3be9c86b2b4cd/
知识共享许可协议: 本博客采用署名-非商业-禁止演绎4.0国际许可证
摘要: 本文意在理清大语言模型中的强化学习。若有错误,请大家指正。
关键词:大语言模型
,reinforcement learing
,强化学习
[TOC]
一、理论基础
1.1、数学符号
首先来熟悉一下数学符号
1、
2、
3、
4、
有时候也不加区分。请根据上下文自行判断
5、
价值函数是回报的期望,即未来期望获得的奖励之和。价值函数反应了现状的好坏,价值函数越大说明现状越有利,知道
6、动作价值函数(action-value function)
其中:
有时候也用下面简写表示,以节约符号:
7、最优动作价值函数(optimal action-value function)
含义就是有多种策略函数
8、状态价值函数(sata-value function)
也就是说
9、
优势函数是动作价值函数和状态价值函数之差。反应了动作相对于平均值的优势。
1.2、策略学习与策略梯度
策略学习的目标在于调整策略使得状态价值
其中
说的明白点就是消除了状态和动作的
然后有策略梯度定理:
通常会忽略
1.3、带基线的策略梯度定理
其中
实际上有
这就证明了定理。不妨设
而
这个策略梯度是各类RLHF(PPO,DPO,GRPO)的基础。当然看到这里好事者可能会问,为什么要引入优势函数,策略梯度定理如何证明等。那这里笔者就提示一下:
1、策略梯度定理证明稍微复杂,且证明技巧于实际应用比较远。笔者会在附录中介绍。
2、引入优势函数是减小方差、加速收敛。当然还有其他优点,这些笔者在后面会慢慢细说
最后笔者说说自己的心得,在这个技术高度集成的年代,理论前沿和应用前沿大多依赖很多底层基础知识。有些是应该弄明白的,对继续探索和实践是有益的。例如强化学习基础知识和策略梯度定理。但是有些其实可以放一放,没有必要深究。如策略梯度定理的证明,这就犹如神经网络的万能近似定理的证明,其实对你继续探索和实践深度学习影响甚微。此时如不能抑制自己的好奇心,非要搞清楚,你将会浪费大量时间和精力在非核心问题上。所以请记住适当抑制好奇心,才能走的更远。
1.4、GAE广义优势估计与价值网络学习
这节我们将讨论使用GAE广义优势估计[^2]来计算优势函数,
回顾一下动作价值函数的贝尔曼方程
那么有
给定状态
下面将目光注意到如何学习价值网络
同样对期望做近似,具体就是在叙述一遍:给定状态
又叫一步时间差分目标。如果对强化学习不熟悉,可能对反复出现的贝尔曼方程、TD(temporal difference,时间差分)等概念不太熟悉,这里稍微做点解释。希望给没有强化学习背景的同学减少一点困恼。
1、
2、对于上式的一步时间差分目标是价值网络在时刻
有梯度
称
可以看到TD误差其实和优势函数的估计是一样的,对于多步时间差分误差,也会有多步优势函数估计:
所谓多步TD误差其实就是尽可能用多步观测到的值去估计价值函数。从而可以降低估计的偏差和误差。通常为了平衡偏差和误差,会引入一个超参数
注意一下边界条件,当轨迹在
当然如果对概率论缺乏直觉的朋友,可能一下子无法理解这种做法为啥能平衡偏差和误差。思考如下问题:求一组随机变量和的均值,那么如果我观测到其中
如果我们没有观测到任何值
如果观测到k组值,通常假设观测存在偏差
那么均值有
那么误差有
也就是说方差变小,偏差变大。如果我们给观测值加一个超参数
那么均值有
相信通过这个例子,应该会有所感觉。
二、PPO近端策略优化
2.1、代理目标函数
网络上很多文章,写的多有错误,本文笔者将尽可能用清晰的数学符号,澄清各类问题。经过前期铺垫,终于可以谈论PPO了。为了使用自动微分,不太可能使用强化学习的原始目标函数
那么设定这样的代理目标函数是显而易见的:
也就说可一灵活设计目标函数,只要确保该目标函数的梯度和策略梯度定理一致即可。这也是经常看到论文和文章中总是提及策略梯度定理原因。因为只要保证如下公式
优化方向上就能在理论上保证和原始的强化学习目标是一致的。然后实践证明这个最明显的目标函数表现并不好。PPO论文[^3]使用了TRPO(trus region policy optimuization,置信域策略优化中提出的函数),回到原始目标函数
这里变化为新旧策略比例的原因是为了纳入重要性采样的trick提高学习效率。如果不熟悉重要性采样的同学,请找本书看,这里推荐Sheldon M. Ross的《Simulation》。
使用优势函数
其中令
用优势函数替代动作价值函数, 同时引入clip。有诸多的好处:
- 1、已经证明这个操作不会改变梯度的期望值,当通过减小
的绝对波动幅度,降低了方差。 - 2、优势函数提供了更加明确的优化信号,因为优势函数衡量的是动作的相对好坏,使得策略更新方向更清晰,相比于使用动作价值函数,优势函数提供的梯度信号更稳定,减少了噪声干扰,从而加速收敛。
- 3、与广义优势估计(GAE)结合,通过多步TD残差的加权和计算优势函数的估计。GAE平衡了蒙特卡洛方法(低偏差、高方差)和单步TD方法(高偏差、低方差),进一步优化了方差-偏差权衡,提升收敛效率。
- 4、优势函数通过相对价值调整,而非依赖绝对回报,使得策略更新的幅度更加合理。结合PPO的裁剪机制(Clip机制),可限制策略更新的步长,避免因单次更新过大导致的策略崩溃。
- 5、优势函数结合GAE,充分利用多步回报信息,减少对单一轨迹片段的依赖。这使得算法在相同样本量下能提取更多有效信息,提升数据利用率。
- 6、优势函数指导策略优先选择高优势动作(利用),但PPO的熵正则项(Entropy Bonus)可保留一定随机性(探索)。两者结合避免了策略过早陷入局部最优。注意上面的公式,没有加入熵正则。
- 7、优势函数依赖状态价值函数的估计,这要求Critic网络准确预测状态价值。PPO通过联合优化策略网络(Actor)和价值网络(Critic),使两者相互促进:Critic为Actor提供低方差梯度,Actor生成的数据帮助Critic更准确估计价值。
- 8、在稀疏奖励任务中,绝对回报可能长期为零或变化微小,而优势函数通过比较动作的相对价值,仍能提供有效的梯度信号,帮助策略在早期阶段逐步改进。
2.2、大语言模型场景
上述分析都是在强化学习的状态动作场景。这里将转化为大模型场景。在LLM里,状态是每个token的之前的token。一般我们会从提示词或者问题
也就是说有问题对数据集
2.3、PPO中的KL散度
为减轻奖励模型的过度优化,PPO还会引入参考模型的
其中
在这个地方,肯定有人会问为啥是把这个所谓的KL在计算token奖励时加入,而不是基于正则的方式加入到损失函数或者目标函数里面:
这样才是更加常规做法。奈何GPT2,GPT3相关论文代码确实是这么写的,可以参考知乎上的讨论在强化学习 PPO 算法中,为什么可以把 KL 散度直接放进负奖励?
PPO技术要点差不多已经理清,这里再全局回顾一下:
1、有两个可以训练的模型:策略模型
2、有一已经训练好的奖励模型
3、还有一个冻结参数的参考模型
deepseek math的论文图画的很好,笔者略微修改一下,并添加注释,以便更加清晰理解:
三、GRPO组相对策略优化
3.1、GRPO的目标函数
注意到PPO中有四个模型,实属非常浪费资源。GRPO[^4]提出了更加节约资源的版本。对于PPO,deepseek math给出了更加明晰的公式, 适合照着公式写代码。明确加入了
deepseek math论文提出了,GRPO组相对策略优化,目标函数是
3.2、GRPO的KL散度
对于
为何使用这个估计,这篇博文写了如何对KL散度做蒙特卡洛近似,能实现偏差与方差平衡:https://joschu.net/blog/kl-approx.html[^5],这里啰嗦几句。KL通常是基于分布整体来计算的:
这里笔者稍微做点解释,做蒙特卡洛模拟最简单就是使用
3.3、GRPO的优势函数
对于优势函数的估计体现了GRPO组相对策略优化这个名字的含义, 在GRPO中没有价值模型,而是使用同一个问题的一组输出数据
- 1、对于过程监督(process supervision),也就是说同一个问题
个一组输出中的每个token的优势估计是这样计算的:
其中
- 2、对于结果监督(outcome supervison)有, 也就是说同一个问题
个的一个输出中的每个token的优势估计相同的:
其中
3.4、deepseek R1模型的目标函数
deepseek R1模型的目标函数[^1]和deepseek math中的目标函数稍微不太一样。deepseek的思维链模型,没有使用过程奖励。目标函数中可以看到是整体计算整个输出求平均。而且R1除了没有价值模型,还没有奖励模型。奖励的计算基于规则、代码验证器、格式验证来计算的。这大大节约了资源,也减少了学习难度。
其中
R1的训练流程经过了三个阶段,下面是笔者绘制的流程图,并标注了关键节点的一些注意要点。注意在最后阶段其实是有奖励模型参与的。第三阶段的生成600k的推理数据在使用拒绝采样时也使用了奖励模型。注意在deepseekv3的奖励模型中是同时输出奖励理由的思维链和奖励分数的。
四、大语言模型中强化学习的统一范式
deepseek math论文中对各类RLHF(SFT、RFT、DPO、PPO、GRPO)提出了一个统一强化学习框架,下面是统一的策略梯度公式:
有三个关键组件
1、 Data Source
2、 Reward Function
3、 Algorithm
下面来一一考察:
4.1、SFT
监督微调(Supervised Fine-tuning)
目标函数
数据集
在问题对数据集中抽样, 其中 是问题, 是回答的每个token。
梯度
奖励函数
梯度系数
4.2、RFT
决绝采样微调(Rejection Sampling Fine-tuning)
目标函数
数据集
RFT是在已经训练好的SFT模型 上, 对问题 生成多个回答,并标注正确和错误的回答。 是回答的每个token。
- 梯度
奖励函数
梯度系数
4.3、Online RFT
在线决绝采样微调(Online Rejection Sampling Fine-tuning)和RFT的区别,在于数据会通过实时策略模型
- 目标函数
4.4、DPO
直接偏好优化(Direct Preference Optimization)
目标函数
数据集
DPO是是问题 上的偏好数据,并标注接受回答 和拒绝回答 。 是回答的每个token。
- 梯度
奖励函数
梯度系数
4.5、PPO
近端策略优化(Proximal Policy Optimization)
- 目标函数
为了简化分析,假定模型在每个探索阶段之后只有一个更新,从而确保
- 数据集
PPO是问题 上的探索数据轨迹(输出结果), 是回答的每个token。
梯度系数
奖励函数
奖励函数就是已经训练好的奖励模型梯度系数
4.6、GRPO
组相对策略优化(Group Relative Policy Optimization)
- 目标函数
和PPO一样简化,删除最小值和裁剪操作,有简化的目标函数:
- 数据集
GRPO是在一个问题 上的探索一组数据轨迹(输出结果), 是回答的每个token。
- 梯度系数
奖励函数
奖励的计算基于规则、代码验证器、格式验证来计算的梯度系数
参考文献
[^1]: DeepSeek-AI, Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., et al. (2025, January 22). DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. arXiv. https://doi.org/10.48550/arXiv.2501.12948
[^2]: Schulman, J., Moritz, P., Levine, S., Jordan, M., & Abbeel, P. (2018, October 20). High-Dimensional Continuous Control Using Generalized Advantage Estimation. arXiv. https://doi.org/10.48550/arXiv.1506.02438
[^3]: Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017, August 28). Proximal Policy Optimization Algorithms. arXiv. https://doi.org/10.48550/arXiv.1707.06347
[^4]: Shao, Z., Wang, P., Zhu, Q., Xu, R., Song, J., Bi, X., et al. (2024, April 27). DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv. https://doi.org/10.48550/arXiv.2402.03300
[^5]: J. Schulman. Approximating kl divergence, 2020. URL http://joschu.net/blog/kl-approx.html.
版权声明 | ![]() |
![]() | 由引线小白创作并维护的柠檬CC博客采用署名-非商业-禁止演绎4.0国际许可证。 本文首发于柠檬CC [ https://www.limoncc.com ] , 版权所有、侵权必究。 |
本文永久链接 | httpss://www.limoncc.com/post/c0a3be9c86b2b4cd/ |
如果您需要引用本文,请参考: |
引线小白. (Jan. 31, 2025). 《大模型中的强化学习——大语言模型研究05》[Blog post]. Retrieved from https://www.limoncc.com/post/c0a3be9c86b2b4cd |
@online{limoncc-c0a3be9c86b2b4cd, title={大模型中的强化学习——大语言模型研究05}, author={引线小白}, year={2025}, month={Jan}, date={31}, url={\url{https://www.limoncc.com/post/c0a3be9c86b2b4cd}}, } |