强化学习(七)时序差分离线控制算法QLearning刘建平Pinard

Q-Learning这一篇对应Sutton书的第六章部分和UCL强化学习课程的第五讲部分。

Q-Learning算法是一种使用时序差分求解强化学习控制问题的方法,回顾下此时我们的控制问题可以表示为:给定强化学习的5个要素:状态集$S$,动作集$A$,即时奖励$R$,衰减因子$\gamma$,探索率$\epsilon$,求解最优的动作价值函数$q_{*}$和最优策略$\pi_{*}$。

这一类强化学习的问题求解不需要环境的状态转化模型,是不基于模型的强化学习问题求解方法。对于它的控制问题求解,和蒙特卡罗法类似,都是价值迭代,即通过价值函数的更新,来更新策略,通过策略来产生新的状态和即时奖励,进而更新价值函数。一直进行下去,直到价值函数和策略都收敛。

再回顾下时序差分法的控制问题,可以分为两类,一类是在线控制,即一直使用一个策略来更新价值函数和选择新的动作,比如我们上一篇讲到的SARSA,而另一类是离线控制,会使用两个控制策略,一个策略用于选择新的动作,另一个策略用于更新价值函数。这一类的经典算法就是Q-Learning。

对于Q-Learning,我们会使用$\epsilon-$贪婪法来选择新的动作,这部分和SARSA完全相同。但是对于价值函数的更新,Q-Learning使用的是贪婪法,而不是SARSA的$\epsilon-$贪婪法。这一点就是SARSA和Q-Learning本质的区别。

Q-Learning算法的拓补图入下图所示:

首先我们基于状态$S$,用$\epsilon-$贪婪法选择到动作$A$,然后执行动作$A$,得到奖励$R$,并进入状态$S'$,此时,如果是SARSA,会继续基于状态$S'$,用$\epsilon-$贪婪法选择$A'$,然后来更新价值函数。但是Q-Learning则不同。

对于Q-Learning,它基于状态$S'$,没有使用$\epsilon-$贪婪法选择$A'$,而是使用贪婪法选择$A'$,也就是说,选择使$Q(S',a)$最大的$a$作为$A'$来更新价值函数。用数学公式表示就是:$$Q(S,A)=Q(S,A)+\alpha(R+\gamma\max_aQ(S',a)-Q(S,A))$$

对应到上图中就是在图下方的三个黑圆圈动作中选择一个使$Q(S',a)$最大的动作作为$A'$。

此时选择的动作只会参与价值函数的更新,不会真正的执行。价值函数更新后,新的执行动作需要基于状态$S'$,用$\epsilon-$贪婪法重新选择得到。这一点也和SARSA稍有不同。对于SARSA,价值函数更新使用的$A'$会作为下一阶段开始时候的执行动作。

下面我们对Q-Learning算法做一个总结。

下面我们总结下Q-Learning算法的流程。

算法输入:迭代轮数$T$,状态集$S$,动作集$A$,步长$\alpha$,衰减因子$\gamma$,探索率$\epsilon$,

输出:所有的状态和动作对应的价值$Q$

1.随机初始化所有的状态和动作对应的价值$Q$.对于终止状态其$Q$值初始化为0.

2.forifrom1toT,进行迭代。

a)初始化S为当前状态序列的第一个状态。

b)用$\epsilon-$贪婪法在当前状态$S$选择出动作$A$

c)在状态$S$执行当前动作$A$,得到新状态$S'$和奖励$R$

d)更新价值函数$Q(S,A)$:$$Q(S,A)+\alpha(R+\gamma\max_aQ(S',a)-Q(S,A))$$

e)$S=S'$

f)如果$S'$是终止状态,当前轮迭代完毕,否则转到步骤b)

绝大部分代码和SARSA是类似的。这里我们可以重点比较和SARSA不同的部分。区别都在episode这个函数里面。

首先是初始化的时候,我们只初始化状态$S$,把$A$的产生放到了while循环里面,而回忆下SARSA会同时初始化状态$S$和动作$A$,再去执行循环。下面这段Q-Learning的代码对应我们算法的第二步步骤a和b:

#playforanepisodedefepisode(q_value):#trackthetotaltimestepsinthisepisodetime=0#initializestatestate=STARTwhilestate!=GOAL:#chooseanactionbasedonepsilon-greedyalgorithmifnp.random.binomial(1,EPSILON)==1:action=np.random.choice(ACTIONS)else:values_=q_value[state[0],state[1],:]action=np.random.choice([action_foraction_,value_inenumerate(values_)ifvalue_==np.max(values_)])接着我们会去执行动作$A$,得到$S'$,由于奖励不是终止就是-1,不需要单独计算。,这部分和SARSA的代码相同。对应我们Q-Learning算法的第二步步骤c:

next_state=step(state,action)defstep(state,action):i,j=stateifaction==ACTION_UP:return[max(i-1-WIND[j],0),j]elifaction==ACTION_DOWN:return[max(min(i+1-WIND[j],WORLD_HEIGHT-1),0),j]elifaction==ACTION_LEFT:return[max(i-WIND[j],0),max(j-1,0)]elifaction==ACTION_RIGHT:return[max(i-WIND[j],0),min(j+1,WORLD_WIDTH-1)]else:assertFalse后面我们用贪婪法选择出最大的$Q(S',a)$,并更新价值函数,最后更新当前状态$S$。对应我们Q-Learning算法的第二步步骤d,e。注意SARSA这里是使用$\epsilon-$贪婪法,而不是贪婪法。同时SARSA会同时更新状态$S$和动作$A$,而Q-Learning只会更新当前状态$S$。

values_=q_value[next_state[0],next_state[1],:]next_action=np.random.choice([action_foraction_,value_inenumerate(values_)ifvalue_==np.max(values_)])#Sarsaupdateq_value[state[0],state[1],action]+=\ALPHA*(REWARD+q_value[next_state[0],next_state[1],next_action]-q_value[state[0],state[1],action])state=next_state跑完完整的代码,大家可以很容易得到这个问题的最优解,进而得到在每个格子里的最优贪婪策略。

现在SARSA和Q-Learning算法我们都讲完了,那么作为时序差分控制算法的两种经典方法吗,他们都有说明特点,各自适用于什么样的场景呢?

Q-Learning直接学习的是最优策略,而SARSA在学习最优策略的同时还在做探索。这导致我们在学习最优策略的时候,如果用SARSA,为了保证收敛,需要制定一个策略,使$\epsilon-$贪婪法的超参数$\epsilon$在迭代的过程中逐渐变小。Q-Learning没有这个烦恼。

另外一个就是Q-Learning直接学习最优策略,但是最优策略会依赖于训练中产生的一系列数据,所以受样本数据的影响较大,因此受到训练数据方差的影响很大,甚至会影响Q函数的收敛。Q-Learning的深度强化学习版DeepQ-Learning也有这个问题。

在学习过程中,SARSA在收敛的过程中鼓励探索,这样学习过程会比较平滑,不至于过于激进,导致出现像Q-Learning可能遇到一些特殊的最优“陷阱”。比如经典的强化学习问题"CliffWalk"。

在实际应用中,如果我们是在模拟环境中训练强化学习模型,推荐使用Q-Learning,如果是在线生产环境中训练模型,则推荐使用SARSA。

对于Q-Learning和SARSA这样的时序差分算法,对于小型的强化学习问题是非常灵活有效的,但是在大数据时代,异常复杂的状态和可选动作,使Q-Learning和SARSA要维护的Q表异常的大,甚至远远超出内存,这限制了时序差分算法的应用场景。在深度学习兴起后,基于深度学习的强化学习开始占主导地位,因此从下一篇开始我们开始讨论深度强化学习的建模思路。

(欢迎转载,转载请注明出处。欢迎沟通交流:liujianping-ok@163.com)

THE END
1.2024年7个最佳物联网用例物联网(IoT)通过连接物理设备并助力它们在互联网上共享信息,正在改变全球各个行业。从智能家居自动化到工业自动化,物联网的应用案例在我们的生活和工作方式方面具有革命性意义。通过涵盖传感器、设备、连接性、数据分析以及云基础设施等组件,现实生活中的物联网实例使人们能够利用互联网分析物理对象。 https://www.jianshu.com/p/50be1b13a665
2.人工智能算法的分类与应用人工智能 (AI) 是当前科技领域的热门话题,其核心是各种算法的灵活运用。AI算法不仅实现了智能预测、分类,还在数据挖掘、自然语言处理和推荐系统等领域发挥着重要作用。接下来,我们将以科普的视角,带您深入了解 AI 的主要算法及其广泛应用。 一、监督学习 https://mp.weixin.qq.com/s?__biz=MzI3MzQ1NjMwOA==&mid=2247549220&idx=4&sn=25aa18da4b1e2824371e552b0ca3c8e6&chksm=eb214cffdc56c5e9303367ae4087102996613151dfa3c11fafe88950b683dbc8dadedd63bcaa&scene=27
3.这款人工智能工具轻松搞定复杂数科难题数学微积分mathgptsect过去追着朋友或教授去弄懂棘手概念的日子已经一去不复返啦。现在,您可以在家中舒适地使用人工智能工具解决所有疑问。虽然 ChatGPT 出错的情况不计其数,但我发现了一个能更有效地处理复杂数学和科学问题的工具。 用MathGPT 简化复杂问题 MathGPT 是我最近发现的一个人工智能工具,到目前为止,它是我用于学习的最准确https://www.163.com/dy/article/JJTOA9M805568E2X.html
4.机器学习算法应用嘲实例六十则机器学习算法案例本文整理了60个机器学习算法应用场景实例,含分类算法应用场景20个、回归算法应用场景20个、聚类算法应用场景10个以及关联规则应用场景10个。包含了天池、DataCastle、DataFountain中所有竞赛场景。 目录 1 分类算法应用场景实例 1.1 O2O优惠券使用预测 1.2 市民出行选乘公交预测 https://blog.csdn.net/stay_foolish12/article/details/111315104
5.java密钥交换算法DH定义与应用实例分析java这篇文章主要介绍了java密钥交换算法DH定义与应用,结合实例形式分析了Java密钥交换算法DH的原理、定义、使用方法及相关操作注意事项,需要的朋友可以参考下 本文实例讲述了java密钥交换算法DH定义与应用。分享给大家供大家参考,具体如下: 一 对称加密缺点 密钥传递过程复杂,这是对称加密带来的困扰。 https://www.jb51.net/article/169358.htm
6.JavaWeb开发实战1200例(第1卷+第2卷)pdf教程+随书光盘源码猿来实例046 算法应用——百钱买百鸡 实例047 算法应用——韩信点兵 实例048 算法应用——斐波那契数列 实例049 算法应用——水仙花数 实例050 算法应用——素数 实例051 算法应用——汉诺塔 第3章 HTML/CSS技术 3.1 页面效果 实例052 统一站内网页风格 实例053 设置超链接文字的样式 http://programmer.ischoolbar.com/index.php/article/article/id/40.html
7.蓄电池状态在线监控系统技术文章传感器传送过来的数据经过RS232/485转换器转换成工控机或者PC能够读取的数据,并通过预装在蓄电池监测工作站的应用程序对蓄电池参数进行存储和分析,如果该数据超出正常范围,则工作站将发出告警,提醒运行人员到现场检查。 2.6现场应用情况 2.6.1应用实例 目前,该蓄电池在线监测系统已在部分换流站和变电站得到了应用,从应用https://www.nongjx.com/st127118/article_49993.html
8.信息安全案例教程:技术与应用第4章身份与访问安全在线免费阅读USB Key是一种包含USB接口的硬件设备,它内置单片机或智能卡芯片,可以存储用户的密钥或数字证书,利用USB Key内置的密码算法实现对用户身份的认证。基于USB Key的应用包括支付宝的“支付盾”,网上银行的“U盾”等。 如图4-8a所示,支付盾是支付宝推出的安全产品。用户登录支付宝进行在线支付时,需要插入包含用户数字证书https://fanqienovel.com/reader/7110035158689909767
9.控制器——“小巧精悍”的视觉运算平台工业机器人工控机作为算法软件的运行载体,在机器视觉领域有着丰富的应用,但由于行业属性,普通的工控机需要外配采集卡、IO板卡等,难以满足兼容性、安装空间等严苛要求。 " 本期产品 · VB2200系列视觉控制器 根据机器视觉行业应用需求,海康机器人为您量身定制的敏捷型硬件处理平台VB2200系列视觉控制器,紧凑身躯内集成了丰富的逻https://www.imrobotic.com/news/detail/28385
10.QML多线程魔法:探索不同方法,提升性能总的来说,QThread 提供了一种灵活且强大的多线程方法,适用于处理复杂的线程管理和资源共享场景。通过使用 QThread,您可以实现精细的线程控制,从而提高应用程序的性能和响应速度。 3.3.2 QThread 的实例分析 为了更好地理解 QThread 的使用,我们将通过一个实例来演示如何使用 QThread 实现多线程。在这个实例中,我们https://developer.aliyun.com/article/1463857
11.三明市第一医院生态新城院区智慧医院智能化项目院区楼宇智能化系统支持多种主流BIM类型数据的加载:系统支持多种主流BIM类型数据的加载,包括Autodesk Revit,Bentely MicroStation,Catia,Autodesk Civil3D,IFC,PKPM,广联达等;支持采用多层次LOD,支持实例化存储;支持将模型数据的空间信息和属性信息全部无损导入;建筑信息模型BIM越来越多的应用在智慧园区规划,建设,运维等多个阶段。系统http://zfcg.cz.sm.gov.cn/upload/document/20221024/df8e2d7d2af449fbbe8f17d25733ff6d.html
12.安全数学基础——算法应用与实践(第2版)》本书介绍了信息安全数学的基础内容,包括初等数论、抽象代数、椭圆曲线论等,全书选材合理、难度适中、层次分明、内容系统,书中以大量例题深入浅出地阐述信息安全数学基础各分支的基本概念、基本理论与基本方法,注重将抽象的理论与算法和实践相结合,并强调理论在信息安全特别是密码学中的具体应用实例。本书语言通俗易懂,http://www.tup.tsinghua.edu.cn/bookscenter/book_07920901.html
13.都说算法很重要,那么请举例说明算法的具体应用场合和实例,也就是大淘宝应用场景示例 因而现阶段,在大淘宝的大多数场景中,并不是算法来驱动业务,而是配合业务一起来https://www.zhihu.com/question/34934041/answer/2631114362
14.课程遗传算法由来及国内外研究现状 任宗伟 ● 3.3.2 遗传算法的特点 任宗伟 ● 3.3.3 遗传算法基本名词及流程 任宗伟 ● 3.3.4 遗传算法应用实例 任宗伟 ● 3.3.5 遗传算法程序实现 任宗伟 ● 3.4 蚁群算法 ● 3.4.1 蚁群算法原理分析 任宗伟 ● 3.4.2 蚁群算法研究和应用现状 任宗伟 https://higher.smartedu.cn/course/63604e6f96788f54b7677daf
15.2020年最值得收藏的60个AI开源工具语言&开发李冬梅如今,计算机视觉中人脸识别算法在数据科学领域应用极为广泛。face.evoLVe 是一款基于 Pytorch 的“高性能人脸识别库”。为相关人脸分析和应用提供了综合功能,包括: 人脸对齐(人脸检测、特征点定位、仿射变换等); 数据预处理(例如,数据增广、数据平衡、归一化等); https://www.infoq.cn/article/2uabiqaxicqifhqikeqw