4

我有一个可以玩井字游戏的人工神经网络——但它还不完整。


我还没有:

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

在此处输入图像描述


什么不见​​了:

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

但我真的不明白这个算法。


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

轨迹衰减参数 λ 应为“0.1”,因为远端状态不应获得那么多奖励。

两个层(输入层和隐藏层)的学习率都是“0.5”。

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


我的问题:

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

提前非常感谢你:)

4

3 回答 3

2

如果您认真对待这项工作,那么了解 TD-lambda 将非常有帮助。Sutton 和 Barto 的书“强化学习”以 HTML 格式免费提供,并详细介绍了该算法。基本上,TD-lambda 所做的是在游戏状态和游戏结束时的预期奖励之间创建映射。随着游戏的进行,更有可能导致获胜状态的状态往往会获得更高的预期奖励值。

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

于 2011-01-30T22:56:18.093 回答
0

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

从末端节点开始,您检查 R,(收到的输出)和 E,(预期的输出)。如果 E = R,那很好,您无需进行任何更改。

如果 E != R,你会看到它有多远,基于阈值等等,然后将权重或阈值向上或向下移动一点。然后,根据新的权重,你回去,猜测它是否太高或太低,然后重复,效果较弱。

我从来没有真正尝试过这个算法,但这基本上是我理解的想法的版本。

于 2011-01-31T01:24:19.303 回答
0

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

然后你使用错误来纠正网络 - 对于使用 delta 规则调整的单层 NN,我知道 0.5 的 epsilon 太高 - 像 0.1 这样的东西更好 - 更慢但更好。使用反向传播,它会更高级一些——但据我所知,NN 的数学方程描述很复杂且难以理解——它并没有那么复杂。

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

或谷歌搜索“反向传播 c” - 在代码中可能更容易理解。

于 2011-02-08T21:14:34.160 回答