Delphi / Pascal中的TD(λ)(时间差异学习)

时间:2011-01-30 20:59:02

标签: artificial-intelligence neural-network reinforcement-learning temporal-difference

我有一个玩Tic-Tac-Toe的人工神经网络 - 但还没有完成。


我还有什么:

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

enter image description here


缺少什么:

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

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


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

痕迹衰减参数λ应该是“0.1”,因为远端状态不应该得到那么多的奖励。

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

这是延迟奖励的情况:奖励在游戏结束前保持为“0”。然后奖励对于第一个玩家的胜利变为“1”,对于第二个玩家的胜利变为“-1”或者在抽奖的情况下变为“0”。


我的问题:

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

提前非常感谢你:)

3 个答案:

答案 0 :(得分:2)

如果你认真对待这项工作,那么理解TD-lambda会非常有帮助。 Sutton和Barto的书“强化学习”是available for free in HTML format并详细介绍了这个算法。基本上,TD-lambda所做的是在游戏结束时创建游戏状态与预期奖励之间的映射。随着比赛的进行,更有可能获得胜利状态的状态往往会获得更高的预期奖励值。

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

答案 1 :(得分:0)

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

从结束节点开始,检查R,(接收输出)和E,(预期输出)。如果E = R,那很好,你没有任何改变。

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

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

答案 2 :(得分:0)

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

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

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

或google for“backpropagation c” - 在代码中可能更容易理解。