什么是DQN
DQN(Deep Q Network)是一种用Q Learing和神经网络结合的一种强化学习的方法,相比于传统的Q Learning运用了神经网络的方法。
神经网络的作用
对比于传统的Q Learning,DQN还额外附加了一个NN(Neural Network),它的通过输入的状态S得到各个不同的动作Actions的Q值**(注意:Q值和奖励Reward不同)**。
另一个作用,在DQN中存在一个存储器,存储了模型在自我学习过程中的S(当前状态),A(采取的某一个行动),R(该动作的奖励),S_(下一状态),(i.e,记作[S,A,R,S_])。
算法更新
Q-learning简介
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBYn4Nj0-1620993575475)(https://mofanpy.com/static/results/ML-intro/q3.png)]
简单说明一下传统的Q Learning:Q-Learing中的Q值分为两种Q_predict(Q估计值)和Q_target(Q现实值),在上图中显示很清楚,Q现实值需要通过下一个状态(S_)和奖励R通过公式计算得到,而Q估计值是指当前转态S要采取某一个动作的值。(注意:一定要明白这一点,图中这个更新过程只是对Q(s1,a2)的更新)
其中,gamma,alpha都是超参数(也就是自己设定的值)
DQN算法
有了Q Learning的一点基础后,相对来说,DQN只是多了一个卷积神经网络(或者其他神经网络),神经网络的作用上面已经说过了。DQN并没有像Q learning一样的Q值表(Q_table),但是它的Q值都是通过神经网络来计算得出的,如果确定了神经网络的参数,那么也就确定了各个状态S对应的动作Actions的Q值,也就相当于确定了一个Q值表。这样对于一个有大量状态和大量动作的模型来说就方便了太多太多。
神经网络参数更新
注意,以上的Q值都是通过神经网络的过程计算得到的,并不是查询Q值表得到的。我们通过公式得到Q现实和Q估计,有了这两个数据,就能通过神经网络的方法来更新神经网络的参数,也就间接的相当于更新Q值表。
DQN两大利器
我们可以把DNQ想成两条主线,一条主线负责行动(例如在下围棋时,就是负责下围棋),另一条主线则是通过之前的动作来对神经网络进行学习训练。
Q learning 是一种 off-policy 离线学习法, 它能学习当前经历着的, 也能学习过去经历过的, 甚至是学习别人的经历. 所以每次 DQN 更新的时候, 我们都可以随机抽取一些之前的经历进行学习. 随机抽取这种做法打乱了经历之间的相关性, 也使得神经网络更新更有效率. Fixed Q-targets 也是一种打乱相关性的机理, 如果使用 fixed Q-targets, 我们就会在 DQN 中使用到两个结构相同但参数不同的神经网络, 预测 Q 估计 的神经网络具备最新的参数, 而预测 Q 现实 的神经网络使用的参数则是很久以前的. 有了这两种提升手段, DQN 才能在一些游戏中超越人类.
简单例子描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EXQbrUCy-1620993575483)(https://mofanpy.com/static/results/ML-intro/q3.png)]
我们以之前的Q learning为例,我们的目标是更新神经网络参数(在Q learning中为Q值表),假设我们已经记录了2个数据,为S1和S2就是图中这个表,我们将这两个状态输入当前的神经网络中,会得到一组全新的Q值表,这就是Q估计值,那么Q现实值是什么呢?
在我们的记录中也记录这某状态下采取某行动的奖励R,例如(S1,a2)状态的奖励,通过各个奖励R和S_的Q值,在通过图中公式,能够得到Q现实值,之后再更新神经网络的参数,这样一次也就完成了。
之后就是循环往复的过程。
参考文献
该文章只是个人简短理解,如果想了解更多和具体代码例子,建议点击下面链接
https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/intro-DQN/