深度 Q 网络 (DQN)
这是我们的深度 Q 学习网络的架构
作为输入,我们将4 帧的堆栈作为状态传递到网络,并输出该状态下每个可能动作的 Q 值向量。然后,就像 Q 学习一样,我们只需要使用我们的 epsilon-greedy 策略来选择要采取的动作。
当神经网络初始化时,Q 值估计非常糟糕。但在训练过程中,我们的深度 Q 网络智能体将把某种情况与适当的动作关联起来,并学会玩好游戏。
输入预处理和时间限制
我们需要对输入进行预处理。这是一个必要的步骤,因为我们希望降低状态的复杂性,从而减少训练所需的计算时间。
为了实现这一点,我们将状态空间缩减到 84x84 并将其转换为灰度。我们可以这样做,因为 Atari 环境中的颜色不会添加重要的信息。这是一个很大的改进,因为我们将三个颜色通道 (RGB) 减少到 1。
如果某些游戏的屏幕中不包含重要信息,我们还可以裁剪一部分屏幕。然后我们将四帧堆叠在一起。
为什么要将四帧堆叠在一起? 我们将帧堆叠在一起,因为它可以帮助我们处理时间限制问题。让我们以乒乓球游戏为例。当你看到这帧时
你能告诉我球往哪里走吗?不能,因为一帧不足以产生运动感!但是如果我再添加三帧呢?在这里你可以看到球正在向右移动。
这就是为什么为了捕捉时间信息,我们将四帧堆叠在一起。然后,堆叠的帧由三个卷积层处理。这些层使我们能够捕获和利用图像中的空间关系。但同样,因为帧是堆叠在一起的,我们可以在这些帧之间利用一些时间特性。
如果您不知道什么是卷积层,请不要担心。您可以查看Udacity 提供的这个免费深度学习课程的第 4 课
最后,我们有几个全连接层,它们输出该状态下每个可能动作的 Q 值。
因此,我们看到深度 Q 学习使用神经网络来近似,在给定状态下,每个可能动作的不同 Q 值。现在让我们研究深度 Q 学习算法。
< > 更新 于 GitHub