我阅读了一些关于时间差异学习的论文和讲座(有些与神经网络有关,比如关于TD-Gammon的Sutton教程)但是我很难理解方程式,这使我进入了的问题。
- 预测值V_t来自哪里?接下来,我们如何获得V_(t + 1)?
- 当TD与神经网络一起使用时,究竟是什么回传?也就是说,返回传播的错误来自何时使用TD?
答案 0 :(得分:7)
向后和向前视图可能令人困惑,但是当你处理像游戏程序这样简单的事情时,实际上事情实际上非常简单。我没有查看您正在使用的参考文献,所以让我提供一般概述。
假设我有一个类似于神经网络的函数逼近器,并且它有两个函数train
和predict
用于训练特定输出并预测状态的结果。 (或者在特定州采取行动的结果。)
假设我在玩游戏时有一些游戏,我使用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和动态编程方法学得更快,因为你不会要求算法学习这样的极端值。 (忽略当前预测或忽略最终结果。)