什么是强化学习
强化学习是机器学习的一个分支,主要是为了解决当条件变化时如何自动学习并作出最优决策的问题。这个问题在科研和工程领域都广泛存在。
在我们这个世界一直都在变化,很多看似静态的输入输出的问题随着时间的推移都在动态变化。比如,你想用卷积神经网络训练一个模型,用来将图片分类成猫或者狗。一开始你的程序工作完美,能够又快又准的区分出图片。你觉得一切都很完美,于是,出去度了个假,结果当你回来的时候,宠物的流行发型改变了,你原来的模型出现了很多错误的识别。你觉得这样的模型好吗?当然不好!
上面的例子,我们不难看出,即使是一个简单的机器学习问题,也隐藏了一个时间纬度。而且,这个时间维度经常被我们忽视,却会在生产环境中造成影响。
强化学习(RL)是一种方法,可以天然地把这个额外的纬度(一般来讲这个纬度是时间维度,但是有时也可以是其他纬度)融入到学习方程式中。从而使得机器学习更接近于人类学习的视角。本章我们将要学习以下内容:
强化学习和其他机器学科的关系与区别,包括:监督学习和非监督学习
强化学习的主要形式有哪些,以及他们之间是如何关联的
强化学习的理论基础:马科夫决策过程
监督学习、非监督学习与强化学习
你可能对监督学习的概念比较熟悉,这个领域已经被研究的非常多,而且也最有名。它要解决的主要问题是:你如何自动构建一个功能,可以通过标记一些样本,让计算机自动对一些输入进行分类。这个问题看起来容易解决,但实际上这里面暗含了很多潜在的问题,导致直到现在才在计算机领域开始有成功的案例。监督学习在下面这些领域有所应用:
文本分类:比如用来区分是否是垃圾邮件
图片识别和图片中的物体定位:这张图片中是一只猫还是一只狗,诸如此类
回归问题:通过气象监测获得的信息,来预测明天的天气情况
情绪检测:评估客户满意度
这些应用看起来不同,实际上没有什么区别:我们有很多输入的样本以及对应的输出,我们想要机器自动学习,提取出某些特征,能够对未知的输入准确的进行分类得到输出。监督学习这个名字来源于通过答案来学习,也就是监督者标记好的样本来学习。
相对于监督学习的另一个极端,当然就是非监督学习了,也就是通过没有标记的数据集来学习。其主要目的是通过学习获得数据隐含的规律。一个比较常见的例子就是,我们的算法想要将数据聚合成一些簇,用于揭示数据的关联关系。
另一个非监督学习的方法就是变得越来越流行,Generative Adversarial Networks(GANs)即生成性对抗网络。当有两个相互竞争的神经网络,第一个神经网络负责生成伪造的数据来“欺骗”第二个神经网络,第二个神经网络则负责分辨哪些是伪造的数据哪些是样本中的真实数据。一段时间以后,这两个网络都会变得越来越有“技巧”,能够分辨出真实数据和伪造数据中的微妙差别。
强化学习(RL)则是第三个阵营,它介于监督学习和非监督学习之间。一方面,它使用许多完善的监督学习方法,比如用于判断相似性的深度神经网络,随机梯度下降算法和误差反向传播算法,来学习数据的表现。另一方面,它使用这些方法的方式又完全不同。
本章的后面两节,我们有机会使用更严谨的公式来展开讨论RL的方法,包括它是如何假设以及抽象出来的。但是现在为了方便理解,我们不会用严谨的公式,会用更直观的表述。
想象一下你有一个媒介需要对不同的环境做出不同的行为。一只机器老鼠穿越迷宫是个不错的例子,当然,你也可以想象一个自动驾驶直升机的直升机,尝试旋转起飞,或者一个下棋程序学习如何打败棋圣。但是,现在为了简单一些,我们就以机器老鼠和迷宫作为例子。
它的环境就是一个迷宫,迷宫里面有一些吃的,同时也在另一些点会有电子陷阱。机器老鼠可以左转、右转或者向前移动。它也可以观察迷宫的环境和状态,并且根据情况作出合理的举动。它总是尝试获得尽可能多的食物,并且避免掉入电子陷阱。食物和电子陷阱,就是环境反馈给机器人行为的正向奖励和负向惩罚。奖励是强化学习中一个非常重要的概念,我们会在本章的后面部分详细讲述。现在,你只要明白机器老鼠的目的,就是获得尽可能多的食物作为奖励。当然,老鼠必须忍受一些陷阱来到达食物充沛的位置,这样总比呆在原地一无所得要好。
我们肯定不希望硬编码,来穷举环境的规则和知识,灌输给机器老鼠。因为,这么做不仅劳民伤财,而且环境稍微变化一下就不管用了。我们希望用一些神奇的方法,让老鼠自己学习如何躲避陷阱,并且获得尽可能多的食物。
强化学习就是这种神奇的工具箱,它和监督学习以及非监督学习的游戏规则完全不一样,你不需要像监督学习那样预先定义好所有的标签。没有人预先定义好哪些是好的场景(像素图片),哪些是坏的场景,来告诉机器老鼠怎么转弯怎么前进。
同时,我们又不是完全像非监督学习那样两眼一抹黑,什么也不给系统,我们会提供奖励机制。奖励可以是正向的,比如提供食物。也可以是负向的,比如电子陷阱。或者是中性的,如果什么也不发生。通过观察这些奖励,并且把奖励和自己的行为关联起来,我们的机器人可以学习如何更好的行事,以便获得尽可能多的食物,更少的掉入陷阱。
当然,强化学习带来的灵活性和通用性是有代价的,相比较监督学习和非监督学习,强化学习的挑战更大。让我们快速讲一下为什么强化学习如此之难。
首先要注意的是,强化学习中观察到的当前情况,取决于代理者(agent)的行为,某种程度上来说,当前观察到结果就是它行为导致的。如果你的代理选择去做无效的行为,那么观察结果就不会告诉你代理做错了什么,以及如何改善做法(代理将会一直获得负向的奖励,没有正向奖励做校准)。如果代理很倔强,一直犯错,那么观察结果可能形成失败的印象,没有途径可以获得更多的回报了—— 生活真艰难啊 ——这完全是错误的(就像人一样如果一直碰壁,那迟早有一天,这个人会绝望)。在机器学习术语中,这被称为非i.i.d数据。i.i.d是independent and identically distributed(独立且相同的分布)的缩写,是大部分监督学习需要满足的基本条件。
第二个比较复杂的点在于,代理不仅需要利用它学到的策略,同时它也需要不断地探索环境,因为,谁知道有没有更好的策略,能够帮助代理获得更多的奖励呢?但问题是,过多的探索可能会严重削弱代理获得奖励的能力(忘记提一句,代理可能会忘记已经学会的策略),所以,我们得平衡这两个方面。这个利用/探索困境,目前是强化学习一个公认的基本问题。
人类也经常遇到类似的抉择:我应该住常去的酒店,还是试试看这个看起来不错的新酒店?多久换一次工作比较合理?你应该去学习一个新的领域,还是在原来自己熟悉的领域继续工作?对于这些问题,没有一个万能的答案。
第三个比较复杂的问题是,有的奖励往往不是立竿见影的,需要长远的眼光和多个行为共同作用才能凸显效果,也就是说奖励延后于行为的情况。拿国际象棋作为例子,你可能在游戏中间某一步棋,强势的扭转了局势。在强化学习中,我们要有能力发现这样的机会,甚至牺牲掉某些早期的奖励来获得更大的回报,这中建立在时间流维度上的行为策略评估,是个非常棘手的难题。
尽管有这样那样的困难和问题,强化学习这几年还是取得了长足的进展,在研究领域和实用领域变得越来越活跃。
很有意思不是吗?那让我们走进强化学习的世界看看它是如何工作的。
强化学习的形式和关系
每个科学和工程领域都有它的假设和局限。在前面几章我们讨论到了监督学习,它的假设就是你得要有标记好的数据集,如果你没有标记?那不好意思,你要么去标记好数据,要么换别的办法。这不是监督学习好或者不好,只是说监督学习解决不了你的问题。你必须知道不同学习方法的游戏规则,这样可以节省你大量的调研时间。虽然,我们知道有很多应用和理论突破案例,有些人尝试用一些富有创造性的方法来挑战这些既有规则。但是,在此之前,你至少得要知道既有规则的限制。
当然强化学习也有它自己的方式,现在是时候介绍它们了,本书接下来的所有内容都围绕这个问题展开,我们会从不同的角度来分析它们。从下图你可以看到强化学习的两个重要实体:代理和环境,以及它们交互的途径:行为,奖励和观察到的结果。
图二、RL实体和他们的交互途径
奖励
首先我们要提到的是奖励。在强化学习里面,你可以把它理解成一个定期从环境获得的量化值。它可以是正数也可以是负数,可以是个很大的数字也可以很小,但不管怎么样,它必须是个数值。奖励的作用就是告诉代理,它的行为是好还是坏,有多好还是有多坏。我们不会定死代理获得奖励的频率;可以是每秒或者整个过程只有一次奖励,虽然,大部分情况下为了方便,我们会设置一个固定时间让代理收到奖励,或者在环境发生某些变化的时候会收到奖励。对于整个过程只奖励一次的情况,除了过程结束的那一次奖励,整个过程都不会有奖励。
就如我提到的,奖励是为了反馈代理的行为,让代理知道自己的行为是否正确,因此,奖励在强化学习中具有核心地位。从强化这个词的含义也不难看出,代理获得的奖励会强化它的行为走向,使之更偏正向或者更偏负向。奖励是本地的,意思是,它反映的是代理当前行为的准确性,而不是它过去到现在所有行为的准确程度。当然,代理因为当前行为获得一个比较大的奖励,但是当前的决定,也可能会导致后续的行为遇到一个戏剧性(负向的奖励)的结果。
代理需要实现经过一系列动作后获得的累计奖励最大化。为了让你更直观的理解奖励概念,我们列出了一些具体的例子:
金融交易: 交易者买卖股票获得的收益
国际象棋: 这里奖励在游戏结束时才会获得,获胜,失败,或者平局。当然,这也分情况,对于我来说如果我和一个象棋大师打成了平局,对我来说也是非常的的奖励了。实际应用中,你需要明确定义出一个确切的数值作为奖励,但是,实际上有的时候奖励也可以是一个复杂的表达式。在这个例子中,我们可以定义奖励为对方棋手强弱的一个比例值。
大脑多巴胺系统:大脑有个区域(边缘系统),在每次需要给整个大脑发送正向信号的时候,会分泌一种叫做多巴胺的物质。高浓度的多巴胺会让人产生快乐的感觉,这会强化这个系统认为是好的行为。遗憾的是,边缘系统属于非常古老的神经系统,因此它会对很多原始的需求做出反应:食物,繁殖和支配,但这些不影响奖励机制,完全是另一个故事。
电子游戏: 它经常给玩家非常直接的反馈,比如,杀死了多少敌人,获得多少分数。注意,在这个例子中奖励是不断积累的,所以街机游戏中强化学习的奖励是和分数挂钩的,比如,杀死一个敌人得一分,如果只是移动不得分。
网页导航: 如何评估网页内容的价值一直存在很多困难。一般情况下,搜索引擎尝试去爬取网页的时候,常常会被要求填写一些表单,或者遍历多层次的链接,以及,完成各种校验码,这些对于搜索引擎都不太友好。有一个强化学习的方案可以解决这个问题,这个方案就是用网页的内容价值作为奖励。
神经网络架构搜索: 强化学习已经成功应用于神经网络架构优化领域,通过调整不同层的参数,增加旁路连接,或者改变神经网络架构的其他方面来获得更好的性能。这个时候奖励就是性能(神经网络预测的精准度或者其他可以衡量精准度的值)。
训练狗子: 如果你训练过狗,你就知道当狗子听话的时候,你应该给它一点好吃的(但别给太多)作为奖励(正向的),或者惩罚它如果它不听话(负向的),虽然,有研究说惩罚的效果不如奖励。
学校分数线: 这个我们都有经历过!学校分数线就是一个奖励机制,用来反馈小学生们的学习效果。
从上面的例子不难看出,奖励概念是一个非常普遍的指标用于衡量代理的表现,你可以在周围很多场景中找到它或者利用它来解决实际问题。
代理
代理是一个人或者物体,代理通过行为和环境发生相互作用,导致一定的结果,并且通过结果获得相应的奖励。在强化学习的场景下,它就是一个不管效率有多高,但可以解决一些实际问题的软件。在前面举的六个例子中,他相对应于:
金融交易: 进行市场交易决策的交易系统或者交易员。
国际象棋: 棋手或者下棋程序。
多巴胺系统: 大脑本身,针对感觉的信息,来决策是好的体验还是糟糕的体验。
电脑游戏: 享受游戏的玩家或者AI程序(Andrey Karpathy 曾经在他的推特上写道:“我们总是希望AI来干掉所有的活,我们则享受玩游戏的乐趣。但实际上,我们干了所有的活,让AI玩游戏。”)
网页导航: 导航程序,它告诉我们哪个链接值得点击,鼠标该移动到哪里,或者哪个文本值得进入。
神经网络架构搜索: 那个控制神经网络具体架构的程序。
训练狗子: 你亲爱的狗子。
学校: 学生。
环境
环境就是代理外面的一切事物。从广义上来说,环境可以是除了代理以外的整个宇宙,但这显然太宽泛了,即使未来的计算机也很难模拟整个宇宙。所以这里我们一般指狭义的环境(比如棋盘,游戏关卡)。
环境在代理的外部因此不直接和代理发生互动,而是,通过奖励(从环境获得),动作(代理施加于环境),观察结果(一些除了奖励代理从环境额外获得的信息)。我们已经提过奖励,所以接下来我们谈谈动作和观察结果。
动作
动作是代理在环境中可以做的事情。动作可以是游戏中规则规定的移动动作,也可以是学生做家庭作业(学校的环境)。它可以简单到移动一个空格,也可以复杂一些的操作比如填写明天早上的税单。
在强化学习中,我们区分两种动作:离散的和连续的。离散的动作指的是代理人能做的有限的一些互斥的事情,比如向左或者向右移动。连续的动作往往带有一定的量值,比如驾驶汽车的时候通过轮子一定角度的偏转,从而改变汽车的方向。不同的角度导致下一秒汽车的偏转情况不同,所以只是说驾驶汽车是完全不够的。
观察结果
观察结果和之前提到的奖励一样,是环境反馈给代理信息的第二个途径。你可能会奇怪,为什么我们要有两个渠道?答案是为了方便。结果是环境提供给代理,告诉它周围发生了什么。它可能和即将到来的奖励相关(比如,你收到了银行通知,工资发了!),也可能无关。有时候观察结果,也可能会以比较模糊和令人混淆的方式,来表达奖励的信息,比如屏幕上你获得的游戏分数。分数展现成像素,但是我们可以通过视神经和大脑的分析把它转换成具体的奖励数值。这对于现代的深度学习来说不成问题。
同时,奖励不应该被视为是第二位或者无关紧要的事情:奖励是驱动代理学习的主要因素。如果奖励错误,有噪音,或者和我们的主要目标有偏离,那么很有可能我们的训练将走入歧途。
注意这里提到的观察结果和环境状态的区别。环境状态大了说包含整个宇宙中每个原子的状态,所以你没法测量环境状态,因为你没法把所有的事物都考虑进去。就算你设置了一个最小范围,但是环境中还是存在很多不确定性的因素,导致你无法精确地测量环境状态。这非常正常,而强化学习就是为了应对环境的不确定性而产生的。同样的,我们还是用之前举过的例子来比较说明它们的区别:
金融交易: 交易环境指的是整个市场,以及所有会影响市场的因素。这可是个长长的列表,包括最近的新闻,经济和政治条件,天气,食物供应情况,或者是一篇推特文章。就算你今天呆在家里哪儿都不去,也会影响世界的经济系统。因此,我们的观察结果仅限于股票价格,新闻这几个有限的条件。即使面对交易这种非常规的事情,我们也没有必要非要处理所有的环境状态。
国际象棋: 环境就是棋盘和你的对手,包括你对手的下棋技巧,心情,大脑状态,策略选择,等等。观察结果就是所看到的(当前棋盘的棋子分布)。但是,我猜,在一些高手过招的时候,一些心理学的知识,以及察言观色的能力可以增加你获胜的几率。
多巴胺系统: 环境就是你的大脑加上神经系统和器官状态,外加整个你能感知到的世界。观察结果就是你的大脑内状态以及你感觉器官获得的信息。
电脑游戏: 环境就是你的电脑环境,包括内存和硬盘。如果是网络游戏,还要包括其他玩家的电脑和互联网所有的基础设施。观察结果是你看到的像素和听到的声音,就这些。屏幕上的像素传递的信息可不小(有人计算过,一张中等大小的图片,1024x768个像素,其包含的数值的可能范围,比整个银河系包含的原子数量还要多),但是,显然所有的环境状态加起来绝对比这个数值大得多。
网页导航: 这里的环境就是整个互联网,包括代理使用的计算机,和连接web服务器需要的所有的互联网设备,那可是一个非常巨大的系统,包括成千上万的组件设备。观察结果就是显示在电脑显示器上的网页。
神经网络架构搜索: 在这个例子中,环境就显得非常简单,包括用于执行神经网络操作的工具和用于测量准确度的数据集。比起互联网,这个环境就非常小儿科了。观察结果也很不一样,可以是测试信息,比如,动态收敛损失,或者其他执行过程中的衡量数值。
训练狗子: 这里的环境就是你亲爱的狗子(包括狗子的情绪,可观察到的内在行为,以及生活习惯),以及它周边的事物,包括其他的狗,以及躲在灌木丛里的猫。观察结果就是你的感受和你的记忆。
学校: 环境就是学校,国家的教育体系,社会,和文化遗产。观察结果就和训练狗子一样,学生的感受和记忆。
这些就是我们这本书接下来就围绕着这些场景,来讲述强化学习。也许你发现强化学习是一种非常灵活,通用,并且可以广泛应用于不同的场景。在深入讲解强化学习之前,让我们来看看它和其他学科领域的关联关系。有很多其他领域和强化学习相关,下面这张图清楚的展示了这些关系,下面的六大领域在决策主题和方法方面有重叠(灰色部分)。
图三、强化学习的不同领域
在所有学科相交的交叉部分,可以应用强化学习,并且发挥其灵活的通用的优点,在下面这些领域获得最好的效果:
机器学习: 强化学习作为机器学习的一个子领域,借鉴了很多机器学习的机制,技巧和技术。实际上,强化学习的目标就是在结果数据不是那么完善的情况下,教会一个代理学习如何行为。
工程(特别是优化控制): 可以帮助获得取得结果的最优动作序列。
神经科学: 通过多巴胺系统,我们可以知道人类大脑的行为和强化学习非常类似。
心理学: 这个研究在不同环境下的行为模式,比如,人们在不同环境下如何做出反应,以及如何适应,这也和强化学习很相似。
经济学: 一个非常重要的概念就是,如何基于现实世界这种不断变化的情况,和不完善的知识体系下使得投资的回报最大化。
数学: 这适用于理想化系统,并且还非常注重寻找和达到运营研究领域的最佳条件
马科夫决策过程
本节我们将会熟悉强化学习的理论基础,正是这个理论基础让强化学习的问题得以解决。这一章对于确保你理解本书的后面部分,并且让自己熟悉强化学习至关重要。首先,我们会向你介绍之前讨论的环境、动作、观察结果以及奖励对应的数学符号和数学表达式。然后,基于此,我们再向你介绍一些强化学习的二阶概念,包括状态、情节、历史、值和获得,这些在我们后续谈论一些方法的时候会反复用到。总之,我们讨论马科夫决策过程,就像俄罗斯套娃一样:我们从最简单的马科夫过程(Markov Process -- MP),也叫马科夫链。然后加入奖励,变成马科夫奖励过程(Markov reward prcess)。最后我们会加入行为,变成马科夫决策过程(Markov Decision Processes -- MDPs)。
马科夫过程和马科夫决策过程,被广泛应用于计算机和工程领域。所以,阅读本章不仅会在强化学习对你有帮助,其他领域你也可以应用这个原理。
如果,你已经熟悉马科夫决策过程,那么,你可以简单浏览一下本章,了解下一些术语,方便你在后面使用。
首先,让我们从马科夫家族中,最简单的概念开始:马科夫过程,也叫马科夫链。假设,在你面前有一些系统你可以观察,而且仅仅可以观察,不能施加影响。你所观察到的被称为状态,并且,这个系统存在一些动态规则,可以改变状态。并且,即使状态改变,你依然无法改变状态,只能观察。
系统中所有可能的状态,被称为状态空间。在马科夫过程中,我们要求这个状态空间集是有限的(但是可以无限补偿这个限制)。你所有的观察结果,变成一个状态序列或者链(这就是为什么马科夫过程也叫做马科夫链)。比如,我们假设一个关于城市天气,最简单的模型,我们可以观察到今天是天晴还是下雨,这就是状态空间。一段时间的观察则形成状态序列,也叫做状态链,比如:[晴天,晴天,雨天,晴天...],这叫做历史信息。
这个系统被称为马科夫过程(MP),必须符合马科夫性质,也就是这个系统未来状态,都只和当前状态有关,都是当前状态动态变化过去的。马科夫性质的关键点在于,每个可观察状态都可以自成体系来描述系统的未来。换句话说,马科夫性质要求系统状态是可以被区分的,是唯一的。因此,只需要一个状态即可对系统的未来动态进行建模,而不是整个历史或最后N个状态。
在我们天气的例子中,马科夫性质限制了我们的天气表达,不管之前有几个晴天,当前晴天后面跟着一个雨天的概率是一样的。这和真实的世界有些区别,因为真实世界,我们知道天气不仅仅依赖于今天的天气,也和季节,纬度,以及是否临近海洋还是临近山区有关。现在还有研究表明,太阳黑子的活动都会影响天气。所以,我们的例子很幼稚,但是它对于理解马科夫限制和做出有意义的选择,非常重要。
当然,如果你想要让你的模型考虑更多的情况,那么,你就要扩展你的状态空间,这使得我们必须获得更多的条件,也使得我们的状态空间变得更大更复杂。比如,如果你想要获得夏天或者冬天不同的下雨概率,你就需要将季节纬度也加入到你的状态中。这样你的状态空间会变成下面这个样子:
[sunny-summer, sunny-winter, rainy-summer, rainy-winter]
马科夫性质可以通过转移矩阵获得转移概率,转移矩阵是一个NxN的矩阵,N是模型状态个数。一个矩阵包含i行和j列,其中节点就表示从第i个状态转变成第j个状态的转换概率。
比如,我们下雨/天晴的例子中,转移矩阵应该是下面这个样子:
在这个例子中,如果今天是晴天,那么有80%的概率,明天也是晴天,20%的概率明天下雨。如果今天观察到的是雨天,那么只有10%的概率明天天气会转晴,90%的概率明天还是下雨。
因此,马科夫过程的正式定义如下:
系统有一个包含了所有状态的集合(S)
一个定义了系统变化转移概率的转移矩阵(T)
我们可以通过一些可视化图形,使得马科夫过程变得更加易于理解,我们可以使用一些节点来表示不同的状态,用节点之间的连线标注出从一个状态变化到另一个状态的概率。如果转移概率为零,我们则不绘制这条边(这个时候没办法从一个状态转变成另一个状态)。这种图形也广泛应用于有限状态机的展示。有限状态机用于自动化理论的研究。我们晴天/下雨的例子,可以表示成下面这样子:
图 4. 晴天/下雨模型
同样的,就观察结果而言,我们仍然无法影响天气,只能观察并记录我们的观察结果。
接下来,我们看一个更加复杂的例子,我们考虑一下白领的一天。他的状态空间包括:
在家: 不在办公室
电脑: 他在电脑面前办公
咖啡: 他一边喝咖啡,一边办公
沟通: 他和办公室的同事沟通事情
转换图形如下:
图 5. 办公室转换图形
我们希望,他的一天是从家里开始的,然后,到了办公室后喝杯咖啡开始一天的工作(没有家里到电脑,以及家里到沟通的连接)。从状态图我们也不难看出,他一天的结束节点是电脑(所有节点中,只有这个节点是指向回家的)。转移矩阵如下:
我们把转移概率填写到边上,结果如下图所示:
图 6. 标注了转移概率的状态转换图
一般情况下,我们很少能得到这种“豪华”的转移矩阵,知道每个状态转换的精确概率。通常,我们只能看到系统的状态变化,得到下列场景:
但是,通过观察结果获得一个近似概率的转移矩阵并不复杂 ;我们只要数一数每个状态转换的次数,然后把它们转换为最大概率等于1的概率值,就可以得到一个近似概率了。我们观察的次数越多,得到的近似概率越精确。
同时,我们也要注意马科夫性质是静态的(也就是说,任何状态的潜在转换分布都不会随时间变化)。非静态意味着,有一些隐含的因素影响着我们系统的平衡,而且在我们观察到的结果里面并不包含这些隐含因素。但是,这与马尔可夫性质矛盾,后者要求相同状态下的潜在概率分布必须相同,而与过渡历史无关。也就是要了解情节中观察到的实际转换与转移矩阵的潜在分布之间的差异。我们观察到的具体情节是从模型的分布中随机抽样的,因此每个情节之间可能会有所不同。但是,具体过渡的概率仍然相同(就是说,情节千变万化,但是状态转换的概率还是一样的,比如,电脑之前的状态可能是home -> coffee,也可能是chat -> coffee,但是从咖啡到电脑的概率还是0.2)。但是非静态并不满足这一点,所以在这种非静态的情况下,马尔可夫链形式不再适用(也就是说,非静态的情况下状态之间转换的概率是不一样的,存在随机性,这个上班族每天的行为没有任何规律可言,完全不按套路出牌,你也就很难预测他的行为)。
现在,我们可以进一步扩展马尔可夫过程模型,使其更接近我们的R L的问题。让我们为图片加上奖励纬度吧!
马科夫奖励过程
在开始介绍奖励之前,我们要扩展一下我们的马科夫过程。首先,我们要在状态和状态间的连接上增加一个值。我们已经标记了概率,但是概率只是用来表示系统动态变化可能性的值。所以,我们要新增一个标量表示额外的奖励值。
奖励可以表示成各种形式,最普遍的做法就是再增加一个矩阵,就像转移矩阵一样,只不过里面的节点表示从i行表示的状态到j列表示的状态所获得的奖励。奖励可大可小,可以为正也可以为负——它们都只是数字。在一些例子中,这种表达是比较冗余的可以简化。比如,如果奖励是到达一个状态的时候获得的,而与前一个状态无关,我们就只要保留状态和奖励的对应关系就可以了。但是,这种情况奖励只和目标状态有关,并不常见。
另一个要加入到模型里面的变量是γ(伽马),一个">=0"并且"<1"的数字。这个值什么含义,我们先不做深究,我们定义完马科夫奖励过程额外特点以后,再对这个值的含义做详细讲解。
也许你还记得,我们之前用于展示马科夫过程状态转换的转换链,同样也适用于马科夫奖励过程。只不过,每个转换我们要增加一个奖励值。这样,我们就把奖励加入到了系统内的状态转换中。
对于每个情节,我们把时间t对应的收益定义为:
让我们来尝试理解一下上述公式。对于每个时间点,我们计算收益等于后续步骤序列的奖励之和,但是,后面的步骤奖励需要打个折扣,而且越后面折扣越大,折扣值等于γ的步骤次方,比如公式里面的γ的k次方。这个折扣因子实际上是代理对未来行为奖励的一个预估。如果γ=1则表示,未来每个步骤的收益都非常明确,因此总的收益就是所有步骤收益的和。如果γ=1则表示除了下一步的收益,代理完全不清楚之后的收益,因此总的收益就是下一步的收益值。
一般来说γ=1的极端情况不常见,通常我们会设置γ等于0.9或者0.99。这表示我们可以预见一定范围内的收益值。
对于强化学习来说,γ值非常重要,我们会在接下来的章节里面经常用到它。但是现在,你只要知道这个值表示我们能预见未来收益的能力,这个值越接近1,我们对未来的收益越有把握。
这个收益公式在实践中并不是很有用,因为它是针对我们从马尔可夫奖赏过程中观察到的每个特定链定义的,因此即使对于相同状态,它也可能有很大差异。 但是,如果我们走极端,计算任何状态的数学期望收益(按平均大量链条计算),我们将获得更有用的量,称为状态值:
这个公式解释起来很简单:对于每个状态s,值v(s)是我们遵循马尔可夫奖励过程获得的平均(或预期)回报。
为了展示这个理论是如何和实践结合的,我们把奖励加入到之前白领的状态机里面去。我们的奖励值设置如下:
家里 -> 家里:1(待在家里很不错)
家里 -> 咖啡:1
电脑 -> 电脑:5(努力工作是一件非常棒的事情)
电脑 -> 沟通:-3(工作被打扰总是让人不爽)
沟通 -> 电脑:2
电脑 -> 咖啡:1
咖啡 -> 电脑:3
咖啡 -> 咖啡:1
咖啡 -> 沟通:2
沟通 -> 咖啡:1
沟通 -> 沟通:-1(聊天太久会很无聊)
下图是奖励的有限状态机
图 7. 状态转换图,包含状态转换概率(黑色)和相应的奖励值(黄色)
还记得之前那个γ值吗?我们这里把它置为0。那么我们要怎么计算这个例子的状态值呢?
要回答这个问题,首先,我们把起始固定到沟通(chat)上。那么接下来的子流程会是怎么样呢?答案是,它依赖于概率。基于我们之前定义的转移矩阵,接下来继续交谈的可能性是50%,20%的可能性是去喝咖啡,30%的可能我们去电脑面前工作。当γ等于0的时候,我们的状态值等于下一步的奖励。所以我们要计算沟通的状态值,只要把所有转换值乘以转换概率再求和就可以了:
所以,我们看到电脑是最有价值的状态节点(假如我们只管最近一步的奖励),因此,我们一直在电脑前工作也就显得挺合理得了,毕竟它的奖励值最高,而且被打扰的概率也很小。
现在有个棘手的问题:如果γ=1会怎么样?仔细想想这个问题。
答案是:状态值的计算会无限迭代下去,不停地在所有的节点之间转换。虽然,我们的节点不包含“沉没”状态节点(就是没有连线的节点),但只要我们的折扣等于1,我们还是要考虑未来可能出现无限远的状态转换。正如我们在γ=0的情况下看到的,我们所有的状态值都是正数,因此,当γ=1的时候状态值肯定是个无穷大的数,无论你从哪个节点开始走。
正因为会得到一个无穷大的值,所以我们才引入γ这个变量,而不是把未来的所有收益都直接加起来,否则马科夫奖励过程永远都是无穷大的。大部分情况下,马科夫奖励过程会获得无穷多(或者非常多)的转换路径。因为求无穷大的值没有什么实用价值,所以我们往往会对步数做一些限制,来计算状态值。而γ<1正好可以起到这个限制的作用,这个问题我们会在后面关于状态值迭代方法的时候详细讲述。另一方面,如果你的环境状态转换层数有限(比如,你玩的井字游戏,最多只有9步),这个时候γ=1是可以的。另一个例子,有一类环境,它的状态只有一个,我们把它们成为多臂老虎机MDP。也就是说,在这种环境中,你只要选择一个动作,然后你会获得一些奖励,同时,整个过程就结束了。
正如我所说的,通常情况下γ值总是设置成0到1之间的值(一般设置成0.9或0.99);但是即使是白领工作日这么一个简单的例子,靠手算出MRPs的状态值也是不可能完成的任务,计算机比起人类更适合做这样的运算,通过一些算法优化,我们可以借助计算很快算出MRPs的状态值。我们会在第五章讲具体的实现,在我们学习Q-learning的时候,我将会为你介绍 Tabular Learning 和 Bellman Equation。
现在,我们在马科夫奖励过程之上再加上一层,也是拼图的最后一块:动作。
马科夫选择过程
你可能已经知道如何把动作这个拼图加入到MRP过程中。首先我们要为代理设定一个有限的动作集合。
然后我们要给转移矩阵增加一个新的纬度——动作矩阵,这时整个空间就变成了一个三维的立方体。你可能记得在MPs和MRPs的例子中,我们的转移矩阵是一个正方形的表格,表格的行代表开始状态,表格的列代表结束状态。每个行和列的交叉节点,记录了从开始状态跳转到结束状态的概率。
图 8. 转移矩阵
现在代理不再被动的观察状态转移,而是可以在每次状态转移的时候主动的选择一个动作。所以,对于每个状态,我们不再只有一个数组,而是一个矩阵,增加的纬度就是代理可以采取的动作,而另一个纬度就是代理采取选择的动作后状态转移到下一个状态的概率。下图就是我们定义的新的转移表格,可以发现此时已经不是表格,而是变成了一个立方体。立方体的高(i)就是起始状态,而宽(j)就是结束状态,最后深(k)就是代理可以采取的行为:
图 9. MDP 的转换概率
所以,一般来说,代理采取的行为会影响到达下一个状态的概率,这是一个非常有用的能力。
为了帮助你理解,为什么要添加这么多复杂的变量,让我们想象一下有个机器人,生活在一个3x3的格子里面,它可以做左转的动作,也可以做右转的动作,还可以向前进。这个机器人在这个世界中的状态就是它所处的位置和方向(上、下、左、右),我们会得到总共 3 x 3 x 4 = 36个状态(机器人可以在任何位置,朝着任何方向)。
再想象一下,这个机器人的马达不是那么好使(现实世界也是这样的),当它左转或者右转,有90%的可能转向成功,但有10%的可能轮子打滑了,导致机器人还待在原地。同样的,机器人也有90%的可能前进成功,但是也有10%的可能前进失败。
下图展示了一小部分状态转换图,显示了状态(1,1,up),当机器人在格子中间,并且面朝前。如果,它尝试向前移动,有90%的可能性,它会停在状态(0,1,up),但也有10%的可能机器人向前移动失败,仍然待在(1,1,up)的位置。
为了正确的获得环境和代理行为对应结果的所有可能情况的详细信息,MDP一般会简历一个3D的转移矩阵,包括三个维度(起始状态,行为,结束状态)。
图 10. 格子世界环境
最后,为了让MRP转换为MDP,我们需要添加动作到奖励矩阵中,就像我们把奖励加入转移矩阵一样。这样,我们的奖励矩阵不仅仅依赖状态,也依赖行为。换句话说,这意味着代理获得奖励不仅仅通过最终的状态,也依赖于达到这个状态所采取的行为。这就好比,你做了一些事情,虽然失败了,但是你也可以获得知识和经验。这样,你去做一些事情虽然和什么也不做的结果是一样的,但是做了总比不做好(否则,代理可能会认为什么都不做才是最好的策略)。
现在,有了MDP的基本定义,我们终于可以开始介绍MDPs和RL最核心最重要的概念了:策略。
关于策略,最直观的解释就是,它是控制代理行为的一系列的规则。即使是最简单的环境,我们也可以有许多不同的策略。比如,前面那个简单地格子机器人的例子,代理也可以有不同的策略,可以导致不同的最终状态。比如,这个机器人可以做下面的动作:
任性的一直往前移动,不管前面有没有路
通过判断前一步的移动有没有成功,来尝试绕着障碍物走
傻乎乎的旋转,来取悦它的造物主
随机选择一个动作,像一个喝醉的机器人,走出六亲不认的步伐,等等...
你可能还记得,RL的主要目标是为了获得尽可能大的回报(也被定义为累计递减奖励)。所以,同样直观的是,不同的策略可以导致不同的回报,所以对于强化学习,寻找到一个好的策略就非常重要。这就是为什么策略的概念这么重要,这也是我们核心要找的东西。
我们给策略定义一个正式的定义,策略被定义为对于每个可能的状态代理行为的概率分布:
这里定义为概率,而不是一个特定的行为,是为了在代理的行为中加入随机性。这个随机性非常有用也很关键,我们后面会解释。最后,确定性策略是概率论的特例,其所采取的必要行动的概率为1。
另一个有用的概念就是,如果我们的策略是固定不变的,MDP就会变成MRP,因为,我们可以降低转移和奖励矩阵,转而提升策略概率,并去除动作纬度。
现在,恭喜你,你已经看完了这一章!这章内容有一定的难度,但是它是接下来实践强化学习的基础。接下来两章的内容,我们会介绍OpenAI gym和深度学习,在此之后,我们会开始解决这个问题:我如何才能教会代理解决实际的问题。
总结
在本章,我们了解了强化学习和监督与非监督学习的区别,并且知道了是什么让强化学习如此与众不同。然后,我们学习了强化学习的公式,以及它们是如何相互影响的,然后,我们定义了马科夫过程,马科夫奖励过程,还有马科夫选择过程。
下一章,我们将从理论研究进入实际的操作阶段。我们会覆盖包括安装,开源框架,并且写出我们第一个代理。