神经网络与时间差异学习

时间:2014-04-23 05:07:03

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

我阅读了一些关于时间差异学习的论文和讲座(有些与神经网络有关,比如关于TD-Gammon的Sutton教程)但是我很难理解方程式,这使我进入了的问题。

- 预测值V_t来自哪里?接下来,我们如何获得V_(t + 1)?

- 当TD与神经网络一起使用时,究竟是什么回传?也就是说,返回传播的错误来自何时使用TD?

1 个答案:

答案 0 :(得分:7)

向后和向前视图可能令人困惑,但是当你处理像游戏程序这样简单的事情时,实际上事情实际上非常简单。我没有查看您正在使用的参考文献,所以让我提供一般概述。

假设我有一个类似于神经网络的函数逼近器,并且它有两个函数trainpredict用于训练特定输出并预测状态的结果。 (或者在特定州采取行动的结果。)

假设我在玩游戏时有一些游戏,我使用predict方法告诉我每个点的动作是什么,并假设我在比赛结束时输了(V = 0 )。假设我的状态是s_1,s_2,s_3 ...... s_n。

monte-carlo方法说我使用跟踪和最终得分训练我的函数逼近器(例如我的神经网络)在跟踪中的每个状态。因此,给定此跟踪,您将执行类似调用的操作:

train(s_n, 0) train(s_n-1, 0)  ... train(s_1, 0)

也就是说,我要求每个州预测追踪的最终结果。

动态编程方法说我根据下一个状态的结果进行训练。所以我的训练就像

train(s_n, 0) train(s_n-1, test(s_n))  ... train(s_1, test(s_2))

也就是说,我要求函数近似器预测下一个状态预测的内容,最后一个状态预测跟踪的最终结果。

TD学习在这两者之间混合,其中λ=1对应于第一种情况(monte carlo)而λ=0对应于第二种情况(动态编程)。假设我们使用λ=0.5。然后我们的培训将是:

train(s_n, 0) train(s_n-1, 0.5*0 + 0.5*test(s_n)) train(s_n-2, 0.25*0 + 0.25*test(s_n) + 0.5*test(s_n-1)+)  ...

现在,我在这里写的内容并不完全正确,因为你实际上并没有在每一步重新测试近似值。相反,您只需从预测值(在我们的示例中为V = 0)开始,然后更新它以便使用下一个预测值训练下一步。 V = λ·V + (1-λ)·test(s_i)

这比monte carlo和动态编程方法学得更快,因为你不会要求算法学习这样的极端值。 (忽略当前预测或忽略最终结果。)