强化学习(六):时序差分方法

强化学习(六):时序差分方法

  时序差分(TD)方法结合了动态规划与蒙特卡洛的思想,其可以像蒙特卡洛方法一样直接从智能体与环境互动的经验中学习,而不需要知道环境的模型,其又可以像动态规划一样无须等待交互的结果,可以边交互边学习。总的来说,时序差分是基于已得到的其他状态的估计值来更新当前状态的价值函数。如果没有学习动态规划部分,可以浏览博文强化学习(四):基于表格型动态规划算法的强化学习,如果没有学习蒙特卡洛方法,则可以浏览博文强化学习(五):蒙特卡洛采样方法


  我们知道,蒙特卡洛是基于采样的学习,从与环境的互动过程中所得到的经验作为求解贝尔曼方程的方法,然而,蒙特卡洛以及较强的分幕式设定在某些场景下并不适合,例如采样序列无限长,或者幕与幕之间没有明确的分界等情况。时序差分则结合动态规划的自举思想和蒙特卡洛的采样思想,使得其边采样边自举,不仅加快了学习的速度,也能适应诸多场景。本文将主要介绍TD(0)算法,即在采样期间,只将相邻的下一时刻状态估计值更新当前的价值函数,也就是说借用的估计值所处的时刻与目标更新的时刻差为1,亦称单步TD。在后续章节也会介绍TD(n),即多步TD。

一、TD误差

  我们已经非常熟悉强化学习的价值更新公式以及GPI思想,例如动态规划的策略预测:

v k + 1 ( s ) = a π ( a s ) s , r p ( s , r s , a ) [ r + γ v k ( s ) ] v_{k+1}(s)=\sum_{a}\pi(a|s)\sum_{s',r}p(s',r|s,a)[r+\gamma v_{k}(s')]

蒙特卡洛的策略控制:

Q ( S t , A t ) = Q ( S t , A t ) + W C ( S t , A t ) [ G t Q ( S t , A t ) ] Q(S_t,A_t) = Q(S_t,A_t) + \frac{W}{C(S_t,A_t)}[G_t-Q(S_t,A_t)]

C ( S t , A t ) = C ( S t , A t ) + W C(S_t,A_t) = C(S_t,A_t) + W

事实上,我们可以将这一类的更新公式写成一个通用的格式:

(1)策略预测更新公式:

V ( S t ) = V ( S t ) + α [ G t V ( S t ) ] V(S_t) = V(S_t) + \alpha[G_t - V(S_t)]

(2)策略控制更新公式:

扫描二维码关注公众号,回复: 10951825 查看本文章

Q ( S t , A t ) = Q ( S t , A t ) + α [ G t Q ( S t , A t ) ] Q(S_t,A_t) = Q(S_t,A_t) + \alpha[G_t - Q(S_t,A_t)]

其中 V ( S t ) V(S_t) 表示 t t 时刻状态 S t S_t 的状态价值预测值, Q ( S t , A t ) Q(S_t,A_t) 表示在状态 S t S_t 下执行动作 A t A_t 的动作价值预测值, α \alpha 是一个很小的数,在之前我们知道其表示所有经过状态 S t S_t ( S t , A t ) (S_t,A_t) 二元组的次数的倒数来表示取平均,因为往往在蒙特卡洛采样过程中都是上万次,因此完全可以用一个预设的很小的超参数来描述它。 G t G_t 则表示实际的价值,在蒙特卡洛方法中,其确实表示实际的价值,因为蒙特卡洛需要执行完整个流程,而在时序差分TD(0)中,其可以表示为下一个时刻的价值估计值来替代实际值, G t V ( S t ) G_t-V(S_t) G t Q ( S t , A t ) G_t - Q(S_t,A_t) 被称为时序差分误差(TD误差),如果是在蒙特卡洛方法中,则被称为蒙特卡洛误差(MC误差)。带有 α \alpha 的TD误差则可以衡量当前波动值对更新当前价值的影响程度,这个 α \alpha 自然而然的充当起学习率的角色,事实上仔细观察,上述的两个式子非常类似梯度下降的更新公式。

二、时序差分TD(0)预测

  上述已经介绍了时序差分的内容,根据GPI思想,我们先引入TD(0)预测算法。
在TD(0)预测中,其是通过将下一时刻的状态价值带有折扣的与当前时刻的收益的和作为实际值调整当前的预测值,形式化的描述如下:

V ( S t ) = V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) V ( S t ) ] V(S_t) = V(S_t) + \alpha[R_{t+1} + \gamma V(S_{t+1}) - V(S_t)]

R + γ V ( S t + 1 ) R + \gamma V(S_{t+1}) 这一项就是所谓的将下一时刻的状态价值带有折扣的与当前时刻收益的和作为估计的实际价值,对比蒙特卡洛,这一部分则是需要累加所有的收益,而TD(0)只需要自举的将相邻的下一步作为估计,融合动态规划思想。TD(0)预测的算法流程如下:
在这里插入图片描述
首先根据一个确定的策略 π \pi ,初始化相关价值函数,对于某一幕,初始化一个采样序列,在执行某一步时,根据当前的策略,在状态 S t S_t 下执行一个动作 A t A_t ,并观察下一时刻的状态 S t S_t 以及收益 R t R_t ,然后更新上述公式 V ( S t ) = V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) V ( S t ) ] V(S_t) = V(S_t) + \alpha[R_{t+1} + \gamma V(S_{t+1}) - V(S_t)] 。其迭代过程中,是不断地将相邻的下一个时刻的带折扣价值与局部收益来调整当前预测的价值,类似动态规划,但区别于动态规划的是,其更新过程中下一时刻的状态只有一个,而不是所有。

v π ( s ) = E π [ G t S t = s ] v_{\pi}(s) = \mathbb{E}_{\pi}[G_t|S_t=s]

= E π [ R t + 1 + γ G t + 1 S t = s ] =\mathbb{E}_{\pi}[R_{t+1} + \gamma G_{t+1}|S_t=s]

= E π [ R t + 1 + γ v π ( S t + 1 ) S t = s ] =\mathbb{E}_{\pi}[R_{t+1} + \gamma v_{\pi}(S_{t+1})|S_t=s]

比较上述三个等式,第一个等式则表示蒙特卡洛方法,第二行表示动态规划法,第三行则表示时序差分法,时序差分也是动态规划与蒙特卡洛的一种结合。

  我们通过Sutton书上的一个示例来理解:

一个驾驶员开车回家,6点离开办公室时预估到家时间为半小时,但花费5分钟时间到达车库时发现外面下雨了,于是临时觉得到家得6:35。但幸运的是在高速路上一路畅通,6:20时刻很快下了高速路,觉得应该还有一刻钟到家,可是在行驶普通道路时,由于路况不好降低了车速,导致6:40才到家门口,3分钟后采回到家。相关记录表如图所示:
在这里插入图片描述

  在这个例子中,离开办公室,到达车库,离开高速路,行驶在普通公路,到达家门口和到家等都是状态,其实我们发现,驾驶员并不是到了家(最终状态)之后才对之前的每一个状态进行预估,在真实情况下也的确不现实,而驾驶员是在每一个状态之后,根据当前状态的情况,做出的临时预测,这一个过程就是时序差分的思想

在这里插入图片描述
如上图,每一个状态下的预测时间,与实际时间的对比,虚线为实际时间,实线为预测时间。左图是蒙特卡洛的预测过程,其只有回到家之后才知道之前每个状态下的时间(相当于价值),右图则是根据下一个状态的时间预测当前状态的时间。

三、时序差分策略控制

  在GPI的策略控制阶段,我们依然分别通过同轨和离轨来讨论。

3.1 时序差分同轨策略控制——SARSA

  在同轨策略控制过程中,行动策略与目标策略是一致的,更新公式如下:

Q ( S t , A t ) = Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) Q ( S t , A t ) ] Q(S_t,A_t) = Q(S_t,A_t) + \alpha[R_{t+1} + \gamma Q(S_{t+1},A_{t+1}) - Q(S_t,A_t)]

与策略预测一样,只是将状态价值换为动作价值,其执行过程中,回溯图表现的就是一条单一的直线:

在这里插入图片描述
其中黑点表示状态动作二元组,白点表示状态。这一过程也被称为SARSA(State Action Reward State Action),字面意义上可知其需要执行相邻的两个动作,到达相邻的两个状态以及期间的一次收益。算法流程如下所示:
在这里插入图片描述
控制过程中,也采用 ϵ \epsilon- 贪心策略保证开发与探索之间的矛盾。

3.2 时序差分离轨策略控制——Q-Learning

  Q学习是另一种TD(0)控制,也被称为离轨策略下的策略控制,其更新公式如下:

Q ( S t , A t ) = Q ( S t , A t ) + α [ R t + 1 + γ max a Q ( S t + 1 , a ) Q ( S t , A t ) ] Q(S_t,A_t) = Q(S_t,A_t) + \alpha[R_{t+1} + \gamma \max_{a}Q(S_{t+1},a) - Q(S_t,A_t)]

其相比SARSA不同的地方在于TD误差的不同,SARSA的TD误差是 R t + 1 + γ Q ( S t + 1 , A t + 1 ) Q ( S t , A t ) R_{t+1} + \gamma Q(S_{t+1},A_{t+1}) - Q(S_t,A_t) ,而Q学习的TD误差是 R t + 1 + γ max a Q ( S t + 1 , a ) Q ( S t , A t ) R_{t+1} + \gamma \max_{a}Q(S_{t+1},a) - Q(S_t,A_t) 。Q学习描述的是将下一个时刻到达的状态 S t + 1 S_{t+1} ,以及在这个状态下执行所有可能的动作所产生的一系列状态动作二元组中,取最大的动作价值作为估计值(带折扣的与局部收益的和)。回溯图如图所示:

在这里插入图片描述

通过回溯图,可以很清晰的理解Q学习的工作过程。另外之所以称之为离轨策略,是因为这里的行动策略是基于 ϵ \epsilon- 贪心的 π \pi 策略进行的采样序列,而目标策略则是在所有可能的状态动作二元组中取最大的贪心策略,二者没有关联性。

在这里插入图片描述
需要注意的是,SARSA需要在当前状态 S t S_t 下执行动作 A t A_t ,获得收益 R t + 1 R_{t+1} 后到达状态 S t + 1 S_{t+1} ,还要再执行动作 A t + 1 A_{t+1} 之后才能执行SARSA回溯。而Q学习则只需要在状态 S t S_t 下执行动作 A t A_t ,获得收益 R t + 1 R_{t+1} 到达状态 S t + 1 S_{t+1} 后,只需要观察按照策略 π \pi 所有可能的动作 A t A_t 与状态 S t + 1 S_{t+1} 的二元组,无须执行。

3.3 期望SARSA

  另外再介绍一个策略控制方法——期望SARSA,其所描述的则是下一时刻的所有(状态-动作)二元组的期望值作为估计值,其回溯图如图:
在这里插入图片描述
更新公式如下:

Q ( S t , A t ) = Q ( S t , A t ) + α [ R t + 1 + γ a π ( a S t + 1 ) Q ( S t + 1 , a ) Q ( S t , A t ) ] Q(S_t,A_t) = Q(S_t,A_t) + \alpha[R_{t+1} + \gamma \sum_{a}\pi(a|S_{t+1})Q(S_{t+1},a) - Q(S_t,A_t)]

我们结合SARSA和Q学习一起来看这三个算法的性能:
在这里插入图片描述
事实上,在同一个 α \alpha 下,期望SARSA表现的更出色。

  最后总结一下三个控制策略的一些区别,SARSA是将遵循同一个策略,下一时刻的状态动作二元组的动作价值函数作为当前的估计值;Q学习则是在行动策略下的采样,用最大贪心策略对应的最大动作价值函数作为当前的估计值;期望SARSA则是将下一时刻所有的状态动作二元组的动作价值的期望值作为当前的估计值。从性能的排序来看,从长远性能来看,期望SARSA > Q > SARSA,从短期性能角度看,期望SARSA > SARSA > Q。因此说期望SARSA更优。

四、最大化偏差与双学习

  我们知道蒙特卡洛是无偏估计,而时序差分是一个有偏估计。因为时序差分是建立在对价值函数估计的基础上来预测,换句话说,本身执行采样的过程就是一种预测过程,而实际价值使用估计值则又是一个近似的过程,所以说时序差分是包含两次估计的方法,会产生一定的正偏差,也叫做最大化偏差。
  解决这样的办法是采用双学习,我们以双Q学习为例,其算法流程如下所示:

在这里插入图片描述
我们首先将所有采样序列(相当于样本)划分为两个子集,并基于两个子集分别训练两个Q值 Q 1 , Q 2 Q_1,Q_2 ,在迭代过程中,更新 Q 1 Q_1 时使用的样本是 Q 1 Q_1 对应的样本,但采用的估计值是 Q 2 Q_2 ;同理更新 Q 2 Q_2 时使用的样本是 Q 2 Q_2 对应的样本,但采用的估计值是 Q 1 Q_1 ;这样交叉进行。双学习才一定程度上可以缓解最大化偏差,防止同在一个样本上出现的问题。

五、总结

  时序差分法是结合了动态规划和蒙特卡洛两者思想,使用蒙特卡洛的采样方法,在经验中学习。但在每一步执行过程中,并不是等待完整的序列,而是边采样边学习。本文描述的是TD(0)单步法,其自举的范围只有一步,其实只自举一步未免显得智能体的眼光很短钱,事实上,蒙特卡洛也是一种特殊的时序差分,只不过其自举的是整个序列,虽然眼光最长远,但很耗时间。那有没有介于两个极端之间的呢?有!它就是TD(n),叫做n步自举法,也叫做多步引导法,其描述的则是多个步之后的价值作为当前时刻的估计值,简单的理解则是估计的范围不长也不短,眼光恰当正好,在一般情况下,我们也比较推荐使用TD(0)和TD(n)。

发布了96 篇原创文章 · 获赞 158 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36426650/article/details/105338020
今日推荐