德尔福/帕斯卡中的TD(λ)(时差学习)
题
我有一个玩井字游戏的人工神经网络-但这还不完整。
我还没有什么:
- 奖励数组“ R [t]”的每个时间步长或移动“ t”(1=玩家A获胜,0=平局,-1=玩家B获胜)
- 输入值已通过网络正确传播。
- 调整权重的公式:
缺少的内容:
- TD学习:我仍然需要一个使用TD(λ)算法“反向传播”网络错误的过程。
但是我不太了解这个算法。
到目前为止我的方法...
迹线衰减参数λ应该为“ 0.1”,因为远端状态不应获得那么多的回报。
两层(输入和隐藏)的学习率均为“ 0.5”。
这是延迟奖励的一种情况:奖励保持为“ 0”,直到游戏结束。然后,第一个玩家的获胜奖励为“ 1”,第二个玩家的获胜奖励为“ -1”,平局时为“ 0”。
我的问题:
- 您如何以及何时计算网络的误差(TD误差)?
- 如何实现错误的“反向传播”?
- 如何使用TD(λ)调整权重?
非常感谢您:)
- 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”-在代码中可能更容易理解。