我已经创建了一个非常简单的游戏,棋盘大小为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 )
这个网络(我试过几个):
# 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))
发布于 2019-10-24 16:10:34
你想要学习的值函数应该是相对简单的,但是我希望最优的动作值在向左或向右移动之间是非常相似的,至少当它远离墙的时候。回想一下,操作值度量了采取所选操作的预期奖励,然后从那时起遵循策略。
因此,在状态[0 0 8 5 0 0]
中,“向右移动”的最优策略下的操作值应该是+1,但“向左移动”的操作值在0.9801时并没有太大的不同。。。因为在最优策略下,在遵循策略时,代理将在之后两次向右移动。
这意味着,神经网络将不得不学习细微的细节差异之间的估计。如果您将表示作为神经网络的“原始”输入,则这比需要的难度更大。当输入数范围较大时,神经网络学习效果较差。此外,你的学习率似乎相当高。
我的建议:
发布于 2019-10-25 13:00:04
解决了。我将优化器更改为SGD,它目前收敛非常慢(6000 +迭代),但它确实收敛。
https://datascience.stackexchange.com/questions/62167
复制相似问题