从REINFORCE到PPO,看Policy Gradient的前世今生
Policy Gradient和Q-learning可以说是model-free RL的两大阵营。前者是off-line、on-policy的方法,后者是on-line、off-policy的方法。前者是策略迭代,关心的是策略网络的参数;后者是值迭代,关心的是值网络的输出。随着RL的不断发展,这两类方法在不断交错领跑的过程中交汇融合,不断给我们带来新的惊喜。
本文重点在介绍Policy Gradient方法,从其“初心”出发,通过一步步的推导来讲述新的算法。后半部分的重点将放在兼具漂亮理论基础和简洁代码实现的PPO方法上,欢迎RL入门级的小朋友们一起讨论学习!
Policy Gradient
如果你已经了解了DQN,也许会想到这样一个问题:为什么一定要用值函数来做决策(当然这个想法也是很自然的),为什么不绕过值函数直接用神经网络来表示策略呢?
当然,想要讨论清楚这个问题不是很容易,有很多不同的看法,感兴趣的小朋友可以看一下知乎上对问题RL两大类算法的本质区别?(Policy Gradient 和 Q-Learning)
南京大学俞杨老师的答案,很有启发性。
让我们再退一步,我们想要的东西到底是什么呢?其实就是让我们采取策略的期望收益最大化!
τ τ 表示一条样本轨迹,策略所影响的,是样本轨迹 τ τ 出现的概率,也就是 pθ(τ) p θ ( τ ) 。
那么 r(τ) r ( τ ) 和 pθ(τ) p θ ( τ ) 指的具体是什么呢?我们再进一步展开来写一下:
注意,这里的 τ τ 和 t t 的含义不同, 是样本轨迹, t t 是样本轨迹上的时间。仔细看 我们就会发现,将概率展开以后实际上我们的策略可以影响的只有 πθ(at|st) π θ ( a t | s t ) ,也就是在状态 st s t 下采取动作 at a t 的概率。这也就是我们策略的数学表示。
REINFORCE
现在我们就可以再向前走一步,按照机器学习的一般思路,我已经定义好了我的目标函数 J(θ) J ( θ ) ,如果可以求出它的梯度 ∇θJ(θ) ∇ θ J ( θ ) ,我们就可以梯度下降了!为了求梯度,我们将 J(θ) J ( θ ) 改写成积分的形式:
这里用到了一个小技巧, ∇θpθ(τ)=pθ(τ)∇θpθ(τ)pθ(τ)=pθ(τ)∇θlogpθ(τ) ∇ θ p θ ( τ ) = p θ ( τ ) ∇ θ p θ ( τ ) p θ ( τ ) = p θ ( τ ) ∇ θ log p θ ( τ ) ,这样做的目的是把 pθ(τ) p θ ( τ ) 重新拿到外边来,就可以再写成期望的形式了。
现在公式中的自变量仍然是 τ τ ,实际应用中我们不可能直接对 τ τ 求导,因此我们再把 pθ(τ) p θ ( τ ) 带进来看看能不能将 τ τ 给替换为我们可以操作的 st s t 、 at a t ,