4

我有一个人工神经网络播放井字游戏 - 但它还没有完成。德尔福/帕斯卡(时间差分学习)TD(λ)


我有什么尚未:

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

enter image description here


缺少什么:

  • 的TD学习:我还需要一个过程,它 “backpropagates” 的网络的误差使用TD(λ)算法。

但我不太了解这个算法。


我的做法至今...

跟踪衰减参数λ应为“0.1”作为远端状态不应该得到那么多的奖励。

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

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


我的问题:

  • 如何,什么时候计算净的错误(TD错误)?
  • 如何实现错误的“反向传播”?
  • 如何使用TD(λ)调整权重?

非常感谢你提前:)

回答

2

如果你真的想让这个工作,那么了解TD-拉姆达将是非常有益的。 Sutton和Barto的着作“增强学习”是available for free in HTML format,并详细介绍了该算法。基本上,TD-lambda所做的是在游戏结束时创建一个游戏状态与期望奖励之间的映射。随着游戏的发挥,更有可能导致获胜状态的状态倾向于获得更高的期望奖励值。

对于像井字游戏这样的简单游戏,你最好从表格映射开始(只追踪每个可能游戏状态的期望奖励值)。然后,一旦你有了这个工作,你可以尝试使用NN来进行映射。不过,我会建议您尝试使用单独的,更简单的NN项目第一...

+0

是的,当然,理解TD-lambda会很重要。我真的不明白这一点。当然,我读过萨顿的那本书。这个算法对我来说大致是清楚的。我已经尝试过这种表格映射,但现在我很想用TD-lambda工作来实现一个ANN。 – caw 2011-02-01 21:13:31

0

我一直搞不清这个太,但我相信这是它的工作方式:从终端节点开始

,你检查[R ,(收到的产出)和E,(预期产出)。如果E = R,那很好,你也没有改变。

如果E!= R,基于阈值和其他因素,您会看到它有多远,然后将权重或阈值上移或下移一点。然后,根据新的权重,您重新进入,并猜测它是否太高或太低,并且以较弱的效果重复。

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

+0

是的,我也这么认为,这可能是它的工作方式。但重要的是:如何调整权重? ;) – caw 2011-02-01 21:09:34

+0

解除了这一点。 – 2013-02-13 18:31:50

0

据我记得,你用已知的结果集进行训练 - 所以你计算一个已知输入的输出并从中减去你已知的输出值 - 这就是错误。

然后你使用错误来纠正网络 - 对于用delta规则调整的单层NN我知道0.5的ε太高 - 类似0.1更好 - 更慢但更好。反向传播有点更先进 - 但据我所知,神经网络的数学方程描述很复杂,很难理解 - 它并不复杂。

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

或谷歌为“反传C” - 它可能是更容易的代码来理解。