3

我对Pong游戏实现深度神经网络有一些麻烦,因为我的网络始终发散,无论我改变哪些参数。 我参加了一个Pong游戏,并实施了一个基于theano/lasagne的深度q学习算法,该算法基于Googles Deepmind着名的自然论文。为pong游戏寻找神经网络的正确参数

我想什么:
相反饲喂像素数据的网络的欲输入的x和球的y位置和桨叶的连续4帧的y位置。所以我总共有12个输入。
我只想奖励一轮的命中,损失和胜利。
有了这个配置,网络没有收敛,我的经纪人也无法玩游戏。相反,桨直接驱动到顶部或底部或重复相同的模式。所以我想我会尽量让代理更简单一些,并添加一些信息。

我所做的:
国:

  • 球(-1到1)x位置
  • 球(的y位置-1到1 )
  • 球的归一化x-速度
  • 球的归一化y-速度
  • 桨(-1至1)

随着连续4帧的y位置我得到的20

奖励总输入:

  • 10如果扳钮命中球
  • +100如果代理赢得回合
  • -100如果代理丢失回合
  • -5到0表示球的预测结束位置(y位置)与当前桨的y位置之间的距离如果球的预测结束位置位于球的当前范围内,则该球的预测结束位置为
  • +20。桨(命中预见)
  • -5如果球位于桨(未命中可能的了)后面

利用这种配置,网络仍然发散。我尝试了解学习速率(0.1到0.00001),隐藏层的节点(5到500),隐藏层的数量(1到4),批量累加器(总和或平均值),更新规则(rmsprop或Deepminds rmsprop)。
所有这些都没有导致令人满意的解决方案。损失平均值的图形大部分看起来像this。 您也可以下载实现我的当前版本here
我将是任何提示:)
Koanashi

+0

由于我没有足够的信誉点发布更多信息我想在这里提供两条链接: [Pong-Game](http://pygame.org/project-py-pong-2040-.html); [Theano/Lasagne实施](https://github.com/spragunr/deep_q_rl); [Nature paper](https://storage.googleapis.com/deepmind-data/assets/papers/DeepMindNature14236Paper.pdf); [另一个损失情节](http://i.imgur.com/U5ZBLcQ.png); – Koanashi

+0

您是否尝试过使用较低的奖励值?如果可能的话,我建议使用您当前使用的奖励,根据最小和最大可能值,将所有奖励标准化为[0.0,1.0]或[-1.0,1.0]。如果难以确定这些最小值和最大值,它可能仍然至少有助于使一切接近0(也许将您现在使用的所有奖励除以100?)。这可能有助于网络更快地融合。 –

+1

谢谢,我还没有,但我会知道,然后报告。 – Koanashi

回答

2

重复自评作为一个答案我的建议非常感激,以使其更容易看到其他任何人结束了(后来因为我不是100%确定它会是解决方案而被张贴为评论):

减少回报的幅度,使其位于(或至少接近)[0.0,1.0 ]或[-1.0,1.0]间隔有助于网络更快地收敛。

以这种方式改变奖励值(简单地用数字来区分它们以使它们位于更小的区间内)不会改变网络在理论上能够学习的东西。网络还可以通过在整个网络中找到更大的权重,简单地学习相同的概念,获得更大的回报。

但是,学习如此大的权重通常需要更多的时间。主要原因是权重通常初始化为接近0的随机值,因此通过训练需要花费大量时间将这些值更改为较大的值。由于权重初始化为较小的值(通常情况下),并且它们距最优权重值很远,这也意味着存在一个局部(整体而言)局部最小化的风险可以卡住的最佳重量值。

对于较低的奖励值,最佳重量值的幅度也可能较低。这意味着初始化为小随机值的权重已经更可能接近其最优值。这会缩短训练时间(减少非正式旅行的“距离”),并降低沿途卡路里出现局部最低点的风险。

+0

在第一个版本正常工作后,我删除了计算预测的最终位置和桨板之间距离的奖励。现在我的[损失](http://i.imgur.com/6U3zKlT.png)首先下降,但再次增加。 连续4帧,我仍然有20个输入。我选择了一个有80个节点的隐藏层,我有3个输出(上,下,下)。 我是否过度运行,还是需要多个隐藏层?或者为什么损失再次增加? – Koanashi

+0

在有监督学习的标准设置下(基于示例情况对神经网络进行训练,知道最佳输出是什么),我建议不仅绘制验证/测试数据的损失,还绘制损失的训练数据。然后,如果培训数据的损失持续下降,但验证数据的损失增加,则表明您过度适应。我相信你的设置不同,但你没有训练数据?也许这些信息会给你一些有用的想法。 –

+0

@Koanashi为了得到更有用的回复,我首先必须详细阅读论文,以更好地了解它在这种环境下的工作原理。现在我不介意这样做,因为它很有趣,我真的可能应该在某个时候阅读它,但这需要一点时间 –