赞
踩
之前学的基于策略梯度的算法本身就不太明白,再加上时间的消耗,脑子里面所剩无几,这次也差不多相当于从零开始学习基于策略梯度的算法了。
这次先具体描述AC算法情况,然后通过对比再讲述A2C、A3C算法。
在看文章的时候发现这个图画的特别棒,拿来供大家学习。
actor-critic算法结合了value-based和policy–based两两类强化学习算法,actor-critic属于单步更新算法。
actor的前身是policy gradient,他可以轻松地在连续动作空间内选择合适的动作,value-based的Qlearning做这件事就会因为空间过大而爆炸,但是又因为Actor是基于回合更新的所以学习效率比较慢,这时候我们发现可以使用一个value-based的算法作为Critic就可以实现单步更新。这样两种算法相互补充就形成了我们的Actor-Critic。
有两个网络结构:
actor网络:使用策略函数,根据当前的状态s,输出每个动作的概率,根据概率选择合适的动作a,与环境交互,得到下一个状态s’,和奖励r。
critic网络:使用值函数,计算在s状态下的值函数和在s’状态下的值函数,计算TD error。
actor网络的更新:
θ
=
θ
+
α
▽
θ
l
o
g
π
θ
(
s
t
,
a
t
)
Q
(
s
,
a
)
θ=θ+α▽ _{θ} log π _{θ} (s_{t},a_{t})Q(s,a)
θ=θ+α▽θlogπθ(st,at)Q(s,a)
critic网络的更新:
δ
=
r
+
γ
Q
(
s
′
,
a
′
)
−
Q
(
s
,
a
)
δ=r+γQ(s′,a')−Q(s,a)
δ=r+γQ(s′,a′)−Q(s,a)
缺点:
(1)Actor的行为取决于 Critic 的Value,但是因为 Critic本身就很难收敛,和actor一起更新的话就更难收敛了。
(2)Actor-Critic 涉及到了两个神经网络, 而且每次都是在连续状态中更新参数, 每次参数更新前后都存在相关性, 导致神经网络只能片面的看待问题, 甚至导致神经网络学不到东西。
优点:
(1)可以进行单步更新,相比于传统的PG回合更新速度快。
(2)可以在连续动作空间上选择动作。
Actor-Critic算法在实现中可以看出非常的不稳定,很难收敛,用下面的解释比较容易理解:
就比如:Critic作为老师,他对某习题都不是很清楚就去教学生解题(Critic对误差不精确的计算也将反馈给Actor),等他拿回家在仔细研究一下发现自己的解法有问题(下一个episode对误差的计算),再去教导学生,学生根据老师再去修改解法,如果这个过程一直重复,那整个学习过程效率就很低,对于系统来说自然也很不稳定 。
1、在使用value-based的算法的时候,计算V(s)或者Q(s,a)时,有两种计算方法,一种是TD,一种是MC(蒙特卡罗),各有优缺点,TD比较稳,MC比较精确。
2、 π ( a ∣ s ) \pi(a|s) π(a∣s)表示在状态s下,选择action a的概率;
而我们所要学习的策略π,就是关于state s的函数,返回所有actions的概率。
自己照着莫烦老师的代码写了一遍,然后自己有写了一遍,对代码的结构、逻辑都有了很好的理解,比之前学习的理解深刻多了!可惜的是actor-critic算法莫烦老师没有推荐的文献看,所以这篇算法没有看对应的文献。
在阅读其他人写的博客的时候,发现都没有把AC与A2C算法之间的区别和不同讲出来,学完AC之后再学A2C的时候,才发现自己学的AC算法其实就是A2C,就开始找、查AC算法是什么。莫烦老师写的 代码其实就是A2C的算法代码,大家也别搞混了。虽然不必纠结他们之间到底哪个是哪个 ,但是我还是想弄清楚到底AC是什么,A2C是什么,他们之间的区别在哪里。可能是自己执念太深,太钻牛角尖了吧!
强化学习的小伙伴继续加油呀!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。