强化学习 课件全套 余欣航 第1-8章 强化学习概述- 基于模型的强化学习基础_第1页
强化学习 课件全套 余欣航 第1-8章 强化学习概述- 基于模型的强化学习基础_第2页
强化学习 课件全套 余欣航 第1-8章 强化学习概述- 基于模型的强化学习基础_第3页
强化学习 课件全套 余欣航 第1-8章 强化学习概述- 基于模型的强化学习基础_第4页
强化学习 课件全套 余欣航 第1-8章 强化学习概述- 基于模型的强化学习基础_第5页
已阅读5页,还剩390页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章强化学习概述目录马尔可夫决策过程(MDP)MDP的分类强化学习强化学习的应用有监督学习(supervised

learning)数据集中的样本带有标签,有明确目标回归和分类无监督学习(unsupervised

learning)数据集中的样本没有标签聚类、降维、概率密度估计、生成模型构建强化学习(reinforcementlearning)序列决策的过程,通过过程模拟和观察来不断学习,提高决策能力例如:AlphaGo机器学习的分类强化学习的元素

智能体环境时间序列

马尔可夫过程

马尔可夫过程

若用马尔可夫过程来描述一个人上学的经历:如果一个人就读于重点中学,那么他考上重点大学的概率也比较大如果拥有重点大学的学历,那么找到一份好工作的概率也比较大马尔可夫过程马尔可夫决策过程在读于普通中学的前提下:如果很努力学习,则考取重点大学的概率就会相对变高如果沉迷于打游戏、不花心思到学习上,那么考取重点大学的概率就会变得很低站在自身的角度来看待求学的经历,考取重点大学的概率并不只是“客观的规律”决定的,也有“主观能动性”的成分马尔可夫决策过程马尔可夫决策过程(MarkovDecisionProcess,MDP)还需要定义动作与奖励若将奖励定义为求学经历中获得的“幸福感”:在中学采取“努力学习”的动作,可能因为玩的时间更少,而只有较低的“幸福感”,但这帮助我们考上了更好的大学,这个更好的状态有助于未来获得更多的“幸福感”要在“先苦后甜”与“及时行乐”中进行取舍,选择正确的动作方式,以获得最幸福的人生状态动作下一个状态MDP的定义

目标:最大化效用

终止状态

马尔可夫过程与MDP的对比马尔可夫过程客观规律宏观性质例如遍历定理(研究的是某个微粒在无穷长的时间内是否“肯定”会经历某个状态,或无穷次经历某个状态)、强遍历定理(不同状态之间的概率分布是否“肯定”会收敛于一个稳定的分布)MDP具体的问题主观操作求解如何对一个具体的问题采取措施,使得获得的效果最好工程中很多实际问题适合被定义为MDP而非马尔可夫过程MDP的分类MDP的分类方式根据状态与动作是否连续进行分类根据环境是否已知进行分类根据环境的随机性或确定性进行分类根据环境的时齐性进行分类根据时间的连续性进行分类根据MDP是否退化进行分类动作连续与离散的MDP动作是连续变量,则策略的求解类似于机器学习训练回归模型的过程动作是离散变量,则策略的求解类似于机器学习训练分类模型的过程Refer:https://jacklee.work状态与动作离散的MDP

状态是连续或是离散也很重要,决定了模型的形式:象棋的动作与状态数量有限,且离散(不存在中间状态)状态:棋盘的局势,各棋子的位置动作:下一步落子的方式奖励:吃掉对方棋子的价值,如兵1分、马4分等只将胜利设为得到奖励,中间吃子不算目标:寻找最佳走棋策略,以获得最大效用

状态连续、动作离散的MDP例如“黄金矿工”游戏中:状态连续:黄金、石头、钻石、炸药桶的位置动作离散:放炸弹、下钩、等待状态与动作连续的MDP

自动驾驶可以定义为一个状态和动作都是连续的问题:状态连续:传感器捕捉到的当前路况图像动作连续:操作方向盘、踩油门、刹车等动作,方向盘转动的角度与加速度都是连续的环境已知的MDP(model-base)

环境已知的MDP:最优控制

列夫·庞特里亚金理查德·贝尔曼完成最优控制理论的开创性工作环境未知的MDP(model-free)

确定性环境的MDP例如一个简单的MDP:对于一个MDP,当其S、A、P、R

都确定之后,应该有一个最佳策略,是一个“状态→动作”形式的映射,它到底是一个什么样的映射呢?状态:圆所处的位置动作:圆左移或者右移奖励:到达五角星获得的奖励确定性环境的MDP最佳策略很简单,即一直向右移动环境是“确定”的,即在给定状态采取给定动作,下一步的状态与奖励是完全确定的此时MDP的最佳策略对应的动作是常量!(不用根据状态确定)状态:圆所处的位置动作:圆左移或者右移奖励:到达五角星获得的奖励随机性环境的MDP

MDP的时齐性

MDP的时齐性

时齐与否在于对“时间”性质的定义:时齐MDP中的“时间”是一种“相对的”度量标尺,例如“一年”、“一个回合”非时齐MDP中的“时间”是“绝对的”历史度量,例如“公元2018年”或者“第100个回合”非时齐性环境:房价的“水涨船高”

时齐性对策略的影响

时齐性对策略的影响当环境为确定、时齐时,则策略为“动作=常量”当环境为随机、时齐时,则策略为“状态→动作”形式当环境为确定、非时齐时,则策略为“时间→动作”形式当环境为随机、非时齐时,则策略为“时间、策略→动作”形式状态:圆所处的位置动作:圆左移或者右移奖励:到达五角星获得的奖励效用与终止状态对于时齐性的影响

时齐MDP的分类

时间的连续性

连续时间的MDP

退化的MDP

多臂老虎机问题(Multi-ArmedBandit)

多臂老虎机问题是退化的MDP

上下文老虎机(ContextualBandit)

多臂老虎机上下文老虎机一般强化学习问题策略的形式当环境为确定、时齐时,则策略为“动作=常量”当环境为随机、时齐时,则策略为“状态→动作”形式当环境为确定、非时齐时,则策略为“时间→动作”形式当环境为随机、非时齐时,则策略为“时间、策略→动作”形式模型的形式当动作是连续变量时,可以将策略定义为线性模型或神经网络模型等回归模型而当动作是分类变量时,则可以将策略定义为神经网络、表格或其它分类模型状态、动作(非时齐情况下还是时间)决定了模型的输入输出思考

强化学习强化学习解决的问题对于生产、生活、办公等领域的实际问题,例如游戏AI或机器人控制,一般会被转化为一个环境未知非退化MDP求解环境未知非退化MDP非常困难:需要拥有环境,并与环境交互产生大量的数据利用这些数据去寻找一个能够最大化效用的策略强化学习:拥有环境假定拥有环境,可以自主地选择与环境交互的方式,从环境中产生“需要的数据”例如MAB问题中可以自由选择操控杆的老虎机可以不断从环境中获取数据,以训练Agent使其取得更大的效用以象棋为例

模仿学习

模仿学习

改进的方法:与人类专家进行交互

DAgger

(DatasetAggregation)

模仿学习的局限模仿学习仅仅“拥有数据”,不能自由产生数据要在多步的MDP中找出一个比较好的策略,如果不能自由产生数据,是难以实现的强化学习则能够从环境中产生我们需要的数据,并针对性地学习Exploration-ExploitationDilemma如何产生数据的一个重要原则是Exploration-ExploitationDilemma,它的原则是要让产生的数据尽量接近当前认为的最佳策略,但同时又不能太过接近,而要保证分布足够宽、数据具有足够的多样性为了简单起见,会首先在退化的MDP(MAB问题)中讨论它,然后再扩展到非退化MDP的情况中从数据中学习最佳策略

强化学习的难点强化学习问题的难点(环境未知、非退化)环境未知的难点(MAB)非退化的难点(最优控制)强化学习:通向强人工智能的重要途径弱人工智能:不需要具有人类完整的认知能力,甚至是完全不具有人类所拥有的感官认知能力,只要设计得看起来像有智慧就可以了强人工智能:具备执行一般智能行为的能力,通常把人工智能和意识、感性、知识、自觉等人类的特征互相连接强化学习更接近现实中生命体的学习方式,更加“智能”有的研究者认为,“强化学习是通向强人工智能的重要路径”本体论在古典时代,哲学家们更加关注的是世界的本质毕达哥拉斯的“万物皆数”,德谟克利特的“原子论”,柏拉图的“理念论”都是对于世界的不同认识方式,都在追求能够“更加正确”地认识世界这些以寻求世界本质为目的的理论均被称作“本体论”本体论:有监督学习的思维方式有监督学习思维方式与“本体论”相同,目标是寻找客观的规律,“学习知识”或者“认识世界”学习方法:通过拟合现实中产生的数据,对误差进行优化误差小意味着“正确”,误差大意味“错误”,当达到了百分之百的正确率的时候,“预测误差”就降低为0,意味着已经“完全正确”而没有可以再提升的地方认识论在近代,哲学经历了重要的“从本体论向认识论”的转向其代表是康德对于“本体”与“现象”的划分,通俗的说就是“真实世界”和“我看到的世界”是两个不同的东西,在此基础上,康德认为“真实世界”是不重要的,“我看到的世界”才是值得关注的重点德国哲学家叔本华继承以及进一步发展了康德的理论,他将“我看到的世界”称之为“表象”,而将人的本能称作“意志”,并且认为“表象”是“意志”外化出来的简而言之,他认为人对于世界的认识是被人的目的所支配的,或者说,“我怎么认识世界”是受到“我的目标是什么”所支配的目的支配我们对于世界的认识如果把人的“目的”、“目标”或“追求”,也就是叔本华所说的“意志”定义为“最大化效用”,那么人应该是时刻在“追求最大化效用”的动机支配下的,所有的能力都是为了满足这个动机的手段“正确认识世界”其实也是一种能力,本质上也是“追求最大化效用”。在某些具体的场景中的应用,如果追求不同,认识到的世界也会不同认识论:强化学习的思维方式总的来说,强化学习的过程就像是在“最大化效用”的目标支配下去探索环境,选择环境中对自己有用的知识加以学习,这个过程更加强调人的“主观能动性”在认识世界、改造世界中起到的重要作用强化学习比起有监督学习或无监督学习更加接近一个生命体的学习过程、更加具有智能性、更加接近“强人工智能”强化学习的应用轨迹追踪强化学习在高维控制问题(诸如机器人等)中的应用已经是学术界和工业界共同的研究课题2017年,伯克利发布的强化学习方法可以让机器人17分钟就学会轨迹跟踪汽车制造机器人通过深度强化学习可以记住对象并获得知识,并训练自己快速而精确地完成这项工作特斯拉超级工厂的四大制造环节:冲压生产线、车身中心、烤漆中心和组装中心有超过150名机器人参与工作,整个工厂几乎都是机器人自动驾驶自动驾驶的人工智能包含了感知、决策和控制三个方面强化学习可以解决驾驶过程中的决策问题Wayve公司的自动驾驶汽车无需3D地图也无需规则,让汽车从零开始在二十分钟内学会如何自动驾驶提升ICU抢救效率血液化验指标可以提供抢救病人的关键信息,但过于频繁的化验有加重病情的危险,也会增加治疗的费用来自普林斯顿大学的一个研究团队设计了一个机器学习系统,可以在减少化验频率的同时优化关键治疗的开展时间强化学习算法在这个机器学习系统中发挥了关键性的作用Refer:

Pixabay改进恶性脑瘤放化疗2018年,来自MITMediaLab的研究人员开发出了一个新型人工智能模型,将强化学习应用到现有的给药方案上,反复调整胶质母细胞瘤患者化疗和放疗的药物剂量,在缩小肿瘤的同时找到尽可能最小的给药剂量和频率,最终发现最佳治疗方案,改善患者生活质量Refer:/cancer/article/6797图像修复图像修复是指恢复图像损失的部分并基于背景信息将它们重建的技术CVPR2018上商汤科技发表了一篇论文《CraftingaToolchainforImageRestorationbyDeepReinforcementLearning》,提出了基于深度强化学习的RL-Restore算法,解决具有复杂混合失真的图像复原问题Refer:/TextTranslation/1564强化推荐在静态场景之下,用户的行为特征在与系统的交互过程中保持稳定不变一类有代表性的工作是基于上下文多臂老虎机的推荐系统,它的发展为克服推荐场景中的冷启动问题提供了行之有效的解决方案AlphaGo2016年,谷歌的AlphaGo利用CNN模型战胜李世乭,首次在围棋项目中战胜人类顶尖棋手AlphaGo的完全自我博弈加强版AlphaZero——一个从零开始自学国际象棋、将棋和围棋的系统,它最终在这三个领域都打败了世界最顶尖的程序:4小时就打败了国际象棋的最强程序Stockfish!2小时就打败了日本将棋的最强程序Elmo!8小时就打败了与李世乭对战的AlphaGov18!AlphaStar2018年1月25日,谷歌旗下DeepMind开发的人工智能(AI)程序AlphaStar完成《星际争霸2》的首秀首选通过上百万份玩家天梯录像自我学习,然后进入互相训练赛模式进行学习2018年12月,AlphaStar先后击败了DeepMind公司里的最强玩家DaniYogatama以及职业玩家TLO和MaNa第二章Bandit问题

目录

Bandit问题多臂老虎机问题(Multi-ArmedBandit,MAB)

多臂老虎机问题是退化的MDP

多臂老虎机问题(Multi-ArmedBandit)

如何使累积奖励最大?满足伯努利分布:只取0(吐出硬币)或1(未吐出硬币)简单策略

摇臂编号10.720.530.240.150.8最佳操作是选择第5个摇臂期望奖励估计表简单策略的缺点

贪心策略(greedy)

摇臂编号10.720.530.240.150.8摇臂编号10.720.530.240.150.82期望奖励估计表进行第1次游戏选择5号摇臂进行操作,得到1枚硬币

期望奖励估计表贪心策略的缺点总是选择当前概率最大的摇臂进行操作,而真正中奖概率高的摇臂可能是那些当前估计概率低的摇臂!在有限游戏次数下,是坚持在当前中奖概率高的摇臂下操作(利用),还是尝试别的摇臂(探索)呢?如何在探索和利用之间进行平衡,称为探索利用困境(exploration-exploitationdilemma)探索与利用平衡生活中的探索与利用去经常光顾的咖啡馆喝咖啡(利用)尝试去其它咖啡馆,或许会喝到更喜欢的咖啡(探索)在MAB问题基础上增加状态的ContextualBandit问题经常被用于广告推荐Agent不断选择商品推送给顾客,并通过反馈判断其喜欢什么商品只有通过不断试验,才能逐步了解顾客,推送准确的商品但这个过程中,如果推送了顾客不喜欢的产品,必然会造成经济损失Refer:/news/201704/c9wvaAoGb39f8OBt.html生活中的探索与利用临床试验利用:试验期间尽可能有效地治疗患者探索:通过研究确定最佳治疗方法在线广告利用:坚持至今效果最好的广告探索:目标是使用点击率收集有关广告效果的信息生活中的探索与利用探索利用困境强化学习中,经常会考虑另外一种设定,即先将Agent在特定的环境上训练好,然后再考察它的效果例如要训练一个玩游戏的Agent,可以先用它在电脑上训练很多轮,然后再看它能达到何种性能唯一目标是在训练完毕之后它能拿出足够好的表现而其在训练中的表现是完全不重要的!这样的话,还需不需要exploitation?有监督学习与强化学习的区别有监督学习中,训练与测试必须严格分开,而评价算法的标准必须是测试误差而非训练误差强化学习中,直接针对未知环境学习最佳策略,训练与测试都是在同一个环境进行,训练误差与测试误差不必严格分开需要结合现实中的具体情况,去定义问题是“边训练边测试”还是“先训练后测试”算法的成本任何的算法都要考虑成本在“先训练后测试”的情形下,所考虑的成本主要是用到了多少数据例如在训练玩游戏的Agent时,训练的成本是它训练的轮数,而不是训练时它的表现在“边训练边测试”的情形下,所考虑的成本不只是数据的成本,也和数据的内容有关例如在多臂老虎机问题中,训练的主要成本是损失的金币玩多臂老虎机的时候,究竟是否需要考虑赢输金币的多少?关键要确定目标!重新定义MAB问题

重新定义MAB问题在前50次模拟中,得出如下估计结果:接下来还应该认为各个摇臂都有相同可能是最佳摇臂吗应该认为第1、2、5号摇臂更有可能是最佳摇臂摇臂编号实验次数10.71020.51030.21040.11050.810将接下来50次试验的机会平均分配给第1、2、5号摇臂,得到如下结果:上述结果可以认为,第1和第5两个摇臂更可能是最佳摇臂重新定义MAB问题摇臂编号实验次数10.762720.582630.21040.11050.7827重新定义MAB问题将最后50次试验机会平均分配给第1和第5号摇臂,得到如下结果:根据右表的结果可以认为,

第5号摇臂更可能是最佳摇臂!摇臂编号实验次数10.755220.582630.21040.11050.7952

利用的意义

反映了exploitation的基本思想利用的意义

探索与利用

探索和利用

探索率的选择如果将其设计得太高(即更倾向于“探索”)会导致较少选择“看起来是最好”的摇臂如果将其设计得太低(即更倾向于“利用”)则会导致不能充分探索环境以及时发现“最好”的摇臂应该如何选择探索率呢?

初步探索次数的选择

ε递减策略(ε-greedywithεdecayed)

Boltzmann策略

在“先训练再测试”的设定下,ε-greedy并不是一个高效的算法假设先对每个摇臂各试验10次(即一共试验了50次),得到:第1号摇臂比起第3号摇臂更有可能是最佳摇臂但是在ε-greedy算法中,并没有体现出第1与第3号摇臂的不同—只要它们不是“当前认为最佳”的摇臂,在它们上面分配的次数就是一样多的摇臂编号实验次数10.71020.51030.21040.11050.810回顾上节给出的算法结果:最后不仅需要选择一个最好的摇臂,还要尽力比较所有候选的摇臂不应该根据摇臂能够带来多大的收益来对每一个摇臂分配实验次数,而应该根据它“有多大可能是最佳的摇臂”摇臂编号实验次数10.755220.582630.21040.11050.7952

Boltzmann策略

Boltzmann策略

Boltzmann策略上置信界策略(UCB)UCB策略(UpperConfidenceBound)

UCB策略

UCB策略的理解

UCB策略的理解

总结

实践案例:多臂老虎机问题策略实现案例简介利用Python实现多臂老虎机问题的4种策略:随机选择、ε-greedy、Boltzmann和UCB摇臂的个数为5,真实的奖励概率分别为0.2、0.4、0.7、0.5、0.2进行1000次游戏,记录下每种策略的累积奖励、各个摇臂的期望奖励估计和操作次数,进行比较和分析,在保证累积奖励的情况下,选择稳定性最好策略第三章最优控制

目录价值的定义动态规划算法LQR控制案例:利用策略迭代和值迭代求解迷宫寻宝问题价值的定义最优控制问题

AgentEnvironment三连棋游戏井字形棋盘一方在棋盘上画○,一方在棋盘上画×,交替进行某一时刻,棋盘上同一直线出现三个○或三个×,即为获胜棋盘被填满还未分出胜负,则记为平局游戏规则由人类玩家和电脑进行对战:人类玩家画○,电脑画×,每次游戏都从人类玩家开始当棋盘某一直线上有两个○,且剩下位置是空的,电脑会在这个位置画×,阻止人类获胜如果人类玩家不能在一步之内取胜,电脑会等概率随机选择一个空位置画×定义MDP

求解最优策略:第一步走中间

求解最优策略:第一步走中间

求解最优策略:第一步走中间

平局胜利胜利平局平局平局

v

求解最优策略:第一步走中间

求解最优策略:第一步走角落

求解最优策略:第一步走角落

求解最优策略:第一步走角落○×○×○○×○○×○○×○

求解最优策略:第一步走角落

求解最优策略:第一步走角落

三连棋游戏最优策略

“价值”的思想

中间状态的“价值”中间状态的“价值”初始状态也属于中间状态“中间状态”

“中间状态”

状态-价值-最佳动作表状态价值最佳动作0.9160.66610.33走角落走对角走中间(必胜)走对角策略下状态的价值

状态的价值

价值的计算

动态规划的思想将大的问题拆分成若干个比较小的问题,分别求解这些小问题,再用这些小问题的结果来解决大问题这种拆分是在时间维度上的,称为时间差分(Temporal

Difference,TD),即利用下一时刻状态的价值计算当前时刻状态的价值,直到计算出所有状态的价值动态规划算法

通过策略求解状态价值策略评估

策略评估

雅克比迭代法

策略提升

策略迭代法

值迭代法

策略迭代与值迭代

误差很大的价值误差一般的价值误差很小的价值殊途同归策略迭代值迭代

Bellman方程

Bellman方程

LQR控制连续状态动作的MDP

基本的LQR问题

基本的LQR问题

问题的解(T=1)

问题的解

LQR控制器

LQR控制器

LQR控制器

LQR控制器

LQR控制器

LQR控制器

LQR控制器

向前迭代向前迭代向前迭代向前迭代LQR控制器

总结最优控制可以解决环境完全已知的MDP问题状态-动作离散且环境已知的MDP问题:策略迭代:通过不断进行策略评估和策略改进,直至策略收敛,从而得到最佳策略,由于迭代速度快,适合状态空间较小的情况值迭代:通过迭代计算最佳状态价值,从最佳状态价值中提取出最佳策略,由于计算量少,适合状态空间较大的情况状态-动作连续且环境已知的MDP问题:LQR:解决状态转移关系为线性且有时间限制的MDP问题iLQR:解决状态转移关系为非线性且有时间限制的MDP问题案例:利用策略迭代和值迭代求解迷宫寻宝问题案例介绍迷宫寻宝问题:在一个5×5的棋盘中,超级玛丽位于棋盘左上角的方格内,可以向上、下、左、右四个方向移动,每回合移动一次记为1步宝藏位于棋盘最下层中间的方格内,超级玛丽找到宝藏则游戏结束目标是让超级玛丽以最少的步数找到宝藏利用策略迭代和值迭代求解迷宫寻宝问题的最佳策略第四章基于价值的强化学习

目录状态-动作价值函数SarsaQ-learningDQN状态-动作价值函数环境已知的MDP问题

环境未知的MDP问题

与环境交互

如何学习

时间差分学习(Temporal-Differencelearning)

状态-动作价值函数的引入

状态-动作价值函数

SarsaSarsa

估计作为目标值预测值Q表(Q-table)

…-2102-1101-1……Q表Sarsa算法流程

Sarsa举例

Step1:初始化Q表上下左右开始0000一个香蕉0000空区域0000两个香蕉0000炸弹区域0000三个香蕉0000

Q表

上下左右开始0000.1一个香蕉0000空区域0000两个香蕉0000炸弹区域0000三个香蕉0000Q表Step5:利用Q表求出最佳策略上下左右开始-11.5-12一个香蕉-1-301空区域-130-1两个香蕉0-1-1-3炸弹区域0000三个香蕉0000Q表中状态𝑠所在行的最大值所对应的动作𝑎即为当前状态下的最佳策略Q表n-stepSarsa

Q-learningQ-learning

目标值预测值Q-learning算法流程

Q-learning举例

Step1:初始化Q表上下左右开始0000一个香蕉0000空区域0000两个香蕉0000炸弹区域0000三个香蕉0000

Q表Step2:状态𝒔下选择动作𝒂

上下左右开始0000.1一个香蕉0000空区域0000两个香蕉0000炸弹区域0000三个香蕉0000Q表Step4:利用Q表求出最佳策略上下左右开始-11.5-12一个香蕉-1-301空区域-130-1两个香蕉0-1-1-3炸弹区域0000三个香蕉0000

Q表Q-learning与SarsaSarsa和Q-learning是两种常用的无模型强化学习算法两种算法均基于Q表,适合状态和动作离散的问题Sarsa中从环境产生数据的策略和更新Q值的策略相同(on-policy);Q-learning中从环境产生数据的策略和更新Q值策略不同(off-policy)Q-learning通常收敛更快,实际中更常用悬崖寻路问题目标是从起点移动到终点可以采取上、下、左、右四种动作进行移动到达除悬崖以外的方格奖励为-1到达悬崖奖励为-100并返回起点离开方格的动作会保持当前状态不动并奖励-1悬崖寻路问题:Q-learning和Sarsa的表现Q-leaning:沿着最短路径进行Q值的学习,容易进入悬崖,导致每次迭代的累积奖励较少迭代速度较快Sarsa:沿着较长但安全的路径进行Q值的学习,每次迭代的累积奖励较多迭代速度较慢Q-learningSarsaDQNQ表的局限性在Q-learning和Sarsa中,状态和动作离散,使用Q表来保存Q值当状态或动作数量很大或者为连续值时,使用Q表不再有效吃豆人马里奥兄弟

值函数近似

Q表值函数近似

Q-tableDeepQNetwork一种结合了深度学习和Q-learning的强化学习算法适合状态数量很大,动作数量较少的问题,例如Atari游戏使用深度神经网络近似Q值MnihV,KavukcuogluK,SilverD,etal.Playingatariwithdeepreinforcementlearning[J].arXivpreprintarXiv:1312.5602,2013.DeepQNetwork

如何训练

DQN算法流程

DQN的改进使用神经网络近似Q值时,强化学习过程并不稳定甚至会发散,主要原因有:数据存在一定相关性数据非平稳分布目标Q值和预测Q值存在参数联系针对上述问题,后续学者对DQN做出了一些改进:经验回放(experiencereplay):应对数据相关性和非平稳分布问题目标网络(targetnetwork):引入新网络计算目标Q值,减轻与预测Q值的参数联系MnihV,KavukcuogluK,SilverD,etal.Human-levelcontrolthroughdeepreinforcementlearning[J].Nature,2015,518(7540):529.经验回放样本缓存区(replaybuffer):与环境交互时,将产生的数据存储在缓存区中均匀地随机采样一批数据提供给神经网络进行训练若缓存区数据已满,用新数据覆盖最旧的数据带经验回放的DQN算法流程

目标网络目标Q值和预测Q值之间存在参数联系,每次更新的目标都是固定上次更新的参数得来的,优化目标跟着优化过程一直在变,迭代难以收敛:引入一个与原始网络结构一样的模型,称为目标网络(targetnetwork),原模型称为表现网络(behaviornetwork),目标网络计算Q-learning中的目标Q值,每当完成一定轮数迭代,表现网络的参数同步给目标网络targetnetworkbehaviornetworkUpdatetargetQpredictQMSE预测Q值(predictQ):目标Q值(targetQ):

带经验回放和目标网络的DQN算法流程

DQN的表现右图展示的是DQN在50多种Atari游戏上的表现图中可以看到:DQN几乎在所有游戏的表现上都高于历史最好的强化学习方法对于半数以上的游戏,DQN的表现已经超越了人类状态与动作连续的MDPDQN能处理离散动作空间的MDP问题,但不能处理连续动作空间的MDP问题例如自动驾驶问题:状态连续:传感器捕捉到的当前路况图像动作连续:操作方向盘、踩油门、刹车等动作,方向盘转动的角度与加速度都是连续的NAF

GuS,LillicrapT,SutskeverI,etal.Continuousdeepq-learningwithmodel-basedacceleration[C]//InternationalConferenceonMachineLearning.2016:2829-2838.总结介绍了几种无模型(model

free)基于价值函数的强化学习算法状态和动作离散:Sarsa和Q-learning状态连续,动作离散:DQN状态和动作连续:NAF

第五章

强化学习的实验环境与工具

目录实验环境Gym实验工具TensorFlow实验环境GymGym简介Gym(/)是OpenAI推出的强化学习实验环境库:提供了强化学习中与智能体(agent)交互的环境(environment)用于构建、评估和比较强化学习算法的工具库兼容TensorFlow、Theano、Keras等框架下编写的程序除了依赖的少量商业库外,整个项目是开源免费的Gym简介Gym库内置了上百种强化学习的实验环境:经典控制环境简单文本环境算法环境二维方块(Box2D)环境Atari游戏环境机械控制环境……Gym的安装Gym支持Windows系统、Linux系统和macOS系统在Anaconda3环境里安装Gym库(要求Python版本为3.5+)安装Gym库(安装版本为0.15.3):pipinstallgym==0.15.3……Gym中的环境查看Gym库里包含的环境fromgymimportenvsenv_spaces=envs.registry.all()env_ids=

[env_space.idforenv_spaceinenv_spaces]print(env_ids)Gym库里的环境每一个环境都有一个形如“xxxxx_vd”的ID,如“CartPole-v0”、“LunarLander-v2”等,ID中包含名称和版本号悬崖寻路问题(CliffWalking)目标是从起点移动到终点可以采取上、下、左、右四种动作进行移动到达除悬崖以外的方格奖励为-1到达悬崖奖励为-100并返回起点离开方格的动作会保持当前状态不动并奖励-1加载环境importgym#加载CliffWalking-v0环境env=gym.make('CliffWalking-v0’)#以图形化的方式显示当前的环境状态env.render()使用make()函数加载gym库中的”悬崖寻路”环境如果需要加载其它环境,只需将make函数中的参数换成其它环境的ID即可加载环境”悬崖寻路“问题的环境描述起点

终点

悬崖

奖励描述

状态空间和动作空间每个环境都定义了自己的状态空间和动作空间加载环境之后使用环境的observation_space属性查看状态空间,使用环境的action_space属性查看动作空间#查看环境的观测空间print(‘状态空间:',env.observation_space)#查看环境的动作空间print('动作空间:',env.action_space)输出观测空间和动作空间观测空间和动作空间即可以是离散空间(取值是有限个离散的值)也可以是连续空间(取值是连续的)离散空间一般用Discrete()表示,连续空间一般用Box()表示例如“CliffWalking-v0“环境的观测空间是Discrete(48),表示该环境有48个状态,动作空间是Discrete(4),表示该环境有4个动作智能体有48个状态,在每个状态,智能体有上下左右四个动作可以选择环境对象的step()函数环境对象的step()函数接收智能体的动作并返回以下四个参数:observations:代表对特定环境的观测值reward:执行当前行动所获得的奖励值done:布尔型变量,表示该回合是否完成了任务info:其它信息,例如状态间的转移概率每个时间步,智能体都会选择一个动作,然后返回结果和奖励值环境对象的step()函数fortinrange(10):

#在动作空间中随机选择一个动作action=env.action_space.sample()

#执行一个动作observation,reward,done,info=env.step(action)

print("action:{},observation:{},reward:{},done:{},info:{}".format(action,observation,reward,done,info))Gym中常用函数使用make()函数加载环境对象使用reset()函数重置环境对象使用render()函数以图形化的方式显示当前的环境状态使用action_space.sample()函数从环境的动作空间随机选择一个动作使用step()函数使智能体执行一个动作使用close()函数关闭环境Sarsa算法流程回顾

使用Sarsa寻找最佳策略设置算法参数以及初始化Q表importnumpyasnp##学习率设置alpha=

0.8##折扣因子设置gamma=

0.95##迭代轮数num_episodes=

600##创建一个48行4列的空的Q表q_table=np.zeros([env.observation_space.n,env.action_space.n])使用Sarsa寻找最佳策略

def

epsilon_greedy(state,epsilon):

##探索

ifnp.random.uniform(0,

1)

<epsilon:

returnenv.action_space.sample()

##利用

else:

returnnp.argmax(q_table[state,:])使用Sarsa寻找最佳策略

使用Sarsa寻找最佳策略

##进行循环

while

True:

##在状态下执行动作,返回奖励和下一状态next_state,reward,done,_=env.step(action)

##根据𝜀-greedy选择下一动作next_action=epsilon_greedy(next_state,

0.1)

##更新Q值q_table[state,action]

+=alpha*

(reward+gamma*q_table[next_state,next_action]

-q_table[state,action])

##更新当前状态和行为state=next_stateaction=next_action

##若达到终止状态,结束循环

ifdone:

break使用Sarsa寻找最佳策略迭代完成后,根据Q表找出最佳策略best_route_value=

[]##初始化状态next_state=env.reset()

best_route_value.append(next_state)while

True:

action=np.argmax(q_table[next_state,

:])next_state,_,done,_=env.step(action)

best_route_value.append(next_state)

ifdone:

breakbest_route_value[36,24,12,0,1,2,3,4,5,6,7,8,9,10,11,23,35,47]Q-learning算法流程回顾

使用Q-learning寻找最佳策略设置算法参数以及初始化Q表importnumpyasnp##学习率设置alpha=

0.8##折扣因子设置gamma=

0.95##迭代轮数num_episodes=

600##创建一个48行4列的空的Q表q_table_learning=np.zeros([env.observation_space.n,env.action_space.n])使用Q-learning寻找最佳策略

def

epsilon_greedy(state,epsilon):

##探索

ifnp.random.uniform(0,

1)

<epsilon:

returnenv.action_space.sample()

##利用

else:

returnnp.argmax(q_table_learning[state,:])使用Q-learning寻找最佳策略进行迭代,首先初始化状态##进行迭代foriinrange(num_episodes):

##初始化状态state=env.reset()

使用Q-learning寻找最佳策略

##进行循环

while

True:

##根据𝜀-greedy选择动作action=epsilon_greedy(state,

0.5)

##在状态下执行动作,返回奖励和下一状态next_state,reward,done,_=env.step(action)

##更新Q值q_table_learning[state,action]

+=alpha*

(reward+gamma*max(q_table_learning[next_state])

-q_table_learning[state,action])

##更新当前状态state=next_state

##若达到终止状态,结束循环

ifdone:

break使用Q-learning寻找最佳策略迭代完成后,根据Q表找出最佳策略best_route_value_learning=

[]##初始化状态next_state=env.reset()

best_route_value_learning.append(next_state)while

True:

action=np.argmax(q_table_learning[next_state,

:])next_state,_,done,_=env.step(action)

best_route_value_learning.append(next_state)

ifdone:

breakbest_route_value_learning[36,24,25,26,27,28,29,30,31,32,33,34,35,47]##初始化环境s=env.reset()d=

Falsewhiled!=

True:

##每次选择最优动作a=np.argmax(Q[s,:])s1,r,d,_=env.step(a)s=s1

##展示每一步的游戏进程env.render()…………使用Q-learning寻找最佳策略展示每一步的游戏进程Sarsa会选择较为安全的路径;Q-learning会选择步数最少的最优路径整体来看,Sarsa每轮迭代的累积奖励略高于Q-learning,但算法稳定性不如Q-learningSarsa和Q-learning的对比SarsaQ-learning实验工具TensorFlowTensorFlow简介TensorFlow是一个运用数据流图进行数值计算的开源软件库:灵活的架构可以在多种平台上展开计算用于构建强化学习算法中机器学习或深度学习模型的构建、训练和调试官方网站:/中文社区:/张量(Tensor)张量是一个数据容器0维张量:标量1维张量:向量2维张量:矩阵3维张量:彩色图像……数据流图数据流图又称为计算图,是TensorFlow的基本计算框架,用于定义深度学习的网络结构TensorFlow中的基本数据流图为静态图,即一旦创建不支持动态修改TensorFlow中亦引入了动态图机制(Eager)数据流图图中包含一些操作(Operation)对象,称为计算节点Tensor对象则是表示在不同的操作间的数据节点在定义图的时候定义不同的名称域并在其中定义变量和Operation,方便后续查找常量、变量常量:数值不能改变的Tensor,一旦被赋值,就不能改变使用tf.constant()函数创建TensorFlow常量

#创建一个常量x x=tf.constant(10)变量:数值可变的Tensor,用于计算图中其它操作的输入使用tf.Variable()函数创建TensorFlow变量#定义一个服从正态分布的变量赋给w,并将其命名为weightw=tf.Variable(tf.random_normal([3,2],stddev=

0.1),name=‘weight’)变量范围在复杂的神经网络结构中,层与层之间的连接、节点与节点之间的连接会存在许多的变量或操作,会导致变量出现混乱不清使用_scope()或tf.variable_scope()设置变量范围,可以降低复杂性,通过将相关层的变量或操作集中在一个范围内有助于更好的理解模型importtensorflowastf#重置计算图tf.reset_default_graph()withtf.name_scope("layer1"):a=tf.constant(1,name=

'a')

print(a.name)

withtf.name_scope("layer1-1"):b=tf.constant(2,name=

'b')

print(b.name)输出变量范围使用tf.variable_scope()设置变量范围importtensorflowastf#重置计算图tf.reset_default_graph()withtf.variable_scope("layer1"):a=tf.Variable(1,name="a")

print(a.name)

withtf.variable_scope("layer1-1"):b=tf.Variable(2,name="b")

print(b.name)输出占位符占位符是只定义类型和维度但不赋值的Tensor使用tf.placeholder()函数创建TensorFlow占位符#创建一个维度为3x2,类型为float类型的占位符y=tf.placeholder(shape=[3,2],dtype="float")占位符有一个shape参数,用于指定数据的维度,如果shape设置为None,则在运行时可以输入任意维度的数据激活函数、损失函数

优化器不同的优化算法是TensorFlow计算图中解决优化问题的一个Operation,需要在会话中运行常用的优化器:tf.train.GradientDescentOptimizertf.train.MomentumOptimizertf.train.RMSPropOptimizertf.train.AdamOptimizertf.train.AdadeltaOptimizertf.train.AdagradOptimizer……会话执行数据流图中的操作需要使用TensorFlow会话使用tf.Session()函数创建一个会话importtensorflowastf#常见一个常量a和常量ba=tf.constant(3)b=tf.constant(5)#定义一个加法计算c=tf.add(a,b)#创建一个会话sess=tf.Session()#执行定义的操作sess.run(c)#关闭会话sess.close()构建计算图创建session利用传进的数据进行计算TensorBoardTensorBoard是TensorFlow的可视化工具,用于可视化计算图通过将TensorFlow程序输出的日志文件的信息可视化使得程序的理解、调试和优化更加简单高效使用的三个步骤:定义FileWriter对象将需要可视化的graph或数据添加到FileWriter对象中启动TensorBoard服务端程序,在前端查看训练过程状态官方文档:/tensorflow/tensorboardTensorBoardimporttensorflowastf#重置计算图tf.reset_default_graph()#定义常量a、b和加法操作a=tf.constant(3,name=

'a')b=tf.constant(5,name=

'b')c=tf.add(a,b,name=

'add1')#定义常量d、e和加法操作d=tf.constant(2,name=

'd')e=tf.constant(4,name=

'e')f=tf.add(d,e,name=

'add2')#定义乘法操作g=tf.multiply(c,f,name=

'mul')#创建会话withtf.Session()

assess:

#将构建的计算图写入到文件中writer=tf.summary.FileWriter("output",sess.graph)

print(sess.run(g))writer.close()在终端中找到工作目录,然后启动TensorBoard可视化的计算图importtensorflowastf#重置计算图tf.reset_default_graph()withtf.name_scope("part1"):

#定义常量a、b和加法操作a=tf.constant(3,name=

'a')b=tf.constant(5,name=

'b')c=tf.add(a,b,name=

'add1')withtf.name_scope("part2"):

#定义常量d、e和加法操作d=tf.constant(2,name=

'd')e=tf.constant(4,name=

'e')f=tf.add(d,e,name=

'add2')withtf.name_scope("Result"):

#定义乘法操作g=tf.multiply(c,f,name=

'mul')#创建会话withtf.Session()

assess:

#将构建的计算图写入到文件中writer=tf.summary.FileWriter("output",sess.graph)

print(sess.run(g))writer.close()TensorBoard设置变量范围后的可视化计算图值函数近似算法流程回顾

使用值函数近似寻找最佳策略

使用值函数近似寻找最佳策略利用TensorFlow构建值函数模型——定义占位符##载入TensorFlow库importtensorflowastf#重设默认计算图tf.reset_default_graph()##设置输入层占位符,表示状态inputs=tf.placeholder(shape=[1,

48],dtype=tf.float32)##设置预测Q值的占位符,维度为1×4,表示4种不同动作对应的Q值outputs=tf.placeholder(shape=[1,

4],dtype=tf.float32)##设置目标Q值的占位符,维度为1×4target_q=tf.placeholder(shape=[1,

4],dtype=tf.float32)使用值函数近似寻找最佳策略利用TensorFlow构建值函数模型——构建值函数模型def

value_function_model(x):

##设置输出层权重和偏置

withtf.variable_scope('output',reuse=tf.AUTO_REUSE):w=tf.Variable(tf.truncated_normal([48,

4],

0,

0.1))

##前向传播

x=tf.matmul(x,w)

returnx##输出预测Q值predict_q=value_function_model(inputs)##根据Q值,选择最佳动作action_choose=tf.argmax(predict_q,

1)使用值函数近似寻找最佳策略利用TensorFlow构建值函数模型——定义损失函数和优化方法##设置损失函数为MSEloss=tf.reduce_sum(tf.square(target_q-predict_q))##优化方法为梯度下降trainer=tf.train.AdamOptimizer(learning_rate=0.1)updateModel=trainer.minimize(loss)使用值函数近似寻找最佳策略

def

epsilon_greedy(state,episode,num_episodes):

#设置探索率epsilon=np.linspace(0.1,

0,num_episodes,endpoint=False)

#探索,探索率随迭代次数的增加而减少

ifnp.random.uniform(0,

1)

<epsilon[episode]:

returnnp.array([env.action_space.sample()])

#利用

else:

returnsess.run(action_choose,feed_dict={inputs:

np.identity(48)[state:state+1]})使用值函数近似寻找最佳策略进行迭代,初始化变量和状态##创建会话withtf.Session()

assess:

##变量初始化sess.run(tf.global_variables_initializer())

##迭代200次

foriinrange(200):

##初始化环境s=env.reset()使用值函数近似寻找最佳策略训练模型,进行循环,若循环次数达到99或者到达终止状态,结束循环,返回进行下一次迭代j=

0whilej<

99:

j+=

1

##计算当前状态下的预测Q值predict=sess.run(predict_q,feed_dict={inputs:

np.identity(48)[s:s+1]})

##根据𝜀-greedy选择动作action=epsilon_greedy(s,i,

200)

##获取奖励和下一状态next_s,reward,done,_=env.step(action[0])

##计算下一状态的Q值next_q=sess.run(predict_q,feed_dict={inputs:

np.identity(48)[next_s:next_s+1]})

##初始化当前状态下的目标Q值target=predict

##计算当前状态下的目标Q值target[0,action[0]]

=reward+gamma*np.max(next_q)

##反向传播更新参数_,cost=sess.run([updateModel,loss],feed_dict={inputs:

np.identity(48)[s:s+1],target_q:target})

##更新状态s=next_s

##若达到终止状态,结束循环

ifdone:

break使用值函数近似寻找最佳策略根据训练好的值函数模型求出最佳策略

[36,24,25,26,27,28,29,30,31,32,33,34,35,47]

##进行验证s=env.reset()d=

False

whiled!=

True:

#使用模型预测下一步的动作a=sess.run(action_choose,feed_dict={inputs:np.identity(48)[s:s+1]})s1,r,d,_=env.step(a[0])

print(s1)s=s1第六章策略梯度法

目录策略梯度的思想REINFORCE算法(vanillapolicygradient)REINFORCE算法的改进案例:利用策略梯度算法求解小车上山问题策略梯度的思想强化学习算法分类

强化学习算法基于模型无模型蒙特卡罗方法—时间差分方法—基于价值on-policy—Sarsaoff-policy—Q-learningDQN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论