Actor-Critic(AC)算法学习

背景知识

Policy Gradient方法利用带有权重的梯度上升方法更新策略。在REINFORCE算法中,这个权重是由蒙特卡洛方法来计算未来总体回报 G t G_{t} Gt的。这带来一个问题:就是待优化的策略参数 θ \theta θ只能在与环境交互完成一个Episode后,才进行更新。这种更新方式就是方差大,学习效率比较低。

前面我们用从t时刻开始的未来总奖励 G t G_{t} Gt来作为权重,评价在t时刻,状态为 s t s_{t} st时,执行动作 a t a_{t} at的价值。我们的目的是寻找一组最优的策略参数,使得未来总奖励越高。同时, G t G_{t} Gt的计算是依赖于策略与环境的交互轨迹的,而这个轨迹又具有随机性,因此我们最终的优化目的是 G t G_{t} Gt的期望最大

由马尔科夫决策过程可知,某一状态下采取某一动作,得到的回报期望可以表示为:
Q π ( s , a ) = E [ G t ∣ s t = s , a t = a ] Q_\pi{}(s,a)=\mathbb{E} [G_{t}|s_{t}=s,a_{t}=a] Qπ(s,a)=E[Gtst=s,at=a]因此有人提出将原始的奖励值 G t G_{t} Gt用当前状态 s t s_{t} st a t a_{t} at的价值 Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at)来代替。
在这里插入图片描述

Actor-Critic算法

网络构成

Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at)代替 G t G_{t} Gt后,那么该如何求解 Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at)呢?毫不意外,我们同样用万能的神经网络来求解。因此AC算法就出现了两个神经网络。

  • (1)根据状态 s t s_{t} st,指导智能体输出 a t a_{t} at的网络,也就是策略网络 π θ \pi_{\theta} πθ,术语为Actor;
  • (2)用来评价当前状态 s t s_{t} st下选择动作 a t a_{t} at的好坏,即输出 Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at),可以理解为评委,术语为Critic

实现细节

在REINFORCE算法中,为了提高PG算法的性能,我们通常会让未来回报 G t G_{t} Gt减去一个baseline,使得权重部分(下图红色部分)有正有负。这样以来,如果是正的,我们就增加这个动作概率;反之减小它的概率。
在这里插入图片描述
现在将未来折扣奖励用 Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at)进行了代替,上式可以转变为:
∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( Q ( s t n , a t n ) − b ) ∇ log ⁡ p θ ( a t n , s t n ) \nabla \bar{R} _{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}} \left ( Q\left ( s_{t}^{n},a_{t}^{n} \right ) -b \right )\nabla\log p_{\theta}\left ( a_{t}^{n},s_{t}^{n} \right ) RˉθN1n=1Nt=1Tn(Q(stn,atn)b)logpθ(atn,stn)为了让权重有正有负(即下图红色部分),一般的做法是减去 Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at)的期望。而 Q ( s t , a t ) Q(s_{t},a_{t}) Q(st,at)的期望就是状态 s t s_{t} st的价值 V ( s t ) V(s_{t}) V(st)
在这里插入图片描述
这样以来,梯度计算公式可以转化为:
∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( Q ( s t , a t ) − V ( s t ) ) ∇ log ⁡ p θ ( a t n , s t n ) \nabla \bar{R} _{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}} \left ( Q\left ( s_{t},a_{t} \right ) -V(s_{t}) \right )\nabla\log p_{\theta}\left ( a_{t}^{n},s_{t}^{n} \right ) RˉθN1n=1Nt=1Tn(Q(st,at)V(st))logpθ(atn,stn)此时,中间的权重就会变为优势函数 A ( s t n , a t n ) A(s_{t}^{n},a_{t}^{n}) A(stn,atn)。这样的算法就是优势演员-评论员算法(Advantage Actor Critic,A2C)

如果这样实现,一个很明显的缺点是我们需要再额外增加一个网络来计算 V ( s t ) V(s_{t}) V(st)。不仅耗费资源,同时估计不准的风险也会增加。何不将二者合并,只估计一个网络呢?幸运的是,马尔科夫告诉我们,V和Q是可以互换的。
Q π ( s t n , a t n ) = E [ r t n + V π ( s t + 1 n ) ] Q_\pi{}(s_{t}^{n},a_{t}^{n})=\mathbb{E} [r_{t}^{n}+V_{\pi}(s_{t+1}^{n})] Qπ(stn,atn)=E[rtn+Vπ(st+1n)]我们把期望去掉,则:
Q π ( s t n , a t n ) = r t n + V π ( s t + 1 n ) Q_\pi{}(s_{t}^{n},a_{t}^{n})=r_{t}^{n}+V_{\pi}(s_{t+1}^{n}) Qπ(stn,atn)=rtn+Vπ(st+1n)这样一来,我们就只需要一个估计状态价值的网络。梯度计算公式可以表示为:
∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n ( r t n + V π ( s t + 1 n ) − V ( s t ) ) ∇ log ⁡ p θ ( a t n , s t n ) \nabla \bar{R} _{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}} \left ( r_{t}^{n}+V_{\pi}(s_{t+1}^{n})-V(s_{t}) \right )\nabla\log p_{\theta}\left ( a_{t}^{n},s_{t}^{n} \right ) RˉθN1n=1Nt=1Tn(rtn+Vπ(st+1n)V(st))logpθ(atn,stn)
PS:关于此处为什么直接将期望去掉?答案是实验表明这样的效果最好,因此就这样用了。

算法流程

在这里插入图片描述

实现tips

  1. AC算法包含两个网络,策略网络Actor和估算状态价值的V网络。 V网络的输入为状态,输出为V(s),是标量。 策略网络 π ( s ) \pi(s) π(s)输入状态,输出:离散动作,输出动作分布;连续动作,输出一个连续的向量。
    由于两个网络都是状态作为输入,因此前面部分是可以参数共享的
    在这里插入图片描述
  2. AC算法中,同样需要探索机制。一个常见的探索的方法是对 π \pi π 输出的分布设置一个约束。这个约束用于使分布的熵(entropy)不要太小,也就是希望不同的动作被采用的概率平均一些。这样在测试的时候,智能体才会多尝试各种不同的动作,才会把环境探索得比较好,从而得到比较好的结果。

参考

  1. 知乎张斯俊:理解Actor-Critic的关键是什么?(附代码及代码分析)
  2. Datawhale:蘑菇书
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值