为乒乓球游戏的神经网络寻找正确的参数

2023-12-19

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

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

我做了什么:
States:

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

对于 4 个连续帧,我得到的总输入为 20。

Rewards:

  • 如果球拍击中球则+10
  • 如果特工赢得该回合,+100
  • -100(如果特工输掉这一轮)
  • -5 到 0,表示球的预测结束位置(y 位置)与球拍的当前 y 位置之间的距离
  • 如果球的预测最终位置位于球拍的当前范围内(击球是可预见的),+20
  • -5 如果球位于球拍后面(不再可能击球)

使用此配置,网络仍然存在分歧。我尝试调整学习率(0.1 到 0.00001)、隐藏层节点(5 到 500)、隐藏层数量(1 到 4)、批量累加器(总和或平均值)、更新规则(rmsprop 或 Deepminds rmsprop)。
所有这些都没有带来令人满意的解决方案。损失平均值的图表大多看起来像this https://i.stack.imgur.com/XiUUK.png。 您可以下载我当前的实施版本here https://Kaonashi2@bitbucket.org/Kaonashi2/py-pong3.0.git
我将非常感谢任何提示:)
高无


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

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

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

然而,学习这么大的权重通常需要更多的时间。造成这种情况的主要原因是权重通常被初始化为接近0的随机值,因此需要花费大量时间通过训练将这些值更改为大值。因为权重被初始化为较小的值(通常),并且它们距离最佳权重值非常远,这也意味着存在局部(not全局)最小值,直到达到最佳权重值,它可能会陷入其中。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为乒乓球游戏的神经网络寻找正确的参数 的相关文章

随机推荐