DQN是Deep Learning和Q Learning结合起来的算法,可以解决动作空间和状态空间是连续的问题,而且使用神经网络可以自动提取特征

DQN的基础是用一个深度神经网络来作为Q(s,a)Q(s,a)值(即QTable)的代替,无论是基于概率还是基于价值的迭代,近似得到的是一个可以基于当前s,a来预估得到的r的函数,而通过神经网络可以拟合得到这个函数


Q Learning的更新公式

Q^\*(s,a) = Q(s,a)+\alpha\*(r+{\gamma}*max_{a'}Q(s',a')-Q(s,a))

DQN的Loss Function

L(θ)=E((TargetQQ(s,a;θ))2)L(\theta) = E((TargetQ-Q(s,a;\theta))^2)

目标

TargetQ=r+γmaxaQ(s,a;θ)TargetQ = r+{\gamma}max_{a'}Q(s',a';\theta)


DQN的要点

DQN 最终能够取得成功的一方面是采用了 DNN 网络进行 Q 值的函数拟合,end-to-end 的模型训练。更重要的是引入了以下两个点:

  • 双网络结构(separate Target Network)
  • 经验回放(experience replay)

经验回放

两个问题:在监督学习中,样本间都是独立同分布的。而RL中的样本是有关联的,非静态的(highly correlated and non-stationary),训练的结果很容易难以收敛。Experience Replay机制解决这个问题思路其实很简单,构建一个存储把样本都存储下来,通过随机采样去除相关性。(当然没有天下免费的午餐,这种方法也有弊端,比如off-policy受到了限制)

经验回放主要是解决相关性以及非静态分布问题。具体方法是将最近的每个时间步agent与env交互产生的转移样本(st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1})存储到回放记忆单元,在训练时随机取部分进行训练,这样就打破了和相邻训练样本的相似性,避免陷入局部最优。


冻结目标网络

Q网络是一个多层神经网络,结构不固定。对于一个n维状态空间和m维行动空间,Q网络是一个RnR^nRmR^m的映射。

双网络结构使用目标网络在线网络两个结构完全相同的网络,不同之处在于目标网络的参数θ\theta^-是周期性的从在线网络复制而来的,也可以说是周期性冻结目标网络的参数,来稳定学习目标。

算法

算法

DQN的三大改进

下面是后续对于DQN的三个主要改进

Double Q-Network

仿照Double Q-learning,实现两个网络,一个用于选择动作,一个用于进行评估动作,和Actor-Critic同样的思想。

因为我们的神经网络预测QmaxQ_{max}本来就有误差, 每次也向着最大误差的 Q现实 改进神经网络, 就是因为这个 Qmax 导致了 overestimate. 所以 Double DQN 的想法就是引入另一个神经网络来打消一些最大误差的影响.


Prioritized replay

在上面说过我们有经验池存储的历史经验,经验回放的功能存在一定的问题,在奖励非常少的时候,会出现学习速率非常慢的问题。

改进后的经验回放在抽样时不是随机抽样,而是按照经验池中样本的优先级来抽取。
样本的优先级通过TD-error确定,也就是QTargetQevalQ_{Target}-Q_{eval}。如果 TD-error 越大, 就代表我们的预测精度还有很多上升空间, 那么这个样本就越需要被学习, 也就是优先级 p 越高.

原文中还实现了一个SumTree的二叉树来实现高效的选择训练样本。


Dueling Network

在原始的DQN中,神经网络输出的是每个动作对应的Qvalue,而在Dueling DQN中每个动作的Q值由下面的公式确定:$$Q(s,a;\theta,\alpha,\beta)=V(s;\theta,\beta)+A(s,a;\theta,\alpha)$$
V代表当前state的值,A代表每个动作在这个state上的advantage

上式带来了一个问题:给定一个Q值,无法得到唯一的V和A。

采用的解决方法是强制令所选择贪婪动作的优势函数为0**??? **:

Q(s,a;θ,α,β)=V(s;θ,β)+(A(s,a;θ,α)maxaactionspaceA(s,a;θ,α))Q(s,a;\theta,\alpha,\beta)=V(s;\theta,\beta)+(A(s,a;\theta,\alpha)-\\ \underset{a'\in actionspace}{max}A(s,a';\theta,\alpha))

另一种方法是使用优势函数的平均值代替最优值

\underset{a'\in actionspace}{max}A(s,a';\theta,\alpha))\to\frac{1}{|A|}\underset{a'}\sum A(s,a';\theta,\alpha)


参考

Double Q-learning 原文
周莫烦
https://blog.csdn.net/songrotek/article/details/50580904
Dueling Network
深度强化学习pdf