我试图在 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(256, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='mse', optimizer=Adam(lr=0.0005))
输入层是棋盘的一部分(11 x 11),中间是代理加上代理方向(one-hot)。
当然,我尝试了一些模型变化(层大小、隐藏密集层的数量),但到目前为止还没有成功。
我的一般问题是这种错误学习行为的可能原因是什么?