白话强化学习与PyTorch
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第1章 强化学习是什么

强化学习(Reinforcement Learning)是一个独立的机器学习研究领域。为了让大家有比较直观的感受,本书将对强化学习和机器学习的一些研究领域进行对比讨论。请原谅我的啰唆,因为有些时候,只有铺垫足够多,路走起来才足够稳。

先说说监督学习(Supervised Learning)。监督学习是一个比较传统的机器学习研究领域。简单概括,监督学习主要希望研究映射关系

y=f(x|θ).

这其实是一个我们在中学时就见过的函数,唯一陌生的是θ——它是待定系数。具体来说,有一个确定了系数的函数和一个确定的x,得到一个确定的y是顺理成章的事情。例如,有y=2x+3,给我一个x的值,让我求出对应的y值,当然很容易——如果x=2,那么y=7,这里的θ就是x前面的系数2和后面的常数项3

如果我们实际观测到的值只有x=2、y=7,但不知道θ的值,希望通过一系列科学的办法“反向”推导出θ的值,那么,这就属于机器学习的研究范畴了。在这个例子中,可以在给定足够数量的样本的情况下,也就是说,在有足够的x和对应的y的值的时候,尝试用线性回归的方法求出θ的值。将已知输入变量x和输出变量y的值作为参数,逐步求出待定系数θ的过程,就是训练(Training)过程。当通过这样一个过程学习到θ应该为什么值之后,如果再有x出现,就可以通过函数y=f(x|θ)计算出y的值。这就是监督学习的实际工作方式,这个例子就是典型的监督学习中的线性回归(Linear Regression)问题。这个过程的具体实现方法,将在6.3节中详细介绍。

再说说非监督学习(Unsupervised Learning)。非监督学习也是一个比较传统的机器学习领域。在机器学习入门阶段使用最多的算法K-Means,就是一个典型的非监督学习算法。例如,在一个空间中,有很多的空间点向量(Vector)空间点向量可以是一维的,也可以是多维的。,这些点在这个空间中的分布很可能是不均匀的。是否可以通过一个算法来求出它们各自的分布究竟聚集在哪些空间区域附近?是否可以找出这些空间区域的中心点的具体位置?答案是:可以。在这个过程中,我们只需要告诉计算机我们要把这些空间中的点分成几个聚类(Cluster),甚至不用告诉计算机我们要把这些点具体分成哪几个聚类,计算机就能对这些空间点向量进行聚类的划分。

如图1-1所示,空间中不均匀地分布着一些点,通过K-Means算法可以计算出它们分别聚集在三个点周围(或者说“聚成了三堆”)。

图1-1 K-Means算法示意

我们可以研究这三个聚类中的点都有哪些共性,也可以研究哪些点没有在这些聚类中或远离这些聚类中心。这样的应用场景在现实生活中是很多的。例如,能不能把用户的年龄、收入、贷款金额等数据绘制成这样的图像,通过聚类的方式找出用户人群的分布,然后针对不同的人群尝试设计相应的产品或业务,以分别满足他们的需要?这可比自己抱着脑袋绞尽脑汁冥思苦想要科学得多。

当然,我们还可以通过这种方法来研究那些不属于任何类的、飘在所有类之外的“离群点”。离群点的研究也是有价值的,因为它们太特殊了。它们为什么特殊?是数据收集系统本身的问题导致的特殊性,还是这个点本来就是一个“异类”(例如诈骗事件的特征点描述)?这些都是可以研究的思路。

显然,这个过程与研究y=f(x|θ)的过程(需要知道xy的具体值,才能完成整个训练过程)不一样。在这个例子中,我们只需要知道x是什么就够了——x就是空间中的一个个点。

还有很多机器学习的研究领域,例如迁移学习(Transfer Learning)、生成对抗网络(GenerativeAdversarial Networks, GAN)等以不同建模方式或思考角度来解决问题的方法论。在这里,我之所以不愿意称它们为“算法”,而愿意称它们为“模型体系”或“方法论”,是因为它们确实已经各自拥有了一套较为完整的处理数据、建模、训练、调优的套路。它们中也包括本书的主角——强化学习。

1.1 题设

强化学习是为了解决哪些问题而设计的?在人工智能领域,我们其实一直希望机器人足够智能。这里的“智能”是指让计算机拥有比较好的推理、判断、分析能力,并基于这些能力自动进化,最终胜任人类交给它们的任何任务——最理想的状态,就像阿诺德·施瓦辛格阿诺德·施瓦辛格(Arnold Schwarzenegger,1947年7月—),政治家,美国加州前州长,健美运动员、力量举运动员,演员、导演、制片人。和克里斯塔娜·洛肯克里斯塔娜·洛肯(Kristanna Loken,1979年10月—),演员、制作人。主演的《终结者》(The Terminator)系列电影里的未来机器人那样。可以说,和我同龄的“80后”中的很多人都是在这类科幻作品的启蒙下,对人工智能产生了懵懂的感觉。《终结者》系列电影的第一部是1984年在美国上映的,看这部电影时我已经上大学了,大概在2002年。在那时的我看来,电影中的机器人简直无所不能——全天候工作、刀枪不入、变形自如……在那个时候,我脑子里对人工智能的概念是:像“终结者”这样的高智能人形机器人,应该是未来某个时刻的研究目标,也八成是大学或者实验室里正在研究而且没准儿哪天真的能研究出来的东西。说起来,那时我的想法还真是天真。

我再次看到与机器人相关的电影,已经是2008年了。那也是一部极为成功的作品——《机器人总动员》(WALL-E),在豆瓣上有9.3分的高分评价。当时,那部电影让我热泪盈眶。

随着年龄的增长,虽然我不会再像第一次看《终结者》时那么“激动”了,但仍然免不了偷偷地想:如果真的能造出这样的机器人,那就太好了。同时,我也开始有意识地寻找相关资料。我真的开始好奇:在清华、哈佛这样的大学里,人工智能专业的学生都在学什么?离实现这个目标还有多远?是不是有朝一日我们也能造出这样的机器人?

回过头来看,不得不承认,那时自己还是太年轻。其实,在有了多年的工作经历之后,我知道,虽然这两部科幻电影里面的机器人很难制造出来,但它们仍然属于人形机器人的研究范畴,涉及材料学、工程力学、大规模集成电路、高精度传感器工程学等众多前沿研究领域,而算法或者机器学习在其中只占很小的一部分——很小,很小。

在此,应该正式提出我的观点了:人形机器人不是强化学习研究的重点和难点,或者说,当前强化学习研究和落地的领域及其擅长解决的问题并不在人形机器人这个方面。不过,这并不会让我原本在强化学习领域积累的浓厚兴趣有一丝一毫的减弱,因为我仍然看到了基于海量样本训练的阿尔法围棋(AlphaGo)那令人惊叹的表现。

也许有些人会说,如今在互联网应用中已经出现了很多优秀的作品,不论是人脸识别(Face Recognition)、物体识别(Object Detective),还是智能相机的美图、美颜功能这仍然是计算机视觉(Computer Vision)的研究范畴。等,不都是通过样本积累一点一点地进步,最终满足我们对产品的要求的迭代过程吗?刚刚说过的那些问题,能够通过强化学习来解决吗?两者有本质的区别吗?我想,在表达自己的观点之前,有些事情还是要和大家讨论清楚,这样我们在进入这本书的主要内容之前才能有足够的共识。

1.1.1 多智能才叫智能

到目前为止,不仅在学术界,甚至在工业界,仍然有不少人在争论——他们总会觉得某一种或某一类算法更为智能,或者更贴近智能的本质。

例如,据我所知,有很多人对本书的主角强化学习格外痴迷,觉得它才是实现人工智能的唯一靠谱途径(因为它的推理过程是那么优美和自然)。好吧,我不反对这些人对强化学习优美和自然的推理过程的称赞,因为这是事实。

也有相当一部分人认为,深度神经网络在形态上酷似人类的神经网络,是仿生学对人体神经结构的顶礼膜拜在计算机领域的完美落地。确实,这种结构在近些年的发展给我们带来了太多的惊喜与幻想。

还有一些人认为,只有像遗传算法这样的算法才能体现大自然优胜劣汰、适者生存的本质进化原理,因此有了“万般皆下品,唯有遗传高”的另类思路。我在工程中使用遗传算法的经验,确实让我多次体会到了遗传算法的优势,例如大大减少计算量、对于NP问题Non-Deterministic Polynomial问题,多项式复杂程度的非确定性问题。等复杂问题有着极高的提升效率的作用。

然而,刚刚提到的这些方法论或者算法族真的都体现了不容置疑且最为本质的智能体进化的原理特性吗?我并不这么认为。尤其是神经网络和遗传算法,它们仅仅是在“望文生义”的层面从人类神经网络和DNA遗传的角度进行的略显生硬的模仿,勉强做到了“形似”,谈不上理解并复现人类智慧进化的精华。要知道,在生命科学层面的认知上,人类还有很长的路要走。人类对自己的认知和了解的过程,其难度就像自举——自己抓着自己的头把自己举起来——岂止困难,简直不可能。现代医学对人类神经之间信号传递的了解仍是极为有限的,否则,能与人类神经嫁接的机械手臂早就问世了。人类对遗传因子理解的局限也是这样的。不说别的,仅转基因这样一个已经被科学家宣布“破译”的遗传因子应用子领域,还是令很多人忧心忡忡。这样一个看似被“破译”了的“上帝密码”在被我们诵读时带来的不和谐音符,已经让很多人看到了恶果——大家可以自己去网上找找有关孟山都孟山都是美国的一家跨国农业公司,其产品以农药、化肥、种子等农业科技产品为主。的新闻。我个人从来不相信“阴谋论”,即使技术层面真的有问题,也是人类在自然面前的不自量力导致的。那么,我们还能拍着胸脯说自己理解了智慧生物的承载本质吗?从这个角度说这些技术是“形似”,都是客气的。

1.1.2 人工智能的定义

其实,在本书的开头就给人工智能下定义是不合适的,因为定义下得不好,很可能会误导读者。但是,对人工智能的定义没有基本的认识,也是一件很麻烦的事情,因为很可能没过多久就会有读者开始纠结于“这种人工智能够不够智能”“这个东西配不配叫人工智能”这样基本的而充满争议的问题了。

需要注意的是,机器学习也好,人工智能也罢,这两个词汇本身就在无形中给人一种误导。它们让人们觉得,机器是自己在学习的,由人制造出来的这个“智能”的东西自己有分析、思考、进化的能力。因此,很多非业内人士会把这两个词背后的含义无限生发、放大、再放大。其中的“乐观”者觉得,在未来,机器人会非常厉害,什么都能做,什么都能自动完成,人类可以让机器人来伺候了;而“悲观”者则认为,人工智能会厉害到要么让人类“下岗”,要么直接统治地球、统治宇宙的地步……在我看来,这真的是一种误解——就像以理解畜力生产的方式去理解内燃机的工作原理,以理解老婆饼的方式来理解老婆……望文生义害死人。

前两年,我参与了一个图像识别项目,其中的一个项目组为了让一个神经网络能够认出视频中的物体,找了一群大学生来做打标签的工作(标出图片中的物体是什么东西、在什么位置),然后把数以万计打了标签的图片放到网络中去训练,从而让网络正确识别这些被标记物体的位置和分类。在这个过程中,超过60% 的人工数(人×天)花在了标记样本上。当时,业界还有几个从事相关领域研究的大型机构,在这些机构的工作人员中间流传着这样一句话:有多少“人工”,就有多少“智能”。我当时说话可能更刻薄一些——这完全就是“人工”,哪儿来的“智能”。然而,不管怎么样,这种方法被验证了,它工作起来笨拙却有效,所有的公司和团队都可以用这种方式来复现深度神经网络应用中的监督学习过程。它让深度神经网络在迭代中不断提高自身的准确率(Accuracy),并最终在线上环境中自动工作,从而满足工程的需要。那么,这究竟算不算人工智能呢?

还是不着急回答这个问题。我们来追思计算机界的一位前辈——艾伦·麦席森·图灵Alan Mathison Turing(1912年6月23日-1954年6月7日),英国数学家、逻辑学家,被称为计算机科学之父、人工智能之父。。他曾经有一个很有趣的测试假设,被称为图灵测试(The Turing Test)。将测试者(一个人)与被测试者(一台机器)隔开,由测试者通过一些装置(例如键盘)向被测试者随意提问。进行多次测试后,如果有超过30% 的测试者不能确定被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人类智能。

从广义上讲,如果人类通过有限的人机交互过程后发现,有相当比例的人无法判定与其交互的究竟是人还是机器,这台机器就通过了图灵测试,或者被称为具有人类智能。

乍听起来貌似没什么问题,不过不知道大家有没有注意到,在这里,图灵虽然提出了很多限制条件,但完全没有提到这台机器是否理解了交互过程的真正含义,也没有提到这台机器是否要跟人类一样具备这种在交互中确实存在的情绪。换句话说,在这个由机器和人进行的自动化互动过程中,只要人无法判断被测试者是否是机器,就可以判定这台机器拥有人类智能,至于什么理解含义啊、充满智慧啊,并不在考虑范围内。

这意味着什么呢?这意味着:这种人工智能仅仅是一个高质量的自动化过程,只要它能在人类关心的范畴高质量地完成作业就够了。没错,现在我们研究的所有人工智能项目,无论复杂还是简单,无论高深还是浅显,只要它能够在应用范畴提高自动化程度、降低错误率,或者能在错误率与人类相当的情况下极大地提高处理效率,给出的结果和我们期望中由一个人来完成工作的结果很接近,就可以了。这些高质量的自动化过程,都应该属于人工智能的范畴。当然,这不能与我们所说的“智慧”画等号,因为此刻我们只是在就事论事地讨论“人工智能”。

1.2 强化学习的研究对象

我们来讨论一下强化学习的研究对象有哪些。

1.2.1 强化学习的应用场合

可能有心急的读者会问:你说了这么半天,该开始说说强化学习的研究对象都有哪些了吧?别急,这就开始。

强化学习的主要目的是研究并解决机器人智能体贯序决策问题。尽管我不喜欢直接把定义硬邦邦、冷冰冰地扔出来让大家被动接受,可还是免不了要在这里猛然给出“贯序决策”这么专业的词汇。好在,很快我就能通过例子把这个词汇给大家解释清楚了。既然大家要么是程序员,要么正走在程序员养成的路上,要么正看着其他人走在程序员养成的路上,那么,按照程序员的思维来理解强化学习将会更加顺畅。

把“贯序决策”翻译成“白话”就是:强化学习希望机器人或者智能体在一个环境中,随着“时间的流逝”,不断地自我学习,并最终在这个环境中学到一套最为合理的行为策略(如图1-2所示)。在这样一个完整的题设下,机器人应该尽可能在没有人干预的情况下,不断根据周围的环境变化学会并判断“在什么情况下怎么做才最好”,从而一步一步完成一个完整的任务。这样一系列针对不同情形的最合理的行为组合逻辑,才是一个完整的策略,而非一个简单而孤立的行为。

图1-2 贯序决策

没错,这就是强化学习要研究并解决的问题。我想,可能已经有一些爱动脑筋的读者在心中暗暗反驳我了:这类问题一定要用强化学习来解决吗?我怎么觉得不用强化学习也能解决呢?

既然产生了这样一个争议,那我们先不去想是否一定要用人工智能这么“高大上”的工具来解决这类问题,而去想想自己以前有没有处理过类似的问题。如果一时想不起来,也没关系,请跟我看一个例子。

为了简化问题,假设我所在城市的道路是横平竖直的,各街区的边长相等,如图1-3所示。外侧的边框表示城墙,车辆无法通过。中间的方块表示街区,街区和街区之间就是道路。为了称呼方便,我们用英文字母A~E来标记纵向的道路,用数字1~4来标记横向的道路,并约定A大街和1大街交汇处的坐标为A1(也就是START处)。圆圈中的数字表示我们用GPS或者其他手段测算出来的当前道路的拥堵程度,1表示通畅,9表示拥堵,也可以具象地将圆圈中的数字理解为通过某段道路需要1分钟到9分钟不等——总之,怎么理解简单怎么来。

图1-3 导航问题

现在,我准备从START处去往END处,我需要一个“智能”的软件为我导航。这个问题难吗?如果你接触过与数据结构相关的课程,那么你一定会觉得这是一个非常简单的问题——就是图论里的图遍历问题或者树遍历问题。

该导航软件预设不会给出走回头路的方案(以免进入死循环)。以START处为起点,我可以向上、下、左、右各走一个街区的距离:向左和向上走会到达城墙,不能再走;向右走到B1处,有三条路可以走;向下走到A2处,还有三条路可以走。所以,如果把这个问题当作一个树遍历问题,树的前两层应该非常容易构建出来。

如图1-4所示:X表示走回头路或者“撞墙”,这样的路是不能走的,其下面的树结构也就不存在了;A1、B1等交汇位置的节点则表示该处可以前往,并标注了该处之后的走法。这样一层一层往下标,最多能标出多少层呢?不清楚,要仔细算算才能知道。但可以确定的是,只需要8层就可以完成从START处(A1)到END处(E4)的行进,而且走法不止一种。

图1-4 地图树遍历

任意列举几条路线:

A1→B1→C1→D1→E1→E2→E3→E4

A1→B1→C1→D1→D2→D3→D4→E4

A1→B1→C1→C2→C3→C4→D3→E4

……

我们不仅可以把这些路线一一列举出来,还可以把经过每条路线所花费的时间算出来(对一条路线的时间成本做一下简单的加法运算就可以了)。以路线 A1→B1→C1→D1→E1→E2→E3→E4为例,时间成本为3+2+2+2+2+2+2=15,也就是说,从START处(A1)到END处(E4),走这条路线需要15分钟。

如果想找到最短的路径,只要遍历路线,计算每条路线的成本,把成本最低(或者说耗时最短)的路线挑出来就可以了。这个思路再简单不过,可以保证在当前状态下是最优解——只要不出现走到半路突然发生交通事故,使得原本通畅的道路变得拥堵,或者原本拥堵的情况突然得到缓解。

现在,出现了两个问题。

第一,我们很容易用一种“智能”的方法得出这种问题的最优解,并向用户推荐这个最优解。之所以说它“智能”,是因为它确实自动实现了路程规划和推荐,挑选的是成本最低的路径。但是,在这个过程中,我没有用到任何机器学习的知识,也没有遇到任何需要通过样本学习来生成模型、确定待定系数的问题。我只用计算机专业本科一年级所学的一些基础知识就已经获解了,完全没有用到人工智能的方法——好意思叫“智能”吗?

第二,这是不是一个贯序决策问题呢?是或者不是,这也是一个问题。我想,可能会有两方面的意见。

认为这不是贯序决策问题的读者,会觉得这里面根本没有决策问题,而是纯粹的树遍历(如图1-5所示)问题——非常不聪明,非常不智能,这哪里这是什么贯序决策问题!

图1-5 树遍历

认为这是贯序决策问题的读者会觉得:从起点前往终点,中途在任何一个可以选择路径的位置都进行了判断,而且每次都选择沿着最好的路线前进——是的,“最好”,没有“之一”——在每个环节都进行了选择,这难道不是贯序决策问题吗?

两方的意见,我觉得都有道理。我不是一个喜欢咬文嚼字的人,也不想拿着什么金科玉律去说教。问题就摆在这里,我们要考虑的是:用什么样的方法解决问题才是合理的。

这个导航问题,在我看来,还真可以算作贯序决策问题。第一,它“够贯序”,因为它是由一系列决策判断组合而成的一个完整的行车路径策略;第二,它“有决策”,因为在每个十字路口都有很多选择,我需要充分的理由来决定要走哪一边。这两点是事实,对不对?

或许有些读者很失望——为什么要讲这么简单的例子?我只是希望大家能通过一个简单的例子明白一个道理:数学问题不一定非要通过极为艰深的算法和技术来解决,很多时候就是“小药治大病”,如果能用简单的方法解决问题,确实没有必要摆弄那些复杂的算法。反之,为了解决一个简单的问题而引入一大堆复杂的问题,在我看来,不是一种值得提倡的思考和处理方式。在解决具体的落地问题时,要尽可能选择复杂度可控、难度低、理论成熟的方法。像本节中这么特殊的贯序决策问题,在一定的限制条件下就会“退化”成搜索问题或遍历问题。所以,别犹豫,我们本来就应该用简单的方法去解决简单的问题。

结论已经很清晰了,刚刚这个问题就是一个贯序决策问题,只不过它是一个特例。那么,更为普适的贯序决策场景是什么样的呢?这个问题好,我们不妨想想看。

如果街区不是只有A~E这5条纵向的大道和1~4这4条横向的大道呢?如果有100条横向的大道和100条纵向的大道,这棵遍历树会有多“高”呢?应该最少要走198条路才能到达,也就是一棵199层的遍历树——这是非常可怕的!甚至,在很多场景中,我们很可能无法估算具体的层数。除此之外,如果我们不清楚每条路的拥堵情况,该怎么办呢?如果我们不能明确量化通过每条路预计需要多少分钟,该怎么办呢?

通过一系列科学的方法,对这类普适性问题进行体系性的求解方式和方法的归纳,才是这么多强化学习算法要解决的核心问题。

1.2.2 强化学习的建模

在1.2.1节中,我们对一个简单的例子进行了讨论。我只是为了说明一个问题:虽然强化学习是一种用于解决贯序决策问题的方法,但并不是所有问题都必须借助这种高深的手段才能获解。

例如,在1.2.1节那种层级有限且树杈上的权重(行进成本和行进时间)清晰的场景中,采用普通的树遍历方法足以解决问题。如果不知道整棵树的层级、分叉和每个树杈的权重,是没有办法用直接遍历的方法得到一个完整路径的行进策略的。

这个时候,强化学习就可以派上用场了。按照最朴素的思路,似乎应该想尽办法来构造这样一棵树,然后把问题转换成我们以前接触过的、有成熟解决方案的问题。为什么这么说呢?千万别忘了计算机是干什么用的。它能思考吗?不能。它能做的事情太单纯了,只能做加、减、乘、除运算,而且乘、除、减都是由加模拟出来的。除此之外,就是比大小。再多的处理过程,也都是加、减、乘、除和比大小这样的简单操作的组合——没办法,这是计算机天生的能力(或者说局限性)所带来的。因此,如果能够把贯序决策过程化简成树遍历过程,那么问题就回到了计算机擅长的范畴,也就容易解决了。

回想一下前面我们提到的监督学习。监督学习的方法是非常套路化的:把输入的x和输出的y之间用一个函数y=f(x|θ)来映射,把用来描述这种映射关系的误差描述成待定系数为θ的损失函数Loss=∑|f(xi|θ)−yi|,通过最优化问题(Optimization Problem)的思路或方法来求解当损失函数Loss(θ) 取极小值时θ的值。这就是绝大多数监督学习方法的整体思路,f(x|θ)就是我们想要得到的模型表达式。在机器学习中,监督学习的问题在学习过程中被化简了:用函数描述误差值,并通过加和减的方式更新参数,再通过比大小的方式判断训练是否收敛的过程,就是一个利用计算机本身的计算能力建模的过程。

当然,一个机器学习问题也有可能不被转换成求解一个函数的极小值的问题,而被转换成求解其极大值的问题。例如,待优化的函数在描述得分、匹配度、适应度等积极评价标准的时候,就是在求极大值了。

强化学习也能总结成这样的套路吗?当然能。伟大的人工智能先驱们为了我们做了非常多的铺垫,我们就沿着他们的思维脉络来逐步了解强化学习吧。

1.主要概念和术语

我们在各种与强化学习相关的资料中都能看到类似图1-6的示意图,即使内容略有出入,核心意思也没有很大的差别。其中有几个对象是建模的重要因素,接下来就会介绍。不过,我想强调一下:这样建模实属不得已。为什么?回头看看1.2.1节中那个导航的例子。在那个例子中,我们就像在玩游戏时开启了“上帝视角”,不知不觉就启用了很多“特权”,于是,起点在哪里、终点在哪里、一共有多少条路、走每条路时需要花费的成本是多少,一目了然。所以,我们当然可以在全局范围内计算、排序,得出一个全局最优解。

图1-6 强化学习研究对象关系示意图

我们希望机器人能够在一个环境中自己找到那个“最优”(至少是一个“差不多优”)的决策路线,但问题是,我们并非每次都有“特权”,确切地说,我们在绝大多数情况下都不可能有“特权”。不过,一个以人类智能的思路进行训练与进化的机器人,还是要尽可能与人类的经验和推理过程保持一致,毕竟人类才是目前自然界中智慧程度最高的,否则,为什么是人类统治了地球,而不是三叶虫三叶虫是一种生活在远古时期的节肢动物,在5亿~4.3亿年前发展到高峰,在距今约2.4亿年的二叠纪完全灭绝,在地球上生存了超过3.2亿年,是一类生命力极强的生物。、恐龙或者大猩猩呢?而从悲观的角度思考,强化学习成了一种无奈的选择,是在无法通过直接开启“上帝视角”解决问题的情况下采取的仿照人类探索自然环境的方法去建模的手段。那么,强化学习设定的重要研究对象都有哪些呢?

(1)Agent

通俗地讲,“Agent”(或者称为“Brain”、大脑、智能体)就是机器人的智能主体部分。它到底应该叫什么,其实不重要。我们只需要知道,它就是我们放到环境中去探索和学习用的机器人主体。请回想一下,在1.2.1节中,我们把导航这样一个具体的问题抽象成了一个树遍历问题,对不对?可是,现在的麻烦是,如果这棵树的形态不确定,那么我们不仅没有办法用普通的树遍历方法来解决问题,而且必须先构造一个用于尝试的机器人来构建完整的树(这个机器人会在这个陌生的世界里通过试探的方式来构建一棵树)。

(2)Environment

“Environment”一般翻译成“环境”,是指机器人所处的环境。对于环境,没有特别苛刻的定义,主要是指机器人所在的环境,通常我们不会深究它的具体定义。其实,Environment就是机器人将要试探的环境,也就是客观环境(可以是一个游戏程序,也可以是其他复杂的环境)。

(3)Observation

“Observation”翻译成“观测”可能比较好。Observation是指Agent能够观测(感知)到的环境信息。因为我们无法开启“上帝视角”,所以只能在非常有限的视野里观测周围的情况——是的,非常有限。这种建模方式本身也是由人类自身的认知局限性产生的。无论是人,还是机器人,能够感知的范围和内容都是有限的,因此,能感知什么,把什么当成Observation就好了。我们在写程序的时候,可以用一些技巧对观测的视野进行降维,也可以把在一段时间内连续观测到的情景数字化并作为当前观测到的Observation。

(4)Action

Action(动作)是指由Agent发出的行为和动作,以及Agent与Environment之间发生的动作交互。Action的内容定义很丰富,可以描述成是否做某个动作(用类似1、0这样的值来表示),也可以描述成一个连续的向量(例如 [0.35,0.21,0.7]),关键看机器人是什么类型的。

Action可能(不一定)会影响机器人在下一时刻的状态,我们只要考虑人的情况就好。例如,一个人今天有没有打伞,其实不会影响明天下雨的概率,因此,在这个场景中,打伞这个动作不会对Observation有任何影响,该观测到下雨还是会观测到下雨。再如,在下象棋时,一个人的走棋会在很大程度上影响另一个人接下来的走棋,因此,在这个场景中,连续观测到的两个盘面会大不一样。当然,在研究的时候,肯定是前一个场景更为简单一些。

(5)Reward

“Reward”一般翻译为“奖励值”,有时也翻译为“回报值”。在本书中会混用这两种称谓,或者口语化地称之为“得分”。在强化学习中,我觉得最为有趣、最为精妙的一个研究对象兼超参数(Hyperparameter)就是Reward。

什么是超参数呢?就是无法通过训练自动学会的参数。这与本章开头的那个监督学习的例子不同。在那个例子中,y=f(x|θ),θ虽然是未知数,但可以通过对损失函数进行优化后求解满足误差最小的θ的值来求出。超参数则必须在整个训练开始之前确定,因为在训练过程中没有办法通过学习来确定这个值。

在强化学习中,Reward是指Agent在做了一个动作后(或者在某一时刻)得到的用来描述其行为好坏的值(如图1-7所示)。如果一个行为很好,那么Agent可能会得到一个很大的奖励值,例如 +100、+220;如果一个行为很不好,那么Agent可能会得到一个很小的奖励值(甚至可能是负值),例如 -10、-500。看样子,-500像是闯了大祸后得到的奖励值——哦,不,说“惩罚值”才更合适吧。

图1-7 对机器人的奖惩

2.观测流程

现在,我们已经基本上把强化学习领域的研究对象列全了。

从Agent的角度看,做一个动作At,得到一个观测值Ot,以及一个标量标量,只有大小、没有方向的值,在本书中可以直观地理解为实数。奖励值Rt。观测值Ot可以通过另一个概念来几乎等同地理解,这个概念就是状态(State),写作St。机器人在一个环境中不断地试探,就会不断地得到这样一个短序列:

StAtRtSt+1.

我知道,很多读者朋友讨厌看公式、字母、角标等容易让人头晕的东西。不过,由于在很多资料中会出现同一个概念的多种书写方式,我也只能尽量把它们都列出来。当然,我每次都会用“白话”解释一下字母或者角标的含义。例如,这些观测值Ot在被机器人获取后,有可能不是原原本本地被使用的——如果Ot有10000个维度,我就会保存或者关心10000个维度,但其中可能有很多我不需要的信息,那么,我可以考虑用任何可靠的工程手段来做一个化简的表示。

Ot写作,e是指特定的Environment,t是指某一时刻,意思就是:在某一时刻所观测到的状态描述信息。在这里,不必纠结于OtSt的写法,因为机器人完全可以通过软件或者硬件的手段只去观测我们认为重要的状态信息,所以,直接得到St也不是难事。因此,本书不再刻意强调OtSt究竟有什么差别——或许在学术上有差别,但在实践中我们不再纠结。同时,在本书中,也不区分状态SA及时间片t的大小写(在其他资料中,我也看到过不少不区分大小写或者大小写混用的情况)。

其实,将短序列StAtRtSt+1作为观测对象来建模也实属无奈。因为这样做无法得到一棵完整的树,所以才不得不用边做动作边记录的方式来收集相应的数据。在一些资料中,会将这些短序列称为S→S′Transition,这就是在强化学习的建模环节所能观测到的有意义的最小单位。今天的人可以从众多文、史、哲方面的资料中汲取营养,但是古代的人是没有这样的条件的。怎么办?只能通过反复实践,把这些客观观测到的现象所对应的人类行为及后果片段性地记录下来——连续记录。当积累一定量的数据之后,后世的人就能从中品味、总结,得到一些智慧的启迪了。

3.注意事项

在本节前面的内容中,为了介绍新的概念,我给出了对应的中文和英文。在本书后面的内容中,将只使用它们的中文或者英文来表示这些概念。这些概念涉及的对象,虽然看上去简单,但仍为后面研究它们之间的复杂关系留下了伏笔。在研究正式开始之前,我要强调以下三点。

第一,下标tt+1指的是某一时刻。虽然我们研究的是连续决策问题,可是再“连续”的状态,也是由一个个小的、离散的静态状态对象构成的,Agent只能处理这类离散的对象。也可以说,t就是一个时间片,t+1就是下一个时间片。至于一个时间片所代表的时间究竟有多长,以及环境这个客观对象在没有收到 Agent发出的动作At的时候,它的时间片计数是否应该继续增加,就要“具体环境具体分析”了。

第二,我们在研究强化学习领域的相关问题时,通常是站在Agent的角度去观察、建模、分析的,而很少会站在环境的角度去描述(除非这个环境是由我们自己构建、用来与Agent进行交互的)。

第三,动作At、状态值St、奖励值Rt,究竟是客观存在的,还是人为设定的?这个问题很重要。

动作,很容易理解。一个机器人,无论是下棋机器人(例如AlphaGo),还是扫地机器人,抑或自动驾驶机器人,动作的取值都是有限的。无论是离散描述的动作,例如前、后、左、右的行进方向,还是连续描述的动作,例如方向盘旋转的角度[−π,π]9F弧度单位,此处的 π 等于角度中的180度。、启动或关闭一个设备,抑或它们的组合,都是在制造机器人来解决问题的时候就确定了的(如图1-8所示)。因此,我们基本上可以认为,动作的取值范围是客观的。

图1-8 输出为复杂动作的机器人

状态值的数量可能比较多,因为要描述一个具体的状态,几个离散的数据可能不够用,通常需要数以万计甚至数以百万计的不同数值才能描述一个环境所能产生的状态值。它的取值基本上可以认为是主观的——因为人可以根据自己的需要对客观世界进行不同维度的刻画,所以 Agent也可以根据自己的需要对它所感知的世界进行相应的取舍。例如,对一辆正在自动行驶的汽车,要如何描述它在某一时刻的状态呢?

即使没有做过相关的项目,也可以想一想:可能要通过GPS信息描述当前的位置,可能要描述当前的车速,还可能要通过各个方向的雷达测距信息来描述周围物体与车体之间的距离……粗略算下来,需要十几个维度的信息。此外,需要把车体前方和后方摄像头采集的连续的图像输入车载计算机,而图像里面的信息就多了,哪怕是一幅800像素×600像素的三通道图像,也至少包括144万(3×800×600)个维度的向量……不论是可能的取值范围,还是在收集这些数据时真正观测到的时间片的数量,都是非常惊人的。而这些,都只是设想的值。至于要不要通过感知地面的坑洼程度、摩擦力的大小来改进行车的舒适程度等,完全取决于这个自动驾驶机器人是否需要解决相关的问题——可以选择感知,也可以选择不感知,没有严格的对与错,一切都以帮助机器人更好地完成任务为目标(如图1-9所示)。

图1-9 机器人对状态值的感知

奖励值估计是这三个值中最特殊的一个了,它几乎完全由机器人的开发者来决定。机器人每观测到一个状态,都要尝试做一个动作(原地不动也算一个动作,你可以把它叫作“沉默”)。那么,一个动作应该获得多大的奖励值呢?环境本身是无法给出的。

奖励值看上去非常像人类自己的价值观,而人类的价值观千差万别,不仅生活在不同地区、认知水平不同的人的价值观不同,就连我们身边最亲近的人、和我们的教育背景相近的人的价值观也不同。价值观不同的主要表现,就是对同一件事情的评价标准及对矛盾的取舍原则不同。例如,孩子在公共场合犯“熊”,家长应该呵斥还是放纵?呵斥可以理解为一个负的奖励值,放纵可以理解为一个正的奖励值,这就是一种训练。训练的结果在当时可能看不出来,但在多年以后,这个孩子可能成为老师、同学、邻居都喜欢的好少年,也可能不怎么受周围的人欢迎。其实,关键就在奖励值的设定上。对一个机器人来说,在一个环境中观测到一个状态值后做一个动作所得到的奖励值,直接体现了训练者的价值观,而这个价值观将对训练结果产生直接的影响。

可以说,奖励值的不同将直接导致训练目标的不同。从另一个角度看,在同样的环境中,可以通过改变奖励值来调整训练的方向。

了解这些概念以后就可以开始训练了吗?是的,基础概念只有这么多。从第2章开始,我们就要进入正题了——如何通过上面这些值得到一个好的机器人策略。

1.3 本章小结

我们在研究任何问题之前,都应该划一个范围,或者确定一个大致的研究边界。然后,我们才能在这个确定的范围内进行讨论。

好了,开场的铺垫就这么多。接下来,我们就正式开始探究机器人自我进化的奥秘。