如何在 Deep-Q 中使用卷积神经网络?

人工智能 深度学习 q学习 深度神经网络
2021-11-12 07:10:45

我目前有一个 20x20 像素的网格。每个像素可以是红绿蓝或黑色。所以我对像素进行了热编码,为每个屏幕提供了一个 20x20x4 的数组。

对于我的 Deep-Q 网络,我附上了两个连续的屏幕截图,一起给出了一个 20x20x4x2 的数组。

我正在尝试构建一个卷积神经网络来估计 Q 值,但我不确定我当前的架构是否是一个好主意。目前如下图:

    def create_model(self):
        model = Sequential()
        model.add(Conv3D(256, (4, 4,2), input_shape=(20,20,4,2)))
        model.add(Activation('relu'))
        model.add(Dropout(0.2))

        model.add(Conv3D(256, (2,2,1), input_shape=self.input_shape))
        model.add(Activation('relu'))

        model.add(Flatten())
        model.add(Dense(64))
        model.add(Dense(self.num_actions, activation='linear'))
        model.compile(loss='mse', optimizer=Adam(self.learning_rate), metrics=['accuracy'])
        return model

3d 卷积是个好主意吗?256过滤器是个好主意吗?过滤器 (4,4,2) 和 (2,2,1) 是否合适?我意识到答案可能非常主观,但我只是想找人指出架构中的任何直接缺陷。

1个回答

3d 卷积是个好主意吗?256过滤器是个好主意吗?过滤器 (4,4,2) 和 (2,2,1) 是否合适?

答案不是主观的,而是你在做一个实验,这应该由结果驱动。如果您能找到有关类似环境的已发布内容,可能会帮助您缩小选择范围。

也就是说,当你的一个维度的大小只有 2 时,从 2d 到 3d 卷积你不会从直觉上获得太多收益。纯粹出于直觉,我建议通过使用 8 个通道而不是 4 个通道来简单地连接你的两个帧,并使用 2d 过滤器. 不过,这很简单,可以尝试和比较,所以也许你可以两者都做。

您可能希望探索具有较少初始过滤器并在多于两个卷积层上构建的更深层次的网络。

一定要试试没有 dropout 层的网络。我在 DQN 中使用 dropout 时运气不佳,而且我看到其他人也有类似的问题。我不确定确切的问题是什么。

准确度指标在回归任务上对你没有多大帮助,所以你可以放弃它,只使用 MSE 损失。请记住,训练损失在 RL 中总体上是一个不太有用的指标,因为预测目标(动作值)随着策略的变化而不断变化。低损失值意味着价值预测是自洽的,它们并不一定意味着学习已经收敛到最优策略。