DQN可以视为Q-learning的进阶版,DQN与Q-learning十分相似,DQN解决了Q-learning解决不了的问题。
一、DQN解决的问题
Q-learning的核心在于Q表格,通过建立Q表格来为行动提供指引,但这适用于状态和动作空间是离散且维数不高时,当状态和动作空间是高维连续时Q表格将变得十分巨大,对于维护Q表格和查找都是不现实的。设想一下如果AlphaGo使用Q-learning将会是什么样的场景,围棋的可能性量级为10^170,如此巨大的Q表格已经丧失了的它的价值。
Q表格无法解决,人们开始尝试使用函数来拟合,拟合一个函数来输出Q值,一般为输入一个状态,给出不同动作的Q值。深度学习在复杂特征提取效果良好,将Rl与DL结合变得到了DQN。
这将带来两个好处:
1.只需要存储DL的网络结构与参数
2.相近的的输入会得到相近的输出,泛化能力更强
二、DQN面临的问题
DQN≈Q-learning+神经网络,如果只是简单的结合将会带来两个问题
1.神经网络的样本之间相互独立,互不关联,而强化学习输入的状态是相互关联的
2.引入非线性函数,使用神经网络来近似Q表格,训练结果可能不收敛
三、DQN的两大改进
1.experience replay 经验池
DQN引入了经验池,DQN利用到了Q-learning是off-policy的特性,behavior-policy在探索或行动获取经验后会将经存储到经验池中,一条经验可以由(s,a,r,s’)来表示。target-policy随机从经验池中抽取一条经验来更新网络,这将带来两个好处:
1、随机抽取,可以切断经验的相关性
2、每一条经验可以重复学习多次,提高了经验的利用率
流程如下:
2.固定Q-target
DQN中会有两个结构完全相同但是参数却不同的网络,一个用于预测Q估计(MainNet),一个用于预测Q现实(target),MainNet使用最新的参数,target会使用很久之前的参数,Q现实的targetQ计算为:
t
a
r
g
e
t
Q
=
r
+
γ
∗
Q
m
a
x
(
s
′
,
a
′
,
θ
)
targetQ=r+γ*Qmax(s',a',θ)
targetQ=r+γ∗Qmax(s′,a′,θ)
根据targetQ与Q估计得到损失,损失函数一般采用均方误差损失
L
O
S
S
(
θ
)
=
E
[
(
T
a
r
g
e
t
Q
−
Q
(
s
,
a
;
θ
)
)
2
]
LOSS(θ)=E[(TargetQ−Q(s,a;θ))^2]
LOSS(θ)=E[(TargetQ−Q(s,a;θ))2]
过程描述:初始化MainNet和target,根据损失函数从而更新MainNet参数,而target则固定不变,在经过多次迭代之后,将MainNet的参数全部复制给target网络,并一直如此循环迭代。这样一段时间内的targetQ是固定不变的,从而使得算法更新更加稳定