强化学习——Deep Q Network

Posted by He Zongjiang on 2018-04-16

一、什么是Deep Q Network

这次我们来说说强化学习中的 Deep Q Network 简称为 DQN。Google Deep mind 团队就是靠着这 DQN 使计算机玩电动玩得比我们还厉害。

DQN 是一种融合了 神经网络 和 Q_learning 的方法,如果你还不了解 Q_learning,可以看看这篇文章。

传统的 Q 表格形式的强化学习有一个瓶颈。当今问题是在太复杂,使用表格来存储每一个状态 state 和 action 所拥有的 Q 值,计算机有再大的内存都不够,而且每次在这么大的表格中搜索对应的状态也是一件很耗时的事。

所以,我们可以将 状态 和 动作 当成神经网络的输入,然后经过神经网络分析后得到动作的 Q 值,这样我们就没必要在表格中记录 Q 值,而是直接使用神经网络生成 Q 值。

还有一种形式的是我们只输入状态值,输出所有的动作值,然后按照 Q learning 的原则,直接选择拥有最大值的动作当做下一步要做的动作。接下来,我们就按照这种方式来说明。

二、神经网络的更新

我们知道神经网络是要被训练才能预测出准确的值。那在强化学习中,神经网络是如何被训练的呢?首先,我们需要 a1、a2 正确的Q值,这个 Q 值我们就用之前在 Q learning 中的 Q 现实来代替。

同样我们还需要一个 Q 估计,来实现神经网络的更新。所以神经网络的的参数就是旧的神经网络参数加学习率 alpha 乘以 Q 现实 和 Q 估计的差值。

我们通过 NN 预测出Q(s2, a1) 和 Q(s2,a2) 的值,这就是 Q 估计. 然后我们选取 Q 估计中最大值的动作来换取环境中的奖励 reward. 而 Q 现实中也包含从神经网络分析出来的两个 Q 估计值, 不过这个 Q 估计是针对于下一步在 s’ 的估计. 最后再通过刚刚所说的算法更新神经网络中的参数.

三、Experience replay 和 Fixed Q-targets

简单来说,DQN 有一个记忆库用于学习之前的经历。Q learning 是一种 off-policy 离线学习法,它能学习当前经历着的, 也能学习过去经历过的,甚至是学习别人的经历。所以每次 DQN 更新的时候,我们都可以随机抽取一些之前的经历进行学习。随机抽取这种做法打乱了经历之间的相关性,也使得神经网络更新更有效率。

Fixed Q-targets 也是一种打乱相关性的机理,如果使用 fixed Q-targets,我们就会在 DQN 中使用到两个结构相同但参数不同的神经网络,预测 Q 估计 的神经网络具备最新的参数,而预测 Q 现实的神经网络使用的参数则是很久以前的。

以上内容参考莫凡Python