这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
本文是强化学习入门系列的第七篇,介绍一种结合了策略梯度和时序差分的算法——Actor-Critic即演员评论家算法。
Actor-Critic
介绍
Actor-Critic即演员-评论家算法。分为两部分,Actor基于概率选动作(不用Epsilon-greedy了),Critic基于Actor的动作进行打分,Actor再根据Critic的得分修改选择动作的概率。
我们知道状态价值函数如下:
Vπ(s,a)=a∑π(a∣s)Qπ(s,a)
策略函数 π 以及动作价值函数 Qπ 可以分别用两个神经网络来表示,也是分别对应Actor与Critic。
对于Actor,用神经网络(即策略网络)π(a∣s;θ) 来近似策略函数 π(a∣s),θ 是决定策略的参数。Actor的目标是选出最优的策略,使得状态价值函数最大。更新方法采用Policy-Gradient。然而在更新过程中 Qπ 的值Actor是不知道的,所以需要Critic来更新这一值。
对于Critic,用神经网络(即价值网络 )q(s,a;ω) 来近似价值函数 Qθ(s,a),ω 是神经网络的参数。Critic的目标对Actor选出的动作打分,然后作为Actor的监督信号,指导Actor更新参数。更新方法采用时序差分(TD)方法。其实本质上就是在更新q-function。
如何训练?
我们来看看具体如何训练。实际上,这两个网络是同时训练的。步骤如下:
- 观察到初始状态 st
- 从策略函数 π 随机采样动作 at,进入到下一状态 st+1,得到了环境的奖励 rt
- 使用时序差分方法更新 ω
- 使用策略梯度方法更新 θ
在参数更新上,我们知道Actor在初始状态 st 下,基于随机策略 θ 选择了一个动作at,进入到了下一状态 st+1,得到了环境的奖励 rt。在Q-function中,我们知道需要用 Q-估计 减去 Q-当前 来得到误差,但是 Q-估计 的值并不知道下一状态 st+1 选的动作 at+1 具体是哪个,所以 at+1 通过随机采样得到 a^t+1,近似的 Q-估计为 rt+γ(q(st+1,a^t+1;ω)),Critic的TD-error就可以表示为:
δt=q(st,at;ω)−(rt+γ(q(st+1,a^t+1;ω)))
再利用梯度下降来更新参数 ω,α 是学习率,如下:
loss=21[q(st,at;ω)−(rt+γ(q(st+1,a^t+1;ω)))]2ωt+1==ωt−α⋅∂ω∂loss∣ω=ωtωt−α⋅δt⋅∂ω∂q(st,at;ω)∣ω=ωt
然后回到Actor的更新上,基于策略梯度,我们知道采用的是梯度上升来更新参数,β 是学习率,如下:
θt+1=θt+β⋅δt⋅∂θ∂lnπ(a∣s;θ)∣θ=θt
至此,算法就完成一次更新。值得注意的是,在这样的一次算法更新中,只执行了一次动作即 at,a^t+1 只是采样用来估计Q值,并不执行。
小结
Actor的前身是策略梯度,它基于随机性策略输出一个动作,Critic作为评委,对这个动作进行打分,将得分作为监督信号返回给Actor,Actor借此更新策略。Critic的前身是Q-learning这样的时序差分方法,能进行单步更新。 Critic 通过学习环境和奖励之间的关系,能看到现在所处状态的潜在奖励,这样使得AC可以单步更新,更有效率。
但是,AC也有缺点,Actor-Critic 的两个神经网络,每次都是在连续状态中更新参数,每次参数更新前后都存在相关性,导致神经网络只能片面的看待问题,甚至可能学不到东西。为了解决这一问题,Google DeepMind提出了叫DDPG的算法,解决了这一问题。我们将在下一篇文章中详细介绍这一算法。
参考
- 深度强化学习(全)_哔哩哔哩_bilibili
- 什么是 Actor Critic - 强化学习 (Reinforcement Learning) | 莫烦Python (mofanpy.com)