我有一个玩井字游戏的人工神经网络-但这还不完整。


我还没有什么:

  • 奖励数组“ R [t]”的每个时间步长或移动“ t”(1=玩家A获胜,0=平局,-1=玩家B获胜)
  • 输入值已通过网络正确传播。
  • 调整权重的公式:

    “在此处输入图片描述”


    缺少的内容:

    • TD学习:我仍然需要一个使用TD(λ)算法“反向传播”网络错误的过程。

      但是我不太了解这个算法。


      到目前为止我的方法...

      迹线衰减参数λ应该为“ 0.1”,因为远端状态不应获得那么多的回报。

      两层(输入和隐藏)的学习率均为“ 0.5”。

      这是延迟奖励的一种情况:奖励保持为“ 0”,直到游戏结束。然后,第一个玩家的获胜奖励为“ 1”,第二个玩家的获胜奖励为“ -1”,平局时为“ 0”。


      我的问题:

      • 您如何以及何时计算网络的误差(TD误差)?
      • 如何实现错误的“反向传播”?
      • 如何使用TD(λ)调整权重?

        非常感谢您:)

有帮助吗?

解决方案

如果您认真对待这项工作,那么了解TD-lambda将非常有帮助。萨顿和巴托(Sutton and Barto)的书“强化学习” 可从以下网站免费获得HTML格式,并详细介绍了此算法。基本上,TD-lambda所做的是在游戏状态和游戏结束时的预期奖励之间建立映射。在玩游戏时,更有可能导致获胜的州往往会获得更高的预期奖励值。

对于井字游戏这样的简单游戏,最好从表格映射开始(只需跟踪每种可能游戏状态的预期奖励值)。然后,一旦完成该工作,就可以尝试使用NN进行映射。但是我建议先尝试一个单独的,更简单的NN项目...

其他提示

我对此也感到困惑,但是我相信这是它的工作方式:

从结束节点开始,检查R(接收到的输出)和E(期望的输出)。如果E= R,那很好,并且您无需进行任何更改。

如果E!= R,则根据阈值和诸如此类的值,您可以看到距离有多远,然后将权重或阈值向上或向下移动一点。然后,根据新的权重,返回,并猜测它是否太高或太低,然后重复执行,效果较弱。

我从来没有真正尝试过这种算法,但是据我所知,这基本上是该想法的版本。

据我所知,您使用已知结果集进行训练-因此您计算已知输入的输出并从中减去已知输出值-这就是错误。

然后,您使用错误来校正网络-对于使用delta规则调整的单层NN,我知道0.5的epsilon太高了-像0.1一样好-慢但好。通过反向传播,它要先进一些-但据我所知,关于NN的数学方程式描述很复杂且难以理解-并不那么复杂。

看看 http://www.codeproject.com/KB/recipes/BP.aspx

或Google的“反向传播c”-在代码中可能更容易理解。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top