【问题标题】:Q-learning in neural network not 'learning'神经网络中的 Q 学习不是“学习”
【发布时间】:2017-02-28 23:24:36
【问题描述】:

我用 C++ 制作了一个简单的 Tron 游戏和一个带有一个隐藏层的 MLP。我已经在这个神经网络中实现了 Q-learning,但是,它并没有导致代理随着时间的推移赢得更多的比赛(即使在 100 万场比赛之后)。我将尝试在文本中解释我所做的事情,希望有人能发现可能导致此问题的错误。

在每个州都有四种可能的移动方式(北、东、南、西),奖励在游戏结束时进行(-1 为输,0 为平局,1 为赢)。

我初始化了 4 个 MLP,一个用于每个可能的动作,有 100 个输入节点(整个游戏网格 10x10),如果玩家本身在那里,每个点为 1,如果该点为空,则为 0,如果对手为 -1已经到过这一点。然后有 50 个隐藏节点和 1 个输出节点(我也尝试过一个有 4 个输出节点的网络,但这也无济于事)。权重在 -0.5 和 0.5 之间随机选择

在每个 epoch,我都会使用随机放置在网格中的 2 个代理初始化游戏环境。然后我在while循环中运行游戏,直到游戏结束,然后重置游戏环境。在这个 while 循环中,我执行以下操作。

  1. 我向 MLP 提供当前状态并确定最高 Q 值并以 90% 的几率(10% 随机移动)去那里。 Q 值是使用 sigmoid 或 RELU 激活函数确定的(我都尝试过)。
  2. 然后我在新状态下计算 4 个 Q 值,并使用它来训练我的第一步的网络,目标如下:Target = reward + gamma*(maxQnextState)。那么误差 = Target - qValue 在之前的状态下计算。
  3. 我使用反向传播和 sigmoid 函数的导数以及高学习率和动量项来反向传播误差。

似乎我的 qValue 要么非常低(按 0.0001 的顺序),要么非常接近 1 (0.999)。如果我查看每 10.000 场比赛的误差项,它似乎并没有减少。

我从一个可以学习 XOR 函数的 MLP 开始,现在将其用于 Q-learning。也许 XOR 案例中的一些基本假设不同,导致 Q-learning 出现问题?

或者也许是稀疏的输入(0、1 或 -1 的 100 倍)导致无法学习?

非常感谢您的建议!

【问题讨论】:

  • 解决方案是使用线性激活函数和低学习率 (0,01)。

标签: c++ neural-network reinforcement-learning


【解决方案1】:

有几个因素使 MLP 与 Q-learning 难以结合起来,特别是对于该领域的新手而言。 Rich Sutton(强化学习先驱之一)在他的web site 的常见问题解答中有一个与您的问题相关的问题。所以我建议你阅读那个文件。

众所周知,Q-Learning + 前馈神经网络作为 Q 函数逼近器即使在简单问题中也可能失败 [Boyan & Moore, 1995]。

一种可能的解释是 [Barreto & Anderson, 2008] 中描述的称为干扰的现象:

当一个状态-动作对的更新改变了其他对的 Q 值时,就会发生干扰,可能是在错误的方向上。

干扰自然与泛化相关,并且也发生在传统的监督学习中。然而,在强化学习范式中,它的影响往往更有害。原因是双重的。首先,干扰和引导的组合很容易变得不稳定,因为更新不再是严格本地的。从 (4) 和 (5) 派生的算法的收敛性证明是基于这些算子是收缩映射的事实,也就是说,它们的连续应用导致序列收敛到一个固定点,该固定点是贝尔曼方程的解[14,36]。然而,当使用逼近器时,这种渐近收敛会丢失,[...]

另一个不稳定的来源是在线强化学习中传入数据的分布取决于当前策略这一事实的结果。根据系统的动态,代理可以在不代表整个域的状态空间区域中停留一段时间。在这种情况下,学习算法可能会分配函数逼近器的过多资源来表示该区域,可能会“忘记”之前存储的信息。

总之,从 MLP 开始逼近 Q 函数并不是一个好主意。

参考文献

Boyan, J. A. & Moore, A. W. (1995) 强化学习中的泛化:安全地逼近价值函数。 NIPS-7。加利福尼亚州圣马特奥:摩根考夫曼。

André da Motta Salles Barreto 和 Charles W. Anderson (2008) Restricted gradient-descent algorithm for value-function approximation in强化学习,人工智能 172 (2008) 454–482

【讨论】:

    【解决方案2】:

    我发现学习率太高(0.05)。当我将其降低到 0.005/0.001 时,问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2016-07-11
      • 2019-03-15
      • 2011-08-17
      • 2020-10-29
      • 2016-11-28
      相关资源
      最近更新 更多