【强化学习】时间差分法(TD)

引用 知乎专栏 天津包子馅儿的知乎

1、前言

之前的强化学习分类中介绍了几种强化学习方法的分类,今天就说一下其中重要的算法思想时间差分法,TD与蒙特卡罗法主要是在值函数的更新上有所差异,我们可以先看下图
【强化学习】时间差分法(TD)

动态规划法
需要一个完全已知的环境,需要状态之间的转换概率,并且V(S)状态值函数的估计是自举的(bootstrapping),即当前状态值函数的更新依赖于已知的其他状态值函数,也就是使用bellman方程求解值函数。

V(s)Eπ[Rt+1+γV(s)]

此处有一个概念:值函数的计算用到了bootstapping的方法。所谓bootstrpping本意是指自举,此处是指当前值函数的计算用到了后继状态的值函数。即用后继状态的值函数估计当前值函数。

蒙特卡罗法
我们之前在PolicyGradient中使用到了这种方法,他可以应用在model-free的算法中,但是他需要执行完整的一个episode的才可以进行估计。注意此处的Gt是利用经验平均估计状态的值函数所计算出来的。

V(s)V(s)+α(GtV(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(λ)可以通过在TD-target再根据bellman方程展开,就可扩展成n-step的形式,将每步求和取平均然后分别计算,并且赋予系数(系数加和为1)。
【强化学习】时间差分法(TD)
Gtλ=(1λ)n=1λn1Gt(n)
其中Gt(n)=Rt+1+γRt+2+γ2Rt+3+......γn1Rt+n+γnV(St+n)

TD(λ)更新过程为:
1) 首先计算当前状态的TD偏差:δt=Rt+1+γV(St+1)V(St)

2)更新适合度轨迹:Et(s)={γλEt1, if sstγλEt1+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++γT1tδT1=Rt+1+γV(St+1)V(St)+γRt+2+γ2V(St+2)γV(St+1)+γ2Rt+3+γ3V(St+3)γ2V(St+2)+γT1tRT+γTtV(ST)γT1tV(ST1)

对于一般的\lambda,前向观点等于后向观点:
Gtλ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中的图来帮助区分这三种算法
【强化学习】时间差分法(TD)
【强化学习】时间差分法(TD)
【强化学习】时间差分法(TD)