我创建了一个非常简单的游戏,棋盘是一个大小为 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))