1.从随机策略到确定性策略
首先,我们先了解一下随机策略和确定性策略。
随机策略的公式为:
π θ ( a ∣ s ) = P [ a ∣ s ; θ ] \pi_{\theta}\left(a|s\right)=P\left[a|s;\theta\right] πθ(a∣s)=P[a∣s;θ]
其含义是,在状态为s时,动作符合参数为 θ \theta θ的概率分布。因此,我们可以总结说,采用随机策略时,即使在相同的状态,每次所采取的动作也很可能不一样。
我们再来看看确定性策略的公式:
a = μ θ ( s ) a=\mu_{\theta}\left(s\right) a=μθ(s)
跟随机策略不同,相同的策略(即 θ \theta θ 相同时),在状态s时,动作是唯一确定的。
下面我们比较一下随机策略和确定性策略的优缺点。
确定性策略的优点在于需要采样的数据少,算法效率高。
首先,我们看随机策略的梯度计算公式:
∇ θ J ( π θ ) = E s ∼ ρ π , a ∼ π θ [ ∇ θ log π θ ( a ∣ s ) Q π ( s , a ) ] \nabla_{\theta}J\left(\pi_{\theta}\right)=E_{s\sim\rho^{\pi},a\sim\pi_{\theta}}\left[\nabla_{\theta}\log\pi_{\theta}\left(a|s\right)Q^{\pi}\left(s,a\right)\right] ∇θJ(πθ)=Es∼ρπ,a∼πθ[∇θlogπθ(a∣s)Qπ(s,a)]
上式表明,策略梯度公式是关于状态和动作的期望,在求期望时,需要对状态分布和动作分布求积分。这就要求在状态空间和动作空间采集大量的样本,这样求均值才能近似期望。
然而,确定性策略的动作是确定的,所以如果存在确定性策略梯度,策略梯度的求解不需要在动作空间进行采样积分。因此,相比于随机策略方法,确定性策略需要的样本数据要小。尤其是对那些动作空间很大的智能体(比如多关节机器人),其动作空间维数很大。如果用随机策略,需要在这些动作空间中进行大量的采样。
通常来说,确定性策略方法的效率比随机策略的效率高十倍,这也是确定性策略方法最主要的优点。
相比于确定性策略,随机策略也有它自身的优点:随机策略可以将探索和改善集成到一个策略中。
而对于确定性策略,给定状态s和策略参数 θ \theta θ时,动作是固定的。也就是说,当初始状态已知时,用确定性策略所产生的轨迹永远都是固定的,智能体无法探索其它的轨迹或访问其它的状态,从这个层面来说,智能体无法学习。我们知道,强化学习算法是通过智能体与环境交互来学习的。这里的交互是指探索性交互,即智能体会尝试很多动作,然后在这些动作中学到好的动作。
既然确定性策略无法探索环境,那么它如何学习呢?
答案就是利用异策略学习方法,即off-policy。异策略是指行动策略和评估策略不是一个策略。这里我们的行动策略是随机策略,以保证充足的探索。评估策略是确定性策略。整个确定性策略的学习框架采用AC(Actor-Critic Algorithm)的方法。
AC算法包括两个同等地位的元素,一个元素是Actor即行动策略,另一个元素是Critic策略即评估,这里是指利用函数逼近方法估计值函数。
我们先看看随机策略AC的方法。
随机策略的梯度为
∇ θ J ( π θ ) = E s ∼ ρ π , a ∼ π θ [ ∇ θ log π θ ( a ∣ s ) Q π ( s , a ) ] \nabla_{\theta}J\left(\pi_{\theta}\right)=E_{s\sim\rho^{\pi},a\sim\pi_{\theta}}\left[\nabla_{\theta}\log\pi_{\theta}\left(a|s\right)Q^{\pi}\left(s,a\right)\right] ∇θJ(πθ)=Es∼ρπ,a∼πθ[∇θlogπθ(a∣s)Qπ(s,a)]
其中Actor方法用来调整 θ \theta θ值;Critic方法逼近值函数 Q w ( s , a ) ≈ Q π ( s , a ) Q^w\left(s,a\right)\approx Q^{\pi}\left(s,a\right) Qw(s,a)≈Qπ(s,a),其中 w w w为待逼近的参数,可用TD学习的方法评估值函数。
异策略随机策略梯度:
∇ θ J β ( π θ ) = E s ∼ ρ β , a ∼ β [ π θ ( a ∣ s ) β θ ( a ∣ s ) ∇ θ log π θ ( a ∣ s ) Q π ( s , a ) ] \nabla_{\theta}J_{\beta}\left(\pi_{\theta}\right)=E_{s\sim\rho^{\beta},a\sim\beta}\left[\frac{\pi_{\theta}\left(a|s\right)}{\beta_{\theta}\left(a|s\right)}\nabla_{\theta}\log\pi_{\theta}\left(a|s\right)Q^{\pi}\left(s,a\right)\right] ∇θJβ(πθ)=Es∼ρβ,a∼β[βθ(a∣s)πθ(a∣s)∇θlogπθ(a∣s)Qπ(s,a)]
采样策略为 β \beta β。
为了给出确定性策略AC的方法,我们首先给出确定性策略梯度:
∇ θ J ( μ θ ) = E s ∼ ρ μ [ ∇ θ μ θ ( s ) ∇ a Q μ ( s , a ) ∣ a = μ θ ( s ) ] \nabla_{\theta}J\left(\mu_{\theta}\right)=E_{s\sim\rho^{\mu}}\left[\nabla_{\theta}\mu_{\theta}\left(s\right)\nabla_aQ^{\mu}\left(s,a\right)|_{a=\mu_{\theta}\left(s\right)}\right] ∇θJ(μθ)=Es∼ρμ[∇θμθ(s)∇aQμ(s,a)∣a=μθ(s)]
和随机策略梯度相比,少了对动作的积分,多了回报函数对动作的导数。
异策略确定性策略梯度为:
∇ θ J β ( μ θ ) = E s ∼ ρ β [ ∇ θ μ θ ( s ) ∇ a Q μ ( s , a ) ∣ a = μ θ ( s ) ] \nabla_{\theta}J_{\beta}\left(\mu_{\theta}\right)=E_{s\sim\rho^{\beta}}\left[\nabla_{\theta}\mu_{\theta}\left(s\right)\nabla_aQ^{\mu}\left(s,a\right)|_{a=\mu_{\theta}\left(s\right)}\right] ∇θJβ(μθ)=Es∼ρβ[∇θμθ(s)∇aQμ(s,a)∣a=μθ(s)]
和随机策略梯度相比,确定性策略梯度求解时少了重要性权重,这是因为重要性采样是用简单的概率分布去估计复杂的概率分布,而确定性策略的动作为确定值而不是概率分布,另外确定性策略的值函数评估用的是Qlearning的方法,即用 T D ( 0 ) TD(0) TD(0)来估计动作值函数并忽略重要性权重。
有了上式,我们便可以得到确定性策略异策略AC算法的更新过程,如下:
δ t = r t + γ Q w ( s t + 1 , μ θ ( s t + 1 ) ) − Q w ( s t , a t ) w t + 1 = w t + α w δ t ∇ w Q w ( s t , a t ) θ t + 1 = θ t + α θ ∇ θ μ θ ( s t ) ∇ a Q w ( s t , a t ) ∣ a = μ θ ( s ) \delta_t=r_t+\gamma Q^w\left(s_{t+1},\mu_{\theta}\left(s_{t+1}\right)\right)-Q^w\left(s_t,a_t\right)\\\\\ w_{t+1}=w_t+\alpha_w\delta_t\nabla_wQ^w\left(s_t,a_t\right) \\ \theta_{t+1}=\theta_t+\alpha_{\theta}\nabla_{\theta}\mu_{\theta}\left(s_t\right)\nabla_aQ^w\left(s_t,a_t\right)|_{a=\mu_{\theta}\left(s\right)} δt=rt+γQw(st+1,μθ(st+1))−Qw(st,at) wt+1=wt+αwδt∇wQw(st,at)θt+1=θt+αθ∇θμθ(st)∇aQw(st,at)∣a=μθ(s)
上式第一行和第二行是利用值函数逼近的方法更新值函数参数,第三行是利用确定性策略梯度的方法更新策略参数。
以上介绍的是确定性策略梯度方法,可以称为DPG的方法。有了DPG,我们再讲DDPG。
DDPG是深度确定性策略,所谓深度是指利用深度神经网络逼近行为值函数 Q w ( s , a ) Q^w\left(s,a\right) Qw(s,a)和确定性策略 μ θ ( s ) \mu_{\theta}\left(s\right) μθ(s)。
2.从DPG到DDPG
当利用深度神经网络进行函数逼近的时候,强化学习算法常常不稳定。这是因为,对深度神经网络进行训练的时候往往假设输入的数据是独立同分布的,但强化学习的数据是顺序采集的,数据之间存在马尔科夫性,很显然这些数据并非独立同分布的。
为了打破数据之间的相关性,DQN用了两个技巧:经验回放和独立的目标网络。DDPG的算法便是将这两条技巧用到了DPG算法中。
从DPG到DDPG的过程,除了经验回放以外,我们有了双网络,即当前网络和目标网络的概念。而由于现在我们本来就有Actor网络和Critic两个网络,那么双网络就变成了4个网络,分别是:Actor当前网络,Actor目标网络,Critic当前网络,Critic目标网络。2个Actor网络的结构相同,2个Critic网络的结构相同。
我们总结下DDPG 4个网络的功能定位:
DDPG除了这4个网络结构,还用到了经验回放,这部分用于计算目标Q值。
此外,DDPG从当前网络到目标网络的复制和DQN不一样。DQN是直接把当前 Q Q Q网络的参数复制到目标 Q Q Q网络,即 w ′ w^{\prime} w′= w w w, DDPG这里没有使用这种硬更新,而是使用了软更新,即每次参数只更新一点点,即:
w ′ ← τ w + ( 1 − τ ) w ′ w^{\prime} \leftarrow \tau w+(1-\tau) w^{\prime} w′←τw+(1−τ)w′
θ ′ ← τ θ + ( 1 − τ ) θ ′ \theta^{\prime} \leftarrow \tau \theta+(1-\tau) \theta^{\prime} θ′←τθ+(1−τ)θ′
其中 τ \tau τ是更新系数,一般取的比较小,比如0.1或者0.01这样的值。
同时,为了学习过程可以增加一些随机性,增加学习的覆盖,DDPG对选择出来的动作 A A A会增加一定的噪声 N \mathcal{N} N,即最终和环境交互的动作 A A A的表达式是:
A = π θ ( S ) + N A=\pi_{\theta}(S)+\mathcal{N} A=πθ(S)+N
最后,我们来看看DDPG的损失函数。对于Critic当前网络,其损失函数和DQN是类似的,都是均方误差,即:
J ( w ) = 1 m ∑ j = 1 m ( y j − Q ( ϕ ( S j ) , A j , w ) ) 2 J(w)=\frac{1}{m} \sum_{j=1}^{m}\left(y_{j}-Q\left(\phi\left(S_{j}\right), A_{j}, w\right)\right)^{2} J(w)=m1∑j=1m(yj−Q(ϕ(Sj),Aj,w))2
而对于 Actor当前网络,其损失函数就和PG不同了,这里由于是确定性策略,原论文定义的损失梯度是:
∇ J ( θ ) = 1 m ∑ j = 1 m [ ∇ a Q ( s i , a i , w ) ∣ s = s i , a = π θ ( s ) ∇ θ π θ ( s ) ∣ s = s i ] \nabla_{J}(\theta)=\frac{1}{m} \sum_{j=1}^{m}\left[\nabla_{a} Q_{\left.\left(s_{i}, a_{i}, w\right)\right|_{s=s_{i}, a=\pi_{\theta}(s)}} \nabla_{\theta}\left.\pi_{\theta(s)}\right|_{s=s_{i}}\right] ∇J(θ)=m1∑j=1m[∇aQ(si,ai,w)∣s=si,a=πθ(s)∇θπθ(s)∣∣s=si]
看起来比较麻烦,但是其实理解起来很简单。假如对同一个状态,我们输出了两个不同的动作 a 1 a_{1} a1和 a 2 a_{2} a2,从Critic当前网络得到了两个反馈的Q值,分别是 Q 1 Q_{1} Q1, Q 2 Q_{2} Q2,假设 Q 1 Q_{1} Q1> Q 2 Q_{2} Q2,即采取动作1可以得到更多的奖励,那么策略梯度的思想就是增加 a 1 a_{1} a1的概率,降低 a 2 a_{2} a2的概率,也就是说,Actor想要尽可能的得到更大的 Q Q Q值。所以我们的Actor的损失可以简单的理解为得到的反馈 Q Q Q值越大损失越小,得到的反馈 Q Q Q值越小损失越大,因此只要对状态估计网络返回的 Q Q Q值取个负号即可,即:
J ( θ ) = − 1 m ∑ j = 1 m Q ( s i , a i , w ) J(\theta)=-\frac{1}{m} \sum_{j=1}^{m} Q_{\left(s_{i}, a_{i}, w\right)} J(θ)=−m1∑j=1mQ(si,ai,w)
3. DDPG算法流程
这里我们总结下DDPG的算法流程。首先给出DDPG的更新公式:
δ t = r t + γ Q w − ( s t + 1 , μ θ − ( s t + 1 ) ) − Q w ( s t , a t ) \delta_{t}=r_{t}+\gamma Q^{w^{-}}\left(s_{t+1}, \mu_{\theta^{-}}\left(s_{t+1}\right)\right)-Q^{w}\left(s_{t}, a_{t}\right) δt=rt+γQw−(st+1,μθ−(st+1))−Qw(st,at)
w t + 1 = w t + α w δ t ∇ w Q w ( s t , a t ) w_{t+1}=w_{t}+\alpha_{w} \delta_{t} \nabla_{w} Q^{w}\left(s_{t}, a_{t}\right) wt+1=wt+αwδt∇wQw(st,at)
θ t + 1 = θ t + α θ ∇ θ μ θ ( s t ) ∇ a Q w ( s t , a t ) ∣ a = μ θ ( s ) \theta_{t+1}=\theta_{t}+\alpha_{\theta} \nabla_{\theta} \mu_{\theta}\left(s_{t}\right) \nabla_{a} Q^{w}\left.\left(s_{t}, a_{t}\right)\right|_{a=\mu_{\theta}(s)} θt+1=θt+αθ∇θμθ(st)∇aQw(st,at)∣a=μθ(s)
θ − = τ θ + ( 1 − τ ) θ − \theta^{-}=\tau \theta+(1-\tau) \theta^{-} θ−=τθ+(1−τ)θ−
w − = τ w + ( 1 − τ ) w − w^{-}=\tau w+(1-\tau) w^{-} w−=τw+(1−τ)w−
输入:Actor当前网络,Actor目标网络,Critic当前网络,Critic目标网络,参数分别为 θ \theta θ, θ ′ \theta^{\prime} θ′, w w w, w ′ w^{\prime} w′,衰减因子 γ \gamma γ, 软更新系数 τ \tau τ,批量梯度下降的样本数 m m m,目标Q网络参数更新频率 C C C。最大迭代次数 T T T。随机噪音函数 N \mathcal{N} N
输出:最优Actor当前网络参数 θ θ θ,Critic当前网络参数 w w w
以上就是DDPG算法的主流程,要注意的是上面的步骤 f) 中的 π θ ′ ( ϕ ( S j ′ ) ) \pi_{\theta^{\prime}}\left(\phi\left(S_{j}^{\prime}\right)\right) πθ′(ϕ(Sj′))是通过Actor目标网络得到,而 Q ′ ( ϕ ( S j ′ ) , π θ ′ ( ϕ ( S j ′ ) ) , w ′ ) Q^{\prime}\left(\phi\left(S_{j}^{\prime}\right), \pi_{\theta^{\prime}}\left(\phi\left(S_{j}^{\prime}\right)\right), w^{\prime}\right) Q′(ϕ(Sj′),πθ′(ϕ(Sj′)),w′)则是通过Critic目标网络得到的。
参考文献:
[1]https://www.cnblogs.com/pinard/p/10345762.html
[2]https://zhuanlan.zhihu.com/p/26441204