eth*_*hll 4 artificial-intelligence reinforcement-learning backpropagation neural-network temporal-difference
我有一些关于时间差异学习的论文和讲座(有些与神经网络有关,比如TD-Gammon上的Sutton教程),但我很难理解方程式,这引出了我的问题.
- 预测值V_t来自哪里?接下来,我们如何获得V_(t + 1)?
- 当TD与神经网络一起使用时,究竟是什么回传?也就是说,返回传播的错误来自何时使用TD?
向后和向前的视图可能令人困惑,但是当你处理像游戏程序这样简单的事情时,实际上事情实际上非常简单.我不是在看你正在使用的参考文献,所以让我提供一般概述.
假设我有一个函数逼近就像一个神经网络,而且它有两个功能,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和动态编程方法学得快得多,因为你不是要求算法学习这样的极值.(忽略当前预测或忽略最终结果.)