Deep Q 网络忽略输入,无论输入状态如何,都给出相同的输出

数据挖掘 强化学习
2022-02-21 16:55:51

我创建了一个非常简单的游戏,棋盘是一个大小为 6 的数组。0 是“空单元格”,5 是“目标”,8 是“玩家位置”[8 0 0 5 0 0] 例如表示代理需要移动 2“正确”才能获胜。

击中“5”以奖励 +1 结束游戏 撞墙以奖励 -1 结束游戏 其他动作奖励 0。

“状态”只是棋盘,可以是 0\8\5 的 6 长向量

当我构建一个基于 Q-Table 的常规代理时,游戏收敛速度非常快(达到了很好的结果)。

问题是 DQN(Deep Q 网络)代理从未收敛。我在几千次迭代后对网络进行了采样,发现所有输入的网络总是具有相同的结果。

实际结果不断变化,每次重放内存,但如果我要求预测,无论输入如何,输出都会是“左:X,右:Y”。(X 和 Y 是数值)。网络忽略输入。任何建议为什么?

附录:超参数:batch-size = 64 memory = 100(也试过 1000(gamma = 0.99 # 贴现率 epsilon_min = 0.05 epsilon_decay = 0.95 epsilon_start = 1.0 learning rate = 0.01 / 0.1 / 1.0

网络是(我尝试了几个):

        # Neural Net for Deep-Q learning Model
    model = K.models.Sequential()
    model.add(K.layers.Dense(8, input_dim=self.state_size, activation='relu'))
    model.add(K.layers.Dense(8, activation='relu'))
    model.add(K.layers.Dense(self.action_size, activation='linear'))

    model.compile(loss='mse',
                  optimizer=K.optimizers.Adam(lr=self.learning_rate))
2个回答

您想学习的价值函数应该相对简单,但我希望左移或右移之间的最佳动作值非常相似,至少在远离墙壁的情况下是这样。回想一下,行动价值衡量的是采取所选行动的预期回报,然后从那时起遵循政策。

所以在 state[0 0 8 5 0 0]中,最优策略下“右移”的动作值应该是 +1,但“左移”的动作值差别不大,为 0.9801。. . 因为在最优策略下,代理会在遵循策略之后向右移动两次。

这意味着神经网络必须学习估计之间的细微差别。如果您将表示用作神经网络的“原始”输入,那么您已经使这比需要的更难。当输入数字范围很大时,神经网络的学习效果很差。此外,您的学习率似乎很高。

我的建议:

  • 缩放输入。您应该拥有将状态表示转换为神经网络特征的代码。如果您必须使用这种状态表示,我建议神经网络可以很好地运行目标 +1 和代理 -1。

  • 尝试降低学习率。对于 Adam 优化器来说的比率很高。0.01

  • 减少折扣因子 - 这将在这个短集长度的环境中更清楚地区分更快和更慢路线的回报。γ

解决了。我将优化器更改为 SGD,它目前收敛速度非常慢(6000 +- 次迭代),但它确实收敛