我试图用神经网络实现Q-Learning。我用q-table进行q-learning工作非常好。
我正在玩一个“抓住奶酪”游戏。
它看起来像这样:
# # # # # # # #
# . . . . . . #
# . $ . . . . #
# . . . P . . #
# . . . . . . #
# . . . . . . #
# . . . . . . #
# # # # # # # #
玩家p正在地图上的某个地方产生。如果他撞墙,奖励将是负面的。让我们现在称之为负奖励-R。
如果玩家p击中美元符号,奖励将为正数。这个积极的回报将是+ R
在这两种情况下,游戏都将重置,玩家将在地图上随机生成某个地方。
我的神经网络架构如下所示:
-> Inputsize: [1, 8, 8]
Flattening: [1, 1, 64] (So I can use Dense layers)
Dense Layer: [1, 1, 4]
-> Outputsize: [1, 1, 4]
为了学习,我将一些游戏样本存储在缓冲区中。缓冲区最大大小为b_max。
所以我的训练看起来像这样:
通过从缓冲区中选择一批游戏样本来更新我的神经网络
5.1遍历批处理并按如下方式训练网络:
5.2对于每批。网络的输入是游戏状态。 (到处都是0,除了球员位置)。
5.3输出层的输出误差在任何地方都是0,除非输出神经元等于该样本所采取的动作。
5.4这里预期的输出将是:
(the reward) + (discount_factor * future_reward) (future_reward = max (neuralNetwork(nextState))
5.5从一开始就做好每一件事。
事情是它似乎没有正常工作。 我已经知道如何更改它以便它可以工作,但我不确定这是否“允许”:
每个游戏决策都可以进行训练,直到它完全符合预期的要求。 然后我会去做下一个决定并对此进行训练,依此类推。培训通常如何进行?
如果有人可以提供帮助并给我一个关于培训如何运作的详细解释,我将非常高兴。特别是当谈到“运行多少次循环?”时。
问候, 芬兰
这是一张地图,显示了神经网络在每个领域做出的决定:
# # # # # # # # # #
# 1 3 2 0 2 3 3 3 #
# 1 1 1 1 0 2 2 3 #
# 0 0 $ 1 3 0 1 1 #
# 1 0 1 2 1 0 3 3 #
# 0 1 2 3 1 0 3 0 # //The map is a little bit bigger but still it can be seen that it is wrong
# 2 0 1 3 1 0 3 0 # //0: right, 1 bottom, 2 left, 3 top
# 1 0 1 0 2 3 2 1 #
# 0 3 1 3 1 3 1 0 #
# # # # # # # # # #