2026/4/18 8:22:36
网站建设
项目流程
用.net core 做网站,设计中国第一架飞机,哈尔滨市工程建设招投标网,杭州seo公司哪家好【强化学习】第六章#xff1a;无模型控制#xff1a;在轨MC控制、在轨时序差分学习(Sarsa)、离轨学习(Q-learning)
说明#xff1a;从强化学习知识框架上看#xff0c;本篇承接无模型评估篇#xff1a;https://blog.csdn.net/friday1203/article/details/156023792?spm…【强化学习】第六章无模型控制在轨MC控制、在轨时序差分学习(Sarsa)、离轨学习(Q-learning)说明从强化学习知识框架上看本篇承接无模型评估篇https://blog.csdn.net/friday1203/article/details/156023792?spm1001.2014.3001.5501但是从知识点上看本篇是承接前五章的所有重点和难点所以你前面知识点必须非常熟悉本篇才能顺水推舟的理解了。尽管本篇我已经尽力回溯之前的知识点但你还是得没有逻辑断点才能看懂本篇。一、梳理本章在强化学习中的位置1、从第四篇的策略迭代算法流程中我们知道强化学习的基本框架是要先进行评估评估完后再进行策略改进。所以第五篇我们讲了无模型评估(也叫预测)本篇开讲无模型控制(也就是策略改进、优化)。也所以本篇的在轨MC控制、在轨算法:Sarsa、离轨算法: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的扩展。二、在轨学习、离轨学习上面的在轨离轨概念是鲁鹏老师课件中的截图。鲁鹏老师的解释是在轨就是自己边打边学通过自己打游戏积攒经验提升自己的策略。离轨就是看别人打游戏然后通过别人的经验来提升自己的策略。其实我个人认为在轨就是在策略Π下打出一些序列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算法就是利用与探索。其实特别好理解不理解的同学参考老虎机问题 https://blog.csdn.net/friday1203/article/details/155787017?spm1001.2014.3001.55014上图4处是数学证明证明用ε-greedy算法获得的策略比单纯用贪婪算法获得的策略更优。5因为上图的策略迭代过程中的价值评估是用MC来做的所以上图用的数据是一条条完整的幕也就是数据是需要一条条完整的序列而不是序列片段。也就是说如果你的数据不完整那是没法用上述方法来做的。同时从数据的另外一个角度说上面的策略迭代是在轨学习不是离轨学习。也就是数据来自同一个Π的数据来自不同的Π是离轨蒙特卡洛控制而离轨MC控制是另外一种算法离轨MC目前只是理论上有意义实际中我们一般不用它而且还涉及到重要性采样等操作。2、GLIE的蒙特卡罗控制上面小标题1的策略迭代流程也叫蒙特卡洛控制。虽然蒙特卡洛控制在迭代过程中策略能收敛但是这个收敛的策略是否是最优的策略呢当系统的随机性非常大时这个收敛的策略就不一定是最优策略了。就是这个策略虽然是收敛的但不一定是最优的。那什么情况下才是收敛到最优策略呢如下左图所示要满足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小结GLIE的蒙特卡罗控制就是一是动作价值函数的计算使用MC学习方法。也就是计算(s,a)对儿的价值时用MC方法来计算。二是在用ε-greedy算法进行策略迭代时把ε设置成一个自适应的动态参数。类似梯度下降优化算法中的学习率的设置是一个道理。说着说如果ε设置的是一个固定值策略也是可以收敛的但是一般是不会收敛到最优策略。如果ε被设置的是一个逐渐变小的更新值策略是可以收敛到最优策略的。下面我们要学SarsaSarsa中的ε是不进行更新的。这里的ε是要更新的。这是最大的区别。三是蒙特卡洛学习分在轨和离轨两种这里讲的是在轨蒙特卡洛。离轨蒙特卡洛是另外一种版本只有理论意义实际中基本不用。四、在轨策略时序差分学习(On-Policy Temporal-Difference Learning)Sarsa1、Sarsa简介1要理解Sarsa你先要理解贝尔曼期望方程、贝尔曼最优方程--然后理解DP(DP是解决完备的MDP问题的)--从DP去理解TD(TD就是DP的思想来解决非完备MDP问题的也就是解决无模型强化学习问题的其底层和DP一样都是贝尔曼期望方程)--然后从TD的逻辑再来理解Sarsa你就会发现DP-TD-Sarsa它们是一脉相承的一族算法其最底层都是贝尔曼方程。2在轨策略时序差分学习和MC控制一样第一步都是求动作价值函数时序差分控制也是第一步求动作价值函数只不过求动作价值函数用的是TD学习方法而MC控制用的是MC学习方法。3MC控制适用于完整的回合制数据场景。如果数据不完整比如游戏没有终止状态的场景那就得用时序差分学习了。所以DP-TD-Sarsa都适用于没有终止情况的博弈。2、使用Sarsa更新动作价值函数1Sarsa方法其实就是TD方法上图绿线左边是第五章讲的TD绿线右边是本部分要讲的Sarsa。之所以叫Sarsa是因为和TD一样都是利用s,a,r,s,a,r....序列片段就可以计算了。所以sarsa就是序列片段的意思。2右边只不过是把计算价值函数(TD)变成计算动作价值函数(Sarsa)而已二者计算方法一模一样具体过程是a. 先初始化一组价值比如初始化Q(s,a)0。b. 当一个序列片段s1,a1,r1,s2,a2,r2,,,打完后通过这个序列片段写出新Q(s,a)的更新式。c. 利用Q(s,a)0更新Q(s,a)Q(s,a)-Q(s,a)d. 用Q(s,a)和Q(s,a)之间的差分更新动作价值值直到Q收敛。e. Q收敛后就开始策略提升。策略提升用ε-greedy算法即可。这个过程中最典型的特点就是自举。DP-TD-Sarsa的迭代过程都是自举的过程。3、Sarsa算法的伪代码1上面迭代过程中用的是ε-greedy这里的ε是一个固定超参是不变的。这是有别于MC控制的。2Sarsa是边打边算Q(s,a)、边ε-greedy地提升策略的。假如初始化Q(s0,a0)0agent打了一步游戏--产生一个(s1,a1),s,r序列片段--此时就用这个片段中的r更新了Q(s1,a1),同时策略Π也更新成P(aa1|s1)1-ε、P(a其他动作|s1)1-ε。然后根据新策略继续打下一步游戏打完下一步同理更新Q\Π--在更新了的Q\Π下继续打下下步如此循环直到策略收敛。3Sarsa最后得到的收敛的策略一般不是最优策略。因为Sarsa一般都是用于没有终止的游戏或者说用于比较复杂的游戏所以Sarsa除了利用得用一个固定的ε来探索。正是因为这个ε概率的探索导致Sarsa最后得到的收敛的策略一般不会是最优策略一般是一个局部的最优策略全局上看不一定是最优的。五、离轨学习(Off-Policy Learning)之 Sarsa(λ)前面的MC控制和Sarsa都是在轨学习。这里开讲离轨学习也是本篇的重点。本部分如果你看不懂先请深入理解一下老虎机问题中的利用和探索https://blog.csdn.net/friday1203/article/details/155787017?spm1001.2014.3001.55011、离轨学习其实本篇一开始就讲过在轨学习和离轨学习这对儿概念乍一看很多人都会很懵。现在我们已经有了更多的基础再来理解一遍这对儿概念。1在轨学习是在同一个策略Π下实际打出一系列s,a,r,序列然后从这些序列中学习和提升策略逐渐从小白变高手。2离轨学习是从别人打的序列s,a,r中学习和提升自己的策略。就是别人打的s,a,r序列是人家自己的策略下打的序列我们要从别人的经验中学习和提升自己从而变成高手这就是离轨学习。Q-learning是离轨学习的典型算法之一。3目标策略、行为策略离轨学习中的策略分目标策略和行为策略你可以把目标策略理解为agent贪婪化利用得到的策略。行为策略看成是探索得到的策略。既然目标策略是agent贪婪化利用得到的策略,那目标策略肯定是agent根据自己的策略、打出来的游戏序列、从中找到的最优策略也叫agent自己学习的经验。既然行为策略是探索得到的策略,那行为策略就可以是agent自己经验也可以是别人的经验。这么一转弯事情就升华了。那岂不是agent可以不用自己打游戏、总结经验从小白变高手;而是可以从别人打的游戏序列中学习经验从小白变高手对这就是离轨学习的强大之处比如我们要训练一个打游戏机器人不一定非得要亲自打很多次游戏得到游戏数据然后总结经验从小白变高手。而是我们可以直接拿来别人打的游戏数据把这个数据当作是我们自己的探索的数据从中学习策略从而也达到高手的效果。2、Sarsa(λ)原理Sarsa(λ)可以类比TD(λ)https://blog.csdn.net/friday1203/article/details/156023792?spm1001.2014.3001.5501Sarsa(λ)也叫Sarsa算法的λ版本。Sarsa(λ)和Sarsa算法的流程是一样的只是计算Gt时用的时TD(λ)方法其他都一样。所以这里就不展开讲了大家可以拼接拼接前面的相关知识点自己探索。这里只是为了知识框架的完整性点到为止。六、离轨学习(Off-Policy Learning)之 Q学习(Q-learning)1、Q-learning算法原理Q-learning是离轨学习的典型算法之一。当年谷歌的DQN算法的渊源就是Q-learning算法。DQN是Deep Q-Network是将Q-Learning和卷积神经网络(CNN)相结合的算法。DQN是当年玩Atari游戏超越人类而火出圈的那个算法也是离轨学习算法。下面我们详细看看Q-learning算法1A处Q学习指的是算法是如何计算价值的。一是Q-learning算法计算的是动作价值函数不是状态价值。就是说Q-learning算法也是用于无模型场景的不知道状态转移矩阵的场景所以Q-learning计算的也是(s,a)对儿。二是Q学习计算动作价值函数时也是通过迭代完成的上图A处是迭代过程。从A处可见Q学习是用差分迭代的。从这个角度看Q学习和TD、Sarsa的迭代方式是一样的。三是A处的红色部分也就是Gt的计算方法。从这部分看Q学习计算Gt和DP、TD、Sarsa的方式也是一样的。2B处、C处、D处、E处这是Q学习的离轨控制方法。离轨控制就是策略控制也叫策略迭代也叫策略提升也是小白变高手的过程。DP的策略控制仅仅需要贪婪化提升即可。TD控制其实就是Sarsa算法。 Sarsa算法是以1-ε的概率进行贪婪化利用以ε的概率进行探索。其中ε从始自终都是一个固定不变的、0-1之间的、一个超参数。 最重要的是Sarsa算法中的利用和探索都是在轨的就是都是自己打游戏从自己打的游戏序列中提取策略的。Sarsa是在轨控制Q-learning和Sarsa最大的区别就是Q-learning是离轨控制。上图B处是Q-learning的利用就是在策略Π下贪婪化的寻找最大的(s,a)对儿。上图的C处是Q-learning从别人打的序列中偷窥别人这么玩获得多少系统奖励。上图D处是Q-learning对比自己B处的奖励和别人C处的奖励如果自己最大的(s,a)对儿获得的奖励大于别人的(s,a)对儿获得的奖励那么就用自己的(s,a)对儿作为最优策略。如果自己最大的(s,a)对儿获得的奖励小于别人的(s,a)对儿获得的奖励那么就用别人的(s,a)对儿作为最优策略。所以如果说Sarsa是自己在不断的利用和探索从而变成高手的。那Q-learning就是把自己的利用和别人的探索通过贝尔曼最优方程整合到一起从而变成高手的。也所以上图D处其实就是贝尔曼最优方程的形式。也所以上图E处就是Q-learning的贝尔曼最优方程的迭代过程。3上图4处Sarsa是无法收敛到最优策略的但是Q-learning是可以收敛到最优策略的。这个结论后面还会继续展开说明。3、Q-learning算法伪代码如果上面的原理部分你还没看懂那继续参考下面的代码我再讲解一遍1左边是Sarsa算法的代码。右边是Q-learning算法的代码。2Sarsa是每打一步游戏在开打的这一步前就开始分“利用”和“探索”它是以1-ε的概率进行利用以ε的概率进行探索如果它实际上是利用那它就是对其以往的策略进行贪婪化提升然后计算提升后的策略下的动作状态价值然后以新的动作状态价值指导下一步动作。如果它实际上是探索那它就不按以往的策略而是主打选择相反的动作并且实际做出这个动作状态转移、获得系统奖励-然后计算前面动作的价值更新策略-新策略指导下一步动作。3Q-learning是每打一步游戏它就直接开始利用自己的以往经验也就是从以往策略中贪婪化的选出最优策略按照这个最优策略来执行动作a状态转移、获得系统奖励-然后再回看别人做了a动作后人家的新状态和系统奖励-然后对比自己的奖励和别人的奖励如果自己的奖励大于别人的奖励按照自己策略重新计算价值指导下一步动作。如果自己的奖励小于别人的奖励修改自己的策略重新计算价值指导下一步动作。4、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-learningQ-learning只根据自己的经验走假如Q-learning也是走到紧挨着悬崖的那一排格子中对于Q-learning来说上下左右都是一样的假如它上或左或右就是没有下这样上、左、右格子的奖励都是-1分此时Q-learning还得看看别人的动作假如它看到有人做了下的动作获得了-100分那Q-learning一对比自己的动作是-1分别人是-100分那就以后还是相信自己的动作好了。假如Q-learning自己向下了它获得了-100分那看到别人左右上都是-1分那它会直接用别人的策略用-1分来重新计算所有格子的价值来提升自己的策略。所以Q-learning策略收敛后远离悬崖的格子的价值其实和靠近悬崖的格子的价值相差无几所以它就收敛到最短的路径上。5、用代码实现一下上面的小游戏待续。。。七、总结¶本篇完。传统强化学习到此结束。后面开启深度强化学习。