我们上一章给大家介绍了经典的策略梯度(PG)算法,但这个经典算法存在两个问题:
- 一是需要完整序列
我们根据强化学习的目标“最大化总收益”而得到的公式中包含 R ( τ ) = ∑ t = 1 T r t R\left(\tau\right)=\sum_{t=1}^Tr_t R(τ)=∑t=1Trt,就算我们对其进行添加基线、改变收益计算方式等,都还是没有脱离从 t t t时刻起,需要后续所有收益这一问题,这一方法类似于我们在“基础算法篇(二),蒙特卡洛方法解决Model-Free强化学习问题”讲的方法,而这在很多情况下是很难实现的。
- 二是一次采集的数据,不能够重复使用,学习效率极低还难以收敛
为啥不能重复使用,可以看看以下这个例子【本例子节选自“如何直观理解PPO算法?[理论篇]”,感兴趣的可以看原文,在这里对原作者表示感谢。】:
大家可以看上图,如果P是原有策略,B是新策略,那么如果按照B采样的数据进行更新,动作 a 1 a1 a1就只会被更新一次,而 a 2 a2 a2被更新9次。这样最终P中 a 2 a2 a2的概率可能就会大于 a 1 a1 a1,但实际 a 1 a1 a1的TD-error明显高于 a 2 a2 a2,我们期望的是 a 1 a1 a1概率大于 a 2 a2 a2。这样,算法只会在错误的道路上越走越远。
针对以上两个方面的问题,分别提出了Actor-Critic框架和PPO算法,下面我们详细介绍这两部分内容。
一、Actor-Critic框架
针对前面提到的传统PG算法中需要完整序列的问题。让我们首先回忆一下,前面对于蒙特卡洛(MC)方法带来的问题,我们是如何解决的?
我们在基础算法篇(三)中介绍了时序差分方法,即:
- 用 r t + 1 k + γ v ( s t + 1 k − 1 ) r_{t+1}^k+\gamma v\left(s_{t+1}^{k-1}\right) rt+1k+γv(st+1k−1)代替 G t k G_t^k Gtk
这样就避免了蒙特卡洛算法中必须要全过程累积回报的缺点,使得能够在过程中利用两步信息就学习。
那么,针对上一章介绍的策略梯度方法:

这里的 R ( τ ) R\left(\tau\right) R(τ)我们就可以用时序差分中的TD目标值: r t + 1 k + γ v ( s t + 1 k − 1 ) r_{t+1}^k+\gamma v\left(s_{t+1}^{k-1}\right) rt+1k+γv(st+1k−1)来代替。那么就不需要去求全过程的累积和,而是需要求出 v ( s t + 1 k − 1 ) v\left(s_{t+1}^{k-1}\right) v(st+1k−1)即可。
大家再回忆一下我们在“基础算法篇(四),值函数逼近方法解决强化学习问题”中介绍的,用深度神经网络来拟合值函数。因此,这里我们也可以参考DQN等做法,用一个深度神经网络来进行值函数的逼近。而这个网络就被成为“Critic”或“价值网络”。其实也就是通过这个红框内的改变,将原有的Value-Based方法和Policy-Based方法结合到了一起。而针对AC框架还有很多改进,包括A2C,A3C等,我们在后面再详细介绍。
价值网络在整个学习训练过程中,也是一直被Update的,其更新方法与基础算法篇(四)中介绍的一样,在这里就不再赘述。
其实,我们再回顾一下策略梯度本身的目标,就是最大化收益。那么前面的 R ( τ ) R\left(\tau\right) R(τ)除了使用TD目标值以外,还可以采用如下多种形式:
- 状态价值或状态行为值: v π ( s ) v_\pi\left(s\right) vπ(s)或 q π ( s , a ) q_\pi\left(s,a\right) qπ(s,a)
- 优势函数: q π ( s , a ) − v π ( s ) q_\pi\left(s,a\right)-v_\pi\left(s\right) qπ(s,a)−vπ(s)
- 时序差分值: r t + 1 k + γ v ( s t + 1 k − 1 ) − v ( s t k − 1 ) r_{t+1}^k+\gamma v\left(s_{t+1}^{k-1}\right)-v\left(s_t^{k-1}\right) rt+1k+γv(st+1k−1)−v

最低0.47元/天 解锁文章
156

被折叠的 条评论
为什么被折叠?



