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

姓名:白子轩       学号:21011110229     学院:通信工程学院

转自:https://www.cnblogs.com/pinard/p/9529828.html

【嵌牛导读】本文将对时序差分法求解强化学习问题进行介绍

嵌牛鼻子】时序差分

嵌牛提问】时序差分算法的特点?

嵌牛正文

在强化学习(四)用蒙特卡罗法(MC)求解中,我们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不需要环境的状态转化概率模型,但是它需要所有的采样序列都是经历完整的状态序列。如果我们没有完整的状态序列,那么就无法使用蒙特卡罗法求解了。本文我们就来讨论可以不使用完整状态序列求解强化学习问题的方法:时序差分(Temporal-Difference, TD)。

时序差分TD简介

时序差分法和蒙特卡罗法类似,都是不基于模型的强化学习问题求解方法。所以在上一篇定义的不基于模型的强化学习控制问题和预测问题的定义,在这里仍然适用。

预测问题:即给定强化学习的5个要素:状态集S, 动作集A, 即时奖励R,衰减因子\gamma,  给定策略\pi, 求解该策略的状态价值函数v(\pi)

控制问题:也就是求解最优的价值函数和策略。给定强化学习的5个要素:状态集S, 动作集A, 即时奖励R,衰减因子\gamma, 探索率ϵ, 求解最优的动作价值函数q^∗和最优策略π^∗

回顾蒙特卡罗法中计算状态收获的方法是:

G_{t}=R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\ldots \gamma^{T-t-1} R_{T}

而对于时序差分法来说,我们没有完整的状态序列,只有部分的状态序列,那么如何可以近似求出某个状态的收获呢?回顾强化学习(二)马尔科夫决策过程(MDP)中的贝尔曼方程:

v_{\pi}(s) =\mathbb{E}_{\pi}\left(R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) \mid S_{t}=s\right)

这启发我们可以用R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right)来近似的代替收获G_t,一般我们把R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right)称为TD目标值,R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right)-V(S_t)称为TD误差,将用TD目标值近似代替收获G(t)的过程称为引导(bootstrapping)。这样我们只需要两个连续的状态与对应的奖励,就可以尝试求解强化学习问题了。

时序差分TD的预测问题求解

时序差分的预测问题求解和蒙特卡罗法类似,但是主要有两个不同点。一是收获G_t的表达式不同,时序差分G(t)的表达式为:

G(t)=R_t+1+γV(S_t+1)

二是迭代的式子系数稍有不同,回顾蒙特卡罗法的迭代式子是:

V\left(S_{t}\right)=V\left(S_{t}\right)+\frac{1}{N\left(S_{t}\right)}\left(G_{t}-V\left(S_{t}\right)\right)

由于在时序差分我们没有完整的序列,也就没有对应的次数N(S_t),一般就用一个[0,1]的系数α代替。这样时序差分的价值函数迭代式子是:

\begin{aligned}&V(S_t)=V(S_t)+α(G_t−V(S_t))\\&Q(S_t,A_t)=Q(S_t,A_t)+α(G_t−Q(S_t,A_t))\end{aligned}

这里我们用一个简单的例子来看看蒙特卡罗法和时序差分法求解预测问题的不同。

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

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

只有第一个状态序列是有状态转移的,其余7个只有一个状态。设置衰减因子γ=1

首先我们按蒙特卡罗法来求解预测问题。由于只有第一个序列中包含状态A,因此A的价值仅能通过第一个序列来计算,也就等同于计算该序列中状态A的收获:

V(A)=G(A)=R_A+γR_B=0

对于B,则需要对其在8个序列中的收获值来平均,其结果是6/8。

再来看看时序差分法求解的过程。其收获是在计算状态序列中某状态价值时是应用其后续状态的预估价值来计算的,对于B来说,它总是终止状态,没有后续状态,因此它的价值直接用其在8个序列中的收获值来平均,其结果是6/8。

对于A,只在第一个序列出现,它的价值为:

V(A)=R_A+γV(B)=\frac{6}{8}

从上面的例子我们也可以看到蒙特卡罗法和时序差分法求解预测问题的区别。

一是时序差分法在知道结果之前就可以学习,也可以在没有结果时学习,还可以在持续进行的环境中学习,而蒙特卡罗法则要等到最后结果才能学习,时序差分法可以更快速灵活的更新状态的价值估计,这在某些情况下有着非常重要的实际意义。

二是时序差分法在更新状态价值时使用的是TD 目标值,即基于即时奖励和下一状态的预估价值来替代当前状态在状态序列结束时可能得到的收获,是当前状态价值的有偏估计,而蒙特卡罗法则使用实际的收获来更新状态价值,是某一策略下状态价值的无偏估计,这一点蒙特卡罗法占优。

三是虽然时序差分法得到的价值是有偏估计,但是其方差却比蒙特卡罗法得到的方差要低,且对初始值敏感,通常比蒙特卡罗法更加高效。

从上面的描述可以看出时序差分法的优势比较大,因此现在主流的强化学习求解方法都是基于时序差分的。

n步时序差分

在第二节的时序差分法中,我们使用了用R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right)来近似的代替收获G_t。即向前一步来近似我们的收获G_t,那么能不能向前两步呢?当然可以,这时我们的收获G_t的近似表达式为:

G^{(2)}_t=R_{t+1}+γR_{t+2}+γ^2V(S_{t+2})

从两步,到三步,再到n步,我们可以归纳出n步时序差分收获G^{(n)}_t表达式为:

G_{t}^{(n)}=R_{t+1}+\gamma R_{t+2}+\ldots+\gamma^{n-1} R_{t+n}+\gamma^{n} V\left(S_{t+n}\right)

当n越来越大,趋于无穷,或者说趋于使用完整的状态序列时,n步时序差分就等价于蒙特卡罗法了。

对于n步时序差分来说,和普通的时序差分的区别就在于收获的计算方式的差异。那么既然有这个n步的说法,那么n到底是多少步好呢?如何衡量n的好坏呢?我们在下一节讨论。

TD(λ)

n步时序差分选择多少步数作为一个较优的计算参数是需要尝试的超参数调优问题。为了能在不增加计算复杂度的情况下综合考虑所有步数的预测,我们引入了一个新[0,1]的参数λ,定义λ−收获是n从1到∞所有步的收获乘以权重的和。每一步的权重是(1−λ)λ^{n−1},这样λ−收获的计算公式表示为:

G_{t}^{\lambda}=(1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} G_{t}^{(n)}

进而我们可以得到TD(λ)的价值函数的迭代公式:

\begin{gathered}
V\left(S_{t}\right)=V\left(S_{t}\right)+\alpha\left(G_{t}^{\lambda}-V\left(S_{t}\right)\right) \\
Q\left(S_{t}, A_{t}\right)=Q\left(S_{t}, A_{t}\right)+\alpha\left(G_{t}^{\lambda}-Q\left(S_{t}, A_{t}\right)\right)
\end{gathered}

每一步收获的权重定义为(1−λ)λ^{n−1}的原因是什么呢?其图像如下图所示,可以看到随着n的增大,其第n步收获的权重呈几何级数的衰减。当在T时刻到达终止状态时,未分配的权重全部给予终止状态的实际收获值。这样可以使一个完整的状态序列中所有的n步收获的权重加起来为1,离当前状态越远的收获其权重越小。

从前向来看TD(λ), 一个状态的价值V(St)G_t得到,而G_t又间接由所有后续状态价值计算得到,因此可以认为更新一个状态的价值需要知道所有后续状态的价值。也就是说,必须要经历完整的状态序列获得包括终止状态的每一个状态的即时奖励才能更新当前状态的价值。这和蒙特卡罗法的要求一样,因此TD(λ)有着和蒙特卡罗法一样的劣势。当λ=0时,就是第二节讲到的普通的时序差分法,当λ=1时,就是蒙特卡罗法。

从反向来看TD(λ),它可以分析我们状态对后续状态的影响。比如老鼠在依次连续接受了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\left(S_{t}=s\right)=\left\{\begin{array}{ll}
0 & t<k \\
(\gamma \lambda)^{t-k} & t \geq k
\end{array}, \text { s.t. } \lambda, \gamma \in[0,1], s \text { is visited once at time } k\right.

此时我们TD(λ)的价值函数更新式子可以表示为:

\begin{gathered}
\delta_{t}=R_{t+1}+\gamma v\left(S_{t+1}\right)-V\left(S_{t}\right) \\
V\left(S_{t}\right)=V\left(S_{t}\right)+\alpha \delta_{t} E_{t}(s)
\end{gathered}

也许有人会问,这前向的式子和反向的式子看起来不同啊,是不是不同的逻辑呢?其实两者是等价的。现在我们从前向推导一下反向的更新式子:

\begin{aligned}
G_{t}^{\lambda}-V\left(S_{t}\right) &=-V\left(S_{t}\right)+(1-\lambda) \lambda^{0}\left(R_{t+1}+\gamma V\left(S_{t+1}\right)\right) \\
&+(1-\lambda) \lambda^{1}\left(R_{t+1}+\gamma R_{t+2}+\gamma^{2} V\left(S_{t+2}\right)\right) \\
&+(1-\lambda) \lambda^{2}\left(R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\gamma^{3} V\left(S_{t+3}\right)\right) \\
&+\ldots \\
&=-V\left(S_{t}\right)+(\gamma \lambda)^{0}\left(R_{t+1}+\gamma V\left(S_{t+1}\right)-\gamma \lambda V\left(S_{t+1}\right)\right) \\
&+(\gamma \lambda)^{1}\left(R_{t+2}+\gamma V\left(S_{t+2}\right)-\gamma \lambda V\left(S_{t+2}\right)\right) \\
&+(\gamma \lambda)^{2}\left(R_{t+3}+\gamma V\left(S_{t+3}\right)-\gamma \lambda V\left(S_{t+3}\right)\right) \\
&+\ldots \\
&=(\gamma \lambda)^{0}\left(R_{t+1}+\gamma V\left(S_{t+1}\right)-V\left(S_{t}\right)\right) \\
&+(\gamma \lambda)^{1}\left(R_{t+2}+\gamma V\left(S_{t+2}\right)-V\left(S_{t+1}\right)\right) \\
&+(\gamma \lambda)^{2}\left(R_{t+3}+\gamma V\left(S_{t+3}\right)-V\left(S_{t+2}\right)\right) \\
&+\ldots \\
&=\delta_{t}+\gamma \lambda \delta_{t+1}+(\gamma \lambda)^{2} \delta_{t+2}+\ldots
\end{aligned}

可以看出前向TD误差和反向的TD误差实际上一致的。

时序差分的控制问题求解

现在我们回到普通的时序差分,来看看它控制问题的求解方法。回想上一篇蒙特卡罗法在线控制的方法,我们使用的是ϵ−贪婪法来做价值迭代。对于时序差分,我们也可以用ϵ−贪婪法来价值迭代,和蒙特卡罗法在线控制的区别主要只是在于收获的计算方式不同。时序差分的在线控制(on-policy)算法最常见的是SARSA算法.

而除了在线控制,我们还可以做离线控制(off-policy),离线控制和在线控制的区别主要在于在线控制一般只有一个策略(最常见的是ϵ−贪婪法)。而离线控制一般有两个策略,其中一个策略(最常见的是ϵ−贪婪法)用于选择新的动作,另一个策略(最常见的是贪婪法)用于更新价值函数。时序差分的离线控制算法最常见的是Q-Learning算法。

时序差分小结

时序差分和蒙特卡罗法比它更加灵活,学习能力更强,因此是目前主流的强化学习求解问题的方法,现在绝大部分强化学习乃至深度强化学习的求解都是以时序差分的思想为基础的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容