在本篇文章中将介绍奖励与策略结构相关的知识,这一部分是强化学习的极重要一部分,所以会有较长篇幅介绍。算法
奖励是代理不断完善本身,使本身可以自主实现目标的直接经验来源。代理经过接受来自环境奖励判断本身行为地好坏,从而经过更大可能的选择收益高的行为使本身趋于目标状态。比如老师为你的行为打的分数。数组
前文提到,策略是代理状态空间到动做空间的映射,即策略是一个函数,输入是代理所处的状态,输出是代理的行为,能够看出策略的做用是指示代理在某一个状态作出一个动做,即为代理的行动指示手册,而最优策略则为代理在任意状态,该手册(策略)都可以给出最优的动做使代理得到最大的长期奖励(价值),最初代理是一个白痴,而学习就是经过长期训练使得策略收敛于最佳策略,而在学习的过程当中会产生这样一个问题,若代理在一个状态执行动做得到较高的奖励,是否之后在该状态都会执行该行为?例如代理的状态空间为S = {s1,s2,s3,s4},动做空间A = {a1,a2,a3,a4},也意味着代理在四个状态均有四种动做能够执行,在初始时代理是一个白痴,不知道在每个状态执行每个动做分别会得到怎样的奖励,所以会随机选择一个动做执行,也称之为代理的探索,如今假定代理在s1,执行动做a1后得到+1的奖励,因而代理记住了在s1执行a1会得到好的奖励,所以代理在s1状态都会执行动做a1,这样就产生了一个问题,代理在s1时,执行a二、a三、a4得到的奖励是未知的,也许会存在奖励更大的状况,这样子显然不是一个最佳的学习方法,为了解决这个问题,引入了探索与利用的概念。网络
探索指的是代理在该状态随机选择一个动做执行,这个动做不必定是得到最大奖励的动做,是彻底随机的,用于探索环境中未知的因素;利用指代理老是选取当前状态下获益最大的动做执行。接下来咱们分析一下两种极端状况,代理纯粹探索与纯粹利用。函数
纯探索的意思是代理在任意状态下动做的选取都是随机的,不会受到任何因素的干扰,这样致使的后果是代理过分学习,一直在探索、一直在学习,不会利用本身已经学习到的知识,哪怕代理已经直到在某个状态执行某个状态对本身最有利,可是它任然会随机选择行为执行,可见这样的训练毫无价值。学习
纯利用是指代理在每个状态都选取最有利的动做执行,这样产生的后果即是代理对环境的探索不充分,环境的不少地方都得不到探索,会致使获得的策略并非最优策略。能够看出纯探索和纯利用都是不利的,最佳的方法是应该在探索与利用间寻求平衡,时代里可以探索完整的环境,又能在必定时间收敛到最佳策略。 .net
从上文能够看出,纯探索和纯利用都要有极大的缺点,并非咱们想要的训练方式,若是能在探索与利用之间找到平衡,即可较快速的训练出聪明的代理。因而在这里引入一个变量ε,它是一个几率,被称之为贪婪系数,代表在当前状态有ε的几率去探索环境(随机选择动做),(1-ε)的几率利用以前学到的经验(即选择最有利的动做),一般ε很小,相似于0.1之类的值甚至更小,这样既能保证代理有概率探索环境,也能使得代理利用以前学习到的知识。为了使得策略更快的收敛于最佳策略,ε会呈现某种形式衰减,对衰减方式感兴趣的小伙伴儿能够查询资料,这里不作过多阐述。设计
强化学习中,须要区别奖励与价值两个概念,前文提到,代理更有可能选择长期奖励较高的行为执行,这里的长期奖励即是价值。即:
3d
奖励:代理在当前状态执行某动做得到的即时奖励 代理
价值:代理从某一状态向后执行一些列动做得到的收益之和 blog
举个简单例子,以下图所示:代理在状态s2,仅仅能够左右移动。考虑代理收取两步内的奖励,若是是一个鼠目寸光的代理,那么它仅仅会注重眼前的利益,因而他会向左移动获得1的奖励到达s0,再向右移动获得0的奖励回到s0,这样两步的总奖励是1;而对于一个有长远目光的代理,他注重当前和之后的回报,于从s0向右移动到达s1,得到-1奖励,再次向右移动到达s4得到+5奖励,两步总奖励+4,比前者更多。而咱们固然更喜欢一个具备长远目光、重视将来收益的代理,那么是否是代理越重视将来收益越好呢?显然也不是,比如因为货币贬值,如今你兜里的100元比你一年后兜里的102元更值钱,所以将来的收益变得不在可靠,因而为了下降将来奖励带来的风险,须要对将来的奖励打折扣,离如今越远,折扣越大,引入了折扣因子γ(0<=γ<=1),则总奖励为: m = i-1
$$
\R = \sum_{k=1}^T γ^ m*r_i
$$
能够看出离如今越远,对其奖励越不重视,若γ等于0,则是一个鼠目寸光得代理,只重视眼前利益,若γ等于1,则是一个过分重视将来奖励的代理。
前文提到,策略其实是一个以状态为输入,以动做为输出的函数,那么他有哪些表达方式呢,这里主要介绍基于表格和神经网络。
若是环境的状态和动做空间离散,且数量少,则可使用简单表格来表示策略。 表格正是指望的形式:一个数组,其中,输入做为查询地址,输出是表格 中的相应数字。有一种基于表格的函数类型是 Q-table,它将状态和动做 映射到价值。使用 Q-table,策略会在当前状态给定的状况下检查每一个可能动做的价值,而后选择具备最高价值的动做。使用 Q-table 训练代理将包括肯定表格中每一个状态/动做对的正确价值。在表格彻底填充正确的值以后,选择将会产生最多长期奖励回报的动做就至关直接
当状态/动做对的数量变大或变为无穷大时,在表格中表示策略参数就不可行了。这就是所谓的维数灾难。为了直观地理解这一点,让咱们考虑一个用于控制倒立摆的策略。倒立摆的状态多是从 -π 到 π 的任何角度和任何角速率。另外,动做空间是从负极限到正极限的任何电机转矩。试图在表格中捕获每一个状态和动做的每一种组合是不可能的。
神经网络是一组节点或人工神经元,采用一种可以使其成为通用函数逼近器的方式链接。这意味着,给出节点和链接的正确组合,您能够设置该网络,模仿任何输入与输出关系。尽管函数可能极其复杂,神经网络的通用性质能够确保有某种神经网络能够实现目标。
因此,与其尝试寻找适合特定环境的完美非线性函数结构,不如使用神经网络,这样就能够在许多不一样环境中使用相同的节点和链接组合。惟一的区别在于参数自身。学习过程将包括系统地调节参数,找到最优输入/输出关系。
左边是输入节点,一个节点对应函数的一个输入,右边是输出节点。中间是称为隐藏层的节点列。此网络有 2 个输入、2 个输出和 2 个隐藏层,每层 3 个节点。对于全链接的网络,存在从每一个输入节点到下一层中每一个节点的加权链接,而后是从这些节点链接到后面一层,直到输出节点为止。关于神经网络的介绍就到这里,感兴趣的小伙伴能够查阅资料。
本篇文章主要介绍了强化学习关于奖励和策略结构的相关知识,梳理的很简略,但这一部分在强化学习中十分重要,尤为在算法的设计方面,不太理解的小伙伴能够查阅资料继续了解。
五大方面之环境: https://blog.csdn.net/weixin_54445841/article/details/112965944.
入门资料: https://download.csdn.net/download/weixin_54445841/14910862.
Python工程:
https://download.csdn.net/download/weixin_54445841/14910913.