如何将图像序列转换为 DQN 中的状态?

人工智能 神经网络 强化学习 卷积神经网络 dqn
2021-10-22 10:10:07

我最近阅读了 DQN论文,标题为:Playing Atari with Deep Reinforcement Learning。我对论文的基本粗略理解如下:

你有两个神经网络;一个在一段时间内保持冻结,并用于使用正在更新的神经网络计算损失函数。损失函数用于使用梯度下降来更新神经网络。

使用经验回放,这基本上创建了经验的缓冲区。这个经验缓冲区是随机采样的,这些随机样本用于更新非冻结神经网络。

我的问题与论文中说明的 DQN 算法有关:算法 1,更具体地说是该算法的第 4 行和第 9 行。我的理解,在论文的前面也提到过,状态实际上是游戏帧的序列。我想知道,既然输入是给 CNN 的,我们将如何对这些帧进行编码以作为 CNN 的输入?

我也想知道s1等于一个集合,在算法的第4行可以看出,那为什么是st+1等于st,at,xt+1?

2个回答

我想知道,既然输入是给 CNN 的,我们将如何对这些帧进行编码以作为 CNN 的输入?

正如 nbro 在对您的回答的评论中提到的那样,这个问题最近在此处被问及并得到了回答。

我也想知道s1等于一个集合,在算法的第4行可以看出,那为什么是st+1等于st,at,xt+1?

最初的 DQN论文中提出的算法相对简单,并且是为了表达他们方法的主要思想(例如经验回放、预处理历史、梯度下降等)而编写的;事实上,它甚至不是实验中使用的确切算法!例如,实验使用跳帧来减少计算——这在论文的算法 1 中没有提到。考虑到这一点,设置st+1等于st,at,xt+1在算法中表示构建下一个原始状态的一般概念st+1从之前的预处理状态st, 之前的动作at, 和当前帧xt+1. 例如:

  • 如果下一个时间步的动作空间受到状态的约束,那么状态可能需要额外的参数来对动作空间进行编码。
  • 如果状态是终端,则该算法需要一些指示,并且这种指示可能需要在状态中编码。
  • 如果存在跳帧,则需要多个帧来构建下一个状态,也可能使用前一个状态。

上面的例子应该显示状态的编码不能总是简单地是一堆原始帧,甚至是一个函数st,atxt+1,因此通常需要更通用的方法

我阅读了 DQN 论文,标题为:Playing Atari with Deep Reinforcement Learning again

我在预处理和模型架构部分(第 4.1 节)中读到,对于输入到 CNN 的每个状态,这个状态实际上是游戏的堆叠帧,所以基本上必须做什么,据我了解, 是对于每个时间步,您堆叠 4 帧(当前帧和 3 个先前帧),这将作为 CNN 的输入,因为尺寸将为边 * 边 * 4、4,因为这些帧被转换为灰度和正在使用 4 帧。