原因:在普通的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值)
前面提到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值。
经验池的功能主要是解决相关性及非静态分布问题。具体做法是把每个时间步agent与环境交互得到的转移样本(st,at,rt,st+1)储存到回放记忆单元,要训练时就随机拿出一些(batch)来训练。(其实就是将游戏的过程打成碎皮存储,训练时随机抽取就避免了相关性问题)。这其实也是一种我们之前提到的off-policy离线学习方法
在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值的相关性,提高了算法稳定性。
输入的是被处理为灰度图的最近4帧84*84图像,经过几个卷积层(没有池化)后接两个全连接层,输出是所有动作的Q值。
NIPS 2013版
Nature 2015版
主要流程图
Loss Function的构造
五、总结
DQN是第一个将深度学习与强化学习结合在一起从而成功地直接从高维的输入学习控制策略。
创新点:
优点:
缺点: