Double DQN算法
Double Deep Q Network(DDQN)是在DQN算法的基础上稍微改进了一点,优化了算法的性能。
Double DQN算法描述
首先我们要知道Double DQN是解决了DQN当中的什么问题?普通的 DQN 算法通常会导致对Q值的过高估计 (overestimation) ,为什么会出现这样的问题呢,先来看一下传统的DQN怎么处理TD目标的:
Y
t
D
Q
N
=
R
t
+
1
+
γ
max
a
Q
(
s
t
+
1
,
a
;
θ
t
′
)
\begin{align} {Y}_{t}^{DQN}=R_{t+1}+\gamma{\max_{a}Q(s_{t+1},a;\theta_{t}^{'})} \end{align}
YtDQN=Rt+1+γamaxQ(st+1,a;θt′)
式中Q是通过神经网络预测得到的,本身就存在误差,在改进神经网络的同时max操作也放大了误差,因此导致了值函数的过估计。先来看一个例子:
S1为智能体初始状态,S2-Sn为中间状态,GOAL为目标位置,开始时设计的奖励为到达目标点为1,S1跳转到中间状态为0,中间状态到目标位置的奖励服从正态分布。在训练样本较少时很有可能因为Q值的过高估计造成训练结果为S1还要经过中间状态才能到达GOAL,只有训练样本多了之后才可能解决这个错误。
Double DQN的思路是通过估计网络估计目标网络中
Q
m
a
x
(
s
′
,
a
′
)
Qmax(s',a')
Qmax(s′,a′)最大的动作,然后用这个估计出来的动作在目标网络中Q值来更新。Double DQN的TD目标为:
Y
t
D
o
u
b
l
e
D
Q
N
=
R
t
+
1
+
γ
Q
(
s
t
+
1
,
arg max
a
Q
(
s
t
+
1
,
a
;
θ
t
′
)
)
\begin{align} {Y}_{t}^{DoubleDQN}=R_{t+1}+\gamma Q(s_{t+1},{\argmax_{a}Q(s_{t+1},a;\theta_{t}^{'})}) \end{align}
YtDoubleDQN=Rt+1+γQ(st+1,aargmaxQ(st+1,a;θt′))
总的来时就是用估计网络选动作,更新时,目标网络给选出的这个动作Q值。