DDPG(deep deterministic policy gradient)——连续控制的深度确定性策略梯度
学习记录,有错误感谢指出
基本概念
深度确定性策略梯度(DDPG)是当前最常用的连续控制方法. ”深度“表明其使用了深度神经网络,”确定性“表明其输出的是确定的动作。
DDPG属于一种actor-critic的方法,它有一个策略网络(actor)和一个价值网络(critic).
- 策略网络控制agent,它基于状态s输出动作a.
- 价值网络不控制agent,它只是基于状态s对动作a打分,从而指导策略网络做出改进.
相关定义:
-
确定性策略网络μ:定义为一个函数,每一步的action可以通过 a t = μ ( s t ) a_{t}=\mu(s_{t}) at=μ(st),其参数为 θ μ \theta^\mu θμ
-
行为策略 b e h a v i o r p o l i c y β behavior\ policy \beta behavior policyβ:在RL训练过程中,为了同时兼顾 exploration和exploitation,采用异策略方法,即行为策略可以不同于目标策略.
-
目标策略(target policy):确定性策略网络 μ ( s ; θ n e w ) \mu(s;\theta_{new}) μ(s;θnew),其中 θ n e w \theta_{new} θnew是策略网络最新的参数.
-
行为策略(behavior policy):为行为策略加入随机噪声: a = μ ( s ; θ o l d ) + ϵ a=\mu(s;\theta_{old})+\epsilon a=μ(s;θold)+ϵ.
-
异策略的好处是可以把收集经验与训练神经网络分开进行;将根据behavior policy收集的经验存放至replay buffer,在训练target policy的时候,重复利用收集到的经验,如下图所示:
-
利用behavior policy与环境进行交互,将agent的轨迹整理成 ( s t , a t , r t , s t + 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)时,需要用到 四元组的 s t , a t , r t , s t + 1 s_t, a_t, r_t, s_{t+1} st,at,rt,st+1全部四个元素.
1)首先计算TD Target
①由 Target 策略网络预测 s t + 1 s_{t+1} st+1对应的下一动作: a ^ t + 1 = μ ( s t + 1 ; θ − ) \hat a_{t+1}=\mu(s_{t+1};\theta^-) a^t+1=μ(st+1;θ−)
②由 Target 价值网络计算 TD Target: y ^ t = r t + γ ⋅ q ( s t + 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 价值对状态
(
s
t
,
a
t
)
(s_t,a_t)
(st,at) 预测action value的值
q
^
t
=
q
(
s
t
,
a
t
;
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):
L
o
s
s
=
1
N
∑
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_i
y^i 的计算使用的是target策略网络 和 target价值网络,这样做是为了使学习更加稳定,易于收敛.
2.更新策略网络(Actor)
训练策略网络 μ ( s ; θ ) \mu(s;\theta) μ(s;θ)时,只需要用到四元组中的状态 s t s_t st.
输入状态 s t s_t st,策略网络会输出一个动作 a t = μ ( s t ) 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 θ通过影响 a t a_t at 进而影响 Critic 的打分 q ^ \hat q q^. 因此分数 q ^ \hat q q^可以反映 θ \theta θ的好坏. 所以令分数 q ^ \hat q q^作为目标函数,通过对 θ \theta θ进行梯度上升来改进Actor.
训练策略网络(Actor)的目的就是让它迎合价值网络(Critic),使其输出的action可以得到更高的分数,即选择更好的动作.
推导过程
对于状态
s
t
s_t
st,可以经过策略网络和价值网络后,可以得到打分为:
q
(
s
,
μ
(
s
;
θ
)
;
w
)
q(s,\mu(s;\theta);w)
q(s,μ(s;θ);w)
我们希望打分的期望值尽量高,故将目标函数定义为打分的期望:
J
(
θ
)
=
E
S
[
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
θ,即价值网络的参数
w
w
w被固定住了,不会被更新.
在真实训练过程中,我们用随机梯度上升进行训练. 即每次用随机变量 S 的一个观测值
s
j
s_j
sj来计算
J
(
θ
)
J(\theta)
J(θ)的梯度:
g
j
=
▽
θ
q
(
s
,
μ
(
s
j
,
θ
)
;
w
)
g_j = \bigtriangledown_{\theta}q(s,\mu(s_j,\theta);w)
gj=▽θq(s,μ(sj,θ);w)
g
j
g_j
gj叫做确定性策略梯度(DPG)
下面再用链式法则计算出
g
j
g_j
gj,即:
δ
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 , μ ( s j , θ ) ; w ) = ▽ θ μ ( s j ; θ ) ⋅ ▽ a q ( s j , a j ^ ; w ) , 其中 a j ^ = μ ( s j ; θ ) \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中随机抽取一个状态,记作
s
j
s_j
sj. 计算策略网络做出的动作
a
j
^
=
μ
(
s
j
;
θ
)
\hat {a_j}=\mu(s_j;\theta)
aj^=μ(sj;θ). 用梯度上升更新一次
θ
\theta
θ.
θ
←
θ
+
β
⋅
▽
θ
μ
(
s
j
;
θ
)
⋅
▽
a
q
(
s
j
,
a
j
^
;
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.csdn.net/kenneth_yu/article/details/78478356
《深度强化学习》——王树森;黎彧君;张志华