【上一节5 蒙特卡洛方法(Monte Carlo Method)】
【下一节7 Multi-step Bootstrapping】

Temporal-difference (TD) Learning 可以说是增强学习的中心,它集成了蒙特卡洛思想和动态编程(Dynamic Programming, DP)思想,像蒙特卡洛方法一样,TD 方法不需要环境的动态模型,直接从经验经历中学习,像 DP 方法一样,TD 方法不需要等到最终的 outcome 才更新模型,它可以基于其他估计值来更新估计值。

1 TD Prediction

TD 和 蒙特卡洛方法都使用经验来解决预测问题,给定服从规则 π \pi π 的一些经历,两种方法均可更新经历中的每一个非终止的状态 S t S_t St​ 的 v π v_{\pi} vπ​。粗略的说, Monte Carlo 方法要等到 return 知道之后才将其设为是 V ( S t ) V(S_t) V(St​) 的目标值,一个适合非固定环境的简单的 every-visit Monte Carlo 方法为:
V ( S t ) ⇐ V ( S t ) + α [ G t − V ( S t ) ] V(S_t)\Leftarrow V(S_t)+\alpha [G_t- V(S_t)] V(St​)⇐V(St​)+α[Gt​−V(St​)]

其中 G t G_t Gt​ 代表得是时间 t t t 之后的真实 return, α \alpha α 是固定的 step-size 参数,可以将这种方法称为是 constant- α \alpha α MC,Monte Carlo 方法必须等到 episode 结束之后才能决定 V ( S t ) V(S_t) V(St​) 的增量,与 Monte Carlo 方法不同的是 TD 方法只需等到下一个 time step 即可,即在时刻 t + 1 t+1 t+1,TD 方法立刻形成一个 target 并使用观测到的 reward R t + 1 R_{t+1} Rt+1​ 和估计的 V ( S t + 1 ) V(S_{t+1}) V(St+1​) 进行更新,最简单的 TD 方法称为是 T D ( 0 ) TD(0) TD(0),其更新方法为:

V ( S t ) ⇐ V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] V(S_t)\Leftarrow V(S_t)+\alpha[R_{t+1}+\gamma V(S_{t+1})- V(S_t)] V(St​)⇐V(St​)+α[Rt+1​+γV(St+1​)−V(St​)]

比较上面的式子可以看出,TD 方法与Monte Carlo 方法一样,都是基于已有的估计进行更新,因此 TD 方法也是一种 bootstrapping 方法,只不过Monte Carlo 更新的目标值为 G t G_t Gt​,而 TD 更新的目标值为 R t + 1 + γ V ( S t + 1 ) R_{t+1}+\gamma V(S_{t+1}) Rt+1​+γV(St+1​),他们俩的关系其实可以从下面的式子来更好的理解:

v π ( s ) ≐ E π [ G t ∣ S t = s ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] = E π [ R t + 1 + γ ∑ k = 0 ∞ γ k R t + k + 2 ∣ S t = s ] = E π [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] \begin{aligned} v_{\pi}(s) &\doteq {\Bbb E}_{\pi} [G_t|S_t=s] \\ &= {\Bbb E}_{\pi} [\sum_{k=0}^{\infty}\gamma^k R_{t+k+1}|S_t=s] \\ &= {\Bbb E}_{\pi} [R_{t+1}+\gamma\sum_{k=0}^{\infty}\gamma^k R_{t+k+2}|S_t=s] \\ &= {\Bbb E}_{\pi} [R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_t=s] \end{aligned} vπ​(s)​≐Eπ​[Gt​∣St​=s]=Eπ​[k=0∑∞​γkRt+k+1​∣St​=s]=Eπ​[Rt+1​+γk=0∑∞​γkRt+k+2​∣St​=s]=Eπ​[Rt+1​+γvπ​(St+1​)∣St​=s]​

粗略地说,Monte Carlo 方法使用的目标值是 v π ( s ) ≐ E π [ G t ∣ S t = s ] v_{\pi}(s) \doteq {\Bbb E}_{\pi} [G_t|S_t=s] vπ​(s)≐Eπ​[Gt​∣St​=s],而 DP 方法使用的是 v π ( s ) = E π [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] v_{\pi}(s) = {\Bbb E}_{\pi} [R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_t=s] vπ​(s)=Eπ​[Rt+1​+γvπ​(St+1​)∣St​=s],在 TD 方法中,由于 v π ( S t + 1 ) v_{\pi}(S_{t+1}) vπ​(St+1​) 是未知的,因此就用当前的估计值 V ( S t + 1 ) V(S_{t+1}) V(St+1​) 来代替,TD(0) 的伪代码如下所示:

TD(0) 的 backup diagram 如下图所示,它对最上面的节点的 value 评估值的更新基于的是从它到下一个 state 的一次样本转换,TD 和 Monte Carlo 更新可以称为是 sample back-ups,因为他们都涉及到采样的连续的状态或状态对,sample back-ups 与 DP 方法的 full backups 的不同在于,它利用的不是所有可能的转换的完全分布,而是一个单一的样本转换。

在 TD 学习中还有一个重要的概念叫 TD error,用 δ t \delta_t δt​ 表示,它表示的就是在该时刻估计得误差,在 TD(0) 中它指的就是 R t + 1 + γ V ( S t + 1 ) R_{t+1}+\gamma V (S_{t+1}) Rt+1​+γV(St+1​) 与 V ( S t ) V(S_t) V(St​) 的差,即在 V ( S t ) V(S_t) V(St​) 的误差:
δ t ≐ R t + 1 + γ V ( S t + 1 ) − V ( S t ) \delta_t \doteq R_{t+1}+\gamma V (S_{t+1})- V(S_t) δt​≐Rt+1​+γV(St+1​)−V(St​)

Monte Carlo error 可以写作是一系列 TD errors 的和:

G t − V ( S t ) = R t + 1 + γ G t + 1 − V ( S t ) + γ V ( S t + 1 ) − γ V ( S t + 1 ) = δ t + γ ( G t + 1 − V ( S t + 1 ) ) = δ t + γ δ t + 1 + γ 2 ( G t + 2 − V ( S t + 2 ) ) = δ t + γ δ t + 1 + γ 2 δ t + 2 + ⋯ + γ T − t + 1 δ T − t + 1 + γ T − t ( G T − V ( S T ) ) = δ t + γ δ t + 1 + γ 2 δ t + 2 + ⋯ + γ T − t + 1 δ T − t + 1 + γ T − t ( 0 − 0 ) = ∑ k = 0 T − t + 1 γ k δ t + k \begin{aligned} G_t-V(S_t) &= R_{t+1}+\gamma G_{t+1}- V(S_t)+ \gamma V (S_{t+1})-\gamma V (S_{t+1}) \\ &= \delta_t+\gamma (G_{t+1}-V(S_{t+1})) \\ &= \delta_t+\gamma \delta_{t+1}+\gamma^2 (G_{t+2}-V(S_{t+2}))\\ &= \delta_t+\gamma \delta_{t+1}+\gamma^2 \delta_{t+2}+\cdots+\gamma^{T-t+1} \delta_{ T-t+1}+\gamma^{ T-t} (G_{T}-V(S_{T}))\\ &=\delta_t+\gamma \delta_{t+1}+ \gamma^2 \delta_{t+2}+\cdots+\gamma^{T-t+1} \delta_{ T-t+1}+\gamma^{ T-t} (0-0)\\ &=\sum_{k=0}^{T-t+1}\gamma^{k}\delta_{t+k} \end{aligned} Gt​−V(St​)​=Rt+1​+γGt+1​−V(St​)+γV(St+1​)−γV(St+1​)=δt​+γ(Gt+1​−V(St+1​))=δt​+γδt+1​+γ2(Gt+2​−V(St+2​))=δt​+γδt+1​+γ2δt+2​+⋯+γT−t+1δT−t+1​+γT−t(GT​−V(ST​))=δt​+γδt+1​+γ2δt+2​+⋯+γT−t+1δT−t+1​+γT−t(0−0)=k=0∑T−t+1​γkδt+k​​

2 TD Prediction方法的优点

相比于 DP 方法,TD 方法不需要环境的模型,相比于 Monte Carlo 方法,TD 方法可以采用在线的、完全增量式的实现方式,在 Monte Carlo 方法中,必须要等到 episode 结束有了 return 之后才能更新,在有些应用中 episodes 的时间很长,甚至有些应用环境是连续型任务,根本没有 episodes。而 TD 方法不需等到最终的真实的 return,并且 TD 方法可以保证收敛到 v π v_{\pi} vπ​。

3 TD(0) 方法的最优性

假如经历或者经验的数量是有限的,如 10 个 episodes 或者 100 个 time steps,在这种情况下,增量式学习方法的通常做法是不断重复地利用这些经历直到收敛到确定的结果,即给定一个近似的 value 函数 V,在每个时间 t t t,只要访问的不是终止状态,就可以计算其增量,并在结束时更新一次函数 V,之后再重复处理,直到最后的 value 函数收敛,这种方法常常称为是 batch updating,因为更新是在训练数据的整个 batch 处理之后发生的,并且每遍历一次 batch 只更新一次。

在 batch updating 模式下,只要选择的 step-size 参数 α \alpha α 足够小,TD(0) 一定会收敛到一个单一的结果,并且与 step-size 参数 α \alpha α 无关。注意到在同样的条件下,constant- α \alpha α MC 方法也会收敛到一个确定的值,但这个值与 TD(0) 的不同。

batch TD(0) 与 batch MC 的区别在于,batch MC 是得到在训练集上使得 mean-squared error 最小的估计值,而 batch TD(0) 获得的总是 Markov 过程的最大似然估计模型,我们知道一个 data 的最大似然估计是指在该估计值时生成当前 data 的概率最大,因此对于我们待估计的 Markov 过程,在当前已有的 episodes 下,其最大似然估计模型为:从状态 i i i 到状态 j j j 的转换概率的估计值就是所有观测到的从状态 i i i 转换到状态 j j j 占所有从状态 i i i 进行转换的经历的比例,从状态 i i i 到状态 j j j 的 reward 的评估值就是观测到的所有从状态 i i i 转换到状态 j j j 的rewards 的平均值。因此,只要模型正确则计算的 value function 一定是正确的,通常将这种估计称作是“确定性等价估计”(certainty-equivalence estimate),因为它相当于假定了基本过程的估计是确定而不是近似的。通常 batch TD(0) 会收敛到 certainty-equivalence estimate,因此在批模式下 TD(0) 的收敛速度比 Monte Carlo 方法快。虽然在某种意义上说 certainty-equivalence estimate 是一个优化的解,但常常无法直接计算求解,在状态空间很大的情况下,TD 方法是唯一可以近似求得近似的 certainty-equivalence estimate 的可行方法。

4 Sarsa: On-Policy TD Control

同样有了 TD prediction 方法,下一步就是如何利用 prediction 方法来解决 control problem,在这里的 control problem 中,同样要考虑 exploration 和 exploitation 的权衡问题,与 MC 方法一样,TD control method 也包含 on-policy 和 off-policy,这一小节介绍的是 on-policy TD control method。

对于 on-policy 方法,第一步是要对当前的行为规则 π \pi π 估计所有状态 s s s 和行为 a a a 的 q π ( s , a ) q_{\pi}(s,a) qπ​(s,a),估计的方法与上面介绍的学习 v π v_{\pi} vπ​ 的方法一样,每一个 episode 是由一系列 states 和 state-action 对组成的转换序列:

这里我们需要关注的是从一个 state-action pair 向另外一个 state-action pair 的转换过程,很容易知道,该评估值更新方程为:
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) \leftarrow Q(S_t,A_t)+\alpha[R_{t+1}+\gamma Q(S_{t+1},A_{t+1}) - Q(S_t,A_t)] Q(St​,At​)←Q(St​,At​)+α[Rt+1​+γQ(St+1​,At+1​)−Q(St​,At​)]

每次从一个非终止状态 S t S_t St​ 进行转换都会利用上面的更新方程来更新 Q ( S t , A t ) Q(S_t,A_t) Q(St​,At​),注意到该方程中一共包含了5个元素: ( S t , A t , R t + 1 , S t + 1 , A t + 1 ) ( S_t, A_t, R_{t+1}, S_{t+1},A_{t+1}) (St​,At​,Rt+1​,St+1​,At+1​),因此将这种方法称为是 S a r s a Sarsa Sarsa,其 backup 图为:

基于 Sarsa 方法,就可以得到 on-policy control algorithm,对所有 on-policy method,在持续的对行为规则 π \pi π 估计 q π q_{\pi} qπ​ 的同时,也依据 q π q_{\pi} qπ​ 采用贪婪的方式来修改行为规则 π \pi π,Sarsa control algorithm 的一般形式为:

5 Q-learning:Off-Policy TD Control

想必所有听说过 RL 的人都听过 Q-learning 的大名,与 Sarsa 不同的是,Q-learning 是一种 off-policy 的策略,其定义为:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ m a x a Q ( S t + 1 , a ) − Q ( S t , A t ) ] Q(S_t,A_t) \leftarrow Q(S_t,A_t)+\alpha[R_{t+1}+\gamma max_a Q(S_{t+1},a) - Q(S_t,A_t)] Q(St​,At​)←Q(St​,At​)+α[Rt+1​+γmaxa​Q(St+1​,a)−Q(St​,At​)]

在这种情形下,学习的 action-value 函数 Q 直接近似于与规则无关的优化 action-value 函数 q ∗ q_* q∗​,并且这个规则还决定了下一个 visit 和 update 的 state-action pairs,Q-learning 的伪代码如下:

其 backup diagram 如下所示,因为该规则更新的是一个 state-action 对,因此 backup 的顶端一定是一个 action node,并且该规则是在下个状态所有可能的 actions 中选择最大化的 action nodes,因此该图的最下面一定是所有的 action nodes,其中“maximum”是用一个跨越它们的弧线来表示的。

由于 Q-learning 并不关心服从的是什么 policy,而仅仅是采取最好的 Q-value,他学习的规则与实行的规则不同,因此这是一种 off-policy 学习算法

6 Expected Sarsa

Expected Sarsa 与 Sarse、Q-learning 都有点相似之处,它的更新方程如下:

Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ E [ Q ( S t + 1 , A t + 1 ) ∣ S t + 1 ] − 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 ) ] \begin{aligned} Q(S_t,A_t) &\leftarrow Q(S_t,A_t)+\alpha[R_{t+1}+\gamma {\Bbb E} [Q(S_{t+1},A_{t+1})|S_{t+1}]- Q(S_t,A_t)] \\ &\leftarrow 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)] \end{aligned} Q(St​,At​)​←Q(St​,At​)+α[Rt+1​+γE[Q(St+1​,At+1​)∣St+1​]−Q(St​,At​)]←Q(St​,At​)+α[Rt+1​+γa∑​π(a∣St+1​)Q(St+1​,a)−Q(St​,At​)]​

Expected Sarsa 与 Q-learning 相比,Q-learning 是在下一个 state-action pairs 中选择最大化的,而 expected Sarsa 选用的是它们的平均值。给定下一个状态 S t + 1 S_{t+1} St+1​,该算法的前进方向与 Sarsa 在 expectation 的前进方向相同,因此这种方法称为是 Expected Sarsa

Expected Sarsa 比 Sarsa 要复杂,但因为它对 A t + 1 A_{t+1} At+1​ 随机采样,因此可以消除方差,在给定相同数量的 experience 下,其性能要比 Sarsa 略好。其 backup diagram 如下所示:

7 Maximization Bias and Double Learning

前面几节讨论的算法都含有对 target policies 最大化的内容,例如,在 Q-learning 中,target policy 是在当前 action values 中最大化的 greedy policy;在 Sarsa 中,常常采用的是 ε \varepsilon ε-greedy 策略,其中也包含最大化的操作。这些算法,估计值中的最大值常常作为是最大值的估计,从而会带来一个显著的 positive bias,这个偏差就称为是 Maximization Bias

为了避免 maximization bias,常采用的策略是 Double Learning。我们可以先考虑一下 maximization bias 产生的原因,假设在一个 bandit 问题中,它的原因就在于我们在决定最大化的 action 和在对它的 value 进行评估时采用的是相同的 samples plays,因此,double learning 的思想是同时学习两个独立的估计,假设它们分别表示为 Q 1 ( a ) Q_1(a) Q1​(a) 和 Q 2 ( a ) Q_2(a) Q2​(a) ( a ∈ A a\in \mathcal{A} a∈A),估计值 Q 1 ( a ) Q_1(a) Q1​(a) 利用 A ∗ = a r g max ⁡ a Q 1 ( a ) A^*=arg\max_a Q_1(a) A∗=argmaxa​Q1​(a) 来确定最大化的行为,估计值 Q 2 ( a ) Q_2(a) Q2​(a) 利用 Q 2 ( A ∗ ) = Q 2 ( a r g max ⁡ a Q 1 ( a ) ) Q_2(A^*)=Q_2(arg\max_a Q_1(a)) Q2​(A∗)=Q2​(argmaxa​Q1​(a)) 来进行估计,由 E [ Q 2 ( A ∗ ) ] = q ( A ∗ ) {\Bbb E}[ Q_2(A^*)]=q(A^*) E[Q2​(A∗)]=q(A∗) 可知这是一个无偏估计,可以通过反转两个估计的角色来获得第二个无偏估计 Q 1 ( a r g m a x a Q 2 ( a ) ) Q_1(argmax_aQ_2(a)) Q1​(argmaxa​Q2​(a)),从中可以看出即使我们学习的是两个评估值,但每次只会更新其中一个,虽然它需要两倍的内存,但每步中的计算量并没有增加。

Double learning 的思想可以推广到 full MDPs 中,例如将 double learning 与 Q-learning 相结合就产生了 Double Q-learning,其更新方程为:

Q 1 ( S t , A t ) ← Q 1 ( S t , A t ) + α [ R t + 1 + γ Q 2 ( S t + 1 , a r g m a x a Q 1 ( S t + 1 , a ) ) – Q 1 ( S t , A t ) ] Q_1(S_t,A_t) \leftarrow Q_1(S_t,A_t)+\alpha[R_{t+1}+\gamma Q_2 (S_{t+1}, argmax_a Q_1(S_{t+1},a))– Q_1(S_t,A_t)] Q1​(St​,At​)←Q1​(St​,At​)+α[Rt+1​+γQ2​(St+1​,argmaxa​Q1​(St+1​,a))–Q1​(St​,At​)]

Double Q-learning 的伪代码如下:

参考文献
[1] Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto
[2] UCL Course on RL

6 Temporal-Difference (TD) Learning相关推荐

  1. SDN实验(四)——Learning Switch自学习交换机

    SDN实验(四)--Learning Switch自学习交换机 一.自学习交换机原理 (一)普通交换机实现 (二)SDN交换机实现 二.自学习交换机代码实现 (一)代码 (二)代码讲解 (三)实验 三 ...

  2. Zero-shot Learning零样本学习 论文阅读(一)——Learning to detect unseen object classes by between-class attribute

    Zero-shot Learning零样本学习 论文阅读(一)--Learning to detect unseen object classes by between-class attribute ...

  3. (STTN)Learning Joint Spatial-TemporalTransformations for Video Inpainting

    ECCV2020的文章,中山大学和微软亚研院 把transformer应用于video inpainting,解决逐帧修复造成的时序不一致的问题.(时域不一致(前后帧由于局部像素变化大导致播放时产生异 ...

  4. 强化学习(五)用时序差分法(TD)求解

    在强化学习(四)用蒙特卡罗法(MC)求解中,我们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不需要环境的状态转化概率模型,但是它需要所有的采样序列都是经历完整的状态序列.如果我 ...

  5. (TTSR)Learning Texture Transformer Network for Image Super-Resolution

    中心提取: 1.该模型中提取Q.K.V的过程值得学习一下,他们使用的是:V自然就是参考图(Ref),用于辅助得到更好的纹理结果,Q是LR上采样图的特征(LR↑),K是参考图先下采样再上采样的特征(Re ...

  6. 视觉导航(一)Learning Object Relation Graph and Tentative Policy for Visual Navigation

    Learning Object Relation Graph and Tentative Policy for Visual Navigation Abstract 视觉导航中最重要的是学习有用的视觉 ...

  7. 人工智能-强化学习:Imitation Learning(模仿学习)= Learning by Demonstration(示范学习)【每一步action都没有reward】

    Imitation Learning(模仿学习)是从给定的展示中进行学习.机器在这个过程中,也和环境进行交互,但是,并没有显示的得到 reward. 在某些任务上,也很难定义 reward.如:自动驾 ...

  8. 释义:Linear temporal logic (LTL)浅析

    文章目录 前言 正文 小结 参考文献 前言 创作开始时间:2021年3月22日07:55:11 如题.简要解释一下LTL线性时间逻辑. 正文 主要参考: wiki词条:Linear_temporal_ ...

  9. 李洪义机器学习课程(一)——Learning Map学习笔记

    我们先一张一张PPT来分析讲解[1]. 总体框图 : 这张图表明了接下来的知识脉络体系,也可以看成目前学术界.工业界的几大研究方向.整体上分为: 监督学习.半监督学习.无监督学习.迁移学习.强化学习. ...

最新文章

  1. 微信小程序实时聊天之WebSocket
  2. 庆祝深圳.net俱乐部成立
  3. matlab 定义string_MATLAB开发自动驾驶第十课-创建用于加载自定义地面真值数据源的类...
  4. exp/expdp中query参数的使用
  5. 点击按钮显示div并向div中传递参数
  6. Android之如何判断当前是阿拉伯布局的方法
  7. 手机(jzoj 1983)
  8. GAN-代码实现资料整合(1)
  9. windchill文件无法上传服务器,Windchill MethodServer无法启动
  10. 【土地利用变化分析】土地利用转移矩阵
  11. python(三):时间窗口
  12. 单体架构与微服务架构(英文)
  13. HDU 3533 Escape (预处理+BFS)
  14. Windows日常效率生产力开发环境工具个人集合
  15. Jmeter读取CSV文件读取不到解决方法
  16. PCB设计入门总结!建议收藏!
  17. Kafka 的 Lag 计算误区及正确实现
  18. 最“狂”天才,保送清华读博,3次退学,怒怼阿里 P10,被微软全球封杀!
  19. 什么是UTM参数?这些你知道吗
  20. 【设计模式】的C语言的设计模式及其应用

热门文章

  1. 《程序设计基础》 第四章 循环结构 7-13 找零钱 (20 分)
  2. chrome自制插件--百度搜索结果去广告1.0
  3. 不同的国家,珠峰的高度为啥不一样?
  4. 手机充电时为何要换成直流电?直/交流电间的故事
  5. 某银行计算机系统要实现一个电子,电子商务师练习题与答案
  6. Module use of python36.dll conflicts with this version of Python
  7. 鸟哥的linux私房菜 第二章
  8. Java 照片墙_js实现照片墙功能实例
  9. 微信公众号第三方平台开发笔记--02获取component_verify_ticket
  10. 网络教育学位证计算机考试包括什么区别,远程网络教育学历和学位证书有什么区别...