DDPG(deep deterministic policy gradient)——连续控制的深度确定性策略梯度
学习记录,有错误感谢指出
基本概念
深度确定性策略梯度(DDPG)是当前最常用的连续控制方法. ”深度“表明其使用了深度神经网络,”确定性“表明其输出的是确定的动作。
DDPG属于一种actor-critic的方法,它有一个策略网络(actor)和一个价值网络(critic).
- 策略网络控制agent,它基于状态s输出动作a.
- 价值网络不控制agent,它只是基于状态s对动作a打分,从而指导策略网络做出改进.
相关定义:
-
确定性策略网络μ:定义为一个函数,每一步的action可以通过at=μ(st)a_{t}=\mu(s_{t})at=μ(st),其参数为θμ\theta^\muθμ
-
行为策略 behavior policyβbehavior\ policy \betabehavior policyβ:在RL训练过程中,为了同时兼顾 exploration和exploitation,采用异策略方法,即行为策略可以不同于目标策略.
-
目标策略(target policy):确定性策略网络μ(s;θnew)\mu(s;\theta_{new})μ(s;θnew),其中θnew\theta_{new}θnew是策略网络最新的参数.
-
行为策略(behavior policy):为行为策略加入随机噪声:a=μ(s;θold)+ϵa=\mu(s;\theta_{old})+\epsilona=μ(s;θold)+ϵ.
-
异策略的好处是可以把收集经验与训练神经网络分开进行;将根据behavior policy收集的经验存放至replay buffer,在训练target policy的时候,重复利用收集到的经验,如下图所示:
-
利用behavior policy与环境进行交互,将agent的轨迹整理成(st,at,rt,st+1)(s_t, a_t, r_t, s_{t+1})(st,at,rt,st+1)这样的四元组存放在经验回放缓存(replay buffer)中. 在训练的时候,随机从缓存中取出四元组进行训练.
DDPG网络框架
DDPG是actor-critic的结构,同时引入DQN的思想(online和target 网络)
如果对actor和critic只使用Q神经网络的话,学习过程不稳定,这是由bootstrapping带来的问题(Q神经的参数在被更新的同时,又用于计算Q网络和策略网络的gradient)
所以,DDPG分别为策略网络和价值网络各创建了两个神经网络的拷贝,一个叫online,一个叫target:
在训练完一个batch后,SGD算法实时更新online网络的参数,随后再通过soft update算法更新target网络的参数.
- 优点:target网络参数变化小,用于在训练过程中计算online网络的gradient,比较稳定,训练易于收敛。
- 缺点:参数变化小,学习过程变慢。
训练流程
下面以四元组$(s_t, a_t, r_t, s_{t+1})$为例,介绍训练流程.
1.更新价值网络(Critic)
训练价值网络q(s,a;w)q(s,a;w)q(s,a;w)时,需要用到 四元组的st,at,rt,st+1s_t, a_t, r_t, s_{t+1}st,at,rt,st+1全部四个元素.
1)首先计算TD Target
①由 Target 策略网络预测 st+1s_{t+1}st+1对应的下一动作: a^t+1=μ(st+1;θ−)\hat a_{t+1}=\mu(s_{t+1};\theta^-)a^t+1=μ(st+1;θ−)
②由 Target 价值网络计算 TD Target: y^t=rt+γ⋅q(st+1,a^t+1;w−)\hat y_t=r_t+\gamma·q(s_{t+1},\hat a_{t+1};w^-)y^t=rt+γ⋅q(st+1,a^t+1;w−)
2)让 online 价值对状态 (st,at)(s_t,a_t)(st,at) 预测action value的值
q^t=q(st,at;w)
\hat q_t=q(s_t,a_t;w)
q^t=q(st,at;w)
TD Error为: δt=q^t−y^t\delta_t=\hat q_t-\hat y_tδt=q^t−y^t
3)对N个样本计算误差的平均值,进行梯度下降更新参数
价值网络的loss定义:类似于监督学习,定义loss为MSE损失( mean squared error):
Loss=1N∑i(q^i−y^i)2
Loss =\frac{1}{N}\sum\limits_i {}(\hat q_i-\hat y_i)^2
Loss=N1i∑(q^i−y^i)2
注意:TD Target y^i\hat y_iy^i 的计算使用的是target策略网络 和 target价值网络,这样做是为了使学习更加稳定,易于收敛.
2.更新策略网络(Actor)
训练策略网络μ(s;θ)\mu(s;\theta)μ(s;θ)时,只需要用到四元组中的状态sts_tst.
输入状态sts_tst,策略网络会输出一个动作at=μ(st)a_{t}=\mu(s_{t})at=μ(st),将这个动作输入价值网络,得到该动作的打分:q^=q(s,a;w){\rm{\hat q = q(s,a;w)}}q^=q(s,a;w). 策略网络的参数θ\thetaθ通过影响 ata_tat 进而影响 Critic 的打分q^\hat qq^. 因此分数q^\hat qq^可以反映θ\thetaθ的好坏. 所以令分数q^\hat qq^作为目标函数,通过对θ\thetaθ进行梯度上升来改进Actor.
训练策略网络(Actor)的目的就是让它迎合价值网络(Critic),使其输出的action可以得到更高的分数,即选择更好的动作.
推导过程
对于状态sts_tst,可以经过策略网络和价值网络后,可以得到打分为:
q(s,μ(s;θ);w)
q(s,\mu(s;\theta);w)
q(s,μ(s;θ);w)
我们希望打分的期望值尽量高,故将目标函数定义为打分的期望:
J(θ)=ES[q(s,μ(S,θ);w)]
J(\theta)=E_S[q(s,\mu(S,\theta);w)]
J(θ)=ES[q(s,μ(S,θ);w)]
上式关于状态S求期望,消除了S的影响. 即不管面对什么样的状态S,策略网络Actor都应该输出较好的动作,使得平均分J(θ)J(\theta)J(θ)尽量高. 策略网络的学习可以建模成最大化问题:
maxθJ(θ)
\mathop {\max }\limits_\theta J(\theta )
θmaxJ(θ)
注意:这里我们只训练策略网络(Actor),所以在最大化过程中我们优化的变量只是策略网络的参数θ\thetaθ,即价值网络的参数www被固定住了,不会被更新.
在真实训练过程中,我们用随机梯度上升进行训练. 即每次用随机变量 S 的一个观测值sjs_jsj来计算J(θ)J(\theta)J(θ)的梯度:
gj=▽θq(s,μ(sj,θ);w)
g_j = \bigtriangledown_{\theta}q(s,\mu(s_j,\theta);w)
gj=▽θq(s,μ(sj,θ);w)
gjg_jgj叫做确定性策略梯度(DPG)
下面再用链式法则计算出gjg_jgj,即:
δqδθ=∂q∂a⋅∂a∂θ
\frac{{\delta q}}{{\delta \theta }} = \frac{{\partial {\rm{q}}}}{{\partial a}}{\rm{\cdot}}\frac{{\partial {\rm{a}}}}{{\partial \theta }}
δθδq=∂a∂q⋅∂θ∂a
应用链式法则可以求得最终的确定性策略梯度
▽θq(s,μ(sj,θ);w)=▽θμ(sj;θ)⋅▽aq(sj,aj^;w),其中aj^=μ(sj;θ) \bigtriangledown_{\theta}q(s,\mu(s_j,\theta);w)=\bigtriangledown_{\theta}\mu(s_j;\theta)· \bigtriangledown_{a}q(s_j,\hat {a_j};w), 其中\hat {a_j}=\mu(s_j;\theta) ▽θq(s,μ(sj,θ);w)=▽θμ(sj;θ)⋅▽aq(sj,aj^;w),其中aj^=μ(sj;θ)
由此,我们最终得到更新θ\thetaθ的算法. 即每次从 replay buffer中随机抽取一个状态,记作sjs_jsj. 计算策略网络做出的动作aj^=μ(sj;θ)\hat {a_j}=\mu(s_j;\theta)aj^=μ(sj;θ). 用梯度上升更新一次θ\thetaθ.
θ←θ+β⋅▽θμ(sj;θ)⋅▽aq(sj,aj^;w).
\theta\leftarrow\theta+\beta·\bigtriangledown_{\theta}\mu(s_j;\theta)· \bigtriangledown_{a}q(s_j,\hat {a_j};w).
θ←θ+β⋅▽θμ(sj;θ)⋅▽aq(sj,aj^;w).
此处的β\betaβ是学习率.
总结
1.DDPG使用的是actor-critic的网络结构;
2.使用了target网络 和 online网络,两个结构完全相同的拷贝神经网络,在一定程度上避免了一个网络的bootstrapping带来的高估问题,使收敛更有保障;
3.DDPG使用了experience replay memory:通过behavior policy与环境进行交互时,产生的transition在时间序列上是高度关联的,如果这些数据序列直接用于训练,会导致神经网络的overfit,不易收敛。DDPG的actor将transition数据先存入experience replay buffer, 然后在训练时,从experience replay buffer中随机采样batch的数据,可以消除样本间的关联性.
Reference:
https://blog.youkuaiyun.com/kenneth_yu/article/details/78478356
《深度强化学习》——王树森;黎彧君;张志华