1 PPO回顾
PPO算法如下:
其中,
P
θ
′
P_{\theta'}
Pθ′和
A
θ
′
A^{\theta'}
Aθ′都是使用由target policy
θ
′
\theta'
θ′采集的数据来计算,在更新了behaviour policy多次后,清空前面保存的数据;使用behaviour policy更新target policy,再由target policy重新采集数据,依次循环。
(代码实现时,target policy和behaviour policy是一个类的实例,先采集数据
→
\rightarrow
→传播梯度n次
→
\rightarrow
→清空数据
→
\rightarrow
→采集数据
→
\rightarrow
→传播梯度n次
→
\rightarrow
→。。。)
参考easy-RL:https://github.com/datawhalechina/easy-rl/tree/master/projects/codes/PPO
2 重要性采样的前提
问题是,为什么PPO不像DQN一样将每次采集的数据存放在Replay Buffer中,不清空数据?
其实前面的图里提到了,PPO需要用到重要性采样,而重要性采样的前提是两个分布相差不大。
如果使用很久之前保存的数据计算重要性采样的优势函数
A
θ
′
A^{\theta'}
Aθ′,则采集该历史数据的policy与当前需要优化的policy差距太大,就无法使用重要性采样了。
3 补充
图一中公式的第二行,为什么经过重要性采样后,
A
θ
A^{\theta}
Aθ变成了
A
θ
′
A^{\theta'}
Aθ′,而
log
p
θ
\log p_{\theta}
logpθ没有写成
log
p
θ
′
\log p_{\theta'}
logpθ′?
图中通过上标和下标的
θ
\theta
θ来表示不同的意思,上标
θ
′
\theta'
θ′表示计算该值(
A
A
A)的
s
t
s_t
st和
a
t
a_t
at是在旧分布
θ
′
\theta'
θ′中采样得到,下标
θ
\theta
θ表示
p
p
p是由
θ
\theta
θ输出的,而计算
p
p
p需要的
s
t
s_t
st和
a
t
a_t
at还是在旧分布
θ
′
\theta'
θ′中采样得到。