强化学习的前世今生(四)— DDPG算法

接前三篇
强化学习的前世今生(一)
强化学习的前世今生(二)
强化学习的前世今生(三)— PPO算法
本文为大家介绍DDPG算法

6 DDPG

前文所述方法存在两个问题,第一,因为得到的是随机性策略(Stochastic Policy),即 π ( a ∣ s ) \pi(a|s) π(as),该策略表示固定动作下各动作的概率,故须要满足离散动作空间的假设;第二,因为行为策略与目标策略相同,故算法是在线的,样本效率低,此时策略称为在线策略(on-policy)。为解决上述两个问题,研究人员设计出深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)算法,采用确定性策略(Deterministic Policy) μ ( s ) \mu(s) μ(s),建立从状态到动作的确定性映射,以扩展到连续动作空间的,同时采用离线的策略梯度进行策略更新,从而可以通过经验回访池(Replay Buffer)存储历史数据,并离线优化策略。

首先,将目标函数重新定义为
J ( θ ) = ∫ ν π β ( s ) V π θ ( s ) d s = ∫ ν π β ( s ) Q π θ ( s , μ θ ( s ) ) d s (6.1) \begin{align*} J(\theta)&=\int \nu^{\pi_\beta}(s)V^{\pi_{\theta}}(s)ds\\ &=\int \nu^{\pi_\beta}(s)Q^{\pi_{\theta}}(s,\mu_{\theta}(s))ds\\ \end{align*}\tag{6.1} J(θ)=νπβ(s)Vπθ(s)ds=νπβ(s)Qπθ(s,μθ(s))ds(6.1)
上式中,行为策略 π β \pi_\beta πβ与目标策略 π θ \pi_{\theta} πθ不同,故满足离线要求。

可以近似地得到目标函数的梯度
∇ θ J ( θ ) ≈ E s ∼ ν π β ( s ) [ ∇ θ μ θ ( s ) ∇ a Q μ θ ( s , a ) ∣ a = μ θ ( s ) ] (6.2) \nabla_{\theta}J(\theta)\approx\mathbb{E}_{s\sim \nu^{\pi_{\beta}}(s)}[\nabla_{\theta}\mu_{\theta}(s)\nabla_{a}Q^{\mu_{\theta}}(s,a)|_{a=\mu_{\theta}(s)}]\tag{6.2} θJ(θ)Esνπβ(s)[θμθ(s)aQμθ(s,a)a=μθ(s)](6.2)
上式中期望内部可以理解为,先估计出 Q μ θ Q^{\mu_{\theta}} Qμθ,然后认为动作价值函数的形式固定,不再随 θ \theta θ而改变,可记为 Q = Q μ θ Q=Q^{\mu_{\theta}} Q=Qμθ,最后对 Q ( s , μ θ ( s ) ) Q(s,\mu_{\theta}(s)) Q(s,μθ(s))求梯度 ∇ θ Q ( s , μ θ ( s ) ) \nabla_{\theta}Q(s,\mu_{\theta}(s)) θQ(s,μθ(s)),从整体看,通过上式进行梯度上升优化的过程即为对固定的 Q Q Q函数,找到一个确定性策略 μ θ \mu_{\theta} μθ,使得不论状态服从何种状态访问分布,在期望意义下最大化 Q Q Q值。

对于价值网络,优化目标是使得 Q w ( s i , a i ) Q_{w}(s_i,a_i) Qw(si,ai)逼近TD目标 r i + 1 + γ Q w ( s i ′ , μ θ ( s i ′ ) ) r_{i+1}+\gamma Q_{w}(s^{\prime}_i,\mu_{\theta}(s^{\prime}_i)) ri+1+γQw(si,μθ(si)),然而,TD目标本身就包含策略网络和价值网络的输出,因此在频繁更新网络参数 w , θ w,\theta w,θ的同时TD目标也在不断改变,这容易导致神经网络训练的不稳定性。为解决此问题,DDPG通过另一套神经网络来计算TD目标,这样的网络称为目标网络,记为 Q w − , μ θ − Q_{w^{-}},\mu_{\theta^{-}} Qw,μθ,而原来的网络称为训练网络,这样便可以固定住TD目标,使其单次在优化中保持不变。在DDPG中,目标网络采用了软更新的方式,即在每次样本迭代中,让目标网络参数缓慢更新,逐渐接近训练网络,即
w − ← ϕ w + ( 1 − ϕ ) w − θ − ← ϕ θ + ( 1 − ϕ ) θ − (6.3) \begin{align*} w^{-}&\leftarrow\phi w+(1-\phi)w^{-}\\ \theta^{-}&\leftarrow\phi \theta+(1-\phi)\theta^{-}\\ \end{align*}\tag{6.3} wθϕw+(1ϕ)wϕθ+(1ϕ)θ(6.3)
其中 ϕ \phi ϕ是一个很小的正数。

DDPG的伪代码如下:


1 初始化策略网络参数 θ \theta θ和价值网络参数 w w w

2 复制相同参数到目标策略网络参数 θ − \theta^{-} θ和目标价值网络参数 w − w^{-} w,即令 w − ← w ,   θ − ← θ w^{-}\leftarrow w,\,\theta^{-}\leftarrow \theta ww,θθ

3 如果策略网络参数或价值网络参数没有收敛,循环执行

4 获取环境初始状态 s 0 s_0 s0,循环执行

5 根据噪声和当前策略 π θ \pi_{\theta} πθ选择动作 a t = μ θ ( s t ) + ϵ a_t=\mu_{\theta}(s_t)+\epsilon at=μθ(st)+ϵ

6 执行动作 a t a_t at,得到奖励 r t r_t rt,进入下一个状态 s t + 1 s_{t+1} st+1

7 将 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)放入经验回放池 R \mathcal{R} R

8 从经验回放池 R \mathcal{R} R中抽样 N N N个元组 { ( s i , a i , r i , s i ′ ) } i = 1 , ⋯   , N \{(s_i,a_i,r_i,s^{\prime}_i)\}_{i=1,\cdots,N} {(si,ai,ri,si)}i=1,,N

9 对每个元组,通过目标网络计算 y i = r i + 1 + γ Q w − ( s i ′ , μ θ − ( s i ′ ) ) y_i=r_{i+1}+\gamma Q_{w^{-}}(s^{\prime}_i,\mu_{\theta^{-}}(s^{\prime}_i)) yi=ri+1+γQw(si,μθ(si))

10 构造价值网络的损失函数
L ( w ) = 1 N ∑ i = 1 N ( y i − Q w ( s i , a i ) ) 2 L(w)=\frac{1}{N}\sum_{i=1}^{N}(y_i-Q_{w}(s_i,a_i))^2 L(w)=N1i=1N(yiQw(si,ai))2
11 自动推导梯度并更新价值网络参数 w ← w − α w ∇ w L ( w ) w\leftarrow w-\alpha_{w}\nabla_{w}L(w) wwαwwL(w)

12 构造策略网络的目标函数
J ( θ ) = 1 N ∑ i = 1 N γ t Q w ( s i , μ θ ( s i ) ) J(\theta)=\frac{1}{N}\sum_{i=1}^{N}\gamma^tQ_{w}(s_i,\mu_{\theta}(s_i)) J(θ)=N1i=1NγtQw(si,μθ(si))
13 自动推导梯度并更新价值网络参数 θ ← θ + α θ ∇ θ J ( θ ) \theta\leftarrow\theta+\alpha_{\theta}\nabla_{\theta}J(\theta) θθ+αθθJ(θ)

14 采用软更新的方式更新目标网络参数
w − ← ϕ w + ( 1 − ϕ ) w − θ − ← ϕ θ + ( 1 − ϕ ) θ − \begin{align*} w^{-}&\leftarrow\phi w+(1-\phi)w^{-}\\ \theta^{-}&\leftarrow\phi \theta+(1-\phi)\theta^{-}\\ \end{align*} wθϕw+(1ϕ)wϕθ+(1ϕ)θ


参考 动手学强化学习

你可能感兴趣的:(算法,人工智能,自动化,强化学习,学习)