【问题标题】:TD(λ) in Delphi/Pascal (Temporal Difference Learning)Delphi/Pascal 中的 TD(λ)(时间差分学习)
【发布时间】:2011-06-18 05:53:22
【问题描述】:

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


我还没有:

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


缺少什么:

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

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


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

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

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

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


我的问题:

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

提前非常感谢你:)

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答。不幸的是,这不是时间差异学习 - 这是您描述的 delta 规则的“反向传播”。
    • 感谢您的反对票 - 我现在看到我的贡献确实没有帮助。所以谁投它谢谢!至于 NN - 所以你不是在看广义的 deltarule。我确实发现介绍它的 PDP 书籍非常有趣。对于井字游戏,我认为使用遗传算法会更有趣。
    【解决方案2】:

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

    从结束节点开始,检查 R,(收到的输出)和 E,(预期的输出)。如果 E = R,没关系,您无需进行任何更改。

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

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

    【讨论】:

    • 是的,我也这么认为,这可能就是它的工作方式。但重要的是:如何调整权重? ;)
    【解决方案3】:

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

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

    【讨论】:

    • 是的,当然,理解 TD-lambda 很重要。我真的不明白。当然,我读过萨顿的那本书。算法的大致作用对我来说很清楚。我已经尝试过表格映射,但现在我很想实现一个 TD-lambda 工作的 ANN。
    猜你喜欢
    • 2013-05-21
    • 2016-06-09
    • 2012-05-28
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2016-05-25
    • 2014-06-07
    相关资源
    最近更新 更多