【问题标题】:Finding the right parameters for neural network for pong-game为乒乓球游戏找到正确的神经网络参数
【发布时间】:2017-01-15 05:19:44
【问题描述】:

我在为 Pong 游戏实现深度神经网络时遇到了一些问题,因为无论我更改哪些参数,我的网络总是发散的。 我参加了一个 Pong-Game 并实现了一个基于 theano/lasagne 的深度 Q 学习算法,该算法基于 Google 的 Deepmind 著名的自然论文。

我想要什么:
我不想为网络提供像素数据,而是输入球的 x 和 y 位置以及 4 个连续帧的桨的 y 位置。所以我总共有 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
我将非常感谢任何提示:)
小梨

【问题讨论】:

  • 由于我没有足够的声望点来发布两个以上的链接,我想在这里提供它们:Pong-Game; Theano/Lasagne implementation; Nature paper; Another loss plot;
  • 您是否尝试过使用较低的奖励值?如果可能的话,我建议尝试根据您当前使用的奖励的最小和最大可能值,将所有奖励标准化为 [0.0, 1.0] 或 [-1.0, 1.0]。如果很难确定那些最小值和最大值,它至少仍然有助于使一切接近 0(也许将您现在使用的所有奖励除以 100?)。这可能有助于网络更快地收敛。
  • 谢谢,我还没有,但我会知道然后报告。
  • 哇!而已! @DennisSoemers 非常感谢你!网络收敛,合适的玩家学会打乒乓球。我现在将尝试调整游戏,以获得我想要的条件。非常好!!! :)

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


【解决方案1】:

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

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

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

但是,学习如此大的权重通常需要更多时间。主要原因是权重通常初始化为接近 0 的随机值,因此通过训练将这些值更改为较大的值需要花费大量时间。因为权重被初始化为较小的值(通常),并且它们与最佳权重值相差甚远,这也意味着存在局部(不是全局)的风险增加一直到最优权重值的最小值,它可能会陷入其中。

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

【讨论】:

  • 第一个版本运行良好后,我删除了计算预测结束位置和桨之间距离的奖励。现在我的losses 首先减少但再次增加。连续 4 帧,我仍然有 20 个输入。我选择了一个具有 80 个节点的隐藏层,我有 3 个输出(上、下、下)。我是不是过度拟合了,还是需要不止一个隐藏层?或者为什么损失又增加了?
  • 在具有监督学习的标准设置中(根据已知最佳输出的示例情况训练神经网络),我建议不仅绘制验证/测试的损失数据,还要绘制训练数据的损失。然后,如果训练数据的损失持续下降,但验证数据的损失增加,你就知道你过拟合了。我相信您的设置有所不同,而且您没有训练数据?也许这些信息会给你一些有用的想法。
  • @Koanashi 要获得更有用的回复,我首先必须详细阅读该论文以更好地了解它在此设置中的工作原理。现在我不介意这样做,因为它很有趣,而且我真的可能应该在某个时候阅读它,但这需要一些时间
  • @Koanashi 我现在已经更详细地阅读了这篇论文。您的“训练数据”(一组经验)随着时间的推移而增长,这是否正确?因为我相信你会玩一点,然后训练一点,然后再玩一点,然后再训练一点,等等?在这种情况下,我假设最初训练集相对较小,因此更容易获得低损失。当集合增长时,网络也变得更加难以匹配观察结果,所以我认为如果损失增长一点,这并不奇怪。 (由于字符限制,在下一条评论中继续)
  • 你的损失应该最终稳定下来。从您链接的最后一张图片来看,它看起来可能会开始稳定在 0.03 左右。不过很难说,需要更多的时期才能确定。我认为最重要的问题是;你的经纪人还打得好吗?如果是这样,损失增加一点是没有问题的,只要它不会永远保持上升
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多