之前讲到强化学习在不基于模型时可以用蒙特卡罗方法求解,但是蒙特卡罗方法需要在每次采样时生产完整序列,而在现实中,我们很可能无法生成完整序列,那么又该如何解决这类强化学习问题呢?

由贝尔曼方程 vπ(s)=Eπ(Rt+1+γRt+2+γ2Rt+3+...|St=s) 推导可得 vπ(s)=Eπ(Rt+1+γvπ(st+1)|st=s),由此给我们的启发是,可以拿下一个状态的价值函数来表示当前状态的价值函数,即t+1时刻表示t时刻,这就引入了时序差分。

这样只需要两个连续的状态,就可以尝试解决强化问题了。

同蒙特卡罗一样,时序差分也可以解决预测和控制问题

 

从表现形式上对比分析TD与MC

1.时序差分不需要完整的状态序列

  // 也就是说,时序差分可以在知道结果之前学习,或者说在没有结果时学习,还可以在持续进行的环境中学习 ;

  // 而蒙特卡罗只能在知道结果时学习

2.蒙特卡罗是在真实的实验中用少数几次的值来近似真实值,而时序差分并没有真实的实验,而是完全瞎猜,即用随机数来初始化V (当然你也可以通过试验初始化)

3.正常情况下,蒙特卡罗的更新方式是 V) 来更新

  // 此处 Gt=Rt+1+γvπ(st+1),称为St状态的TD目标值,vπ(st)是估计值,Gt-vπ(st)叫误差,α就是学习率,这里类似梯度下降。

4.蒙特卡罗使用实际的收获来更新状态价值,是某一策略下状态价值的无偏估计;

   而时序差分使用TD目标值,即基于即时奖励和下一状态的估计值来替代当前状态的收获,属于状态价值的有偏估计

  // 常用 vπ(st) 表示当前状态的实际价值

  // 常用Vπ) 表示当前状态的预估价值

  // 一般为书写方便,随便写了

通常来讲,时序差分更加灵活,在主流的强化学习解决方法中,都是基于时序差分。

 

接下来我们看看时序差分解决预测问题

1.输入{S A R  π γ}

2.生成两个连续状态

  // 由于时序差分用下一个状态更新当前状态,故首先要有2个状态,或者先初始化一个状态,此时再取下一个状态

3.计算TD目标值,并更新当前状态价值

4.取下一个状态,直至终点

5.重新从起点开始迭代

  // 当然第五步中不一定必须从起点开始迭代,可以随机取状态

  // 第四步中也不一定要取下一个状态,也可以随机取状态  (后续会讲到q learning 和 sarsa时用到此点)

  // 具体可以参考实际情况

6.直至收敛

 

实例对比TD和MC求解预测问题的不同

假设我们的强化学习问题有A,B两个状态,模型未知,不涉及策略和行为。只涉及状态转化和即时奖励。衰减因子为1。一共有8个完整的状态序列如下:

① A,0,B,0 ②B,1 ③B,1 ④ B,1 ⑤ B,1 ⑥B,1 ⑦B,1 ⑧B,0

1.对于MC

大体思路:MC是每次生成完整序列,然后计算该序列中每个状态的价值,最后根据完整序列个数进行累积均值更新。

换个更简单的说法,每个完整序列中该状态的价值,求和,再求平均

状态价值采用 GT

那么上例中 A 只存在于1个完整序列中,估v=0/1=0,B存在于8个序列,故v=(0+1+1+..+0)/8=6/8

2.对于TD

大体思路:找到当前状态的下一个状态,然后用下一个状态的预估值和即时奖励来更新该状态的价值,再取状态

换个更简单的说法,用下一个状态来更新当前状态,之后再取一个状态,迭代,求平均

状态价值采用 vπ(s)=Rt+1+γvπ(st+1)

由于B没有后续状态,故v=所有回报/总个数=6/8,v(A)=R+γv(B)=6/8

 

N步时序差分

上面讲到用后一个状态来表示当前状态,那么能不能用后两个状态来表示呢?后三个呢?N个呢?都是可以的

强化学习4-时序差分TD

相应TD目标值是

后一个 Gt(1)=Rt+1+γvπ(St+1)                        TD(0)

后两个 Gt

相关文章: