1、时序差分概述
前面我们讲了基于模型的动态规划和不基于模型的蒙特卡罗算法,他们都有各自的优点和缺点。动态规划能够很好的基于模型来求解强化学习,但是现实问题中很少能提前知道这个模型;蒙特卡罗算法能够一定程度上结局无模型的强化学习任务,但是它必须在拥有完整的序列的前提下才能得到好的效果,这在现实中也很难实现。未来更高效的求解强化学习任务,我们基于自举方式的动态规划和基于采样思想的蒙特卡罗算法两者的优势,提出时序差分法。
回顾蒙特卡罗法中计算状态收获的方法是:
而对于时序差分法来说,我们没有完整的状态序列,只有部分的状态序列,那么如何可以近似求出某个状态的收获呢?回顾强化学习(二)马尔科夫决策过程(MDP)中的贝尔曼方程:
这启发我们可以用
R
t
+
1
R_{t+1}
Rt+1+γv(
S
t
+
1
S_{t+1}
St+1)来近似的代替收获
G
t
G_t
Gt, 一般我们把
R
t
+
1
R_{t+1}
Rt+1+γV(
S
t
+
1
S_{t+1}
St+1)称为TD目标值。
R
t
+
1
R_{t+1}
Rt+1+γV(
S
t
+
1
S_{t+1}
St+1)−V(
S
t
S_t
St)称为TD误差,将用TD目标值近似代替收获G(t)的过程称为自举(bootstrapping)。这样我们只需要两个连续的状态与对应的奖励,就可以尝试求解强化学习问题了。
2、TD和蒙特卡罗算法的不同
(1)G(t)的表达式不同,时序差分G(t)的表达式为:
蒙特卡罗算法中的G(t)表达式为:
(2)迭代的式子系数稍有不同,回顾蒙特卡罗法的迭代式子是:
因为在时序差分我们没有完整的序列,也就没有对应的次数N(St),一般就用一个[0,1]的系数α代替。这样时序差分的价值函数迭代式子是:
这是从数学表达式的方面比较它们的不同,下面我们用一个实际例子看看它们之间的不同。
假设我们的强化学习问题有A,B两个状态,模型未知,不涉及策略和行为。只涉及状态转化和即时奖励。一共有8个完整的状态序列如下:
① A,0,B,0 ②B,1 ③B,1 ④ B,1 ⑤ B,1 ⑥B,1 ⑦B,1 ⑧B,0
只有第一个状态序列是有状态转移的,其余7个只有一个状态。设置衰减因子γ=1。
首先我们按蒙特卡罗法来求解预测问题。由于只有第一个序列中包含状态A,因此A的价值仅能通过第一个序列来计算,也就等同于计算该序列中状态A的收获:
对于B,则需要对其在8个序列中的收获值来平均,其结果是6/8。
再来看看时序差分法求解的过程。其收获是在计算状态序列中某状态价值时是应用其后续状态的预估价值来计算的,对于B来说,它总是终止状态,没有后续状态,因此它的价值直接用其在8个序列中的收获值来平均,其结果是6/8。
对于A,只在第一个序列出现,它的价值为:
从上面的例子可以看出它们之间的不同之处,总结为一下几点:
(1)时序差分法在知道结果之前就可以学习,也可以在没有结果时学习,还可以在持续进行的环境中学习,而蒙特卡罗法则要等到最后结果才能学习,时序差分法可以更快速灵活的更新状态的价值估计,这在某些情况下有着非常重要的实际意义。
(2)时序差分法在更新状态价值时使用的是TD 目标值,即基于即时奖励和下一状态的预估价值来替代当前状态在状态序列结束时可能得到的收获,是当前状态价值的有偏估计,而蒙特卡罗法则使用实际的收获来更新状态价值,是某一策略下状态价值的无偏估计,这一点蒙特卡罗法占优。
(3)虽然时序差分法得到的价值是有偏估计,但是其方差却比蒙特卡罗法得到的方差要低,且对初始值敏感,通常比蒙特卡罗法更加高效。
3、TD(λ)
上面讲的时序差分针对的都是状态s和下一步状态s’来求G(t),那能不能针对状态s和它的后几步,甚至于后面n步来求解呢。当然可以,这时我们的收获
G
t
G_t
Gt的近似表达式为:
从两步,到三步,再到n步,我们可以归纳出n步时序差分收获
G
t
(
n
)
G^{(n)}_t
Gt(n)表达式为:
当n越来越大,趋于无穷,或者说趋于使用完整的状态序列时,n步时序差分就等价于蒙特卡罗法了。
n步时序差分选择多少步数作为一个较优的计算参数是需要尝试的超参数调优问题。为了能在不增加计算复杂度的情况下综合考虑所有步数的预测,我们引入了一个新[0,1]的参数λ,定义λ−收获是n从1到∞所有步的收获乘以权重的和。每一步的权重是
(
1
−
λ
)
λ
n
−
1
(1−λ)λ^{n−1}
(1−λ)λn−1,这样λ−收获的计算公式表示为:
进而我们可以得到TD(λ)的价值函数的迭代公式:
那引入这个权重
(
1
−
λ
)
λ
n
−
1
(1−λ)λ^{n−1}
(1−λ)λn−1的原因是为什么呢?为什么不用其他的表达式呢?其实这些都是研究人员不断的实验得出的比较好的结果。可以用下面这个图来理解:
可以看到随着n的增大,其第n步收获的权重呈几何级数的衰减。当在T时刻到达终止状态时,未分配的权重全部给予终止状态的实际收获值。这样可以使一个完整的状态序列中所有的n步收获的权重加起来为1,离当前状态越远的收获其权重越小。
同时,TD(λ)算法分为前向和后向两种。
那哪边是前,哪边是后呢?按规定:若有状态 s 0 , s 1 , , , , , , s t s_0,s_1,,,,,,s_t s0,s1,,,,,,st,从0到t就是往前,反之就是往后。
(1)从前向来看TD(λ), 一个状态的价值V(St)由Gt得到,而Gt又间接由所有后续状态价值计算得到,因此可以认为更新一个状态的价值需要知道所有后续状态的价值。也就是说,必须要经历完整的状态序列获得包括终止状态的每一个状态的即时奖励才能更新当前状态的价值。这和蒙特卡罗法的要求一样,因此TD(λ)有着和蒙特卡罗法一样的劣势。当λ=0 时,就是第二节讲到的普通的时序差分法,当λ=1 时,就是蒙特卡罗法。
(2)从反向来看TD(λ),它可以分析我们状态对后续状态的影响。比如老鼠在依次连续接受了3 次响铃和1 次亮灯信号后遭到了电击,那么在分析遭电击的原因时,到底是响铃的因素较重要还是亮灯的因素更重要呢?如果把老鼠遭到电击的原因认为是之前接受了较多次数的响铃,则称这种归因为频率启发(frequency heuristic) 式;而把电击归因于最近少数几次状态的影响,则称为就近启发(recency heuristic) 式。
如果给每一个状态引入一个数值:效用(eligibility, E) 来表示该状态对后续状态的影响,就可以同时利用到上述两个启发。而所有状态的效用值总称为效用迹(eligibility traces,ES)。定义为:
此时我们TD(λ)的价值函数更新式子可以表示为:
4、时序差分的控制问题求解
时序差分求解控制问题主要分成两种:
(1)在线控制(on-policy)
(2)离线控制(off-policy)
离线控制和在线控制的区别主要在于在线控制一般只有一个策略(最常见的是ϵ−贪婪法)。而离线控制一般有两个策略,其中一个策略(最常见的是ϵ−贪婪法)用于选择新的动作,另一个策略(最常见的是贪婪法)用于更新价值函数。
5、总结
时序差分法可以免模型学习,不需要具备完整的环境知识。而且可用于连续任务,不需要终止状态。因此是目前主流的强化学习求解问题的方法,现在绝大部分强化学习乃至深度强化学习的求解都是以时序差分的思想为基础的。
接下来我们讨论时序差分的在线控制算法SARSA。
下一篇:SARSA和Q-learning