参考: 李宏毅老师课件
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 的期望
最大化
其中,
与交叉熵损失对比: 其实就是将采样得到的
Tips#
Add a baseline#
理想情况下, 这样是没有问题的, 因为 Reward 即使总是正的, 也有大有小.
当时实际上, action 是采样得到的, 这会导致如果有的 action 没有被采样到, 它的概率相对于被采样到的 action 就会下降, 而这时, 并不能表示当前环境下采取这个 action 不好.
改进: 减去一个 baseline,
Assign Suitable Credit#
对于同一个 Trajectory
例如图的左边, 在
由此, 提出改进1.
改进1: 每个时刻的 reward 改为, 当前时刻到结束时刻的 reward 的总和
某时刻的 action, 经过越长时间, 它的影响力就越小. 也就是与该 action 间隔很久的 reward 与该 action 的关系很小. 由此提出改进2.
改进2: 加一个衰减系数.
最后, 将整个系数项称为 Advantage Function,
最终, 得梯度公式:
On-policy Off-policy#
On-policy#
梯度计算公式:
目前为止的做法其实是一种 on-policy 的方法:
- 每次更新梯度前, 都需要从
中采样 . - 参数更新后, 又需要用更新后的参数重新采样
.
目标是: 从另一个 policy,
Importance Sampling(重要性采样)#
现在, 假设无法从
这样, 我们就可以用
Issue of Importance Sampling
理论上, 我们已经得出两个期望值是相等的:
那么它们的方差是否相等呢?
由公式
可以得出:
对比发现, 第一项中后者比前者多乘了一个
这样就会出现一问题: 理论上, 无论
但是当
当我们采样次数不够多, 导致没有采样到最左边那个样本时, 就会出现实际上
而当我们采样到最左边那个样本时, 因为此时
Off-policy#
将 Importance Sampling 用在 policy gradient 中, 我们就可以得到:
这样, 我们就可以从
结合公式(7), 得
再由公式(3)得:
反推目标函数:
Add constraint#
目前为止, 我们利用 Importance Sampling 完成了 Policy Gradient 从 On-policy 到 Off-policy 的优化.
但是 Importance Sampling 在实际应用中有一个不得不考虑的限制, 就是我们无法保证能采样足够多的数据, 这时当两个分布
PPO做的事情, 简单说就是, 限制两个分布
注: 此处 KL 散度指的不是将两个模型的参数看作分布,拉近两个模型的参数的距离. 而是两个模型行为上的距离, 就是当两个模型输入同样的 state 时, 希望输出的 action 的分布尽可能像
Conclusion#
PPO algorithm#
PPO2#
PPO2: 简化 PPO 的计算.
首先, 我们将横坐标
- 当
时, 就是左图中红线, 我们要最大化目标函数, 也就希望 越大越好, 但是当超过 后, 对目标函数就没有 benefit 了. - 当
时, 同理, 如右图.
目的依旧是保证两个分布