DQN是Deep Learning和Q Learning结合起来的算法,可以解决动作空间和状态空间是连续的问题,而且使用神经网络可以自动提取特征
DQN的基础是用一个深度神经网络来作为值(即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
目标
DQN的要点
DQN 最终能够取得成功的一方面是采用了 DNN 网络进行 Q 值的函数拟合,end-to-end 的模型训练。更重要的是引入了以下两个点:
- 双网络结构(separate Target Network)
- 经验回放(experience replay)
经验回放
两个问题:在监督学习中,样本间都是独立同分布的。而RL中的样本是有关联的,非静态的(highly correlated and non-stationary),训练的结果很容易难以收敛。Experience Replay机制解决这个问题思路其实很简单,构建一个存储把样本都存储下来,通过随机采样去除相关性。(当然没有天下免费的午餐,这种方法也有弊端,比如off-policy受到了限制)
经验回放主要是解决相关性以及非静态分布问题。具体方法是将最近的每个时间步agent与env交互产生的转移样本存储到回放记忆单元,在训练时随机取部分进行训练,这样就打破了和相邻训练样本的相似性,避免陷入局部最优。
冻结目标网络
Q网络是一个多层神经网络,结构不固定。对于一个n维状态空间和m维行动空间,Q网络是一个到的映射。
双网络结构使用目标网络和在线网络两个结构完全相同的网络,不同之处在于目标网络的参数是周期性的从在线网络复制而来的,也可以说是周期性冻结目标网络的参数,来稳定学习目标。
算法
DQN的三大改进
下面是后续对于DQN的三个主要改进
Double Q-Network
仿照Double Q-learning,实现两个网络,一个用于选择动作,一个用于进行评估动作,和Actor-Critic同样的思想。
因为我们的神经网络预测本来就有误差, 每次也向着最大误差的 Q现实 改进神经网络, 就是因为这个 Qmax 导致了 overestimate. 所以 Double DQN 的想法就是引入另一个神经网络来打消一些最大误差的影响.
Prioritized replay
在上面说过我们有经验池存储的历史经验,经验回放的功能存在一定的问题,在奖励非常少的时候,会出现学习速率非常慢的问题。
改进后的经验回放在抽样时不是随机抽样,而是按照经验池中样本的优先级来抽取。
样本的优先级通过TD-error确定,也就是。如果 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**??? **:
另一种方法是使用优势函数的平均值代替最优值
\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