神经网络中的Q学习不是“学习”

时间:2016-10-19 10:54:30

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

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

在每个州都有四种可能的动作(北,东,南,西),奖励在比赛结束时(丢失为-1,平局为0,胜利为1)。

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

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

  1. 我为MLP提供当前状态并确定最高状态 Q值并且有90%的可能性(10%随机运动)去那里。使用sigmoid或RELU激活函数确定Q值(我已尝试过两者)。
  2. 然后我在新状态下计算4个Q值并使用它来训练我的第一个移动的网络,具有以下目标:Target = reward + gamma *(maxQnextState)。然后错误=目标 - 在先前状态下计算的qValue。
  3. 我使用sigmoid函数的导数和高学习率和动量项来反向传播,以向后传播误差。
  4. 好像我的qValues要么非常低(0.0001的顺序),要么非常接近1(0.999)。如果我在每10,000个游戏中查看错误术语,它似乎并没有减少。

    我开始使用可以学习XOR功能的MLP,并将其用于Q-learning。也许XOR案例中的一些基本假设是不同的,并导致Q学习的问题?

    或许它是稀疏输入(只是0,1或-1的100倍),这使得无法学习?

    建议真的很感激!

2 个答案:

答案 0 :(得分:2)

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

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

可能的解释是[Barreto& Sons]中描述的称为 interference 的现象。安德森,2008年]:

  

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

     

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

     

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

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

<强>参考

Boyan,J。A.&amp; Moore,A.W。(1995)强化学习中的推广:安全地逼近价值函数。 NIPS-7。 San Mateo,CA:Morgan Kaufmann。

AndrédaMotta Salles Barreto&amp; Charles W. Anderson(2008)Restricted gradient-descent算法用于强化学习中的价值函数逼近,人工智能172(2008)454-482

答案 1 :(得分:0)

我认为学习率太高(0.05)。当我把它降低到0.005 / 0.001时,这解决了问题。