DQN - 如何将游戏中的 4 个静止帧输入作为一个单一状态输入

DQN - How to feed the input of 4 still frames from a game as one single state input

我正在阅读这篇关于 Deep Q-Learning 的博客。

1- 在博客的 The input 部分,我想知道我们如何将游戏中表示输入状态的 4 still-frames/screenshots 馈入策略网络?所有 4 帧都将在一个扁平张量中馈送(一张图像结束,下一张图像开始,形成一个连续的行输入,在一个张量中)?还是会一个接一个地分别馈入网络?

2-为了预处理图像,我们是否避免使用最大池化阶段?我的理解是这个过程消除了图像特征识别中 spacial/position 识别的需要。虽然在普通的 Conv-Net 中,这对于识别图像特征很重要,无论它们出现在 space 中的什么位置和距离(因此我们使用最大池化)。在游戏的 Q-learning 中,图像上不同元素的 space/position 很重要。因此,我们从处理阶段移除了 Max-pooling 的使用。这是正确的吗?

3- 谁能推荐一个很好的深度 Q 学习实现资源,从头开始编写(在 Python 中),即不使用开箱即用的库,如 PyTorch、Keras和 Scikit-learn ..etc,用于游戏,其中需要来自游戏的图像帧作为状态输入。我在想也许从头开始实施模型可以更好地控制超参数的自定义和微调。还是使用开箱即用的库更好?任何关于此的代码实现都会非常有帮助。

非常感谢。

  1. 不,典型的方法是堆叠(灰度)帧,这样输入的形状就变成[height, width, num_frames],即帧承担通常为RGB 图像中的颜色通道。这使得应用二维卷积变得容易。

  2. 是的,没错。您不使用池化,因为您不想丢弃有关空间位置的信息。

  3. 我建议不要使用这种特殊方法。相反,我建议您熟悉函数逼近器的所有构建块(至少在概念层面)。这可能意味着回到 mnist 来研究 CNN 的组件。之后,您可能不想从头开始实施所有内容。这是我发现非常有用的博客 post: