0

问题:获得正确的体系结构和超参数以获得适用于简单网格游戏的适当神经网络的正确方法是什么?而如何将它扩展到使用更大网格的游戏版本?用于q学习的神经网络体系结构

语境:写过关于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 
  • 不同隐藏层尺寸:[512,256,100,48,32,24]
  • 数目的隐藏层:[1,2,3]
  • 不同学习率:[3,1,0.8,0。 5,0.3%,0.1%,0.01]
  • 测试各种激活函数:线性,乙状结肠,SOFTMAX,RELU]
  • 发作小量衰减
  • 的程度数有和没有试图目标网络
  • 尝试了不同的网络,这些网络来自写在OpenAI体育馆CartPole,FrozenLake和Flappy Bird中的教程。
+0

这个问题并不清楚。你需要关于如何实施网格搜索过程的建议,或者你想知道如何构建你的网站以获得更好的结果? – paolof89

+0

神经网络必须学习如何获取3x3网格中的大部分点。 Q学习实施似乎工作正常。所以,我所要求的是如何构造NN(为此我尝试了大量不同的结构),使其成为Q算法的函数逼近器。 – DonUber

回答

0

在任何机器学习任务中,没有完美的方式来选择你的hyperparams,但是我可以给你几条建议。

  • 每层神经元的数量必须是小,适合你的模型,而不是大到不能过度拟合模型(也如果神经元的数目为二的幂它可以在你的GPU更好的平行你应该遵循的唯一规则是:更复杂的游戏 - 更多神经元

  • 同样的规则适用于你的网络层数,但是如果你正在训练任何类型的循环网络,最好更深入比拥有更多的神经元。

  • 你的学习速度取决于你的优化器,但它始终是最好有一个较小的学习率作为模型收敛与低学习率更好(尽管它收敛更长)

  • 也没有规则在选择你的激活功能,但你正在训练任何种类的生成模型,你应该使用Leaky ReLU,Softplus或Elu