在前面的文章强化学习Actor-Critic算法中介绍了Actor-Critic算法。Actor-Critic算法可以解决随机决策的连续动作空间的强化学习算法,但其缺点也很明显,Critic网络难以收敛。此外,当连续动作空间维度非常高的时候,采样所耗费的成本也会比较高。
因此,DeepMind在提出了一种增强算法,即深度确定性策略梯度DDPG。DDPG对Actor-Critic算法的进行了增强,它将Actor的输出由随机策略变为了确定性的策略,且使用“soft”的方式来更新参数以及一些探索噪声加快收敛速度。
算法思想
在DDPG之前,Actor的输出是每一个动作被采取的概率,真正执行的动作需要基于这个概率分布进行采样来得到,最终的策略是一个随机决策。可以使用如下公式表示:
πθ(a∣s)=P(a∣s;θ)
在DDPG中,使用如下的公式来替代原本的采样方式,输出一个确定性的策略:
a=μθ(s)
由于是直接输出的确定性的动作,没有采样的这个过程,因此即使动作空间维度非常高,预测成本也不会提高太多。
网络结构
DDPG也拥有Actor网络和Critic网络,不同之处在于,这里的Actor和Critic网络都分为了两个网络,即target-net和eval-net。这一点是参考之前的网络结构,双网络结构往往会使算法更加稳定。因此,DDPG一共有四个网络。但是其中真正需要通过样本来更新参数的网络只有两个,即Actor和Critic对应的eval-net。
这里target-net的更新方式和之前介绍的双网络结构不同。之前介绍的双网络结构一般采用"hard"模式来更新,每隔一段时间直接从eval-net拷贝一份。DDPG则采用了"soft"模式,在每一个迭代中,少量部分的更新target-net的参数。
此外,在训练的过程中,会添加一些噪声来增加探索空间,作用在Actor网络的输出上,将网络的输出改写为下面这个公式:
μ′(st)=μ(st∣θtμ)+N^
其中N^表示噪声。
目标函数
在DDPG中,Critic的目标函数与之前一样,没有什么变化:
yj=ri+γQ′(si+1,μ′(si+1∣θμ′)∣θQ′)L=N1i∑(yi−Q(si,ai;θQ))2
Actor的目标函数如下:
∇θμJ≈N1i∑∇aQ(s,a∣θQ)∣s=si,a=μ(si)∇θμμ(s∣θμ)∣si
实际上和之前的也差不多,根据Critic的评价,根据Q值对动作进行促进或者抑制。这里有一个需要注意的地方,由于Actor的目标函数需要对动作a求梯度,因此DDPG不适用于离散动作空间的强化学习问题,离散动作无法求梯度。
算法流程
主要迭代流程如下:
-
通过Actor网络选择动作a_t=\mu(s_t|\theta^\mu)+\N_t。
-
执行动作at并得到奖励rt和观测状态st+1。
-
将新的记忆(st,at,rt,st+1)存到记忆池R中。
-
随机从R中选择N个记忆。
-
通过以下公式计算Q值:
yi=ri+γQ′(si+1,μ′(si+1∣θμ′)∣θQ′)
-
更新Critic网络参数:
L=N1i∑(yi−Q(si,ai∣θQ))2
-
计算Actor梯度:
∇θμJ≈N1i∑∇aQ(s,a∣θQ)∣s=si,a=μ(si)∇θμμ(s∣θμ)∣si
-
更新Actor网络参数:
θQ′=τθQ+(1−τ)θQ′θμ′=τθμ+(1−τ)θμ′