【强化学习】第六章:无模型控制:在轨MC控制、在轨时序差分学习(Sarsa)、离轨学习(Q-learning)

15 阅读31分钟

【强化学习】第六章:无模型控制:在轨MC控制、在轨时序差分学习(Sarsa)、离轨学习(Q-learning)

说明:从强化学习知识框架上看,本篇承接无模型评估篇:blog.csdn.net/friday1203/…
但是,从知识点上看,本篇是承接前五章的所有重点和难点!所以你前面知识点必须非常熟悉,本篇才能顺水推舟的理解了。尽管本篇我已经尽力回溯之前的知识点,但你还是得没有逻辑断点,才能看懂本篇。

一、梳理本章在强化学习中的位置

1、从第四篇的策略迭代算法流程中,我们知道强化学习的基本框架是:要先进行评估,评估完后再进行策略改进。所以第五篇我们讲了无模型评估(也叫预测),本篇开讲无模型控制(也就是策略改进优化)。

也所以,本篇的在轨MC控制、在轨算法:Sarsa、离轨算法Q-learning,这些算法的最终目标都是求最优策略的。那现实生活中哪些问题会用到本篇的算法呢?比如:

2、本篇是DeepMind流派,或者说是强化学习鼻祖Rich Sutton和Andew Barto出版的强化学习那本书里的理论部分的最后一讲。所以本篇学完以后,你就可以把这些理论框架应用到实践过程中了。

3、本篇之后我们开讲OpenAI流派,也就是深度强化学习。比如,DQN(深度Q网络,Deep Q-Network),就是将卷积神经网络(CNN)与Q-Learning相结合,用CNN来逼近Q函数。DQN就是2013年玩Atari游戏的那个算法。后面很多算法也是基于DQN的扩展。

二、在轨学习、离轨学习

为什么这里会出现在轨离轨这对儿概念呢?前面我们学的DP是有模型算法,意思就是系统的状态、动作、状态转移矩阵、奖励这些都统统是知道的,那通过贝尔曼期望方程或者贝尔曼最优方程就可以算出最优策略。但是对应上图中比如直升机、证券投资这些场景,是无模型场景,对于这些无模型场景,我们想求最优策略,那就得实打实的有游戏数据,比如证券投资,你得有历史上数据,我们从历史数据中去学习,找最优策略。所以强化学习要么得有模型,没有模型你得有数据!没有模型也没有数据,那就没法学了。本篇讲的是无模型控制,没模型就得有数据。

所以,此后如果你再听到经验这个词,指的就是数据,可以是股票的历史数据也可以是现学的游戏数据,比如就是刚刚打完的一局游戏的s,a,r序列数据,也或者是刚刚打完的一些s,a,r片段,也可以是别人打的s,a,r序列。无模型强化学习,都是从这些经验中去学或者去提升策略,直到学到一个最优策略,也就是从小白变成了高手。

然而,我们前面一直强调不同策略对应不同的一组系统价值,所以我们"经验数据"就有了策略Π下的数据和策略Π'下的数据之分,不同数据对应的价值是不一样的,所以学习的方法也是不一样的。所以学习这些数据随之也就对应着在轨学习和离轨学习的区别。后面我们会反反复复提到这个概念。

上面的在轨离轨概念是鲁鹏老师课件中的截图。前面内容看得仔细的同学,μ和π这个两个符号第二章就出现过解释过的。鲁鹏老师的解释是:
在轨:就是自己边打边学,通过自己打游戏,积攒经验提升自己的策略,从小白变高手。
离轨:就是看别人打游戏,然后通过别人的经验来提升自己的策略,从小白变高手。

其实,我个人认为,在轨就是在策略Π下,打出一些序列s1,a1,r1,s2,a2,r2...,然后通过这些序列计算价值->贪婪化提升策略。意思就是序列s1,a1,r1,s2,a2,r2...是策略Π下的序列。通过学习序列s1,a1,r1,s2,a2,r2...得到的经验提升,叫在轨学习。而离轨学习指,从不同的策略Π下的、序列s1,a1,r1,s2,a2,r2...,序列s1',a1',r1',s2',a2',r2'...,中学习,得到的经验提升,叫离轨学习。

因为在不同策略Π下,计算得到的"价值"是不同的,而我们的"策略"又是以“价值”为依据的。也所以传统的强化学习范式是:获得策略Π下的序列-->计算价值(状态价值或者动作价值或者状态动作价值)-->依据价值贪婪化(或者ε-greedy,也就是利用和探索)提升策略-->在新策略下获取新经验-->计算价值-->贪婪化提升策略,如此循环直到得到最优策略,done!

所以在轨离轨指的就是我们学习的数据序列,是同一个Π,还是不同的Π,下的序列数据。所以学习不同Π下的序列数据,叫离轨学习。学习同一个Π下的序列数据,叫在轨学习。后面会不断出现这对儿概念,这里理解不了,后面再继续理解。

三、在轨蒙特卡罗控制(On-Policy Monte-Carlo Learning)

1、基于动作价值函数的无模型策略迭代:在轨蒙特卡洛控制
这是一个通用的无模型策略控制方法,下面我先把相关内容整理出来,再逐一解释:

(1)有模型的场景,我们根据上图A来提升策略的,也就是DP算法。在DP算法中v和q直接是有概率连接的,我们通过v就可以求出q,有了q就可以更新策略了。但是现在是无模型场景,我们得不到状态转移矩阵了,所以我们得用B来提升策略。B是直接用动作价值函数,贪婪化的提升策略

(2)那B处的动作价值函数怎么取得?上图的策略迭代过程中的动作价值评估是用MC学习来做的,就是上图C处,但是是直接算(s,a)对儿的价值,也就是动作价值函数的价值值。也所以上图的控制过程我们也叫蒙特卡罗控制

重点说明:本篇及以后基本面对的都是无模型场景,所以我们以后再说价值,基本就都是指动作价值。

(3)那B处的贪婪化提升策略,又是如何做的?此时B处就不能再用单纯的贪婪提升策略了,得用ε-greedy策略来提升。为什么?因为单纯的贪婪化是不行的,你不能就试了几次,就把这几次的经验当成永久不变的定律,环境变了,经验也得跟着变,所以在贪婪化利用的同时还得探索,也就是:ε-greedy算法。就是除了贪婪利用还得探索,ε-greedy算法就是利用与探索。其实特别好理解,不理解的同学参考老虎机问题: blog.csdn.net/friday1203/… 这个问题比较通俗移动。

(4)上图4处是数学证明,证明用ε-greedy算法获得的策略,比单纯用贪婪算法获得的策略更优。ε-greedy是利用和探索的平衡艺术,下图从数学角度精确的展示了利用和探索之间的比例关系:

根据上图的公式我们就可以精确的把我利用和探索的比例了。

(5)从数据角度看,上面的策略迭代在轨学习,不是离轨学习。也就是数据来自同一个Π的,数据来自不同的Π,是离轨蒙特卡洛控制,而离轨MC控制是另外一种算法,离轨MC目前只是理论上有意义,实际中我们一般不用它,而且还涉及到重要性采样(Importance sampling)操作。

(6)案例展示MC具体是如何在轨学习的:

上图中的从初始的随机策略Π0下打的100万步游戏经验中学习,贪婪得到的确定性策略Π1,然后在随机策略Π1+ε下继续打100万步游戏->计算动作价值->贪婪得到确定性策略Π2,然后在随机策略Π2+ε下继续打100万步游戏->计算动作价值...如此循环直到策略收敛。

眼尖的同学到这里就会发现,这里的Πk策略和Πk+ε策略就是利用和平衡的艺术。当ε比较小的时候,也就是探索概率小,利用概率大时,此时用Πk+ε策略打100万步游戏后,计算出来的动作价值如果能贪婪地等价成策略Πk,那么我们就叫Πk策略和Πk+ε策略是Consistency。所以当ε比较小时,其实我们的策略提升过程并不明显,因为策略一直是consistency的。但是如果ε比较大时,Πk+ε的随机性又太大,说明我们是一直在随机探索,随机探索又是得不到最优策略的。所以这是MC控制的一个致命缺陷:一方面其探索性让它提升了策略,另一方面也正是由于探索性,让它牺牲掉了策略的最优性。 比如上图中的策略就是收敛的策略,但是agent还是可以进入forbidden格子,其实最优的策略是绕开forbidden格子到底target格子。所以上面算法虽然通过ε-greedy的探索,来优化了策略,但也正是它的探索性,让它无法达到最优。也就是由于探索性而牺牲掉了最优性

基于这个缺点,后人对其进行了改进,就是下面的GLIE的蒙特卡罗控制。

2、GLIE的蒙特卡罗控制
上面小标题1的策略迭代流程也叫蒙特卡洛控制。虽然蒙特卡洛控制在迭代过程中,策略能收敛,但是这个收敛的策略是否是最优的策略呢?答案是不一定!就是虽然是可以收敛的,但不一定能收敛到最优策略。那MC控制如何才能收敛到最优策略呢?如下左图所示,要满足GLIE条件的MC控制,收敛后的策略才是最优策略

(1)什么是GLIE条件?

A处表示所有的(s,a)对儿要被探索无数次;B处表示在被探索了无数次后得到的策略趋同于贪婪策略。
条件A+条件B,叫GLIE条件。满足GLIE条件的MC控制是一定可以收敛到最优策略的

(2)从前面的知识点我们可以知道:ε-greedy的利用和探索,得到的策略,比单纯用贪婪算法获得的策略更优。但是你如果想找到最优的策略,一是,你得满足GLIE条件。二是,你用ε-greedy算法迭代策略时,ε的设置就不能再是一个一成不变的超参数了,ε得随着探索次数逐步递减,如上图E处的例子,ε=1/k,表示ε随着探索次数k的增加而减小。这样的策略迭代过程叫GLIE的蒙特卡洛控制,具体迭代过程就是上图的C处。策略收敛到最优策略的过程就是上图D处。

其实,GLIE的蒙特卡洛控制也不难理解。你想,ε-greedy算法中的ε是等于一个固定值的超参数,也就是每次打游戏时,agent都以固定的ε概率来探索和利用。当游戏中的(s,a)对儿都已经被探索了无数次了,此时就已经非常清楚(s,a)对儿中什么动作是最优的,那我们干嘛还要继续以概率ε来探索呢,探索就意味着可能好也可能坏,当我们已经知道如何action就是好的,那就往好的action上做才能获取最多的奖励,为什么还要以牺牲奖励为代价去冒险探索呢?!所以随着k趋向无穷大,最优的策略就是逐渐减少探索。所以ε要随着k增加而逐渐减少,才能获取最多的奖励,此时对应的策略就是最优策略。

3、Episode对MC控制的影响
前面讲蒙特卡洛学习的时候,一直强调MC只能用于有结束状态的分幕情况。因为MC计算价值的时候就是从结束状态开始回溯的,如果没有结束状态,它就没法算啊。所以MC控制也是应用于有结束状态的情况。

但是在强化学习中,有无结束状态这件事本身并不是很大的障碍,因为有无结束状态是可以人为转化的!比如一个有结束状态的游戏,如果一旦agent失败游戏结束,那我们把agent又重新开始的下一轮游戏当作上轮游戏的继续,那此时有结束的游戏不就是无结束的游戏了嘛。再比如一个没有结束状态的游戏,我们可以人为截断一些游戏的trajectory,当作一条条episode,那不是就把无结束状态的游戏变成了有结束状态的游戏了嘛。

所以不管你的场景是有结束状态还是没结束状态,其实MC控制都是可以适用的! 而且episode的长短对MC控制的影响也是有规律可循的,下面是赵世钰老师课件中的例子的结果,供大家参考:

从上面例子中看见:
(1)策略提升的过程是:先提升离目标最近的格子,然后才逐步提升较远的格子。
(2)理论上是episode越长越好,越长计算出来的均值更趋近期望嘛。

4、小结GLIE的蒙特卡罗控制
一是,动作价值函数的计算使用MC学习方法。也就是计算(s,a)对儿的价值时,用MC方法来计算。
二是,在用ε-greedy算法进行策略迭代时,把ε设置成一个自适应的动态参数。类似梯度下降优化算法中的学习率的设置是一个道理。说着说如果ε设置的是一个固定值,策略也是可以收敛的,但是一般是不会收敛到最优策略。如果ε被设置的是一个逐渐变小的更新值,策略是可以收敛到最优策略的。

下面我们要学Sarsa,Sarsa中的ε是不进行更新的。这里的ε是要更新的。这是最大的区别。

三是,蒙特卡洛学习分在轨和离轨两种,这里讲的是在轨蒙特卡洛离轨蒙特卡洛是另外一种版本,只有理论意义实际中基本不用。

四、在轨策略时序差分学习(On-Policy Temporal-Difference Learning):Sarsa

1、Sarsa简介
(1)要理解Sarsa,你先要理解贝尔曼期望方程、贝尔曼最优方程-->然后理解DP(DP是解决完备的MDP问题的)-->从DP去理解TD(TD就是DP的思想来解决非完备MDP问题的,也就是解决无模型强化学习问题的,其底层和DP一样都是贝尔曼期望方程)-->然后从TD的逻辑再来理解Sarsa,你就会发现DP-TD-Sarsa,它们是一脉相承的一族算法,其最底层都是贝尔曼期望方程。

(2)在轨策略时序差分学习MC控制一样,第一步都是直接求动作价值函数,时序差分控制也是第一步求动作价值函数,只不过求动作价值函数用的是TD学习方法,而MC控制用的是MC学习方法。

(3)第五章节学的TD算法只是用来评估给定策略下的状态价值的,不能评估动作价值,也不能搜索最优策略。而这里的Sarsa算法是使用TD算法来评估动作价值并寻找最优策略的

(4)MC控制最好是用于完整的回合制数据场景。如果数据不完整,比如游戏没有终止状态的场景,那用时序差分学习就比较合适。所以DP-TD-Sarsa都适用于没有终止情况的博弈。

2、使用Sarsa更新动作价值函数

(1)Sarsa方法其实就是TD方法,上图绿线左边是第五章讲的TD,绿线右边是本部分要讲的Sarsa。

没有模型就得有数据嘛,所以Sarsa之所以叫Sarsa是因为,和TD一样,都是利用数据(st,at,rt+1,st+1,at+1)序列片段就可以计算了。所以sarsa就是序列片段的意思。Sarsa is the abbreviation of state-action-reward-state-action.

(2)右边只不过是把计算状态价值(TD)变成计算动作价值(Sarsa)而已,二者计算方法一模一样!也所以从数学上看,DT求解的是状态价值函数的贝尔曼期望方程,而Sarsa求解的是动作价值函数的贝尔曼期望方程
“状态价值函数的贝尔曼期望方程”描述的是系统状态st和st+1之间的关系。
“动作价值函数的贝尔曼期望方程”描述的是(st,at)和(st+1,at+1)之间的关系。

3、Sarsa算法的伪代码
we can combine Sarsa with a policy improvement step. The combined algorithm is also called Sarsa。意思就是,Sarsa算法是先评估给定策略Π下的动作价值(也就是policy evaluation),然后再结合policy improvement找到最优策略。(1)上面迭代过程中用的是ε-greedy,这里的ε是一个固定超参,是不变的。这是有别于MC控制的。

(2)Sarsa是边打边算Q(s,a)、边ε-greedy地提升策略的。假如初始化Q(s,a)=0,agent打了一步游戏-->产生一个序列片段(st,at,rt+1,st+1,at+1)-->就用这个片段中的r更新了Q(st,at),同时策略Π也更新成:P(a=at|st)=1-ε、P(at=其他动作|st)=ε。然后根据新策略,继续打下一步游戏,打完下一步,同理更新Q\Π-->在更新了的Q\Π下,继续打下下步,如此循环直到策略收敛。

(3)DP中自举的value updata,是要迭代好多轮,直到value收敛才停止迭代。而此处Sarsa中的q-value update是只迭代1次,就开始ε-greedy提升策略。用提升后的策略再生成数据,再q-value updata一次,再ε-greedy提升策略,如此循环。所以Sarsa实际上就是一个Truncated policy iteration algorithm的应用。

4、Sarsa算法的收敛性
Sarsa最后得到的收敛的策略,一般不是最优策略。因为Sarsa一般都是用于没有终止的游戏,或者说用于比较复杂的游戏,所以Sarsa除了利用,得用一个固定的ε来探索。正是因为这个ε概率的探索,导致Sarsa最后得到的收敛的策略一般不会是最优策略,一般是一个局部的最优策略,全局上看不一定是最优的。原因和上面的MC控制是一样的。

也所以如果想让Sarsa收敛到全局最优策略,得和GLIE的MC控制一样,得慢慢减小ε概率索:

5、强化学习中的任务描述

强化学习任务和深度学习任务不一样。强化学习任务分:寻找一个最优策略(路径)到达目标状态,还是寻找所有状态的策略都达到最优。比如下面这个例子:

上图例子的任务是从某个特定的格子出发,寻找一个好的路径,到达目标格子的任务。这个任务是有别于我们之前的例子的,我们之前的格子任务是寻找所有格子的最优策略。这两种任务是有区别的。所以以后我们遇到实际问题后,首先要区别一下你的任务是什么

换句话说就是你要先明确你是“想找所有状态的最优策略”还是只是“找一个可行(或者是较优)的路径”?

  • 如果你只是想找一个较优的路径,那你多多利用就可以了。比如上图的A处,我们沿着概率比较大的策略走,就可以到达目标状态。那A路径就是我们对问题的求解。此时状态a\b其实都不是最优策略,但已经无所谓了。

  • 如果你想找到所有状态的最优策略,或者说你想找到一个最优的路径,那你就得偏重探索。你得对所有的格子都多多探索,才能找到最优策略或者最优路径。

上图B表示,agent探索了500条episode。刚开始agent的策略肯定是随机的,所以episode length要很长,就是随机走,要走很长的step才误打误撞到target state。随着agent对这些episode的学习->提升策略后,后面的episode length就逐渐变短了,也就是agent逐渐变聪明了,策略变优了,直到最后依据策略概率的大小,可以找到路径A。

同理C图就更好理解了:刚开始agent是随机走的,所以奖励很小,到后面策略更优后,奖励也逐步变大。

小结:之所以把强化学习的任务单独拿出来讲是因为,无模型强化是需要agent自己变打游戏变提升的,这个训练过程是非常消耗算力的,所以明确你的任务就是节省算力。

五、Expected Sarsa算法、n-step Sarsa算法

1、Expected Sarsa算法
上面的Sarsa算法,底层用的是动作价值函数的贝尔曼方程,列出的是q(st,at)和q(st+1,at+1)之间的关系。所以我们采样数据的时候是(st,at,rt+1,st+1,at+1)这样的序列片段。但是如果我们都已经知道状态s下对应那几种动作,那我们是不用采样st+1状态下的动作at+1的。因为我们的策略是已知的、状态对应的动作也是已知的,那动作价值是可以根据策略求得的,也就是我们第三章讲的动作价值函数和状态价值函数之间的转化公式,如下图A处的公式:

2、n-step Sarsa算法

n-step Sarsa也叫Sarsa(λ),可以类比TD(λ):blog.csdn.net/friday1203/…
Sarsa(λ)也叫Sarsa算法的λ版本。
Sarsa(λ)和Sarsa算法的流程是一样的,只是计算Gt时用的时TD(λ)方法,其他都一样。下图是n-step Sarsa算法原理和背后的数学计算:

六、离轨学习(Off-Policy Learning)之 :Q学习(Q-learning)

1、Q-learning算法原理
Q-learning是离轨学习的典型算法之一。当年谷歌的DQN算法的渊源就是Q-learning算法。DQN是Deep Q-Network,是将Q-Learning和卷积神经网络(CNN)相结合的算法。DQN是当年玩Atari游戏超越人类而火出圈的那个算法,也是离轨学习算法。

前面的MC算法、Sarsa算法是先估计给定策略Π下的动作价值(也就是policy evaluation),然后再结合policy improvement提升策略,如此不断循环,直到最终找到最优策略。而本部分的Q-learning是直接求解最优动作价值optimal action value。也就是直接求解贝尔曼最优方程得到最优策略。

下面我们看看鲁鹏老师课件中Q-learning算法的原理:

A处:Q-learning算法计算的是动作价值函数,不是状态价值。就是说Q-learning算法也是用于无模型场景的,不知道状态转移矩阵的场景,所以Q-learning计算的也是(s,a)对儿。

D\E处:Q学习的策略提升也是通过迭代完成的,但Q-learning迭代的是max q,所以Q-learning是把策略评估和策略提升合并为一步了。

下面我再把赵世钰老师课件中Q-learning算法原理贴出来:

前面知识点理解透彻的同学,一眼就可以看出,算法迭代的数学形式其实是一模一样的:

赵世钰老师的αt(st,at)对应鲁鹏老师中的α,意思就是增量式迭代过程中使用指数移动平均。
赵世钰老师的rt+1对应鲁鹏老师中的R,意思就是系统的即时奖励。

这就是Q-learning算法原理,非常非常简单,就是求解贝尔曼最优方程。

2、再次理解:离轨学习\在轨学习
其实所有强化学习的算法都存在on-policy和off-policy这个问题。

(1)目标策略target policy、行为策略behavier policy
在强化学习中,实际上是存在两种策略:
第一种策略是behavior policy,是指和环境交互生成的experience。
第二种策略是target policy,就是我们从小白的随机策略开始,一步步迭代直到最优策略过程中的这一系列策略都是target policy。

比如我用策略Π0和环境进行交互->得到experience0->用experience0改进策略Π0到Π1->用策略Π1和环境进行交互->得到experience1->用experience1改进策略Π1到Π2->...如此循环就是behavior policy==target policy,也就是on-policy learning.

比如我用策略Π和环境进行交互->得到大量的experience->用experience改进策略小白策略Π0,直到Π0收敛到最优策略Π*,这个策略迭代过程中产生的多个中间策略都是目标策略,只是最后一次迭代生成的策略是最优目标策略。此时behavior policy是Π,Π和target policy是不一样的,这样的算法就是off-policy learning.

(2)离轨学习的优点

在轨学习和离轨学习的根本区别就是使用的经验数据不同。在轨学习可以通俗理解为agent自己学习经验数据,并从经验数据中提升策略,逐步从小白变高手。离轨学习则可以理解为agent可以从自己学习的经验数据、也可以从别人学习的经验数据中学习,提升策略成高手

所以离轨学习的最大优点就是agent可以不用自己打游戏、总结经验,从小白变高手;而是可以从别人打的游戏序列中,学习经验,从小白变高手!对!这就是离轨学习的强大之处!比如我们要训练一个打游戏机器人,不一定非得要亲自打很多次游戏,得到游戏数据,然后总结经验,从小白变高手。而是我们可以直接拿来别人打的游戏数据,把这个数据当作是我们自己的"探索"的数据,从中学习策略,从而也达到高手的效果。

也所以当目标策略和行为策略相同时,就是在轨学习。当目标策略和行为策略不一样时,就是离轨学习

也所以,离轨学习的优点是,可以用之前的、别的策略、或者别人打游戏,生成的数据,拿来我用(学习),提高我自己的策略。

事实上,重要性采样Importance sampling可以将我们前面学的所有在轨学习方法改编成离轨版本。

(3)从在轨和离轨角度再次区别前面几种算法

贝尔曼期望公式是在策略Π下的等式,但贝尔曼最优公式是不涉及到任何策略的。

sarsa算法的behavior policy==target policy,所以sarsa算法是on-policy learning.
Q-learning算法的behavior policy是可以不同于target policy的(就是可以是相同的,也可以是不同的),所以Q-learning算法是分on-police版本和off-policy版本的.

3、Q-learning算法伪代码

上左图的在轨Q-learning就是我们人为强行让经验片段的behavior policy和target policy一致。

上右图的离轨Q-learning中的Πb指的就是behavior policy下的经验数据episode,这个经验数据一般都要非常多步,比如100万步这样的量级,而且尽量每个状态动作对儿都要探索过多次。
然后离轨Q-learning算法从episode中的“每一步片段”中迭代学习:
每一步片段都计算一下q(s,a)->然后是greedy的提升策略,
如此循环迭代所有的片段,直到策略收敛。

注意: (1)离轨Q-learning是不用探索的,因为离轨Q-learning的经验数据都是从Πb来的,它不需要自己打游戏去探索,只需要把已经打过的数据贪婪提升策略即可。探索的事情都是在episode{s0,a0,r1,s1,a1,r2..}中已经重复探索完毕了。算法只需要在episode{s0,a0,r1,s1,a1,r2..}中寻找最优策略即可。

(2)离轨Q-learning不用探索,是因为经验数据在算法开始迭代之前就已经收集完毕了。所以离轨Q-learning是greedy的提升策略。而在轨Q-learning是迭代一轮,就需要用迭代后的策略来继续打一步经验片段experience,所以离轨Q-learning是ε-greedy的提升策略的!!!

(3)也所以在轨Q-learning是无法收敛到最优策略的,但是离轨Q-learning是可以收敛到最优策略的。

4、不同的Πb对离轨Q-learning效果的影响
你可以把Πb看作是对游戏数据的采集情况。当数据采集得比较合理,也就是所有的状态动作对儿都无限多的采集过,算法就会根据这些数据迭代出较好的策略。但是如果数据采集得不合理,算法最后迭代出的策略也是不尽人意的:

这个案例的任务是找到所有格子的最优策略。不是只找到最优路径即可。上图右边是最优策略和其对应的状态价值。

这是每个格子中的5个动作都按0.2的概率随机采集100万步的数据。对于这样的数据就是比较合理的数据,离轨Q-learning的效果也非常好。

左图是按0.5的概率往右探索100万步的经验数据,由于有的格子都没探索到,所以效果很差。
右上图是按0.9的概率往右探索100万步的经验数据,由于大部分左边格子都没探索到,所以效果更差。
右下图是按0.9的概率往左探索100万步的经验数据,由于大部分右边格子都没探索到,所以效果也差。

小结:经验数据对离轨Q-learning算法的效果影响非常大

5、Sarsa和离轨Q-learning的效果对比

(1)上左图是一个小游戏。假如agent从S格开始上下左右4个方向随机走,走到G格子就赢了游戏。每次只能走1格。每走1步系统奖励-1分。如果碰到左、右、上面的墙壁,就还在原格子并且系统给予-1分的惩罚。如果碰到下面的cliff(悬崖),系统给与-100分惩罚,结束游戏。其实对于Sarsa和离轨Q-learning算法来说,结束不结束无所谓,你可以看作是重新从S格子出发就行。

(2)上图中的红色线路是Q-learning算法最后收敛到的最优策略对应的线路,我们叫optimal path,也叫走近路。
上图中的黄色线路是Sarsa算法最后收敛到的策略对应的线路,我们叫safe path,也叫走安全的远路。因为越接近悬崖,只要一次走错,就摔入悬崖,game over了。
(3)上中图是Sarsa和Q-learning两个算法对应的收益,也就是系统奖励。可见,使用Sarsa算法玩这个游戏获得的奖励要稳定得高于Q-learning。

(4)为什么Sarsa走远路,Q-learning走近路?Sarsa奖励多,Q-learning奖励少?
因为Sarsa在每走一步之前,都要以ε的概率进行探索的。假如它目前在紧挨着悬崖的那一排格子中,一旦它真的开始探索,也就有极大的概率摔下悬崖而获取-100的奖励。假如它真的摔下悬崖得-100,那此时它计算出的悬崖边上的格子的价值就会非常低。我们策略提升的时候,都是贪婪化的寻找价值最高的格子走,因为价值高的格子意味着系统奖励多嘛,所以Sarsa的策略就提升为往高处走。所以Sarsa的策略收敛后,它走的就是最高的线路,也就是上图的safe path,也所以Sarsa获得系统奖励要多一些。

反观Q-learning,Q-learning学习的数据一般都是"有重复探索的数据","有重复探索的数据"指策略Πb更加趋近随机策略,也就是小白打出来的数据序列,当作离轨Q-learning的学习数据。所以只是greedy的探索最优路径而不会管奖励的高低。也所以当Q-learning策略收敛后,远离悬崖的格子的价值其实和靠近悬崖的格子的价值相差无几,所以它就收敛到最短的路径上。

七、总结

本篇完。传统强化学习到此结束。后面开启深度强化学习。