为乒乓球

时间:2016-09-07 13:27:20

标签: python machine-learning artificial-intelligence deep-learning theano

我在游戏Pong中实现深度神经网络时遇到了一些麻烦,因为无论我改变哪些参数,我的网络总是分歧。 我采用了Pong-Game并实施了基于theano / lasagne的深度学习算法,该算法基于Googles Deepmind着名的自然论文。

我想要的是什么:
我没有向网络馈送像素数据,而是想要输入球的x和y位置以及球拍的y位置连续4帧。所以我总共得到了12个输入 我只想奖励一轮的击球,失利和胜利 使用此配置,网络没有收敛,我的代理无法玩游戏。相反,桨叶直接驱动到顶部或底部或重复相同的模式。所以我想我尝试让代理更容易一些,并添加一些信息。

我做了什么:
状态:

  • 球的x位置(-1到1)
  • 球的y位置(-1到1)
  • 标准化球的x速度
  • 球的标准化y速度
  • 桨的y位置(-1到1)

连续4帧我的总输入为20.

奖励:

  • +10如果Paddle击球
  • 如果代理赢得回合,则为+100
  • -100如果代理人失去了一轮
  • -5到0表示球的预测终点位置(y位置)与桨的当前y位置之间的距离
  • +20如果球的预测终点位于桨的当前范围内(击中是可预见的)
  • -5如果球位于球拍后面(不再可能击球)

通过此配置,网络仍然存在分歧。我尝试了解学习率(0.1到0.00001),隐藏层的节点(5到500),隐藏层数(1到4),批量累加器(总和或平均值),更新规则(rmsprop或Deepminds rmsprop) 所有这些都没有带来满意的解决方案。损失平均值的图表大多看起来像this。 您可以下载我当前版本的实施here
我会非常感谢任何暗示:) Koanashi

1 个答案:

答案 0 :(得分:2)

从评论中重复我的建议作为答案,以便更容易看到后来在此页面上结束的其他人(因为我不是100%确定它是解决方案,因此首先发布为评论):

将奖励的幅度减少到(或至少接近)[0.0,1.0]或[-1.0,1.0]间隔有助于网络更快地收敛。

以这种方式改变奖励值(简单地将它们全部除以数字以使它们处于较小的间隔中)并不会改变网络在理论上能够学到的东西。通过在整个网络中寻找更大的权重,网络还可以简单地学习具有更大奖励的相同概念。

然而,学习如此大的重量通常需要更多的时间。这样做的主要原因是权重通常初始化为接近0的随机值,因此通过训练将这些值更改为大值需要花费大量时间。因为权重被初始化为较小的值(通常),并且它们与最佳权重值相差很远,这也意味着存在增加的本地风险( a global)在最佳重量值的最小值,它可能会陷入其中。

奖励值越低,最佳权重值的幅度也可能越低。这意味着初始化为小随机值的权重已经更可能接近其最佳值。这样可以缩短培训时间(减少“非正常”行程的“距离”),并降低在途中遇到局部最小值的风险。