微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的 DQN 模型做出明显错误的决定?

如何解决为什么我的 DQN 模型做出明显错误的决定?

我尝试在python中实现一个由tensorflow模型玩的简单回合制蛇游戏: 代理可以在棋盘上移动(例如 40x40 单元格),并在每个访问过的单元格处留下轨迹。在每一轮中,代理必须选择三个可能的动作之一(动作空间:左转、右转、什么都不做),然后向当前方向移动。 代理的目标是尽可能长时间地生存,而不是与自己的轨迹、板墙或其他玩家的轨迹相撞。每次智能体死亡时,它都会得到一个很大的负面奖励,因为它应该学会在未来不要做同样的动作。

通过长时间的训练,我看到了显着的学习进步(生存时间增加),但我也做了一个我不明白的观察:

在某些情况下,模型做出明显错误的决定,即有多种选择,但它选择了立即导致死亡的动作。更糟糕的是,这个致命决策的 q 值(softmaxed)是 1.0(100%)!

目前模型看起来像:

model = Sequential()
model.add(Dense(256,input_shape=(125,),activation='relu'))
model.add(Dense(256,activation='relu'))
model.add(Dense(3,activation='softmax'))
model.compile(loss='mse',optimizer=Adam(lr=0.0005))

输入层是棋盘的一部分(11 x 11),中间有代理加上代理方向(one-hot)。

当然,我尝试了一些模型变体(层大小、隐藏密集层的数量),但到目前为止都没有成功。

我的一般问题是这种错误学习行为的可能原因是什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。