强化学习 Proximal Policy Optimization (PPO)
参考: 李宏毅老师课件
PPO: Default reinforcement learning algorithm at OpenAI
PPO = Policy Gradient 从 On-policy 到 Off-policy, 再加一些constraint
Policy Gradient#
Basic Conception#
-
Actor: 动作执行者(智能体)
-
Env: 环境
-
Reward Function: 奖励函数
-
Policy
: a network with parameter .Input: 当前的 Env.
Output: actor 要采取的下一个 action 的分布.
Optimization#
Object#
对于参数为
Policy Gradient#
Reward 的期望:
求
由
此处可延伸出一个公式:
由
通过采样的方式估计期望值, 采样
最后将
Implementation#
最大化 Reward 的期望
最大化
其中,
与交叉熵损失对比: 其实就是将采样得到的
对于RLHF来说, 就是:
- 对于某个指令
, 采样多条输出 (即多个Trajectory, 其中每个 表示一个Trajectory) 或者用多个指令,每个指令采样一个输出,不重要,不影响后续操作。
2.把这些作为label, 用teacher forcing的方式计算交叉熵损失, 不过在对于每个样本 , 其损失最终要额外乘一个奖励值
Tips#
Add a baseline#
理想情况下, 这样是没有问题的, 因为 Reward 即使总是正的, 也有大有小.
当时实际上, action 是采样得到的, 这会导致如果有的 action 没有被采样到, 它的概率相对于被采样到的 action 就会下降, 而这时, 并不能表示当前环境下采取这个 action 不好. 改进: 减去一个 baseline,
直观上的解释是, 如果一个
Assign Suitable Credit#
对于同一个 Trajectory
例如图的左边, 在
由此, 提出改改进1: 每个时刻的 reward 改为, 当前时刻到结束时刻的 reward 的总和.
某时刻的 action, 经过越长时间, 它的影响力就越小. 也就是与该 action 间隔很久的 reward 与该 action 的关系很小. 由此提出改进2: 加一个衰减系数
最后, 将整个系数项称为 Advantage Function,
对于LLM来说,可以参考这篇文章。
最终得目标函数与梯度的公式如下:
*公式中的
On-policy Off-policy#
On-policy#
梯度计算公式:
目前为止的做法其实是一种 on-policy 的方法:
- 每次更新梯度前, 都需要从
中采样 . - 参数更新后, 又需要用更新后的参数重新采样
.
目标是: 从另一个 policy,
Importance Sampling(重要性采样)#
现在, 假设无法从
这样, 我们就可以用
Issue of Importance Sampling
理论上, 我们已经得出两个期望值是相等的:
那么它们的方差是否相等呢?
由公式
可以得出:
对比发现, 第一项中后者比前者多乘了一个
这样就会出现一问题: 理论上, 无论
但是当
当我们采样次数不够多, 导致没有采样到最左边那个样本时, 就会出现实际上
而当我们采样到最左边那个样本时, 因为此时
Off-policy#
将 Importance Sampling 用在 policy gradient 中, 我们就可以得到:
这样, 我们就可以从
结合之前添加Tips后得到的公式(8), 有:
*为什么假设
再由公式(3)得:
反推目标函数:
Add constraint#
目前为止, 我们利用 Importance Sampling 完成了 Policy Gradient 从 On-policy 到 Off-policy 的优化.
但是 Importance Sampling 在实际应用中有一个不得不考虑的限制, 就是我们无法保证能采样足够多的数据, 这时当两个分布
PPO做的事情, 简单说就是, 限制两个分布
注: 此处 KL 散度指的不是将两个模型的参数看作分布,拉近两个模型的参数的距离. 而是两个模型行为上的距离, 就是当两个模型输入同样的 state 时, 希望输出的 action 的分布尽可能像
Conclusion#
PPO algorithm#
PPO2#
PPO2: 简化 PPO 的计算.
首先, 我们将横坐标
其中,
- 当
时, 就是左图中红线, 我们要最大化目标函数, 也就希望 越大越好, 但是当超过 后, 对目标函数就没有 benefit 了. 这样就阻止了进一步优化. - 当
时, 同理, 如右图.
目的依旧是保证两个分布
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端