参考资料
[1] 深度强化学习系列 第一讲 DQN
本文主要是对该资料学习的笔记,并且加入了一些自己的想法,如有错误欢迎指出。
DQN
算法引入
DQN算法在Q-Learning算法上改进而来,具体改进三点:
-
利用卷积神经网络逼近行为值函数
该逼近方法属于非线性逼近。此处的值函数对应一组参数,为神经网络中每层网络的权重,用θ表示。此时值函数记为: Q ( s , a ; θ ) Q(s,a;\theta) Q(s,a;θ)。DQN所用神经网络为三个卷积层加两个全连接层。 -
利用经验回放训练强化学习过程
DQN中Agent将数据存储到一个数据库中,再利用均匀随机采样从数据库中抽取数据,然后训练神经网络。这一过程可以打破数据间的相关性,克服神经网络不稳定的问题。 -
独立设置目标网络处理时间差分法中的TD偏差
对值函数逼近时DQN采用卷积神经网络,用梯度下降法更新。
值函数的更新公式为:
θ
t
+
1
=
θ
t
+
α
{
r
+
γ
m
a
x
a
′
Q
(
s
′
,
a
′
;
θ
−
)
−
Q
(
s
,
a
;
θ
)
}
∇
Q
(
s
,
a
;
θ
)
(1)
\theta_{t+1} = \theta{t} + \alpha\lbrace r + \gamma max_{a'}Q(s',a';\theta^-)-Q(s,a;\theta) \rbrace \nabla Q(s,a;\theta) \tag{1}
θt+1=θt+α{r+γmaxa′Q(s′,a′;θ−)−Q(s,a;θ)}∇Q(s,a;θ)(1)
其中:
- θ − \theta^- θ−为计算TD目标网络所用的参数,固定步数更新一次
- θ \theta θ为计算值函数逼近网络所用参数,每一步都会更新
- r + γ m a x a ′ Q ( s ′ , a ′ ; θ − ) r + \gamma max_{a'}Q(s',a';\theta^-) r+γmaxa′Q(s′,a′;θ−)为TD目标
TD目标网络与值函数逼近网络不同参数的原因:采用相同参数容易导致数据之间存在相关性,从而使训练不稳定。(这里虽然参数不同,但网络模型应该是相同的)
DQN算法描述
疑问:
该算法描述处理的是图像吗?x代表image
其中:
- 值函数的输入不再是state s,而是s的特征(需要仔细设计特征提取方法);
- [5]该算法中的初始状态包含image x(暂时理解为模型中的某个状态);
- [10]初始状态之后的状态包含下一步的image x,当前步得到的reward和当前的state s,也就是说,state s中包含多个分量;
Double DQN (DDQN)
DQN的固有缺陷:非均匀过估计问题,即估计得到的值函数大于真实的值函数,且值函数每一点的过估计量是非均匀的,因此会影响策略选择。
如上述(1)式所示,DQN的TD目标为:
r
+
γ
m
a
x
a
′
Q
(
s
′
,
a
′
;
θ
−
)
r + \gamma max_{a'}Q(s',a';\theta^-)
r+γmaxa′Q(s′,a′;θ−)
其中:
- 动作选择部分为 a r g m a x a ∗ Q ( S t + 1 , a ∗ ; θ − ) argmax_{a^*} Q(S_{t+1},a^*;\theta^-) argmaxa∗Q(St+1,a∗;θ−),即在 Q ( S t + 1 , a ∗ ; θ − ) Q(S_{t+1},a^*;\theta^-) Q(St+1,a∗;θ−)处选择动作a*最大化该处的Q值;
- 动作评估部分为 r + γ Q ( s ′ , a ∗ ; θ − ) r + \gamma Q(s',a^*;\theta^-) r+γQ(s′,a∗;θ−),即使用上述得到的a*计算值函数以及TD目标;
其中存在的问题:选择a*、计算Q的函数其参数均为 θ − \theta^- θ−,这也是导致非均匀过估计的来源。
Double DQN的解决方案为:动作选择和动作评估采用不同值函数实现。
Double DQN的TD目标为:
Y
t
D
o
u
b
l
e
Q
=
R
t
+
1
+
γ
Q
(
S
t
+
,
a
r
g
m
a
x
a
Q
(
S
t
+
1
,
a
;
θ
t
)
;
θ
t
′
)
Y^{DoubleQ}_t = R_{t+1} + \gamma Q (S_{t+},argmax_a Q(S_{t+1},a;\theta_t);\theta_t ')
YtDoubleQ=Rt+1+γQ(St+,argmaxaQ(St+1,a;θt);θt′)
其中:
- 动作选择部分为 a r g m a x a Q ( S t + 1 , a ; θ t ) argmax_a Q(S_{t+1},a;\theta_t) argmaxaQ(St+1,a;θt),采用参数为 θ t \theta_t θt的值函数;
- 动作评估部分为 R t + 1 + γ Q ( S t + , a ; θ t ′ ) R_{t+1} + \gamma Q (S_{t+},a;\theta_t ') Rt+1+γQ(St+,a;θt′),即使用上述得到的a计算参数为 θ t ′ \theta_t ' θt′值函数以及TD目标;
Prioritized Replay(优先回放)
经验回放时采取的均匀抽样并不能高效利用数据,因为不同数据的学习效率不同。一般认为具有较大TD偏差的数据对于参数更新量越大,学习效率越高。
因此,需要定义第i个样本处的采样概率:
P
(
i
)
=
p
i
a
∑
k
p
k
a
P(i) = \frac{p^a_i}{\sum_k p_k^a}
P(i)=∑kpkapia
其中:
- p i a p^a_i pia为第i个样本权重
- ∑ k p k a \sum_k p_k^a ∑kpka为所有样本权重之和
其权重需要通过特定方式计算得到,参考采用优先回放的DDQN算法。
需要注意的是,采取优先回放概率采样时,动作-值函数为有偏估计,为校正该偏差,定义重要性采样系数:
ω
i
=
(
1
N
⋅
1
P
(
i
)
)
β
\omega_i = (\frac{1}{N} \cdot \frac{1}{P(i)})^{\beta}
ωi=(N1⋅P(i)1)β
其中:
- N为样本总数
- β为系数
采用优先回放的DDQN算法
其中:
- [6]的作用为给新的数据最大的权重,使得每个数据最少利用一次;
- [9]的作用为依据每个样本的采样概率p进行采样,这里需要对样本进行排序,计算复杂度高;
- [11]中采用Double DQN,计算TD目标的 Q t a r g e t Q_{target} Qtarget采用参数 θ t a r g e t \theta_{target} θtarget,其余 Q Q Q采用参数 θ \theta θ,动作选择的值函数Q与动作评估的值函数Q参数不同,注意计算TD偏差的Q采用参数 θ \theta θ;
- [12]的作用是根据当前数据的TD偏差更新其权重;
- [16]一段时间后复制 θ \theta θ到 θ t a r g e t \theta_{target} θtarget当中,这也解释了DDQN不同参数之间的更新:间隔一段时间将动作选择的参数更新至动作评估的参数中;