在强化学习(四)用蒙特卡罗法(MC)求解中,咱们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不须要环境的状态转化几率模型,可是它须要全部的采样序列都是经历完整的状态序列。若是咱们没有完整的状态序列,那么就没法使用蒙特卡罗法求解了。本文咱们就来讨论能够不使用完整状态序列求解强化学习问题的方法:时序差分(Temporal-Difference, TD)。html
时序差分这一篇对应Sutton书的第六章部分和UCL强化学习课程的第四讲部分,第五讲部分。算法
时序差分法和蒙特卡罗法相似,都是不基于模型的强化学习问题求解方法。因此在上一篇定义的不基于模型的强化学习控制问题和预测问题的定义,在这里仍然适用。bootstrap
预测问题:即给定强化学习的5个要素:状态集$S$, 动做集$A$, 即时奖励$R$,衰减因子$\gamma$, 给定策略$\pi$, 求解该策略的状态价值函数$v(\pi)$app
控制问题:也就是求解最优的价值函数和策略。给定强化学习的5个要素:状态集$S$, 动做集$A$, 即时奖励$R$,衰减因子$\gamma$, 探索率$\epsilon$, 求解最优的动做价值函数$q_{*}$和最优策略$\pi_{*}$ 函数
回顾蒙特卡罗法中计算状态收获的方法是:$$G_t =R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3}+... \gamma^{T-t-1}R_{T}$$post
而对于时序差分法来讲,咱们没有完整的状态序列,只有部分的状态序列,那么如何能够近似求出某个状态的收获呢?回顾强化学习(二)马尔科夫决策过程(MDP)中的贝尔曼方程:$$v_{\pi}(s) = \mathbb{E}_{\pi}(R_{t+1} + \gamma v_{\pi}(S_{t+1}) | S_t=s) $$学习
这启发咱们能够用$R_{t+1} + \gamma v(S_{t+1})$来近似的代替收获$G_t$, 通常咱们把$R_{t+1} + \gamma V(S_{t+1})$称为TD目标值。$R_{t+1} + \gamma V(S_{t+1}) -V(S_t)$称为TD偏差,将用TD目标值近似代替收获$G(t)$的过程称为引导(bootstrapping)。这样咱们只须要两个连续的状态与对应的奖励,就能够尝试求解强化学习问题了。3d
如今咱们有了本身的近似收获$G_t$的表达式,那么就能够去求解时序差分的预测问题和控制问题了。htm
时序差分的预测问题求解和蒙特卡罗法相似,可是主要有两个不一样点。一是收获$G_t$的表达式不一样,时序差分G(t)的表达式为:$$G(t) = R_{t+1} + \gamma V(S_{t+1})$$blog
二是迭代的式子系数稍有不一样,回顾蒙特卡罗法的迭代式子是:$$V(S_t) = V(S_t) + \frac{1}{N(S_t)}(G_t - V(S_t) )$$
因为在时序差分咱们没有完整的序列,也就没有对应的次数$N(S_t)$,通常就用一个[0,1]的系数$\alpha$代替。这样时序差分的价值函数迭代式子是:$$V(S_t) = V(S_t) + \alpha(G_t - V(S_t) )$$$$Q(S_t, A_t) = Q(S_t, A_t) +\alpha(G_t - Q(S_t, A_t) )$$
这里咱们用一个简单的例子来看看蒙特卡罗法和时序差分法求解预测问题的不一样。
假设咱们的强化学习问题有A,B两个状态,模型未知,不涉及策略和行为。只涉及状态转化和即时奖励。一共有8个完整的状态序列以下:
① A,0,B,0 ②B,1 ③B,1 ④ B,1 ⑤ B,1 ⑥B,1 ⑦B,1 ⑧B,0
只有第一个状态序列是有状态转移的,其他7个只有一个状态。设置衰减因子$\gamma =1$。
首先咱们按蒙特卡罗法来求解预测问题。因为只有第一个序列中包含状态A,所以A的价值仅能经过第一个序列来计算,也就等同于计算该序列中状态A的收获:$$V(A) = G(A) = R_A + \gamma R_B = 0$$
对于B,则须要对其在8个序列中的收获值来平均,其结果是6/8。
再来看看时序差分法求解的过程。其收获是在计算状态序列中某状态价值时是应用其后续状态的预估价值来计算的,对于B来讲,它老是终止状态,没有后续状态,所以它的价值直接用其在8个序列中的收获值来平均,其结果是6/8。
对于A,只在第一个序列出现,它的价值为:$$V(A) = R_A + \gamma V(B) = \frac{6}{8}$$
从上面的例子咱们也能够看到蒙特卡罗法和时序差分法求解预测问题的区别。
一是时序差分法在知道结果以前就能够学习,也能够在没有结果时学习,还能够在持续进行的环境中学习,而蒙特卡罗法则要等到最后结果才能学习,时序差分法能够更快速灵活的更新状态的价值估计,这在某些状况下有着很是重要的实际意义。
二是时序差分法在更新状态价值时使用的是TD 目标值,即基于即时奖励和下一状态的预估价值来替代当前状态在状态序列结束时可能获得的收获,是当前状态价值的有偏估计,而蒙特卡罗法则使用实际的收获来更新状态价值,是某一策略下状态价值的无偏估计,这一点蒙特卡罗法占优。
三是虽然时序差分法获得的价值是有偏估计,可是其方差却比蒙特卡罗法获得的方差要低,且对初始值敏感,一般比蒙特卡罗法更加高效。
从上面的描述能够看出时序差分法的优点比较大,所以如今主流的强化学习求解方法都是基于时序差分的。后面的文章也会主要基于时序差分法来扩展讨论。
在第二节的时序差分法中,咱们使用了用$R_{t+1} + \gamma v(S_{t+1})$来近似的代替收获$G_t$。即向前一步来近似咱们的收获$G_t$,那么能不能向前两步呢?固然能够,这时咱们的收获$G_t$的近似表达式为:$$G_t^{(2)} = R_{t+1} + \gamma R_{t+2} + \gamma^2V(S_{t+2})$$
从两步,到三步,再到n步,咱们能够概括出n步时序差分收获$G_t^{(n)}$表达式为:$$G_t^{(n)} = R_{t+1} + \gamma R_{t+2} + ... + \gamma^{n-1} R_{t+n} + \gamma^nV(S_{t+n}) $$
当n愈来愈大,趋于无穷,或者说趋于使用完整的状态序列时,n步时序差分就等价于蒙特卡罗法了。
对于n步时序差分来讲,和普通的时序差分的区别就在于收获的计算方式的差别。那么既然有这个n步的说法,那么n究竟是多少步好呢?如何衡量n的好坏呢?咱们在下一节讨论。
n步时序差分选择多少步数做为一个较优的计算参数是须要尝试的超参数调优问题。为了能在不增长计算复杂度的状况下综合考虑全部步数的预测,咱们引入了一个新[0,1]的参数$\lambda$,定义$\lambda-$收获是n从1到$\infty$全部步的收获乘以权重的和。每一步的权重是$(1-\lambda)\lambda^{n-1}$,这样$\lambda-$收获的计算公式表示为:$$G_t^{\lambda} = (1-\lambda)\sum\limits_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}$$
进而咱们能够获得$TD(\lambda)$的价值函数的迭代公式:$$V(S_t) = V(S_t) + \alpha(G_t^{\lambda} - V(S_t) )$$$$Q(S_t, A_t) = Q(S_t, A_t) +\alpha(G_t^{\lambda}- Q(S_t, A_t) )$$
每一步收获的权重定义为$(1-\lambda)\lambda^{n-1}$的缘由是什么呢?其图像以下图所示,能够看到随着n的增大,其第n步收获的权重呈几何级数的衰减。当在T时刻到达终止状态时,未分配的权重所有给予终止状态的实际收获值。这样可使一个完整的状态序列中全部的n步收获的权重加起来为1,离当前状态越远的收获其权重越小。
从前向来看$TD(\lambda)$, 一个状态的价值$V(S_t) $由$G_t$获得,而$G_t$又间接由全部后续状态价值计算获得,所以能够认为更新一个状态的价值须要知道全部后续状态的价值。也就是说,必需要经历完整的状态序列得到包括终止状态的每个状态的即时奖励才能更新当前状态的价值。这和蒙特卡罗法的要求同样,所以$TD(\lambda)$有着和蒙特卡罗法同样的劣势。当$\lambda =0 $ 时,就是第二节讲到的普通的时序差分法,当$\lambda =1 $ 时,就是蒙特卡罗法。
从反向来看$TD(\lambda)$,它能够分析咱们状态对后续状态的影响。好比老鼠在依次连续接受了3 次响铃和1 次亮灯信号后遭到了电击,那么在分析遭电击的缘由时,究竟是响铃的因素较重要仍是亮灯的因素更重要呢?若是把老鼠遭到电击的缘由认为是以前接受了较屡次数的响铃,则称这种归由于频率启发(frequency heuristic) 式;而把电击归因于最近少数几回状态的影响,则称为就近启发(recency heuristic) 式。
若是给每个状态引入一个数值:效用(eligibility, E) 来表示该状态对后续状态的影响,就能够同时利用到上述两个启发。而全部状态的效用值总称为效用迹(eligibility traces,ES)。定义为:$$E_0(s) = 0$$$$E_t(s) = \gamma\lambda E_{t-1}(s) +1(S_t=s) = \begin{cases} 0& {t<k}\\ (\gamma\lambda)^{t-k}& {t\geq k} \end{cases}, \;\;s.t.\; \lambda,\gamma \in [0,1], s\; is\; visited \;once\;at\; time\; k$$
此时咱们$TD(\lambda)$的价值函数更新式子能够表示为:$$\delta_t = R_{t+1} + \gamma v(S_{t+1}) -V(S_t)$$$$V(S_t) = V(S_t) + \alpha\delta_tE_t(s)$$
也许有人会问,这前向的式子和反向的式子看起来不一样啊,是否是不一样的逻辑呢?其实二者是等价的。如今咱们从前向推导一下反向的更新式子。$$\begin{align} G_t^{\lambda} - V(S_t) &= - V(S_t) + (1-\lambda)\lambda^{0}(R_{t+1} + \gamma V(S_{t+1})) \\ &+ (1-\lambda)\lambda^{1}(R_{t+1} + \gamma R_{t+2} + \gamma^2V(S_{t+2})) \\ &+ (1-\lambda)\lambda^{2}(R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \gamma^3V(S_{t+3})) \\ &+... \\& = - V(S_t) + (\gamma\lambda)^0(R_{t+1} + \gamma V(S_{t+1}) - \gamma\lambda V(S_{t+1}) ) \\ & + (\gamma\lambda)^1(R_{t+2} + \gamma V(S_{t+2}) - \gamma\lambda V(S_{t+2}) ) \\ & + (\gamma\lambda)^2(R_{t+3} + \gamma V(S_{t+3}) - \gamma\lambda V(S_{t+3}) ) \\ &+... \\ & = (\gamma\lambda)^0(R_{t+1} + \gamma V(S_{t+1}) - V(S_t)) \\ & + (\gamma\lambda)^1(R_{t+2} + \gamma V(S_{t+2}) - V(S_{t+1})) \\ & + (\gamma\lambda)^2(R_{t+3} + \gamma V(S_{t+3}) - V(S_{t+2})) \\ & + ... \\ & = \delta_t + \gamma\lambda \delta_{t+1} + (\gamma\lambda)^2 \delta_{t+2} + ... \end{align}$$
能够看出前向TD偏差和反向的TD偏差实际上一致的。
如今咱们回到普通的时序差分,来看看它控制问题的求解方法。回想上一篇蒙特卡罗法在线控制的方法,咱们使用的是$\epsilon-$贪婪法来作价值迭代。对于时序差分,咱们也能够用$\epsilon-$贪婪法来价值迭代,和蒙特卡罗法在线控制的区别主要只是在于收获的计算方式不一样。时序差分的在线控制(on-policy)算法最多见的是SARSA算法,咱们在下一篇单独讲解。
而除了在线控制,咱们还能够作离线控制(off-policy),离线控制和在线控制的区别主要在于在线控制通常只有一个策略(最多见的是$\epsilon-$贪婪法)。而离线控制通常有两个策略,其中一个策略(最多见的是$\epsilon-$贪婪法)用于选择新的动做,另外一个策略(最多见的是贪婪法)用于更新价值函数。时序差分的离线控制算法最多见的是Q-Learning算法,咱们在下下篇单独讲解。
时序差分和蒙特卡罗法比它更加灵活,学习能力更强,所以是目前主流的强化学习求解问题的方法,如今绝大部分强化学习乃至深度强化学习的求解都是以时序差分的思想为基础的。所以后面咱们会重点讨论。
下一篇咱们会讨论时序差分的在线控制算法SARSA。
(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)