首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >深Q网络忽略输入,不管输入状态如何,都给出相同的输出。

深Q网络忽略输入,不管输入状态如何,都给出相同的输出。
EN

Data Science用户
提问于 2019-10-24 13:40:44
回答 2查看 320关注 0票数 1

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

打一个"5“结束游戏的奖励+1击打墙结束的奖励-其他一个动作有奖励0。

"state“只是板,6长的向量,可以是0\8\5

当我建立一个规则的Q表为基础的代理,游戏会聚(一个良好的结果)非常快。

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

实际结果不断变化,每一次记忆的重播,但在每一个点,如果我要求预测,无论输入,输出将是“左: X,右: Y”。(X和Y是数值)。网络忽略输入。有什么建议吗?

附录:超级参数:批处理大小= 64内存= 100 (也尝试了1000次(γ= 0.99 #折现率epsilon_min = 0.05 epsilon_decay = 0.95 epsilon_start = 1.0学习率= 0.01 / 0.1 / 1.0 )

这个网络(我试过几个):

代码语言:javascript
运行
复制
        # 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))
EN

回答 2

Data Science用户

发布于 2019-10-24 16:10:34

你想要学习的值函数应该是相对简单的,但是我希望最优的动作值在向左或向右移动之间是非常相似的,至少当它远离墙的时候。回想一下,操作值度量了采取所选操作的预期奖励,然后从那时起遵循策略。

因此,在状态[0 0 8 5 0 0]中,“向右移动”的最优策略下的操作值应该是+1,但“向左移动”的操作值在0.9801时并没有太大的不同。。。因为在最优策略下,在遵循策略时,代理将在之后两次向右移动。

这意味着,神经网络将不得不学习细微的细节差异之间的估计。如果您将表示作为神经网络的“原始”输入,则这比需要的难度更大。当输入数范围较大时,神经网络学习效果较差。此外,你的学习率似乎相当高。

我的建议:

  • 按比例调整输入。您应该有将状态表示转换为神经网络特性的代码。如果必须使用这种状态表示,我建议神经网络可以很好地工作,+1表示目标,-1表示agent。
  • 试着降低学习率。Adam优化器的0.01比率很高。
  • 降低折扣率\gamma -这将使一个更清楚的区别在这个短插曲-长度的环境之间的回报,为更快和较慢的路线。
票数 1
EN

Data Science用户

发布于 2019-10-25 13:00:04

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

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/62167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档