David Silver 增强学习——Lecture 4 不基于模型的预测

David Silver 增强学习——Lecture 4 不基于模型的预测

其他lecture

【1】搬砖的旺财:David Silver 增强学习——笔记合集(持续更新)

【2】搬砖的旺财:David Silver 增强学习——Lecture 1 强化学习简介

【3】搬砖的旺财:David Silver 增强学习——Lecture 2 马尔可夫决策过程

【4】搬砖的旺财:David Silver 增强学习——Lecture 3 动态规划

【5】搬砖的旺财:David Silver 增强学习——Lecture 5 不基于模型的控制

【6】搬砖的旺财:David Silver 增强学习——Lecture 6 值函数逼近

【7】搬砖的旺财:David Silver 增强学习——Lecture 7 策略梯度算法(一)

【8】搬砖的旺财:David Silver 增强学习——Lecture 7 策略梯度算法(二)


前言

Lecture 4的主要内容如下:

上一节讲的是在已知模型的情况下,如何去解决一个马尔科夫决策过程(MDP)问题。方法就是通过动态规划来评估一个给定的策略,通过不断迭代最终得到最优价值函数。具体的做法有两个:一个是策略迭代,一个是值迭代

我们需要知道转移矩阵 {\cal P} 和奖励函数 \cal R,这二者组成的元组即模型 \cal M

从这一节开始,我们将要进入模型未知的情况下,如何去解决一个MDP问题的方法。所谓的模型未知,即状态转移概率 {\cal P}_{ss'}^a 这些我们是不知道的。所以我们无法直接利用Bellman方程来求解得到最优策略。

Bellman方程: v_{\pi}(s) = \sum_{a\in {\cal A}}\pi(a|s)({\cal R}_s^a + \gamma \sum_{s' \in S}{\cal P}_{ss'}^a v_{\pi}(s'))

所以,为了能够从环境中学习,我们需要让agent与environment交互,得到一些经历(样本),本质上相当于从概率分布 {\cal P}_{ss^{'}}^{a}{\cal R}_s^a 中进行采样。然后通过这些经历来进行策略评估与策略迭代。从而最终得到最优策略。这种做法的理论是从蒙特卡洛方法中来的。所以我们先讲蒙特卡洛学习。接着从蒙特卡洛的缺点出发,进一步讲解了时序差分学习以及 \lambda 时序差分强化学习。

小结一下:

无模型学习

  • 未知环境模型
  • 需要与环境进行交互,有交互成本
  • 样本备份
  • 异步备份
  • 需要充分的探索
  • 两个策略(行为策略和目标策略)...

动态规划

  • 已知环境模型
  • 不需要直接交互,直接利用环境模型推导
  • 全宽备份
  • 同步和异步
  • 无探索
  • 一个策略...

蒙特卡洛强化学习方法 Monte-Carlo Reinforcement Learning

著名赌城蒙特卡洛

蒙特卡洛方法就是冯·诺依曼用这座赌城的名字命名的。蒙特卡洛方法的主要思想是“当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。

  • 例子—— π 的计算
\frac{\textrm{Area of Circle}}{\textrm{Area of Square}}=\frac{\pi r^2}{\left( 2r \right)^2}=\frac{\pi}{4}

现在,在这个正方形内部,随机产生10000个点(即10000个坐标对 (x, y)),计算它们与中心点的距离,从而判断是否落在圆的内部。

如果这些点均匀分布,那么圆内的点应该占到所有点的  π/4,因此将这个比值乘以4,就是 π 的值。

  • 为什么要用蒙特卡洛的方法?
前面讲的主要内容是整个问题可以转换成一个马尔科夫决策过程(MDP),MDP是通过5元组: \left\{ {\cal S, \cal A, \cal P, \cal R,\gamma} \right\} 来做决策的。对于这种已知模型的情况,也就是知道了这个5元组,我们可以容易获得奖赏最大化。但是,在现实世界中,我们无法同时知道这个5元组。比如 \cal P,状态转移概率就很难知道, \cal P 不知道,我们就无法使用Bellman方程来求解 VQ 值。但是我们依然要去解决这个问题,所以怎么办呢?怎样转化为一个MDP的形式呢?
一个想法是,虽然我不知道状态转移概率 \cal P,但是这个概率是真实存在的。我们可以直接去尝试,不断采样,然后会得到奖赏,通过奖赏来评估值函数。这个想法与蒙特卡罗方法的思想是一致的。我们可以尝试很多次,最后估计的 V 值就会很接近真实的 V 值了。
  • 蒙特卡洛方法总览
MC methods learn directly from episodes of experience
MC is model-free: no knowledge of MDP transitions / rewards
MC learns from complete episodes: no bootstrapping
MC uses the simplest possible idea: value = mean return
Caveat: can only apply MC to episodic MDPs
All episodes must terminate

MC方法是一种不基于模型(model free)的方法,指在不清楚MDP状态转移概率和即时奖励的情况下,直接从经历完整的episode来学习状态价值,通常情况下某状态的价值等于在多个episode中以该状态算得到的所有收获的平均。

1. 怎么理解episode?

每条episode就是一条从起始状态结束状态的经历。例如在走迷宫,一条episode就是从你开始进入迷宫,到最后走出迷宫的路径。首先我们要得到的是某一个状态 s 的平均收获。所以我们说的episode要经过状态 s。所以上图中第二条和第五条路径没有经过状态 s ,对于 s 来说就不能使用它了。完整的episode不要求起始状态一定是某一个特定的状态,但是要求个体最终进入环境认可的某一个终止状态。理论上完整的状态序列越多,结果越准确。

完整的episode包含的信息有:

状态的转移
使用的行为序列
中间状态获得的即时奖励
到达终止状态时获得的即时奖励

2. All episodes must terminate是什么意思?

无论采用哪个策略,都会在有限时间内到达终点并获得回报。就像上面那个图,每条样本都会最终到达终点。现实中,我们的棋类游戏,都会在有限步数以后达到输赢或者平局的结果并获得相应的回报。

3. value=mean return是什么意思?

其实从字面理解就是求均值的意思。就是状态 s 在每一个样本中收获的回报均值。具体来说,在蒙特卡罗方法中分为first visitevery visit两种方法(下面将仔细说明)。

比如,现评估某状态 s 的价值函数。我们采样了两个episode,从一个episode里面得到的回报是5,然后下一个episode里面的得到的回报是7,我们可以从起始状态来评估此状态的价值函数 \frac{5+7}{2}=6

  • 蒙特卡洛策略评估 Monte-Carlo Policy Evaluation

目标:在给定策略 \pi 下,从一系列的完整episode经历中学习得到该策略下的状态价值函数 v_{\pi}

数学描述如下:

基于特定策略 \pi 的一个episode信息可以表示为如下的一个序列:
S_{1}, A_{1}, R_{2}, S_{2}, A_{2}, ..., S_{t}, A_{t}, R_{t+1}, ..., S_{T} ~ \pi

我们先来看看以前是怎么计算状态价值函数的:

v_{\pi}(s) = {\Bbb E}_{\pi}[G_t|S_t = s]

其中,G_t  = R_{t+1}+\gamma R_{t+2}+... +\gamma^{T-1}R_TT 为终止时刻。

注:R_{t+1} 表示的是 t 时刻个体在状态 S_{t} 获得的即时奖励,更准确的表述为:个体在状态 S_{t} 执行一个行为 a 后离开该状态获得的即时奖励。

很多时候,即时奖励只出现在episode结束状态时,但不能否认在中间状态也可能有即时奖励。公式里的 R_{t} 指的是任何状态得到的即时奖励,这一点尤其要注意。

现在考虑一个问题,如果在某一个episode中,状态 s 出现了两次,分别在 t_1 时刻和 t_2 时刻,我们计算状态 s 的值时是仅用第一个还是两个都用呢?这就引出了两种不同的方法:

  • 首次访问蒙特卡洛策略评估 First-Visit Monte-Carlo Policy Evaluation

在给定一个策略,使用一系列完整episode评估某一个状态 s 时,对于每一个episode,仅当该状态 s 首次出现的时间 t 列入计算:

状态出现的次数加1: N(s) \leftarrow N(s) + 1
总的收获值更新: S(s) \leftarrow S(s) + G_{t}
状态 s 的价值: V(s) = S(s) / N(s)
N(s) \rightarrow \infty 时, V(s) \rightarrow v_{\pi}(s)

(注:每条采样的轨迹都是独立同分布的,关于i.i.d.请参考搬砖的旺财:独立同分布 independent and identically distributed

  • 每次访问蒙特卡洛策略评估 Every-Visit Monte-Carlo Policy Evaluation

在给定一个策略,使用一系列完整的episode评估某一个状态 s 时,对于每一个episode,状态 s 每次出现在状态转移链时,例如,一次在时刻 t_1,一次在时刻 t_2,则两次对应的 G_{t_1}G_{t_2}都要用于计算 s 对应的值。

状态出现的次数加1: N(s) \leftarrow N(s) + 1(每次visit状态 s 都会+1)
总的收获值更新: S(s) \leftarrow S(s) + G_{t}(每次visit状态 s 都会增加回报)
状态s的价值: V(s) = S(s) / N(s)
N(s) \rightarrow \infty 时, V(s) \rightarrow v_{\pi}(s)

关于这两种方法的相关例子和理论证明请参考:

搬砖的旺财:强化学习——每次访问MC方法和首次访问MC方法的相关理论证明zhuanlan.zhihu.com图标

关于21点游戏(Blackjack Example)的例子请参考:

搬砖的旺财:David Silver 增强学习补充——21点游戏 Blackjack Examplezhuanlan.zhihu.com图标
  • 累进更新平均值 Incremental Mean

在计算平均收获时不需要存储所有既往收获,而是每得到一次收获,就计算其平均收获。假设每次的收获为 x_jk 次的平均收获为  \mu_k=\frac{1}{k}\sum \limits_{{j=1}}^kx_jk-1 次的平均收获为  \mu_{k-1}=\frac{1}{k-1}\sum \limits_{{j=1}}^{k-1}x_j

那么:
\begin{align*}   \mu_k &=\frac{1}{k}\sum \limits_{{j=1}}^kx_j\\ &=\frac{1}{k}\left( x_k+\sum \limits_{{j=1}}^{k-1}x_j \right)\\&=\frac{1}{k}\left( x_k+\left( k-1 \right)\frac{1}{k-1}\sum \limits_{{j=1}}^{k-1}x_j \right)\\&= \frac{1}{k}\left( x_k+\left( k-1 \right)\mu_{k-1} \right)\\ &=\frac{1}{k}\left( x_k-\mu_{k-1} +k\mu_{k-1}\right)\\ &=\mu_{k-1}+ \frac{1}{k}\left( x_k-\mu_{k-1} \right)\end{align*}

  • 蒙特卡洛累进更新 Incremental Monte-Carlo Updates

对于一系列episodes中的每一个:S_{1}, A_{1}, R_{2}, S_{2}, A_{2}, ..., S_{t}, A_{t}, R_{t+1}, ..., S_{T}

对于episode里的每一个状态S_{t},有一个收获G_{t},每碰到一次S_{t},使用下式计算状态的平均价值V(S_{t})

N\left( S_t \right)\leftarrow N\left( S_t \right)+1

V\left( S_t \right)\leftarrow V\left( S_t \right)+\frac{1}{N\left( S_t \right)}\left( G_t-V\left( S_t \right) \right)

(注: G_t  = R_{t+1}+\gamma R_{t+2}+... +\gamma^{T-1}R_T

先说下静态问题和非静态问题的概念,静态问题就是说我们的MDP是不变的,比如转移矩阵,比如奖励函数,而非静态问题即随着时间的推移,MDP中的某些参数将会发生改变。

这里我们将MC方法变为增量式,便可以使得我们的算法忘掉计数值 N(S_t),而换为我们想要的类似于学习速率的参数,该参数的选择关乎算法的收敛性,这一点将在Lecture 5中进行介绍。

在处理非静态问题时,使用这个方法跟踪一个实时更新的平均值是非常有用的,可以扔掉那些已经计算过的episode信息。

此时可以引入参数 \alpha 来更新状态价值:

V\left( S_t \right)\leftarrow V\left( S_t \right)+\alpha\left( G_t-V\left( S_t \right) \right)

再次强调一下,MC方法只能用于episodic MDP,也即所有的episode都要终止。不然我们算不了 G_t,因为 G_t 是从 t 时刻开始,对整个episode的奖励进行累加的,显然,这种方法计算量会比较大,所以,引出了时间差分方法。


时序差分学习 Temporal-Difference Learning

和蒙特卡洛学习一样,它也从episode学习,不需要了解模型本身;但是它可以学习不完整的episode,通过合理的引导(bootstrapping),先估计某状态在该状态序列完整后可能得到的收获,并在此基础上利用前文所述的累进更新平均值的方法得到该状态的价值,再通过不断的采样来持续更新这个价值。

数学定义的bootstrapping请参考:
搬砖的旺财:Bootstrapping的数学定义zhuanlan.zhihu.com图标

具体地说,在TD学习中,算法在估计某一个状态的收获时,用的是离开该状态的即时奖励 R_{t+1} 与下一时刻状态 S_{t+1} 的预估状态价值 V\left( S_{t+1} \right) 乘以衰减系数 \gamma 组成:

V(S_{t}) \leftarrow V(S_{t}) + \alpha \mathop{\underline {(\operatorname*{\underline{\mathop{\underline{R_{t+1}}}_{\texttt{离开状态该状态的及时奖励}} + \mathop{\underline{\gamma}}\limits_{\texttt{衰减系数}} \mathop{\underline{V(S_{t+1})}}\limits_{\texttt{下一时刻的预估状态价值}}}} \limits_{\texttt{TD target}} - V(S_{t}))}}_{\texttt{TD error}\ \ \ \delta_t}


其中 {R_{t+1} + \gamma V(S_{t+1}) } 称为TD目标值, \delta_{t} = R_{t+1} + \gamma V(S_{t+1}) - V(S_{t}) 称为TD误差。

对比MC学习中,使用实际的收获(return) G_{t} 来更新价值(Value):
V(S_{t}) \leftarrow V(S_{t}) + \alpha (\mathop{\underline{G_{t}}}\limits_{\textsf{实际收获}} - V(S_{t}))

引导 (bootstrapping):指的是用TD目标值代替收获 G_t 的过程。

显然,MC每次更新都需要等到agent到达终点之后再更新;而对于TD来说,agent每走一步它都可以更新一次,不需要等到到达终点之后才进行更新。

  • 示例——驾车返家 Driving Home Example

请参考:

搬砖的旺财:David Silver 增强学习补充——驾车返家 Driving Home Examplezhuanlan.zhihu.com图标
  • 对比分析DP和TD

DP利用了贝尔曼方程去解强化学习问题 V\left( s \right)\leftarrow {\Bbb E}\left[ R+\gamma V\left( S^{'} \right)|s \right]

TD也利用了贝尔曼方程,但是做了以下几点改动:

1. 全宽备份\rightarrow样本备份: s\rightarrow S ,并去掉期望符号 V\left( S \right)\leftarrow R+\gamma V\left( S^{'} \right)
(注1:智能体跟环境发生交互,采样到哪个当前状态就更新这个状态)
(注2:求期望有两种手段,一种是利用概率密度函数加权求和(DP),另一种是利用采样去估计 (TD, MC))
2. 增加学习率 V\left( S \right)\leftarrow V\left( S \right)+\alpha\left( R+\gamma V\left(  S^{'} \right)-V\left( S \right) \right)
  • 对比分析MC和TD的优缺点

1. MC对比TD之一

TD在知道结果之前可以学习,MC必须等到最后结果才能学习;
TD可以在没有结果时学习,可以在持续进行的环境里学习;
TD算法有多个驱动力——MC算法只有奖励值作为更新的驱动力,TD算法有奖励值和状态转移作为更新的驱动力。

2. MC对比TD之二

方差:设 X 是一个随机变量,若 E\left\{ \left[ X-E\left( x \right) \right]^2 \right\} 存在,则称 E\left\{ \left[ X-E\left( x \right) \right]^2 \right\}X 的方差,记为 D\left( X \right){\textrm{Var}}\left( X \right) ,即 D\left( X \right)={\textrm{Var}}\left( X \right)=E\left\{ \left[ X-E\left( x \right) \right]^2 \right\} 。在应用上还引人量 \sqrt{D\left( X \right)} ,记为 \sigma\left( X \right) ,称为标准差或均方差。

G_{t}:实际收获,是基于某一策略状态价值 v_{\pi}\left( {S_t}\right)无偏估计(unbiased estimate)G_t=R_{t+1}+\gamma R_{t+2}+...+\gamma^{T-1} R_T

R_{t+1} + \gamma V(S_{t+1})TD目标值,是基于下一状态预估价值计算的当前预估收获,是当前状态实际价值 v_{\pi}\left( {S_t}\right) 的有偏估计(biased estimate)。

R_{t+1} + \gamma v_{\pi}(S_{t+1})真实TD目标值,是基于下一状态的实际价值对当前状态实际价值 v_{\pi}\left( {S_t}\right) 的无偏估计。

在监督学习中,偏差/方差有另外的理解——欠拟合和过拟合

偏差大(欠拟合):预测值和样本之间的差
方差大(过拟合):样本值之间的方差,学出的模型适用性差
过拟合(蓝色曲线)的示例
方差大意味着样本的置信度较差
不同的机器学习方法会在两者之间做权衡(trade-off)

MC零偏差(bias);高方差(variance);收敛性较好(即使采用函数逼近);对初始值不敏感;简单、容易理解和使用;随着样本数量的增加,方差逐渐减小,趋近于0。

TD有一些偏差;低方差;表格法下 {\textrm{TD}}\left( 0 \right) 收敛到 v_{\pi}\left( s \right) (函数逼近时不一定);对初始值更敏感(用到了贝尔曼方程);通常比MC更高效;随着样本数量的增加,偏差逐渐减少,趋近于0。

(注:回报值依赖于很多随机变量 A_t,S_{t+1},R_{t+1},A_{t+1},S_{t+2},R_{t+2},... ;TD目标值仅仅依赖于一个随机序列 A_t,S_{t+1},R_{t+1}

(MC对比TD之三在下文中)

3. 小结

TD能比MC更快速灵活的更新状态的价值估计,这在某些情况下有着非常重要的实际意义。回到驾车返家这个例子中来,我们给驾车返家制定一个新的目标,不再以耗时多少来评估状态价值,而是要求安全平稳的返回家中。假如有一次你在驾车回家的路上突然碰到险情:对面开过来一辆车感觉要和你迎面相撞,严重的话甚至会威胁生命,不过由于最后双方驾驶员都采取了紧急措施没有让险情实际发生,最后平安到家。如果是使用蒙特卡罗学习,路上发生的这一险情可能引发的极大负值奖励将不会被考虑,你不会更新在碰到此类险情时的状态的价值;但是在TD学习时,碰到这样的险情过后,你会立即大幅调低这个状态的价值,并在今后再次碰到类似情况时采取其它行为,例如降低速度等来让自身处在一个价值较高的状态中,尽可能避免发生意外事件的发生。

  • 示例——随机行走 Random Walk Example

状态空间:如上图A、B、C、D、E为中间状态,C同时作为起始状态。灰色方格表示终止状态;

行为空间:除终止状态外,任一状态可以选择向左、向右两个行为之一;

即时奖励:右侧的终止状态得到即时奖励为1,左侧终止状态得到的即时奖励为0,在其他状态间转化得到的即时奖励是0;

状态转移:100%按行为进行状态转移,进入终止状态即终止;

衰减系数:1;

给定的策略:随机选择向左、向右两个行为。

问题:对这个MDP问题进行预测,也就是评估随机行走这个策略的价值,也就是计算该策略下每个状态的价值,也就是确定该MDP问题的状态价值函数。

求解:下图是使用TD算法得到的结果。横坐标显示的是状态,纵坐标是各状态的价值估计,一共5条折线,数字表明的是实际经历的episode数量,true value所指的那根折线反映的是各状态的实际价值。第0次时,各状态的价值被初始化为0.5,经过1次、10次、100次后得到的值函数越来越接近实际状态值函数。

下图比较了MC和TD算法的效率。横坐标是经历的episode数量,纵坐标是计算得到的状态函数和实际状态函数下各状态价值的均方差。黑色是MC算法在不同step-size下的学习曲线,灰色的曲线使用TD算法。可以看出TD较MC更高效。此图还可以看出当step-size不是非常小的情况下,TD有可能得不到最终的实际价值,将会在某一区间震荡。

  • 批(Batch)MC和TD

MC和 {\textrm{TD}}\left( 0 \right) 所估计得到的值函数都将收敛到策略对应的真实值函数,当然,这是在经验趋于无穷(也即无数次试验)的情况下达到的理想情况,但是实际中我们不可能达到,那如果我们利用有限的经验来对值函数进行估计将得到什么样的结果?比方说,对于下面这 K 个episode:

s{_1^1} , a{_1^1} , r{_2^1} ,..., s{_{T_1}^1}
...
s{_1^K} , a{_1^K} , r{_2^K} ,..., s{_{T_K}^K}

我们重复从这 K 个episode中进行采样,对于某一次采样得到的样本 k 应用MC或者 {\textrm{TD}}\left( 0 \right) 方法,会得到什么样的结论呢?先来看一个例子。

  • 示例——AB

假设在一个强化学习问题中有A和B两个状态,模型未知,不涉及策略和行为,只涉及状态转换和即时奖励,衰减系数为1。现有如下表所示8个完整状态序列的经历,其中除了第1个状态序列发生了状态转移外,其余7个完整的状态序列均只有一个状态构成。现要求根据现有信息计算状态A、 B的价值分别是多少?

AB状态转移经历

考虑分别使用MC算法和TD算法来计算状态A、 B的价值,请参考:

搬砖的旺财:David Silver 增强学习补充——示例ABzhuanlan.zhihu.com图标
  • 确定性等价估计 Certainty Equivalence estimate

MC算法

试图收敛至一个能够最小化状态价值实际收获均方差的解决方案,这一均方差用公式表示为: \sum\limits_{k=1}^K\sum\limits_{t=1}^{T_k}(G_t^k-V(S_t^k))^2

式中, k 表示的是episode序号, K 为总的episode数量, t 为一个episode内状态序号(第1,2,3...个状态等), T_{k} 表示的是第 k 个episode总的状态数, G^{k}_{t} 表示第 k 个Episode里 t 时刻状态 S_{t} 获得的最终收获, V(S^{k}_{t}) 表示的是第 k 个episode里算法估计的 t 时刻状态 S_{t} 的价值。

TD算法

试图收敛至一个根据已有经验构建的最大似然马尔可夫(以上例为准,A状态只会跳转到B状态,等价于内在动态过程是确定性的估计)模型 <{\cal S, \cal A, \hat{\cal P}, \hat{\cal R},\gamma}> 的状态价值,也就是说TD算法将首先根据已有经验估计状态间的转移概率:

 \hat{{\cal P}}{_{s,s^{'}}^a}=\frac{1}{N\left( s,a \right)}\sum \limits_{k=1}^K\sum \limits_{t=1}^{T_k}\textbf{1}\left( s{_t^k},a{_t^k},s{_{t+1}^k}=s,a,s^{'} \right)

同时估计某一个状态的即时奖励:

 \hat{{\cal R}}{_s^a}=\frac{1}{N\left( s,a \right)}\sum \limits_{k=1}^K\sum \limits_{t=1}^{T_k}\textbf{1}\left( s{_t^k},a{_t^k}=s,a \right)r{_t^k}

最后计算该MDP的状态函数。

3. MC对比TD之三

TD算法使用了MDP问题的马尔可夫属性,在Markov环境下更有效;但是MC算法并不利用马尔可夫属性,通常在非Markov环境下更有效

  • Unified View

现在为止所阐述的MC学习算法、TD学习算法和上一篇讲述的DP算法都可以用来计算状态价值。它们的特点也是十分鲜明的,MC和TD是两种在不依赖模型的情况下的常用方法,这其中又以MC学习需要完整的状态序列来更新状态价值,TD学习则不需要完整的状态序列;DP算法则是基于模型的计算状态价值的方法,它通过计算一个状态 S 所有可能的转移状态 S^{'} 及其转移概率以及对应的即时奖励来计算这个状态 S 的价值。

在是否使用引导数据上, MC学习并不使用引导数据,它使用实际产生的奖励值来计算状态价值; TD和DP则都是用后续状态的预估价值作为引导数据来计算当前状态的价值。

在是否采样的问题上,MC和TD不依赖模型,使用的都是个体与环境实际交互产生的采样状态序列来计算状态价值的; 而DP则依赖状态转移概率矩阵和奖励函数,全宽度计算状态价值,没有采样之说。

下图,非常直观的体现了三种算法的区别。

MC V\left( S_t \right)\leftarrow V\left( S_t \right)+\alpha\left( G_t-V\left( S_t \right) \right)

采样,一次完整经历,用实际收获更新状态预估价值

TD V(S_{t}) \leftarrow V(S_{t}) + \alpha ({R_{t+1} + \gamma V(S_{t+1})} - V(S_{t}))

采样,经历可不完整,用后续状态的预估状态价值预估收获再更新预估价值

DP V(S_{t})\leftarrow {\Bbb E}_{\pi}\left[ R_{t+1}+\gamma V\left( S_{t+1} \right) \right]

没有采样,根据完整模型,依靠预估数据更新状态价值

综合上述三种学习方法的特点,可以小结如下:

当使用单个采样,同时不经历完整的状态序列更新价值的算法是TD学习; 当使用单个采样,但依赖完整状态序列的算法是MC学习; 当考虑全宽度采样,但对每一个采样经历只考虑后续一个状态时的算法是DP学习; 如果既考虑所有状态转移的可能性,同时又依赖完整状态序列的,那么这种算法是穷举(exhausive search)法。

需要说明的是:DP利用的是整个MDP问题的模型,也就是状态转移概率,虽然它并不实际利用采样经历,但它利用了整个模型的规律,因此也被认为是全宽度(full width) 采样的。

该图考虑了两个方面的差别与联系,一是full backups和sample backups,二是shallow backups和deep backups,这两个方面实际上就是上面的sampling和bootstrapping

\mathrm{TD}\left( \lambda \right) \lambda\in\left[ 0,1 \right]

前面我们聊到了MC方法和 \mathrm{TD}\left( 0 \right) 方法,其中 \mathrm{TD}\left( 0 \right) 方法采样1步,利用 R_{t+1}V(S_{t+1}) 来估计 V(S_t),而MC方法则是相当于把当前时刻 t 到无穷的所有的奖励都加起来了,那能不能说考虑一种介于两者之间的target呢?

  • n-步预测

n-步预测指从状态序列的当前状态 S_t 开始往序列终止状态方向观察至状态  S_{t+n−1},使用这  n 个状态产生的即时奖励 (R_{t+1}, R_{t+2},...,R_{t+n}) 以及状态  S_{t+n} 的预估价值来计算当前状态 S_t 的价值。

图中空心大圆圈表示状态,实心小圆圈表示行为
  • n-步收获

n=1 G{_t^\left( 1 \right)}=R_{t+1}+\gamma V\left( S_{t+1} \right) \mathrm{TD}\left( 0 \right)
n=2 G{_t^\left( 2 \right)}=R_{t+1}+\gamma R_{t+2}+\gamma^2 V\left( S_{t+2} \right)
...
n=\infty G{_t^\left( \infty \right)}=R_{t+1}+\gamma R_{t+2}+...+\gamma^{T-1} R_T \mathrm{MC}

定义n-步收获(n-step return):

G{_t^\left( n \right)}=R_{t+1}+\gamma R_{t+2}+...+\gamma^{n-1}R_{t+n}+ \gamma^n V\left( S_{t+n} \right)

那么,n-步TD学习状态价值函数的更新公式为:

V\left( S_t \right)\leftarrow V\left( S_t \right)+\alpha\left( G{_t^\left( n \right)}-V\left( S_t \right) \right)

(注:为了计算n-步回报值,需要维护R,S的存储空间;对于后继状态不足n个的,使用MC目标值)

  • 示例——大规模随机行走

研究使用多个不同步数预测联合不同步长(step-size,公式里的系数 \alpha )时,分别在在线离线状态时状态函数均方差的差别。所有研究使用了10个episode。离线与在线的区别在于,离线是在经历所有10个episode后进行状态价值更新;而在线则至多经历一个episode就更新依次状态价值。

ON-LINE n-STEP TD
OFF-LINE n-STEP TD

结果如图表明,离线和在线之间曲线的形态差别不明显;从步数上来看,步数越长,越接近MC算法,均方差越大。对于这个大规模随机行走示例,在线计算比较好的步数是3-5步,离线计算比较好的是6-8步。但是不同的问题其对应的比较高效的步数不是一成不变的。因此选择多少步数作为一个较优的计算参数也是一个问题。

  • 将n-步回报值平均

不同的n下的 n 步回报值效果不同。

将不同n下的n步回报值做加权平均,也能构成一个有效的回报值。

比如:平均2步回报值和4步回报值 \frac{1}{2}G^{\left( 2 \right)}+\frac{1}{2}G^{\left( 4 \right)} 混合了两种信息。

能不能有效地混合所有的n步回报值?

这里我们引入了一个新的参数:\lambda

通过引入这个新的参数,可以做到在不增加计算复杂度的情况下综合考虑所有步数的预测。

这就是 \lambda 预测和 \lambda 收获。

  • \lambda 收获

\lambda 收获 G_{t}^{\lambda} 综合考虑了从 1\infty 的所有步收获,它给其中的任意一个n-步收获施加一定的权重 (1-\lambda)\lambda^{n-1}

通过这样的权重设计,得到公式: G_t^{\lambda}=(1-\lambda)\sum\limits_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}

(注:n-步收获 G{_t^\left( n \right)}=R_{t+1}+\gamma R_{t+2}+...+\gamma^{n-1}R_{t+n}+ \gamma^n V\left( S_{t+n} \right)
  • \lambda 预测

写成 \mathrm{TD}\left( \lambda \right)V (S_t)\leftarrow  V (S_t) + α (G^{( λ)}_t − V (S_t))

对比 \mathrm{n-step\ TD}V\left( S_t \right)\leftarrow V\left( S_t \right)+\alpha\left( G{_t^\left( n \right)}-V\left( S_t \right) \right)

再对比 \mathrm{TD}\left(0 \right)V(S_{t}) \leftarrow V(S_{t}) + \alpha ({{R_{t+1} + \gamma V(S_{t+1})}} - V(S_{t}))

上图是各步收获的权重分配图,图中最后一列 \lambda 的指数是 T-t-1T 为终止状态的时刻步数,t 为当前状态的时刻步数,所有的权重加起来为1。

(注: \lambda=0 退化成 \mathrm{TD}\left(0 \right)\lambda=1 退化成 \mathrm{MC}
  • \mathrm{TD}\left( \lambda \right) 对于权重分配的图解

例如对于 n=3 的3-步收获,赋予其在 \lambda 收获中的权重如左侧阴影部分面积,对于终止状态的T-步收获,T以后的所有阴影部分面积。而所有节段面积之和为1。这种几何级数的设计也考虑了算法实现的计算方便性。

\mathrm{TD}\left( \lambda \right) 的设计使得episode中,后一个状态的状态价值与之前所有状态的状态价值有关,同时也可以说成是一个状态价值参与决定了后续所有状态的状态价值。但是每个状态的价值对于后续状态价值的影响权重是不同的。

  • 前向认识 \mathrm{TD}\left( \lambda \right)
前向视角的解释:假设一个人坐在状态流上拿着望远镜看向前方,前方是那些将来的状态。当估计当前状态的值函数时,从TD(λ)的定义中可以看到,它需要用到将来时刻的值函数。

引入了 \lambda 之后,会发现要更新一个状态的状态价值 V (S_t),必须要走完整个episode获得每一个状态的即时奖励以及最终状态获得的即时奖励。这和 \mathrm{MC} 算法的要求一样,因此 \mathrm{TD}\left( \lambda \right) 算法有着和 \mathrm{MC} 方法一样的劣势。

\mathrm{TD}\left( \lambda \right) 更新:V (S_t)\leftarrow  V (S_t) + α (G^{( λ)}_t − V (S_t))

其中:G_t^{\lambda}=(1-\lambda)\sum\limits_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}

其中:G{_t^\left( n \right)}=R_{t+1}+\gamma R_{t+2}+...+\gamma^{n-1}R_{t+n}+ \gamma^n V\left( S_{t+n} \right)

\mathrm{MC} 更新:V(S_{t}) \leftarrow V(S_{t}) + \alpha (G_{t} - V(S_{t}))

利用前向TD(λ)求解大规模随机行走问题
  • 示例——被电击的原因

老鼠在连续接受了3次响铃和1次亮灯信号后遭到了电击,那么在分析遭电击的原因时,到底是响铃的因素较重要还是亮灯的因素更重要呢?

两个概念:

  1. 频率启发 Frequency heuristic:将原因归因于出现频率最高的状态
  2. 就近启发 Recency heuristic:将原因归因于较近的几次状态

给每一个状态引入一个数值:资格迹(Eligibility Traces,ES),可以结合上述两个启发

定义:

E_{0}(s) = 0

E_{t}(s) = \gamma \lambda E_{t-1}(s) + \textbf{1}(S_{t} = s)

其中 \textbf{1}(S_{t} = s) 是一个条件判断表达式,我们可以表示为下面的形式:

E_t\left( s \right)= \left\{              \begin{array}{lr}              \gamma\lambda E_{t-1} &  \textsf{if}\ S_t\ne s\\              \gamma\lambda E_{t-1}+1 & \textsf{if}\ S_t=s \\                \end{array} \right.

下图给出了 E_{t}(s) 对于 t 的一个可能的曲线图:

该图横坐标是时间,横坐标下有竖线的位置代表当前进入了状态 s ,纵坐标是资格迹 E 。可以看出当某一状态连续出现, E 值会在一定衰减的基础上有一个单位数值的提高,此时将增加该状态对于最终收获贡献的比重,因而在更新该状态价值的时候可以较多地考虑最终收获的影响。同时如果该状态距离最终状态较远,则其对最终收获的贡献越小,在更新该状态时也不需要太多的考虑最终收获。

资格迹的提出是基于一个信度分配(Credit Assignment)问题的,打个比方,最后我们去跟别人下围棋,最后输了,那到底该中间我们下的哪一步负责?或者说,每一步对于最后我们输掉比赛这个结果,分别承担多少责任?这就是一个信度分配问题。对于小鼠问题,小鼠先听到三次铃声,然后看见灯亮,接着就被电击了,小鼠很生气,它仔细想,究竟是铃声导致的它被电击,还是灯亮导致的呢?如果按照事件的发生频率来看,是铃声导致的,如果按照最近发生原则来看,那就是灯亮导致的,但是,更合理的想法是,这二者共同导致小鼠被电击了,于是小鼠为这两个事件分别分配了权重,如果某个事件 s 发生,那么 s 对应的资格迹的值就加1,如果在某一段时间 s 未发生,则按照某个衰减因子进行衰减,这也就是上面的资格迹的计算公式了。

特别的, E 值并不需要等到完整的episode结束才能计算出来,它可以每经过一个时刻就得到更新。 E 值存在饱和现象,有一个瞬时最高上限: E_{max} = \frac{1}{(1-\gamma\lambda) }

(注:ET是一个非常符合神经科学相关理论的、非常精巧的设计。把它看成是神经元的一个参数,它反映了神经元对某一刺激的敏感性和适应性。神经元在接受刺激时会有反馈,在持续刺激时反馈一般也比较强,当间歇一段时间不刺激时,神经元又逐渐趋于静息状态;同时不论如何增加刺激的频率,神经元有一个最大饱和反馈。)

  • 后向认识 \mathrm{TD}\left( \lambda \right)

后向视角使用了我们刚刚定义的资格迹,每个状态 s 都保存了一个资格迹。我们可以将资格迹理解为一个权重,状态 s 被访问的时间离现在越久远,其对于值函数的影响就越小,状态 s 被访问的次数越少,其对于值函数的影响也越小。

\mathrm{TD}\left( \lambda \right) 的后向视角解释:有个人坐在状态流上,手里拿着话筒,面朝着已经经历过的状态获得当前回报并利用下一个状态的值函数得到TD偏差之后,此人会向已经经历过的状态喊话告诉这些已经经历过的状态处的值函数需要利用当前时刻的TD偏差进行更新。此时过往的每个状态值函数更新的大小应该跟距离当前状态的步数有关。

假设当前状态为 s_t,TD偏差为 \delta_t,那么 s_{t−1} 处的值函数更新应该乘以一个衰减因子 \gamma\lambda,状态 s_{t−2} 处的值函数更新应该乘以 \left( {\gamma\lambda} \right)^2,以此类推。把刚才的描述体现在公式里更新状态价值,是这样的:

\delta_t=R_{t+1}+\gamma V\left( S_{t+1} \right)-V\left( S_t \right)

V\left( s \right)\leftarrow V\left( s \right)+\alpha \delta_tE_t\left( s \right)

其中 E_t\left( s \right)= \left\{              \begin{array}{lr}              \gamma\lambda E_{t-1} &  \textsf{if}\ S_t\ne s\\              \gamma\lambda E_{t-1}+1 & \textsf{if}\ S_t=s \\                \end{array} \right.E_{0}(s) = 0

(注:每一个状态都有一个 E 值, E 值随时间而变化。)

  • 前向与后向 \mathrm{TD}\left( \lambda \right) 的关系

将通过一系列的说明前向视角和后向视角的 \mathrm{TD}\left( \lambda \right) 等价。

1. \mathrm{TD}\left( \lambda \right) \mathrm{TD}\left( 0 \right)

λ=0 时,只有当前状态得到更新( \gamma\lambda=0 ,每时每刻过去的贡献都会衰减完毕,资格迹只会记录脉冲信号),等同于 \mathrm{TD}\left( 0 \right) 算法:

E_{t}(s) =   \textbf{1}(S_{t} = s)
V\left( s \right)\leftarrow V\left( s \right)+\alpha \delta_tE_t\left( s \right)\delta_{t} = R_{t+1} + \gamma V(S_{t+1}) - V(S_{t})
V\left( S_t \right)\leftarrow V\left( S_t \right)+\alpha \delta_t
2. \mathrm{TD}\left( \lambda \right) \mathrm{MC}
s 的总更新量 \mathrm{TD}\left( \lambda \right) 前向视角: \sum_{t=1}^T\alpha\left( G_t^\lambda-V\left( S_t \right) \right)\textbf{1}\left( S_t=s \right) \mathrm{TD}\left( \lambda \right) 后向视角: \sum_{t=1}^T\alpha\delta_tE_t\left( s \right)
\mathrm{MC} \mathrm{TD}\left( 1 \right)
假设在某个episode中,状态 sk 时刻被访问了一次, \mathrm{TD}\left( 1 \right) 的资格迹随时间衰减:
\begin{align*} E_t\left( s \right) &= \gamma E_{t-1}\left( s \right)+\textbf{1}\left( S_t=s \right)\\ &= \left\{\begin{array}{lr} 0 &  \textsf{if}\ t<k\\  \gamma^{t-k} & \textsf{if}\ t\geq k \\ \end{array}  \right. \end{align*}
\mathrm{TD}\left( 1 \right) 在线更新过程中不断累积误差:
\begin{align*}  \sum \limits_{t=1}^{T-1}\alpha\delta_tE_t\left( s \right) &=\alpha\left( \sum \limits_{t=1}^{k-1}\delta_t \mathop{\underline{E_t\left( s \right)}}\limits_{=0}+ \sum \limits_{t=k}^{T-1}\delta_t\mathop{\underline{E_t\left( s \right)}}\limits_{=\gamma^{t-k}} \right)\\   &=\alpha\sum \limits_{t=k}^{T-1}\gamma^{t-k}\delta_t\\  &=\alpha\sum \limits_{t=k}^{T-1}\left( \gamma^{t-k}\left( R_{t+1}+\gamma V\left( S_{t+1} \right)-V\left( S_t \right) \right) \right)\\ &=\alpha\sum \limits_{t=k}^{T-1}\left( \gamma^{t-k}R_{t+1}+\gamma^{t-k+1} V\left( S_{t+1}\right)-\gamma^{t-k}V\left( S_t \right) \right)\\ &=\alpha \left( \mathop{\underline{\left( R_{k+1}+\cancel{\gamma V\left( S_{k+1} \right)}-V\left( S_k \right)\right)}}\limits_{t=k}\\  +\mathop{\underline{\left( \gamma R_{k+2}+\cancel{\gamma^2 V\left( S_{k+2} \right)}-\cancel{\gamma V\left( S_{k+1} \right)}\right)}}\limits_{t=k+1}\\  +\mathop{\underline{\left( \gamma^2 R_{k+3}+\cancel{\gamma^3 V\left( S_{k+3} \right)}-\cancel{\gamma^2 V\left( S_{k+2} \right)}\right)}}\limits_{t=k+2}+...\\  +\mathop{\underline{\left( \gamma^{T-1-k} R_{T}+\gamma^{T-k} V\left( S_{T} \right)-\cancel{\gamma^{T-1-k}  V\left( S_{T-1} \right)}\right)}}\limits_{t=T-1} \right)\\   &=\alpha\left( R_{k+1}+\gamma R_{k+2}+...+\gamma^{T-1-k}R_T+\gamma^{T-k} V\left( S_{T} \right)-V\left( S_k \right)  \right)\\  &=\alpha\left( R_{k+1}+\gamma R_{k+2}+...+\gamma^{T-1-k}R_T-V\left( S_k \right)  \right)\\  &=\alpha\left( G_k-V\left( S_k \right) \right)\\ \end{align*}
(注: V\left( S_T \right) 一般为0)
(注: G_k 相当于蒙特卡洛的回报值, V\left( S_k \right) 为当前状态值函数, G_k-V\left( S_k \right) 相当于蒙特卡洛的更新量)
说明当 \lambda=1 时,TD误差之和会缩小为MC误差。
小结:
\mathrm{TD}\left( 1 \right) 等价于每次访问的 \mathrm{MC} 算法 区别是: \mathrm{TD}\left( 1 \right) 为在线误差累计,每步更新 如果 \mathrm{TD}\left( 1 \right) 也等到片段结束后离线更新,那么 \mathrm{TD}\left( 1 \right) 就是 \mathrm{MC}
附第二种方式证明:
\sum \limits_{t=k}^{T-1}\gamma^{t-k}\delta_t 展开得到 \delta_k+\gamma\delta_{k+1}+\gamma^2\delta_{k+2}+...+\gamma^{T-1-k}\delta_{T-1}\begin{align*} &\delta_t+\gamma\delta_{t+1}+\gamma^2\delta_{t+2}+...+\gamma^{T-1-t}\delta_{T-1}\\  &=R_{t+1}+\cancel{\gamma V\left( S_{t+1} \right)}-V\left( S_t \right)\\ & +\gamma R_{t+2}+\cancel{\gamma^2V\left( S_{t+2} \right)}-\cancel{\gamma V\left( S_{t+1} \right)}\\  &+\gamma^2 R_{t+3}+\cancel{\gamma^3V\left( S_{t+3} \right)}-\cancel{\gamma^2 V\left( S_{t+2} \right)}\\  &\vdots\\  &+\gamma^{T-2-t} R_{T-1}+\cancel{\gamma^{T-1-t}V\left( S_{T-1} \right)}-\cancel{\gamma^{T-2-t} V\left( S_{T-2} \right)}\\  &+\gamma^{T-1-t} R_T+\gamma^{T-t}V\left( S_{T} \right)-\cancel{\gamma^{T-1-t} V\left( S_{T-1} \right)}\\  &=R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+...+\gamma^{T-2-t}R_{T-1}+\gamma^{T-1-t} R_T+\gamma^{T-t}V\left( S_T \right)-V\left( S_t \right)\\  &=R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+...+\gamma^{T-2-t}R_{T-1}+\gamma^{T-1-t} R_T-V\left( S_t \right)\\ &=G_t-V\left( S_t \right)\end{align*}
3. 对 \mathrm{TD}\left( \lambda \right) 化简后得到前向视角和后向视角下的误差等价
G{_t^\left( n \right)}=R_{t+1}+\gamma R_{t+2}+...+\gamma^{n-1}R_{t+n}+ \gamma^n V\left( S_{t+n} \right)
\begin{align*} G_t^{\lambda}&=(1-\lambda)\sum\limits_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}\\ &=\left( 1-\lambda \right)\lambda^0 G_t^{(1)}+\left( 1-\lambda \right)\lambda^1G_t^{(2)}+\left( 1-\lambda \right)\lambda^2G_t^{(3)}+\left( 1-\lambda \right)\lambda^3G_t^{(4)}... \end{align*}
G_t^{(1)}=R_{t+1}+\gamma V\left( S_{t+1} \right)
G_t^{(2)}=R_{t+1}+\gamma R_{t+2}+\gamma^2 V\left( S_{t+2} \right)
G_t^{(3)}=R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 V\left( S_{t+3} \right)
G_t^{(4)}=R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3R_{t+4}+\gamma^4 V\left( S_{t+4} \right)
\begin{align*} G{_t^\lambda}-V\left( S_t \right)=-V\left( S_t \right)  &+\left( 1-\lambda \right)\lambda^0\left( R_{t+1}+\gamma V\left( S_{t+1} \right) \right)\\  &+\left( 1-\lambda \right)\lambda^1\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 V\left( S_{t+2} \right) \right)\\  &+\left( 1-\lambda \right)\lambda^2\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 V\left( S_{t+3} \right) \right)\\  &+\left( 1-\lambda \right)\lambda^3\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 R_{t+4}+\gamma^4 V\left( S_{t+4} \right) \right)\\ &+... \end{align*}
\begin{align*} &\left( 1-\lambda \right)\lambda^0\left( R_{t+1}+\gamma V\left( S_{t+1} \right) \right)\\ =&\left( \lambda^0-\lambda \right)\left( R_{t+1}+\gamma V\left( S_{t+1} \right) \right)\\ =&\left( \lambda^0R_{t+1}-\lambda R_{t+1} \right)+\left( \lambda^0\gamma V\left( S_{t+1} \right) -\lambda\gamma V\left( S_{t+1} \right)  \right)\\ =&\left( \gamma\lambda \right)^0 R_{t+1}+\left( \gamma\lambda \right)^0\gamma V\left( S_{t+1} \right)-\lambda R_{t+1}-\left( \gamma\lambda \right)^0 \gamma\lambda V\left( S_{t+1} \right)\\ =&\left( \gamma\lambda \right)^0\left( R_{t+1}+\gamma V\left( S_{t+1} \right)-\gamma\lambda V\left( S_{t+1} \right) \right)-\lambda R_{t+1} \end{align*}
\begin{align*} &\left( 1-\lambda \right)\lambda^1\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 V\left( S_{t+2} \right) \right)\\ =&\left( \lambda-\lambda^2 \right)\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 V\left( S_{t+2} \right) \right)\\ =&\left( \lambda R_{t+1}-\lambda^2 R_{t+1} \right)+\left( \gamma\lambda R_{t+2}-\gamma\lambda^2 R_{t+2} \right)+\left( \gamma^2\lambda V\left( S_{t+2} \right)-\gamma^2\lambda^2 V\left( S_{t+2} \right) \right)\\ =&\left( \gamma\lambda \right)\left( R_{t+2}+\gamma V\left( S_{t+2} \right)-\gamma \lambda V\left( S_{t+2} \right) \right)+\lambda R_{t+1}-\lambda^2\left(  R_{t+1}+\gamma R_{t+2} \right) \end{align*}
\begin{align*} &\left( 1-\lambda \right)\lambda^2\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 V\left( S_{t+3} \right) \right)\\ =&\left( \lambda^2-\lambda^3 \right)\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 V\left( S_{t+3} \right) \right)\\ =&\left( \lambda^2R_{t+1}-\lambda^3R_{t+1} \right)+\left( \lambda^2\gamma R_{t+2}-\lambda^3\gamma R_{t+2} \right)\\ &+\left( \lambda^2\gamma^2 R_{t+3}-\lambda^3\gamma^2 R_{t+3}\right)+\left( \lambda^2 \gamma^3 V\left( S_{t+3} \right)-\lambda^3 \gamma^3 V\left( S_{t+3} \right)\right)\\ =&\left( \gamma\lambda \right)^2\left( R_{t+3}+\gamma V\left( S_{t+3} \right)-\gamma\lambda V\left( S_{t+3} \right) \right)\\ &+\lambda^2\left( R_{t+1}+\gamma R_{t+2}\right)-\lambda^3\left( R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}   \right) \end{align*}
\begin{align*} &\left( 1-\lambda \right)\lambda^3\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 R_{t+4}+\gamma^4 V\left( S_{t+4} \right) \right)\\ =&\left( \lambda^3-\lambda^4 \right)\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 R_{t+4}+\gamma^4 V\left( S_{t+4} \right) \right) \\ =&\left( \lambda^3R_{t+1}-\lambda^4R_{t+1} \right)+\left( \lambda^3\gamma R_{t+2}-\lambda^4\gamma R_{t+2} \right)+\left( \lambda^3\gamma^2 R_{t+3} -\lambda^4\gamma^2 R_{t+3}  \right)\\ &+\left( \lambda^3\gamma^3 R_{t+4}-\lambda^4\gamma^3 R_{t+4} \right)+\left( \lambda^3\gamma^4 V\left( S_{t+4} \right)-\lambda^4\gamma^4 V\left( S_{t+4} \right) \right)  \\ =&\left( \gamma\lambda \right)^3\left( R_{t+4}+\gamma V\left( S_{t+4} \right)-\gamma\lambda V\left( S_{t+4} \right)  \right)\\ &+\lambda^3\left( R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}\right)\\ &-\lambda^4\left(R_{t+1}+\gamma R_{t+2} +\gamma^2 R_{t+3}+\gamma^3 R_{t+4}  \right) \end{align*}
\begin{align*} G{_t^\lambda}-V\left( S_t \right) =-V\left( S_t \right) &+\left( \gamma \lambda \right)^0\left( R_{t+1}+\gamma V\left( S_{t+1} \right)-\gamma\lambda V\left( S_{t+1} \right) \right)\\ &+\left( \gamma \lambda \right)^1\left( R_{t+2}+\gamma V\left( S_{t+2} \right)-\gamma\lambda V\left( S_{t+2} \right) \right)\\ &+\left( \gamma \lambda \right)^2\left( R_{t+3}+\gamma V\left( S_{t+3} \right)-\gamma\lambda V\left( S_{t+3} \right) \right)\\  &+\left( \gamma\lambda \right)^3\left( R_{t+4}+\gamma V\left( S_{t+4} \right)-\gamma\lambda V\left( S_{t+4} \right)  \right)\\ &+...\\=\ \ \ \ \ \ \ \ \ \ \ \  &\left( \gamma\lambda \right)^0\left( R_{t+1}+\gamma V\left( S_{t+1} \right)-V\left( S_t \right) \right)\\ &+\left( \gamma\lambda \right)^1\left( R_{t+2}+\gamma V\left( S_{t+2} \right)-V\left( S_{t+1} \right) \right)\\ &+\left( \gamma\lambda \right)^2\left( R_{t+3}+\gamma V\left( S_{t+3} \right)-V\left( S_{t+2} \right) \right)\\ &+...\\=\ \ \ \ \ \ \ \ \ \ \ \  &\delta_t+\gamma\lambda\delta_{t+1}+\left( \gamma\lambda \right)^2\delta_{t+2}+... \end{align*}
4. 前向视角和后向视角的 \mathrm{TD}\left( \lambda \right)
假设在某个episode中,状态 sk 时刻被访问了一次, \mathrm{TD}\left( \lambda \right) 的资格迹随时间衰减:
\begin{align*} E_t\left( s \right) &= \gamma\lambda E_{t-1}\left( s \right)+1\left( S_t=s \right)\\ &= \left\{\begin{array}{lr} 0 &  \textsf{if}\ t<k\\  \left( {\gamma\lambda} \right)^{t-k} & \textsf{if}\ t\geq k \\ \end{array}  \right. \end{align*}
后向视角 \mathrm{TD}\left( \lambda \right) 在线更新过程中不断累积误差:
\begin{align*} G{_t^\lambda}-V\left( S_t \right) =\delta_t+\gamma\lambda\delta_{t+1}+\left( \gamma\lambda \right)^2\delta_{t+2}+... \end{align*}
\begin{align*}  \sum \limits_{t=1}^{T}\alpha\delta_tE_t\left( s \right)  &=\alpha\left( \sum \limits_{t=1}^{k-1}\delta_t \mathop{\underline{E_t\left( s \right)}}\limits_{=0}+ \sum \limits_{t=k}^{T}\delta_t\mathop{\underline{E_t\left( s \right)}}\limits_{=({\gamma\lambda})^{t-k}} \right)\\  &=\alpha\sum \limits_{t=k}^{T}\left( {\gamma\lambda} \right)^{t-k}\delta_t\\  &=\alpha \left(  \mathop{\underline{\delta_k}}_{t=k} + \mathop{\underline{\left( \gamma\lambda \right)\delta_{k+1}}}_{t=k+1} + \mathop{\underline{\left( \gamma\lambda \right)^2\delta_{k+2}}}_{t=k+2}+... \right)\\ &=\alpha\left( G{_k^\lambda}-V\left( S_k \right) \right)  \end{align*}
附第二种方式证明:
\begin{align*} \sum \limits_{t=1}^{T}\alpha\delta_tE_t\left( s \right) &=\alpha\left( \sum \limits_{t=1}^{k-1}\delta_t \mathop{\underline{E_t\left( s \right)}}\limits_{=0}+ \sum \limits_{t=k}^{T}\delta_t\mathop{\underline{E_t\left( s \right)}}\limits_{=({\gamma\lambda})^{t-k}} \right)\\ &=\alpha\sum \limits_{t=k}^{T}\left( {\gamma\lambda} \right)^{t-k}\delta_t\\ &=\alpha\sum \limits_{t=k}^{T-1}\left( ({\gamma\lambda})^{t-k}\left( R_{t+1}+({\gamma\lambda}) V\left( S_{t+1} \right)-V\left( S_t \right) \right) \right)\\ &=\alpha\sum \limits_{t=k}^{T-1}\left( ({\gamma\lambda})^{t-k}R_{t+1}+({\gamma\lambda})^{t-k+1} V\left( S_{t+1}\right)-({\gamma\lambda})^{t-k}V\left( S_t \right) \right)\\ &=\alpha \left( \mathop{\underline{\left( R_{k+1}+\cancel{({\gamma\lambda}) V\left( S_{k+1} \right)}-V\left( S_k \right)\right)}}\limits_{t=k}\\  +\mathop{\underline{\left( ({\gamma\lambda}) R_{k+2}+\cancel{({\gamma\lambda})^2 V\left( S_{k+2} \right)}-\cancel{({\gamma\lambda}) V\left( S_{k+1} \right)}\right)}}\limits_{t=k+1}\\  +\mathop{\underline{\left( ({\gamma\lambda})^2 R_{k+3}+\cancel{({\gamma\lambda})^3 V\left( S_{k+3} \right)}-\cancel{({\gamma\lambda})^2 V\left( S_{k+2} \right)}\right)}}\limits_{t=k+2}+...\\  +\mathop{\underline{\left( ({\gamma\lambda})^{T-1-k} R_{T}+({\gamma\lambda})^{T-k} V\left( S_{T} \right)-\cancel{({\gamma\lambda})^{T-1-k}  V\left( S_{T-1} \right)}\right)}}\limits_{t=T-1} \right)\\  &=\alpha\left( R_{k+1}+({\gamma\lambda}) R_{k+2}+...+({\gamma\lambda})^{T-1-k}R_T+({\gamma\lambda})^{T-k} V\left( S_{T} \right)-V\left( S_k \right)  \right)\\  &=\alpha\left( G{_k^\lambda}-V\left( S_k \right) \right)  \end{align*}
当整个片段完成时,累计的误差为: G_t^{\lambda}=(1-\lambda)\sum\limits_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}\lambda-\mathrm{return})。
此时按照上面的计算,可以知道当整个片段完成时,后向视角方法对于值函数 V(s) 的增量等于 \lambda-\mathrm{return} ;如果状态 s 被访问了多次,那么资格迹就会累积,从而相当于累积了更多的 V(s) 的增量。这直观地解释了前向视角和后向视角的等价性。
需要特别注意的是,上面对误差进行求和之后,得到与 \lambda-\mathrm{return} 一致的形式,而对于前向视角而言, V(s) 是对 \lambda-\mathrm{return} 进行累加呀,为什么这里用后向视角的片段求和与 \lambda-\mathrm{return} 单项对比呢?因为这里的累加只是表示对于状态 s 的单次访问对于后续时刻的持续性影响,这种影响并不是仅仅在某一个时间点的,而是说从时刻 k 开始,后续的TD-error都与这次对于状态 s 的访问有关。我们反过来想一下,也就是说,从每个时刻的TD-error来看,它需要去寻找为它负责的状态,然后发现,状态 s_1 在之前访问了1次,状态 s_2 在之前访问了2次,状态 s_3 没有访问......于是它就依此计算资格迹,从而对各个状态的值函数进行更新。
有一种不太恰当的比喻:假设 \mathrm{TD-error} 是一种收益,“TD后向视角公司”今天收益了 \m athrm{TD-error} ,现在要论功行赏,发现状态 s_1 出勤1次,状态 s_2 出勤2次,状态 s_3 没有出勤,于是依此计算分红,分配到各个状态的累积奖金池( V(s) )中,由于“TD后向视角公司”是每天一次分红,所以并不需要知道公司往后究竟是倒闭还是赚到越来越多的钱,我们只需要知道今天的利益如何分配就行。而“TD前向视角公司”的高层则觉得,公司应该估算一下未来每一天可能的总收益,然后按照指数平均一下,从而来为各状态分红,由于需要考虑到最终的Terminal state,所以只能在episodic MDP上使用。按照前面这样来理解的话,就可以很容易的想清楚为什么后向视角的 \mathrm{TD}\left( \lambda \right) 并不限于episodic MDP了,毕竟它是将当前时刻的 \mathrm{TD-error} 按资格迹来分配到每个状态,然后对状态更新的。

5. 两种视角下等价性

离线更新

在整个片段里累计更新误差

在片段结束后统一更新

离线更新下,前向视角和后向视角等价

在线更新

\mathrm{TD}\left( \lambda \right) 在片段的每一步更新

此时前向视角和后向视角有一点不同

可以通过对资格迹进行一些修正,使两者完全等价(True Online TD(lambda) - Harm van Seijen, Richard S. Sutton

6. 小结


参考文献

【1】一文详解蒙特卡洛(Monte Carlo)法及其应用

【2】强化学习经典入门书的读书笔记系列--第五篇(上)

【3】纸牌游戏21点(Blackjack).构造并实施21点游戏的蒙特卡洛模拟

【4】纸牌游戏21点 数学建模

【5】David Silver强化学习课程笔记(四)

【6】《强化学习》第四讲 不基于模型的预测

【7】强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)

【8】David Silver深度强化学习第4课-免模型预测

【9】David Silver强化学习公开课(四):不基于模型的预测

【10】David Silver 强化学习Lecture4:Model-Free Prediction

请大家批评指正,谢谢😄~


(PS:2019年1月7日完成第三次修订~)
(PS:2019年1月24日完成第四次修订~)

编辑于 2019-08-18

文章被以下专栏收录