目录
- 概念
- 深度学习与强化学习结合的问题
- DQN解决结合出现问题的办法
- DQN算法流程
- 总结
一、概念
原因:在普通的Q-Learning中,当状态和动作空间是离散且维数不高的时候可以使用Q-Table来存储每个状态动作对应的Q值,而当状态和动作空间是高维连续时,使用Q-Table不现实。一是因为当问题复杂后状态太多,所需内存太大;二是在这么大的表格中查询对应的状态也是一件很耗时的事情。
通常的做法是把Q-Table的更新问题变成一个函数拟合问题,相近的状态得到相近的输出动作。如:
Q(s,a;θ)≈Q′(s,a)
,通过更新参数θ使Q函数逼近最优Q值,而深度神经网络可以自动提取复杂特征,因此,面对高维且连续的状态使用深度神经网络再合适不过。我们可以想象,神经网络接受外部的信息,相当于眼睛鼻子耳朵收集信息,然后通过大脑加工输出每种动作的值,最后通过强化学习的方式选择动作。
DRL是将深度学习(DL)和强化学习(RL)结合,直接从高维原始数据学习控制策略。而DQN是DRL的其中一种算法,它将卷积神经网络(CNN)和Q-Learning结合起来,CNN的输入是原始图像数据(作为状态state),输出则是每个动作Action对应的价值评估Value Function(Q值)。(或者输入状态和动作,通过神经网络输出对应的Q值)
二、深度学习与强化学习结合的问题
- 深度学习需要大量带标签的样本进行监督学习;强化学习只有reward的返回值,并且伴随着噪声,延迟(过了几十毫秒才返回0,稀疏(很多state的reward是0)等问题。
- 深度学习的样本独立;强化学习前后的state状态相关。
- 深度学习目标分布固定;强化学习的分布一直变化,比如你玩一个游戏,一个关卡和下一个关卡的状态分布是不同的,所以训练好了前一个关卡,下一个关卡又要重新训练。
- 过往的研究表明,使用非线性网络表示值函数时会出现不稳定的问题。
三、DQN解决结合出现问题的办法
- 通过Q-Learning使用reward来构造标签(对应问题1)
- 通过experience replay(经验池)的方法来解决相关性及非静态分布问题(对应问题2,3)
- 使用一个CNN(MainNet)产生Q值,使用另外一个CNN(Target)产生Target Q值(对应问题4)
1.构造标签
前面提到DQN中的CNN作用是对高维且连续状态下的Q-Table做函数拟合,而对于函数优化问题,监督学习的一般方法是先确定Loss Function,然后求梯度,使用随机梯度下降或者其他方法更新参数。DQN则基于Q-Learning来确定LossFunction。
Q-Learning的更新公式是:Q∗(s,a)=Q(s,a)+α(r+γmaxQ(s′,a′)−Q(s,a))
DQN的Loss Function为L(θ)=E[(TargetQ−Q(s,a;θ))^2]
其中θ是网络参数,目标为:TargetQ=r+γmaxQ(s′,a′;θ)
显然Loss Function是基于Q-Learning更新公式第二项确定的,两个公式意义相同,都是使当前的Q值逼近Target Q值。
2.经验池(experience replay)
经验池的功能主要是解决相关性及非静态分布问题。具体做法是把每个时间步agent与环境交互得到的转移样本(st,at,rt,st+1)储存到回放记忆单元,要训练时就随机拿出一些(batch)来训练。(其实就是将游戏的过程打成碎皮存储,训练时随机抽取就避免了相关性问题)。这其实也是一种我们之前提到的off-policy离线学习方法
3.目标网络
在Nature 2015版的DQN提出了这个改进,使用另一个网络(这里称为TargetNet)产生Target Q值。具体地,Q(s,a;θi)表示当前网络MainNet的输出,用来评估当前状态动作的值函数;Q(s,a;θi_)则表示TargetNet的输出,代入上面求Target Q值的公式中得到目标Q值。根据上面球Target值的公式中得到目标Q值。根据上面的Loss Function更新MainNet的参数,每经过N轮迭代,将MainNet的参数复制给TargetNet。
引入Target后,在一段时间内秒Q值保持不变,一定程度上降低了当前Q值和目标Q值的相关性,提高了算法稳定性。
四、DQN算法流程
1.网络模型
输入的是被处理为灰度图的最近4帧84*84图像,经过几个卷积层(没有池化)后接两个全连接层,输出是所有动作的Q值。
2.算法伪代码
NIPS 2013版
Nature 2015版
3.算法流程图(2015版)
主要流程图
Loss Function的构造
五、总结
DQN是第一个将深度学习与强化学习结合在一起从而成功地直接从高维的输入学习控制策略。
创新点:
- 基于Q-Learning构造Loss Function
- 通过experience replay(经验池)解决相关性及非静态分布问题
- 使用TargetNet来解决稳定性问题
优点:
- 算法通用性,可以玩不同的游戏。
- End-to-End 训练方式。
- 可生产大量样本供监督学习。
缺点:
- 无法应用于连续动作控制。
- 只能处理短时记忆问题,无法处理需长时记忆问题(可采用LSTM等改进方法)。
- CNN不一定收敛,需精准调参。
参考:
- Playing Atari with Deep Reinforcement Learning
- Human-level control through deep reinforcement learning
- https://github.com/MorvanZhou
- https://me.csdn.net/u013236946