引用 知乎专栏 天津包子馅儿的知乎
1、前言
之前的强化学习分类中介绍了几种强化学习方法的分类,今天就说一下其中重要的算法思想时间差分法,TD与蒙特卡罗法主要是在值函数的更新上有所差异,我们可以先看下图
动态规划法:
需要一个完全已知的环境,需要状态之间的转换概率,并且V(S)状态值函数的估计是自举的(bootstrapping),即当前状态值函数的更新依赖于已知的其他状态值函数,也就是使用bellman方程求解值函数。
V(s)←Eπ[Rt+1+γV(s′)]
此处有一个概念:值函数的计算用到了bootstapping的方法。所谓bootstrpping本意是指自举,此处是指当前值函数的计算用到了后继状态的值函数。即用后继状态的值函数估计当前值函数。
蒙特卡罗法:
我们之前在PolicyGradient中使用到了这种方法,他可以应用在model-free的算法中,但是他需要执行完整的一个episode的才可以进行估计。注意此处的Gt是利用经验平均估计状态的值函数所计算出来的。
V(s)←V(s)+α(Gt−V(s))
所以可以看出使用蒙特卡罗法需要回合结束才能更新,结合以上两者的优势就得到了TD算法
2、时间差分法TD
时间差分方法结合了蒙特卡罗的采样方法和动态规划方法的bootstrapping(利用后继状态的值函数估计当前值函数)使得他可以适用于model-free的算法并且是单步更新,速度更快。值函数计算方式如下
V(s)←V(s)+α(Rt+1+γV(s′)−V(s))
其中Rt+1+γV(s′)被称为TD目标,δt=Rt+1+γV(s′)−V(s) 称为TD偏差。
我们可以发现其实就是把蒙特卡罗法中估计的Gt替换成了TD目标,因为TD目标使用了bootstrapping方法估计当前值函数,所以这样就结合了动态规划的优点避免了回合更新的尴尬。
TD(0)的估计方式如下
TD(λ)可以通过在TD-target再根据bellman方程展开,就可扩展成n-step的形式,将每步求和取平均然后分别计算,并且赋予系数(系数加和为1)。
Gλt=(1−λ)∑∞n=1λn−1G(n)t
其中G(n)t=Rt+1+γRt+2+γ2Rt+3+......γn−1Rt+n+γnV(St+n)
TD(λ)更新过程为:
1) 首先计算当前状态的TD偏差:δt=Rt+1+γV(St+1)−V(St)
2)更新适合度轨迹:Et(s)={γλEt−1, if s≠stγλEt−1+1, if s=st
3)对于状态空间中的每个状态 s, 更新值函数:V(s)←V(s)+αδtEt(s)
其中Et(s)称为适合度轨迹
首先,当λ=0 时,只有当前状态值更新,此时等价于之前说的TD方法。所以TD方法又称为TD(0)方法.
其次,当λ=1时,状态s值函数总的更新与蒙特卡罗方法相同:
δt+γδt+1+γ2δt+2+⋯+γT−1−tδT−1=Rt+1+γV(St+1)−V(St)+γRt+2+γ2V(St+2)−γV(St+1)+γ2Rt+3+γ3V(St+3)−γ2V(St+2)⋮+γT−1−tRT+γT−tV(ST)−γT−1−tV(ST−1)
对于一般的\lambda,前向观点等于后向观点:
Gλt−V(St)=−V(St)+(1−λ)λ0(Rt+1+γV(St+1))+(1−λ)λ1(Rt+1+γRt+2+γ2V(St+2))+(1−λ)λ2(Rt+1+γRt+2+γ2Rt+3+γ3V(St+2))+⋯
=−V(St)+(γλ)0(Rt+1+γV(St+1)−γλV(St+1))+(γλ)1(Rt+2+γV(St+2)−γλV(St+2))+(γλ)2(Rt+3+γV(St+3)−γλV(St+3))+⋯
=(γλ)0(Rt+1+γV(St+1)−V(St))+(γλ)1(Rt+2+γV(St+2)−V(St+1))+(γλ)2(Rt+3+γV(St+3)−V(St+2))+⋯
=δt+γλδt+1+(γλ)2δt+2+⋯
注意,所谓等价是指更新总量相等。
是不是觉得有点像Sarsa与Sarse(λ),它其实就是来自于这个原始思想
3、算法对比
对比MC算法与TD算法的特点
MC:无偏估计;容易收敛;可以使用函数拟合;初值不敏感;理解简单容易使用
TD:估计值有误差;通常情况笔MC更有效;TD(0)收敛于Vπ(s);初值敏感
接下来引用Sliver的PPT中的图来帮助区分这三种算法