问题:为简单的网格游戏获取合适的神经网络,获得正确的架构和超参数的正确方法是什么?它如何缩放以使其在具有更大网格的游戏版本中工作?
上下文:大多数关于在Q学习中使用神经网络的教程和论文都使用卷积神经网络来处理来自不同游戏的屏幕输入。但我正在尝试使用原始数据进行更简单的游戏:
Simple Matrix Game 其中代理的可能移动是:向上,向下,向右,向左。
可在此处找到包含完整代码的笔记本:http://151.80.61.13/ql.html
所有经过测试的神经网络都没有比随机移动更好。在大约1000集之后,奖励平均达到8.5(满分30分),然后开始下降。大多数情况下,最终只是为每一步行动发送同样的动作。
我知道对于一个小型游戏,因为这个Q表会更好,但这是为了学习实现深度Q学习,并且在它以一个小例子工作之后我想将它扩展到更大的网格。
我尝试过的当前神经网络(Keras)和解决方案:
model = Sequential()
model.add(Dense(grid_size**2,input_shape=(grid_size, grid_size)))
model.add(Activation('relu'))
model.add(Dense(48))
model.add(Flatten())
model.add(Activation('linear'))
model.add(Dense(4))
adam = Adam(lr=0.1)
model.compile(optimizer=adam, loss='mse')
return model
答案 0 :(得分:0)
与任何机器学习任务一样,没有完美的方法来选择你的超级游戏,但我可以给你一些建议。
每层中的神经元数量必须小到适合你的模型,而不是大到不适合你的模型(如果神经元的数量是2的幂,它可以更好地平行于你的gpu。你应该遵循的唯一规则:更复杂的游戏 - 更多的神经元
相同的规则适用于您网络中的层数,但如果您要训练任何类型的经常性网络,那么最好比拥有更多神经元更深入。
您的学习率取决于您的优化者,但学习率较低总是更好,因为模型会以较低的学习率收敛(尽管收敛时间较长)
选择你的激活功能也没有规则,但是你要训练任何一种你应该使用Leaky ReLU,Softplus或Elu的生成模型