强化学习

《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版1
第六章 强化学习
我们知道,机器学习是一种从经验数据中构造和改善模型的理论与方法,前述监督学习
和无监督学习主要以带标注或不带标注样本数据作为反映外部环境特征的经验数据。事实
上,除样本数据之外还可使用外部环境的反馈信息作为经验数据构造和改善模型,由此形成
一种名为强化学习的机器学习类型。强化学习又称为再励学习或评价学习,采用类似于人类
和动物学习中的试错机制,通过不断获取外部环境的反馈信息优化调整计算模型或动作行
为,实现对序贯决策问题的优化求解。由于外部环境反馈信息的形式和内容比样本数据更加
灵活广泛且可以在线获取,故强化学习具有非常广泛的应用前景,被认为是一种最接近人类
学习行为的学习方法。目前,强化学习已在机器人控制、汽车智能驾驶、人机交互、过程优
化控制、游戏博弈等多个领域得到了成功应用。本章主要介绍强化学习的基本理论和方法,
首先介绍强化学习的基础知识,包括强化学习的基本概念、马尔可夫模型和强化学习的基本
方式;然后比较系统地介绍若干基本强化学习方法,包括值迭代学习、时序差分学习和 Q 学
习;最后简要介绍两种典型的示范强化学习方法,即模仿强化学习和逆向强化学习。
6.1 强化学习概述
强化学习主要通过不断获取外部环境反馈信息的方式实现对连续多步自动决策问题的
优化求解,所要解决的问题形式和所涉及的基本概念与前述监督学习和无监督学习方式都有
着较大差异。强化学习的具体过程主要是智能体与其外部环境之间进行不断地动态交互过
程,通常采用马尔可夫模型表示这种动态交互过程并通过策略迭代、值迭代和策略搜索等方
式进行优化计算,获得最优的连续性多步决策。本节主要介绍强化学习的基本概念和基本思
想,为读者进一步学习强化学习的基础理论和具体方法提供基本的知识支撑。首先介绍强化
学习的基本概念及若干基本术语,并将强化学习与监督学习进行对比分析;然后比较系统地
介绍用于强化学习的马尔可夫模型和马尔可夫决策过程;最后分别针对有模型和无模型的情
形分析讨论强化学习的基本求解思路和计算方式。
6.1.1 强化学习基本知识
在游戏博弈或对弈等很多应用场合需要连续进行多步决策才能完成任务,这种连续多步
的决策过程通常称之为序贯决策过程。例如,五子棋对弈游戏的目标是抢先让五颗同色棋子
连成一条直线,为此需要不断依次在合适位置落子,可将每次落子视为一次决策。这种通过
多次不断落子完成五子棋对弈的过程就是一个序贯决策过程。如何让计算机像人类一样能够
自动进行合理的序贯决策是人工智能领域需要解决的一个重要研究问题,通常称之为序贯
决策优化问题,简称为序贯决策问题。强化学习的目标是通过机器学习方式有效解决序贯决
策问题,或者说通过机器学习方式实现对连续多步自动决策问题的优化求解。
强化学习主要通过学习先验知识寻找最优决策过程,区别于监督学习以明确的样本标签
作为经验数据或先验知识并通过样本标签直接告诉模型该如何完成指定任务,强化学习使用
的经验数据或先验知识则较为模糊,通常是由智能体所处环境提供的某种反馈信息。这种反
环境
智能体Agent
动作
状态 奖励
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版2 馈信息的内容主要是对智能体当前某种行为或动作是好是坏的某种评价。若当前行为较好,
环境给予的反馈信息就是给予某种奖励或给予某种较高的奖励;反之,环境给予的反馈信息
就是给予某种惩罚或给予某种较低的奖励。对任意给定的智能体,如果该智能体所获得的累
计奖励越多则表明其行为策略越能满足任务要求。在强化学习过程中,智能体需要不断与其
所处外部环境进行交互获得反馈信息,只能通过不断尝试的方式去探索如何才能使得在当前
状态下的累计奖励值最大。图 6-1 给出了强化学习的基本要素和基本流程。
图 6-1 强化学习的基本流程
如图 6-1 所示,强化学习系统主要包括智能体(Agent)、动作(Action)、系统环境
(System Environment)、状态(State)、奖励或反馈(Reward)这几个基本要素。其中智能体
是行为的执行者,在实际应用中可能是一个游戏玩家、一个棋手或一辆自动驾驶的汽车等;
动作是智能体发出的行为,例如在自动驾驶任务中汽车向右转弯便是一个动作;系统环境是
智能体所处的外部环境,也是智能体的交互对象,例如在自动驾驶任务中系统环境便是实际
的交通环境。智能体的动作可能会使得系统环境的状态发生某种变化,系统环境能够对智能
体的行为做出某种合理奖励或反馈,例如可将汽车自动驾驶的安全行驶里程数作为反馈信
息。强化学习的目标是使得智能体的动作满足某一任务需求,例如希望自动驾驶汽车能够通
过一系列自动操作安全驾驶到目的地。
在强化学习当中,最简单的情形是可以方便的对强化学习系统的基本组成部分进行建模,
对于智能体和系统环境,强化学习通过建立环境模型来对二者进行模拟。显然,只有当任务
的系统环境已知且有限时才能建立环境模型。所有可能的动作组成的集合称为动作集合,单
步动作所有可能的奖励取值组成的集合称为奖励集合,除此之外还有当前状态集合和下一
状态集合。当这些集合为有限集时,称系统环境为有限系统环境。系统环境已知是指在智能
体选择某一动作时环境给予的奖励值为已知,并且在动作执行后环境的状态改变为已知。能
够建立环境模型的强化学习称为有模型强化学习,简称为有模型学习。不能或难以建立环境
模型的强化学习称为无模型强化学习,简称为无模型学习。
强化学习中所要解决的基本问题是智能体如何从动作集合中选择适当的动作。由于智能
体通常根据当前环境状态选择所执行动作,故强化学习动作选择通常与环境状态相关。这种
从环境状态到动作的映射称为智能体的策略,即智能体根据策略和当前环境状态选择下一步
所执行的动作。强化学习将环境给予智能体的反馈信息作为经验数据或先验信息。对于单步
动作所获得的反馈,通常由奖励函数确定,即奖励函数是一个从动作与反馈值的映射,奖励
函数表明了智能体的当前动作是好的动作还是一个坏的动作。对于多次连续动作所获奖励通
常由值函数表达,值函数描述了从当前动作开始到将来的某一个动作执行完毕为止所获累
计奖励值,故值函数是对多次连续动作满意度的度量。由于强化学习的目的是使得智能体一
系列的动作满足任务需求,故通常将值函数作为强化学习优化计算的目标函数。
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版3
由以上分析可知,强化学习的关键在于如何确定值函数的取值。显然,只有确定了奖励
函数才能确定值函数的取值。虽然奖励函数值可以直接通过执行动作得到,但值函数的求解
通常是一件比较困难的事情,因为值函数的取值通过对观察序列的合理评估的方式获得并需 要在后续行动周期中不断对其进行修正。
智能体在强化学习过程中通过经验数据或先验信息调整自身行为,这一点与监督学习方
式比较类似。不过,监督学习的先验信息内容和机器学习目标都比较明确,监督学习的先验
信息为带标注的训练样本,训练目标是通过这些训练样本一个从样本示例输入到样本标签输
出之间的映射,使得该映射下的全部样本的输出总误差达到最小。强化学习的先验信息则既
不是正确的动作也不是动作的性能以及任何参考动作,仅是对动作给出奖惩信息。也就是说,
在强化学习过程中,环境并没有告诉智能体应该采取哪个动作,而是由智能体根据环境的反
馈信息自己发现最优动作,使得奖励反馈的概率最大、惩罚反馈的概率最小。因此,强化学
习使用的先验信息比较特别且没有监督学习那样明确具体。
强化学习与监督学习的不同之处还表现在学习目标方面。监督学习的目标是获得输出总
误差最小的映射,强化学习的目标则是获得从状态到动作的最佳映射。虽然二者都是通过学
习获得映射关系,但目标的明确性和输出的时效性都有所不同。监督学习的目标比较明确,
对于给定的输入理论上能够得到唯一确定的输出;强化学习的目标则没有这么明确,使得当
前状态下获得最大回报的行动可能有很多。以训练俄罗斯方块游戏模型为例,如果采用监督
学习方式训练,那么模型以每帧游戏画面或游戏状态为输入,对应的输出是确定的,要么移
动方块,要么翻转方块。这样的限定实际上有些死板,通过某个固定操作序列能够达到所需
目标。强化学习直接设定某个目标并根据这个目标设定反馈,这样的限定相对宽松,问题定 义难度也相对较低。
从输出的时效性看,监督学习注重输入与输出的匹配程度,如果输入与输出匹配,则认
为学习效果较为理想。若存在序列到序列的映射,则希望每一个时刻的输出都能和输入对应
上;对强化学习而言,学习的目标则是让回报最大化。然而,在任意交互的过程中,并不是
每个行动都会获得回报。当完成一次完整的交互后,就会得到一个行动序列。这个行动序列
中哪些行动为回报产生了正向的贡献,哪些产生了负向的贡献,有时很难界定。以棋类游戏
为例,游戏的目标是战胜对方,在得到最终结果之前,智能体可能不会得到任何回报。单一
行动是优是劣在很多情况下无从判断,此时只能把所有行动考虑成一个整体,给整体一个回
报。为了最终回报,游戏中某些行动可能会走一些看似不好的招法,例如被对方吃掉棋子,
这也可能是为达成最终目标所做出的牺牲。
总之,强化学习较监督学习的优点在于定义模型需要的约束更少,影响行动的反馈虽然
不及监督学习直接,却降低了定义问题的难度。同时,强化学习更看重行动序列的整体回报
而不是单步行动的一致性。强化学习的目的是使得智能体一系列的动作满足任务需求,能够
综合考虑一段时间内智能体的相关动作是否能得到最优的回报,根据累计回报确定最优策
略。然而,强化学习在解决序贯决策问题也面临着如下挑战:
(1)收敛速度慢。收敛速度慢与维数灾难问题有着密切的关系。多数强化学习算法收
敛到最优解的理论保障都是建立在任意状态都能被无限次访问到这个前提条件之上。当问题
环境比较复杂或出现维数灾难问题时,智能体的探索策略不能保证每个状态都能在有限的时
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版4
间内被访问足够多的次数,因而智能体没有足够经验能够在这些较少遇到的状态下做出正确
决策,导致算法的收敛速度较慢。
(2)探索未知和利用已知的平衡。强化学习会经常面临利用已经学到知识还是对未知
知识进行探索的平衡难题。产生这个问题的根源在于难以权衡长期利益和短期利益。一方面
为了获得较高的奖赏,智能体需要利用学到的经验在已经探索过的动作中贪心地选择一个获
益最大的动作;另一方面,为了发现更好的策略,智能体需要扩大探索范围,尝试以前没有
或较少试过的动作。若不能权衡好两者的关系,智能体就处于进退两难境地。
(3)时间权重分配。由于强化学习具有回报延迟的特点,即环境反馈给智能体的信息
比较稀疏且有一定延时,故当智能体收到一个奖赏信号时,决定先前的哪些行为应分配到多 大权重有时比较困难。例如,某篮球队若在比赛最后一刻压哨绝杀获得比赛胜利,则难以量
化计算之前的每个决策对于这个胜利结果究竟做出多少贡献。
6.1.2 马尔可夫模型
如前所述,强化学习过程是智能体与系统环境之间不断进行交互的动态过程。这个动态
过程涉及动作、系统环境、状态、奖励等多个要素,通常需要一个动态数学模型定量表示这
些要素之间的联系和制约关系。由于强化学习过程中各要素的下一个取值状态或决策主要与
当前状态或决策相关,故通常采用马尔可夫决策过程(Markov decision process,简称 MDP)
定量表示强化学习过程。马尔可夫决策过程是一类将动作和回报考虑在内的马尔可夫过程,
要想掌握马尔可夫决策过程知识,首先必须掌握马尔可夫链及马尔可夫过程的相关知识。
马尔可夫链是一个关于离散型随机变量取值状态的数列,该随机变量数列从有限状态集
合? = {?1, ?2, … , ??}中任取某个状态??作为初始状态,根据只与当前时序状态?(?)相关的状态
转移概率分布?(?(?+1)|?(?))确定下一时序的状态?(?+1)。其中?(?)和?(?+1)分别表示随机状态变 量?在第?时序和第? + 1时序的取值。对于给定的有限状态集合和状态转移概率分布,从某一
个状态出发所能获得的马尔可夫链可能不只一条。为表示所有可能存在的马尔可夫链状态转
移过程,通常使用马尔可夫过程定量表示这种由多个马尔可夫链并发形成的状态转移过程。
例如,对于有限状态集合? ={娱乐,学习课程 1,学习课程 2,学习课程 3,考过,睡觉,
写论文},已知其状态转移分布?,则可用由?和?构成的二元组(?, ?)描述所有可能存在的马
尔可夫链状态转移过程,如图 6-2 所示。该二元组(?, ?)就是一个马尔可夫过程。 图 6-2 马尔科夫过程(?, ?)示例图 图 6-3 马尔科夫决策过程示例
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版5
由于强化学习过程并非单纯是状态到状态的变化,而是通过状态确定动作再由动作改变
状态,并根据动作产生反馈信息,故使用马尔可夫过程表示强化学习过程必须将动作和反馈
要素纳入考虑范围。这种纳入动作和反馈要素的马尔科夫过程通常称之为马尔科夫决策过
程。由于马尔科夫决策过程在? + 1时刻的状态?(?+1)不仅与?时刻状态?(?)有关,而且与?时刻
的动作?(?)有关,故可将马尔科夫决策过程的状态转移概率分布表示为?(?(?+1)|?(?), ?(?))。假
设动作集合为? = {?1, ?2, … , ??}是一个有限集合,?为奖励函数,其取值范围是某个有限集
合,则可将马尔科夫决策过程描述为四元组(?, ?, ?,?)。图 6-3 表示一个状态空间规模为 4
的马尔科夫决策过程。
现进一步考察强化学习中状态转移的具体计算过程。假设智能体根据状态?(?)选择了动 作?(?),接下来便要通过状态转移分布?(?(?+1)|?(?), ?(?))确定下一时刻的状态?(?+1)。在强化
学习过程中,状态转移可分为确定转移和随机转移这两种基本类型。所谓确定转移是指在 ?(?), ?(?)确定的情况下,?(?+1)的取值是确定的。也就是说,对于确定性状态转移,若?(?+1)的
取值为??,则有?(??|?(?), ?(?)) = 1。因此,确定性状态转移完全由某个已知函数?确定,故可 将?(?+1)的取值表示为: ?(?+1) = ?(?(?), ?(?)) (6– 1)
同时,反馈信息?(?+1)可由奖励函数?确定:
?(?+1) = ?(?(?), ?(?)) (6– 2)
其中?(?+1)是对动作?(?)和状态从?(?)转移到?(?+1)的短期评价。
随机转移是指在?(?), ?(?)确定情况下,?(?+1)的取值不是由?(?), ?(?)所唯一确定,而是以一
定的概率确定。具体地说,假设?(?+1)所有可能取值的集合为{?1, ?2,…, ??},则有:
∑?(??|?(?), ?(?)) ??=1 = 1 (6– 3)
此时反馈信息?(?+1)的取值也必然依赖于下一个状态?(?+1),故可将?(?+1)表示为一个关 于?(?), ?(?), ?(?+1)的函数,即有: ?(?+1) = ?(?(?), ?(?), ?(?+1)) (6– 4)
显然,上述讨论的反馈信息?(?+1)只是对动作?(?)和状态?(?)转移到?(?+1)的一种短期评价。
强化学习需要进一步计算一系列的动作选择之后所得的累计反馈。对于一种比较简单的情
形,假设整个强化学习过程一共持续?个时序,则可将当前累计反馈?(?)定义为从当前时序?
之后所有时序的奖励函数取值之和,即有: ?(?) = ?(?+1) + ?(?+2) + ⋯ + ?(?) (6– 5) 当? = +∞时,则称相应的强化学习任务为连续式学习任务;否则,当?为某个有限自然
数时,称相应的强化学习任务为情节式学习任务。随着时序向后推移,较靠后的状态转移对
最终结果的影响通常较小,故需为每个时序的奖励函数值赋予一定权重w ∈ [0,1]表示各时序
奖励函数值对累计反馈?(?)的重要程度。由此可得:
?(?) = ?(?+1)?(?+1) + ?(?+2)?(?+2) + ⋯ + ?(?)?(?) (6– 6)
其中?(?+?)表示第? + ?个时序所得反馈值的权重,
通常使用一个小于 1 的折扣因子?表示权重随时序向后推移而逐步衰减的效果。具体地
说,首先设定初始时刻权重?(?+1) = γ0 = 1,然后每延长一个时序,则其权重更新为前一个
奖赏值=E{ r1 + γ1r2 γ2r3 γ3r4 γ4r5 γ5 + + + + r6 } s0 a0 a1 s1 s2 a2 a3 s3 s4 a4 a5 s5 s6
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版6
时序步骤的γ倍,使得越靠后的状态转移对最终结果的影响越小。即有?(?+?) = γ?−1。强化
学习中确定累计反馈的基本流程如图 6-4 所示。 图 6-4 累计反馈的基本计算流程
由以上分析可知,使用马尔科夫决策过程描述强化学习过程还需考虑折扣因子?,故可
将用于定量描述强化学习过程的马尔科夫决策过程表示为五元组(?, ?, ?, ?, ?)。
在上述马尔科夫决策过程(?, ?, ?,?, ?)只考虑了从当前状态?(?)开始的状态转移过程而
未考虑如何通过状态确定动作。根据当前状态选择或确定适当的动作是强化学习的一个重要
环节。在某个状态下选择某个或某些动作的方式被称为强化学习的策略,其中选择某个或某
些确定动作的策略称为确定策略,从多个可能动作中依概率选择某个或某些动作的策略称
为随机策略。显然,确定策略本质上是一个从状态空间到动作空间的映射,即有:
ℎ(??|?) = ??, ? = 1,2,… , ? (6– 7)
其中ℎ表示某个确定策略。
上式表示确定策略ℎ根据当前状态?从动作空间中选择某个确定的动作??。
可将随机策略表示为如下概率形式: ℎ(??|?) = ?(??), ? = 1,2, … , ? (6– 8)
其中ℎ表示某个随机策略。
上式表示随机策略ℎ根据当前状态输出动作空间中每个动作被选择到的概率,故有
?(??) ≥ 0且∑ ?(??) ??=1 = 1。
由于强化学习目标是选择一组最佳动作使得累计反馈期望?(?(?))最大,故应将依据策
略进行动作选择的过程纳入累计反馈的计算范围。假设强化学习过程中采用策略ℎ确定需执 行动作,则累计回报?(?)应与策略ℎ 有关。由此可得累计反馈期望?(?(?))的计算公式:
?ℎ(?(?)) = ?ℎ(γ0?(?+1) + γ1?(?+2) + ⋯ + γ?−??(?)|?(?) = ?) (6– 9)
即有:
?ℎ(?(?)) = ?ℎ (∑γ?−1 ?−? ?=1 ?(?+?)|?(?) = ?) (6– 10)
其中?为初始状态取值。
上式表示在当前状态为?情况下之后? − ?个时序的累计反馈期望值,将其看成是一个以
状态为自变量的状态值函数?ℎ(?)。当状态转移为确定转移时,可将?ℎ(?)表示为:
?ℎ(?) = ?ℎ (∑γ?−1 ?−? ?=1 ?(?(?+?−1), ?(?+?−1))|?(?) = ?) (6– 11)
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版7
同理可知,当状态转移为随机转移时,可将?ℎ(?)表示为:
?ℎ(?) = ?ℎ (∑γ?−1 ?−? ?=1 ?(?(?+?−1), ?(?+?−1),?(?+?))|?(?) = ?) (6– 12) 对?ℎ(?)的表示形式稍作变换,可得:
?ℎ(?) = ?ℎ (γ0?(?) + γVℎ(?′)) (6– 13)
即有:
?ℎ(?) = ∑ ℎ(?|?) ?∈? ∑ ?(?′|?, ?)(?(?,?, ?′) ?′∈? + γ?ℎ(?′)) (6– 14)
上式将当前状态下选择一个动作所得反馈期望值从状态值函数中分离出来,并将其余部
分表示成了下一个状态所对应的状态值函数形式,其中?′表示下一时刻的环境状态。
通常将上式称为贝尔曼方程或动态规划方程。根据该方程的表示形式,可使用动态规划
策略将状态值函数的求解过程分解为各个子问题,由此在状态转移分布?(?(?+1)|?(?), ?(?))和
回报函数?已知的情况下比较方便地求得?ℎ(?)。
在已知当前状态?和当前动作?的条件下的累计反馈期望值通常称之为动作值函数。动
作值函数的计算公式如下: Qℎ(?, ?) = ?ℎ (∑γ?−1 ?−? ?=1 ?(?+?)|?(?) = ?, ?(?) = ?) (6– 15)
状态值函数和动作值函数之间存在一定的联系。由于一个确定策略ℎ所选择的动作是确
定的,故确定策略的状态值函数与动作值函数取值相等,即有:
?ℎ(?) = Qℎ(?, ℎ(?|?)) (6– 16)
对于随机策略ℎ,其状态值函数可分解为所有可能动作对应的动作值函数加权取值之和,
即有:
?ℎ(?) = ∑ℎ(?|?)Qℎ(?, ?) ?∈? (6– 17)
其中ℎ(?|?)为状态?下动作?出现的概率,可简单理解为一个权重。
事实上,可用状态值函数表示动作值函数,具体形式为:
Qℎ(?, ?) = ?(?, ?) + ? ∑ ?(?′|?, ?)Vℎ(?′) ?′∈? (6– 18)
其中?′为下一时序的状态,?(?′|?, ?)为从当前状态?和动作?确定的情况下转移到状态?′的概
率,?′为根据状态?′选择的动作。
将上式代入式(6-17)可得到状态值函数的贝尔曼方程形式。
值函数是对马尔科夫决策过程长期效果的评价,故可将值函数作为对马尔科夫决策过程
进行优化计算的目标函数。强化学习的目标是发现最优策略,即如何根据状态确定最佳动作,
可通过最优化值函数的方式实现这个目标,即选择适当的策略ℎ∗,使得所有状态所对应的值
函数取值最大。通常称所有状态对应取值均为最大的值函数为最优值函数。
根据以上分析,可将最优状态值函数?ℎ∗(?)表示为:
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版8 ?ℎ∗(?) = maxℎVℎ(?) (6– 19)
类似地,可将最优动作值函数?ℎ∗ (?, ?)表示为:
?ℎ∗(?, ?) = maxℎQℎ(?, ?) (6– 20)
根据 6-1 式,故可将?ℎ∗(?)理解为最好策略下所有动作的加权平均值,?ℎ∗ (?, ?)就是最
优策略中最优动作所对应的累计回报,故有?ℎ∗ (?, ?) > ?ℎ∗(?),即状态值函数的上界为最优
策略值函数。因此,无需考虑状态值函数,只需将最优动作值函数作优化目标即可确定最优
策略。由此可将强化学习优化计算问题表示为下列形式:
ℎ∗(?|?) = argℎ max?ℎ∗ (?, ?) (6– 21)
上式表明,强化学习所采取的最优策略ℎ∗(?|?)为使得动作值函数取得最大值的的策略。
只需采用某种适当方式求函数Qℎ(?, ?)最大值,就可得到所求的最优策略ℎ∗(?|?)。由马尔可
夫模型的基本理论可知,任意马尔可夫决策过程至少存在一个最优策略。事实上,条条大路
通罗马,通常存在多个可供选择的最优策略。
【例题 6.1】现有如图 6-5(a)所示棋盘,智能体从左下角的“开始”位置出发,到达
“终点”位置则任务结束。智能体到达终点时给予反馈值 100,其他动作给予的反馈值为 0,
折扣因子为 0.9。若采用如图 6-5(b)所示的策略选择动作,试求智能体位于“开始”位置
时的状态值函数和动作值函数取值。 (a)棋盘状态 (b)策略示意图
如图 6-5 路径寻优问题示例
【解】 由图 6-5(b)可知,此处采用确定策略选择动作。记第 i 行第 j 列的棋盘状态
为???,且为便于表述记状态???所对应动作为???,则存在唯一确定的状态转移序列:
?21, ?22, ?23, ?13
首先考察状态值函数。由状态值函数的贝尔曼方程可知,若想求解?ℎ(?21),还需确定
?ℎ(?22)和?ℎ(?23)的值。由于从状态?23转移到状态?13后该马尔可夫决策过程结束,故有:
?ℎ(?23) = ?(?23, ?23) = 100
而?ℎ(?22)可通过?ℎ(?23)和折扣因子确定,故有:
?ℎ(?22) = ?(?22, ?22) + γ?ℎ(?23) = 0 + 90 = 90
同理可得:
?ℎ(?21) = ?(?21, ?21) + γ?ℎ(?22) = 0 + 0.9 × 90 = 81
再考察动作值函数。可根据图 6-5(b)所示策略ℎ和状态转移分布,由动作值函数的贝
尔曼方程有:
?ℎ(?21, ?21) = ?(?21, ?21) + γ?ℎ(?22, ?22) = ?(?21, ?21) + γ(?(?22, ?22) + γ?(?23, ?23)) = ?ℎ(?21) = 81
上述计算结果验证了确定策略在同一状态下的状态值函数和动作值函数相等。□
1 2 34 7 6 5 8
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版9
6.1.3 强化学习计算方式
强化学习是求解序贯决策问题的有效方法,只需求得相应马尔可夫决策模型中值函数的
最大值便可实现对序贯决策问题的优化求解。由于具体优化计算过程中通常存在时序较长或
状态空间过大甚至无穷等因素,使得无法通过直接遍历所有状态所对应的所有动作获得最大
的值函数,故一般主要通过动态规划、启发式搜索等方法实现强化学习的目标。强化学习的
目标是获得最优策略ℎ∗,即与值函数最大取值所对应的一组决策序列: ?0∗ → ?1∗ ⟶ ⋯ ??∗
值得注意的是,有时最优策略ℎ∗中的单个动作可能不是当前最优动作,但对整个决策
过程而言却是最优动作。对于有模型和无模型这两种不同的强化学习类型,相应的最优策略
求解方法也有所不同。有模型强化学习主要采用动态规划方法求解,无模型强化学习主要采
用分层学习或启发式学习方法求解。
通常使用动态规划方法实现对有模型强化学习问题的优化求解。使用动态规划解决优化
问题需要满足两个条件:一是整个优化问题可以分解为多个子优化问题;二是子优化问题的
解可以被存储和重复利用。有模型强化学习值函数Vℎ(?)的贝尔曼方程为:
Vℎ(?) = ∑ℎ(?|?) ?∈? ∑ ?(?′|?, a)(?(?, a, ?′) ?′∈? + γVℎ(?′)) (6– 22)
根据值函数Vℎ(?)的贝尔曼方程,可将对当前状态?所对应值函数Vℎ(?)的求解问题分解
为求解下个状态?′所对应的值函数Vℎ(?′),并且Vℎ(?′)的求解过程与Vℎ(?)的求解过程一致,
故可使用动态规划方法求解有模型强化学习问题。
由于无模型强化学习的状态转移概率未知,无法直接对值函数Vℎ(?)进行递推分解,故
难以直接使用动态规划方法。一般通过分层或启发式方法求解无模型的强化学习问题。对于
具有分层结构的无模型强化学习问题,可通过分层方式将该问题分解成多个相对简单的子问
题,由此降低问题求解的复杂度。通常采用抽象的方式对被求解问题的分层处理,主要分为
状态空间分解、状态抽象和动作抽象这几种方式。状态空间分解又称为任务分解,是指通过
分治法将整个状态空间分解成为多个子空间,再分别实现对各个子空间上问题的求解;状态
抽象是指忽略状态中的非相关元素,实现降低状态维的效果;动作抽象是指将 MDP 中仅考
虑单步时间内完成的元动作扩展到多步的抽象动作情形。
目前分层强化学习大多采用动作抽象方法,其核心思想是通过引入元动作和抽象动作的
概念并由抽象动作递归调用元动作或抽象动作实现优化计算。元动作是指 MDP 中的单步动
作,有时亦称之为基本动作;抽象动作是指由多个相关元动作或抽象动作构成的一个相对完
备的动作序列,有时亦称之为高层次动作或宏动作。抽象动作的引入使得 MDP 具有分层决
策的基本结构。 图 6-6 拼图问题
例如,在图 6-6 所示的拼图问题中有 U,D,L,R 四个元动作,分别代表向上移动拼
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
10
图块,向下移动拼图块,向左移动拼图块和向右移动拼图块。该问题的抽象动作集合如表 6- 1 所示,表中每个抽象动作是都由 U,D,L,R 这四个动作组成的序列,智能体可以通过这
些抽象动作加快对拼图问题求解策略的强化学习。 表 6-1 拼图行动路径表
无模型强化学习对值函数的优化求解需要使用智能体与环境交互所得的反馈信息实现
对值函数取值的估计,这种交互过程本质上是智能体通过执行动作和感知动作结果的方式对
系统环境进行探索的过程。由于奖励或惩罚值作为智能体得到的唯一反馈并没有直接给出关
于智能体所求正确动作或最优策略的信息,故并不能保证智能体根据反馈信息所采取的新动
作或新策略的正确合理性,甚至有时会得到比原有策略产生动作更差的新动作。因此,为改
进现有策略而对环境进行探索就要冒着获得更差策略的风险。但是,如果只使用现有具有较
高回报的策略,则不能实现对现有策略做进一步的改进。这是一个在充分利用现有知识和充
分探索未知环境以获得更高回报中进行选择的两难问题。通常使用启发式强化学习方法解决
无模型强化学习这种探索-利用两难问题。
启发式强化学习方法通过启发函数指导智能体行为,实现加速算法收敛的效果。该方法
在强化学习中通过构造或设定某种特定的启发函数来权衡探索-利用两难问题,保证值函数
取值较大并且进行了足够的环境探索,使得所求策略为最优策略或能够较好地逼近最优策
略。例如,可用?–贪心策略中的?–判别函数作为无模型强化学习的启发函数,实现一种基于
?–贪心策略的启发式强化学习方法。该方法根据?–贪心策略进行动作选择,由此获得一种由
启发函数和现有策略共同确定的探索-利用平衡策略。
?–贪心策略的基本思想是通过?–判别函数分配强化学习过程中利用现有策略和进行环 境探索之间的比例。具体地说,首先确定一个以?为阈值判别函数,阈值?的取值范围是开区
间(0,1),然后在学习过程中以?的概率实施对系统环境的探索,以1 − ε的概率利用现有策略
决定动作。进行环境探索时在动作状态空间中随机选择某个动作,利用现有策略则直接选择
使得当前值函数取值最大的动作。
由以上分析可知,在初始阶段定义一个合适的启发函数指导智能体进行动作选择是启发
式强化学习过程中一个非常关键的环节,启发函数的选择对强化学习的效果具有很大影响。
目前主要通过两种方式确定启发函数。第一种方式是直接基于领域先验知识构造启发函数,
第二种方式是通过在学习过程中获得的信息构造启发函数。启发函数的构造过程可大致分为
两个基本阶段:第一阶段是结构提取阶段,完成的任务是根据值函数实现领域结构的提取;
第二阶段是启发式构造阶段,完成的任务是根据提取到的领域结构构造启发式函数。图 6-7
表示启发函数构造的基本流程。
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
11
图 6-7 启发函数构造的基本流程
由于探索与利用的平衡问题广泛存在于各类无模型强化学习问题当中,大部分无模型强
化学习均采用启发式强化学习方法。启发式强化学习除了使用上述?–贪心策略作为探索方案
之外,还可以使用诸如Boltzmann探索方案等很多其它类型的探索方案以有效平衡探索与利
用之间的矛盾关系,由此产生多种各具特色的启发式强化学习方法。这些方法在强化学习的
多个理论研究和应用开发领域中发挥着重要的基础性支撑作用。
6.2 基本强化学习
强化学习的目标是通过学习获得最优策略,使得在马尔可夫决策过程从任意初始状态开
始使用所求最优策略都能获得最高的累计反馈,故正确计算每个策略所对应值函数的取值是
求解强化学习问题的关键。有模型强化学习的基本要素均为已知,故可比较方便地求得每个
策略所对应值函数的取值,策略性能为已知,只需对策略进行不断地迭代改进直至收敛即可
获得最优策略。通常使用策略迭代和值迭代方法实现对有模型强化学习的优化求解。对于无
模型强化学习,通常无法直接准确计算其值函数的取值,主要使用具有一定精度的估计方法
对值函数的取值进行近似计算或估算,时序差分学习就是一种典型的无模型强化学习方法。
本节主要介绍强化学习的若干基本方法,包括用于有模型强化学习的值迭代学习方法,以及
用于无模型强化学习的时序差分学习和 Q 学习方法。
6.2.1 值迭代学习
值迭代学习是指通过迭代方式不断增大值函数的取值以获得更好的策略,直到求出使得
值函数取得最大值的最优策略。对于有模型强化学习问题,可用值迭代学习方法实现对其进
行有效的优化求解。如前所述,一个策略的好坏主要取决于其所对应的值函数取值的大小。
对于有模型强化学习问题,可根据学习过程中当前状态?比较方便地计算出已知策略ℎ所对
应的状态值函数Vℎ(?)和动作值函数Qℎ(?, ?)的取值,并可根据Vℎ(?)和Qℎ(?, ?)关于策略ℎ的
取值大小对策略ℎ的优劣进行评估。
现讨论对给定策略ℎ的进行评估的基本原理和具体过程。假设强化学习过程中当前状态
为?且环境已知,则根据值函数的贝尔曼方程形式将其状态值函数表示为下列形式:
?ℎ(?) = ∑ℎ(?|?) ?∈? ∑ ?(?′|?, a)(?(?, a, ?′) ?′∈? + ?Vℎ(?′)) (6– 23)
其中?′为下一个状态的取值。
在环境已知的情况下,可对(6– 23)式中的?ℎ(?′)作进一步分解。如此形成递归分解直至
强化学习过程结束,将状态值函数的求解过程分解为对各个时序步骤奖励函数值的求解过 程,使用动态规划方法实现对状态值函数取值的计算。当强化学习过程时序有限时,可通过
该分解过程精确求得状态值函数的取值;当强化学习过程时序无限时,可通过折扣因子?不 断减小后续时序的影响,使得状态值函数的取值收敛。
具体地说,设定阈值? > 0并记当前时序后?步的状态值函数为?ℎ(?)(?),则当
13 14 15 16
9 10 11 12
5 6 7 8 1 2 3 4
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
12
|?ℎ(?)(?) − ?ℎ(?+1)(?)| < ε (6– 24)
时认为状态值函数取值收敛并输出所求的状态值函数近似取值。
在确定了给定策略ℎ所对应状态值函数之后,可根据 6-25 式计算所有可能状态下策略ℎ
所对应动作值函数的取值: ?ℎ(?, ?) = ?(?, ?) + ? ∑ ?(?′|?, ?)?ℎ(?′) ?′∈? (6– 25)
对于给定的策略ℎ,可根据上述公式求出相应的状态值函数?ℎ(?)和动作值函数?ℎ(?, ?),
并根据?ℎ(?)和?ℎ(?, ?)关于策略ℎ的取值实现对策略ℎ的评估。
强化学习的目标是求出使得值函数取值最大的最优策略ℎ∗。令与最优策略ℎ∗对应的最优
状态值函数和最优动作值函数分别为?ℎ∗(?)和?ℎ∗ (?, ?),则根据贝尔曼方程得状态值函数到
?ℎ∗(?)的计算公式为: ?ℎ∗(?) = max?∈? ∑ ?(?′|?, ?)(?(?, ?, ?′) ?′∈? + ??ℎ∗(?′)) (6– 26)
通常称上式为最优状态值函数的?ℎ∗(?)贝尔曼方程求解形式,表示在取最优动作时值函
数的取值,若取任意动作?,则此时所对应的值函数为最有动作值函数:
?ℎ∗ (?, ?) = ∑ ?(?′|?, ?)(?(?, ?, ?′) ?′∈? + ??ℎ∗(?′)) (6– 27) 故有:
?ℎ∗(?) = max?∈??ℎ∗ (?, ?) (6– 28)
同理可得:
?ℎ∗(?′) = max?∈??ℎ∗ (?′, ?′) (6– 29)
其中?′为下个时序的状态,?′为下一个时序的动作。
将上式代入式 6-25 可得:
?ℎ∗ (?, ?) = ?(?, ?) + ? ∑ ?(?′|?, ?)max?∈??ℎ∗(?′, ?′) ?′∈? (6– 30)
上式即为最优动作值函数?ℎ∗ (?, ?)的贝尔曼方程形式。上式说明求解最优策略ℎ∗的过程
可分解为求解当前状态下最优动作的过程,可使用贪心优化方法简化求解过程。
假设当前策略ℎ并非最优策略,为求解最优策略,可将策略改进为:
ℎ′(?|?) = max?∈??ℎ(?, ?) (6– 31)
不断重复上述改进过程直至求得到最优策略ℎ∗。通常称这一过程为策略迭代。
策略迭代通过贪心优化方法选择最优动作实现对单次策略的改善。现结合路径寻优实例
进行介绍。图 6-8 为某个网格地图,其中位置 16 为终点,位置 11 为障碍物,每个位置对应
的动作空间为? = {上,下,左,右},对于目标位置为障碍物或边界的动作规定为不执行该动作
但会反馈相应的奖励函数值,则使用策略迭代寻找最优策略的具体过程如图 6-9 所示。
图 6-8 网格地图
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
13
图 6-9(a)为初始策略,图 6-9(b)到图 6-9(h)的变化过程表示通过迭代过程不断
改善策略的过程。由于图 6-9(g)和 6-9(h)所示策略相同,故可认为此时策略迭代结束,
图 6-9(h)所示策略为最优策略。
(a)初始策略 (b)策略迭代 (c)策略迭代 (d)策略迭代
(e)策略迭代 (f)策略迭代 (g)策略迭代 (h)最优策略
图 6-9 策略迭代过程
由以上分析可知,环境已知的有模型强化学习问题可通过基于贪心优化方法的策略迭代
实现优化求解,即通过不断优化每个单步的动作选择实现对最优策略的逼近。由于策略的改
善即意味着值函数的取值不断增大,故亦可直接对状态值函数进行迭代优化获得最优策略。
这种通过直接迭代优化值函数最优策略的过程称为值迭代。
由于每一次的策略改善都会带来值函数取值的提升,并且策略改善的过程是通过贪婪选
择最优动作实现,故可直接通过对于值函数的优化求解实现对策略的改善。具体地说,状态
值函数的迭代公式如下:
?ℎ′(?) = max?∈? ∑ ?(?′|?, a)(?(?, a, ?′) ?′∈? + γVℎ(?′)) (6– 32)
不断重复上述过程,直至满足|?ℎ′(?) − Vℎ(?)| < ε时便可认为状态值函数收敛,此时所求
状态值函数?ℎ(?)就是最优状态值函数?ℎ∗(?),可由此求得最优策略为:
ℎ∗ = argℎ?ℎ∗(?) (6– 33)
接着考虑上述路径寻优实例。设定初始状态的状态值函数均为为 0,折扣因子?为 0.5,
每行动一次的奖励函数取值为−0.5,则值迭代求解的状态值函数变化情况如图 6-10 所示。
图中Vℎ表示状态值函数取值,?为时序取值,?为状态取值。
图 6-10 值迭代过程中状态值函数取值变化情况
值迭代通常从已知的当前状态?开始对当前策略进行评估,通过迭代方式计算新策略的
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
14
状态值函数?ℎ(s)取值。这种计算方式在动作空间和状态空间均为离散空间且规模较小时较
为有效,但对于连续或规模较大的动作空间或状态空间,值迭代优化方法的计算成本通常较
高且容易陷入局部最优。可用基于函数逼近思想的冗余值迭代算法解决这个问题。
可将强化学习中的策略描述为从状态空间到动作空间的映射。对于状态空间和动作空间
均为离散空间的情形,可将这种映射表示为一个二维查找表,状态和动作为查找表的两个维
度,表中元素为从状态选择动作所对应的值函数取值。当动作空间或状态空间规模较大时,
该查找表通常会因为规模过大而带来一些问题甚至使得值迭代算法的策略评估变得不可行。
对于动作空间或状态空间为连续空间的情形,则无法直接使用查找表进行计算。为保证值迭
代算法的有效性和鲁棒性,冗余值迭代算法使用函数逼近方法替代查询表。
在值迭代算法中,值函数更新过程如下:
?ℎ′(?) = max?∈? ∑ ?(?′|?, a)(?(?, a, ?′) ?′∈? + γVℎ(?′)) (6– 34)
通过对状态值函数的迭代更新可得到最优状态值函数,即可用?ℎ′(?)逐渐逼近?ℎ∗(?)。 现用函数逼近方法代替查找表存储值函数的方法实现对状态值函数的优化求解,获得所求
的最优策略。当值函数的函数结构确定时,值函数的形式就完全取决于值函数的参数,故
可将值函数的逼近过程看成是一个参数逼近或参数估计问题。
具体地说,对于当前状态?的最优状态值函数?ℎ∗(s),可将其估计值表示为?ℎ′(s, ?),其 中?为函数?ℎ′的参数向量。可不断调整参数向量?的取值,使得估计值?ℎ′(s, ?)与最优状态
值?ℎ∗(s)之间的差别达到最小。可用平方误差度量?ℎ′(s, ?)和?ℎ∗(s)之间的差异,由此将状态
值函数的逼近问题转化为如下优化计算问题:
arg min? (?ℎ∗(s) − ?ℎ′(s,?))2 (6– 35)
使用梯度下降法求解上述优化问题,其中目标函数的梯度为:
grad(?) = −2 ??ℎ′(s, ?) ?? (?ℎ∗(s) − ?ℎ′(s,?)) (6– 36) 则参数向量的更新计算公式为:?′ = ? − α′grad(?) (6– 37)
即有: ?′ = ? + α ??ℎ′(s, ?) ?? (?ℎ∗(s) − ?ℎ′(s, ?)) (6– 38)
其中α′和α为迭代步长。
迭代使用上述更新公式可算出值函数参数的最优值?∗,将?∗代入?ℎ′(s,?)便可求得最优
状态值函数?ℎ∗(s)的近似解?ℎ′(s, ?∗)。
由于直接使用?ℎ′(s, ?)与?ℎ∗(s)的平方误差作为目标函数难以保证上述迭代过程收敛性, 故用每个状态转移? → ?′的反馈值与真实值之间平方误差的均值作为目标函数,即有: ?(?) = 1 |? → ?′| ∑(?ℎ∗(s) − ?ℎ′(s, ?))2 ?→?′ (6– 39)
其中|? → ?′|表示状态转移次数。
通常将上述目标函数称之为贝尔曼冗余。仍然使用梯度下降法进行参数更新,此时目
标函数的梯度为:
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
15
grad(?) = − 2 |? → ?′| ∑ ??ℎ′(s, ?) ?? (?ℎ∗(s) − ?ℎ′(s, ?)) ?→?′ (6– 40)
参数向量的更新公式为: ?′ = ? + α ∑ ??ℎ′(s, ?) ?? (?ℎ∗(s) − ?ℎ′(s,?)) ?→?′ (6– 41)
迭代使用上述更新公式可求得值函数参数的最优值?∗,可以通过适当选择步长参数α保
证上述迭代过程的收敛性。
【例题 6.2】图 6-11 表示某个3 × 3棋盘,其中位置(1,1)为智能体运动的起始位置,
位置(3,2)为终点位置。智能体每次运动的目标位置是终点位置时奖励函数取值为 0,否则
取值为-1,试通过值迭代学习使得智能体能够最快达到终点。
图 6-11 游戏棋盘
【解】可将该问题归结为马尔可夫决策过程,其中状态空间中包括当前位置的相邻位置,
决策空间包括上下左右四个动作。使用值迭代求解该问题,假设初始策略为随机选择动作,
扫描所有状态所对应动作空间中的动作,记录对应的奖励函数取值,选择其中对应奖励函数
取值最大的动作作为当前状态的最优动作并更新状态值函数,若无法确定最优动作则只更新
状态值函数。重复上述过程直至值函数取值不变,此时获得最优策略。具体过程如下:
初始化:令所有位置的状态值函数取值均为 0;
第一次迭代:由于智能体到达终点位置时游戏结束,故终点位置无对应的状态值函数。
对于其他位置,逐一尝试上下左右四个动作,由于智能体运动至终点位置的奖励函数取值为
0,故与终点位置相邻三个位置的状态值函数取值更新情况如下:
?(?) = ? + ?(?′) = 0
并可确定这些位置所对应的最优动作。其余位置的状态值函数取值更新情况为:
?(?) = ? + ?(?′) = −1 + 0 = −1
这些位置所对应的最优动作无法确定。
第二次迭代:由于与终点位置相邻处的最优动作已确定,故这些位置的状态值函数不再
发生变化。其他位置逐一尝试四个动作,从中选择最优动作并更新状态值函数取值。
同理可进行第三次迭代更新。由于第三次迭代结果与第二次迭代结果相同,故可认为已
求得最优状态值函数和最优策略.图 6-12 表示迭代的具体过程和结果。图中?(?)表示对应状
态值函数的期望值,而箭头符号则表示状态所对应的最优策略。□ 图 6-12 值迭代学习过程
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
16
6.2.2 时序差分学习
有模型强化学习可以使用已知的状态转移分布和初始策略求得状态值函数和动作值函
数的具体数值,并可通过动态规划等方式实现以值函数为目标函数的优化求解,达到获得最
优策略的强化学习目标。然而,在很多情况下系统环境难以得知或难以建模,使得状态转移
分布和奖励函数未知或难以确定,面向这种场合的强化学习称为无模型强化学习。对于无模
型强化学习,由于状态转移分布和奖励函数均为未知,难以获得策略所对应的状态值函数取
值,故无法使用前述动态规划方法实现基于值迭代的策略优化,必须寻找其它途径实现对无
模型强化学习问题的有效求解。
由于强化学习的目标是求得最优策略,并且与策略评估直接相关的指标是值函数的取值, 故可通过直接对值函数的取值进行估计的方式求解无模型强化学习问题。由于状态值函数难
以估计且与策略直接相关的是动作值函数,故通常直接对动作值函数进行估计。
为估计动作值函数?ℎ(?, ?)的取值,可使用马尔可夫链蒙特卡洛(MCMC)方法对强化学习
过程进行采样,具体做法是从某个初始状态集出发根据某个策略ℎ执行强化学习过程,假设
从初始状态??开始进行一次采样,根据策略ℎ可得到一条状态-动作-反馈的连续变化过程。
由于MCMC方法要求进行尽可能多的采样,由此得到多条状态-动作-反馈的连续变化过程。
记录这些过程中的状态动作对(?, ?)以及与它们相对应的累计反馈,则可将所有与状态动作
对(?, ?)相对应累计反馈的平均值作为(?, ?)所对应动作值函数Qℎ(?, ?)取值的估计值。
由于基于确定策略的状态从某一状态到下一状态的转移是确定的,当策略ℎ为确定策略
时,通过多次采样只能得到多条相同的状态-动作-反馈的连续变化过程,不利于获得更加精
确的估计结果。为此,可用ϵ–贪心策略进行动作选择,即每次以ϵ的概率从所有动作中随机
选择动作,以1 − ϵ的概率根据当前策略选择动作,由此尽可能的采样到多条不同的状态-动 作-反馈的连续变化过程,使得对动作值函数的估计更为准确。
有了策略所对应的动作值函数估计值,便可根据该估计值进行策略评估和策略改进,求 得最优策略。通常称这种无模型强化学习方法为蒙特卡洛强化学习算法。该算法的核心思想
是一种通过过往经验的平均估计动作值函数取值。例如,你现在在家里并打算尽快在某电影
院观看某个电影,如果现在决定要买几点场的电影票,则需要估计从家里赶往电影院所花费
的时间。假设以往你从家里赶到电影院所花费时间的均值为?分钟,则使用蒙特卡洛强化学
习思想直接估计你将在?分钟后到达影院,故需购买?分钟之后才开场的电影票。
由以上分析可知,蒙特卡洛强化学习算法需要执行完整个采样过程,即所有从初始状态
开始的马尔科夫链均执行结束时,才能完成对动作值函数取值的估计。例如在预测赶往电影
院所花费的时间时需要有多次之前从家里出发到达电影院的完整过程经验。因此,蒙特卡洛
强化学习算法效率通常较低。可用时序差分学习方法解决这个问题。如前所述,策略迭代和
值迭代学习是一种基于动态规划思想的学习方法,难以直接用于解决到无模型强化学习问
题,蒙特卡洛强化学习方法虽然能解决无模型强化学习问题,但其时间成本较高。时序差分
学习则将上述两类方法相结合来高效的解决无模型强化学习问题。
时序差分学习的基本思想是首先通过模拟一段时序中的状态变化方式估计动作值函数
的取值,然后,在每执行一次或几次状态转移之后根据所得新状态的价值对估计值进行迭代
更新。同样考虑预测从家里出发去电影院所花费时间问题,假设去的途中需要去吃晚餐并购
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
17
买零食,根据之前经验去餐厅大约需要?1分钟,就餐需要花费?2分钟,赶往超市并购买零食
需要?3分钟,从超市赶往电影院需要?4分钟,则赶往电影院预计花费时间(分钟)为: ?1 + ?2 + ?3 + ?4
若现在已经达到餐厅,实际花费的时间为?1′,则可将赶往电影院所花费总时间更新为
?1′ + ?2 + ?3 + ?4分钟,不必等到到达电影院才更新总花费时间。事实上,可将蒙特卡洛强
化学习算法看成是最大步数的时序差分学习算法。
现介绍时序差分学习算法的基本原理和具体过程。假设对状态动作对(?, ?)进行了?次采
样,每次采样所得的累计反馈为?ℎ? (?, ?),? = 1,2,… , ?,则策略ℎ在状态为?动作为?情况下的
动作值函数取值的估计值为:
?ℎ(?, ?) = 1?∑?ℎ? (?, ?) ??=1 (6– 42)
假设现对状态动作对(?, ?)进行了第? + 1次采样得到累计反馈为?ℎ?+1(?, ?),若使用蒙特
卡洛强化学习方法,则应将动作值函数取值的估计值更新为:
?ℎ(?, ?) = 1 ? + 1∑?ℎ? (?, ?) ?+1 ?=1
时序差分学习则使用下列公式更新值函数取值的估计值:
?ℎ′ (?, ?) = ?ℎ(?, ?) + ?[?ℎ?+1(?, ?) − ?ℎ(?, ?)] (6– 43)
其中?ℎ′ (?, ?)为更新后的值函数取值的估计值,?为影响系数。通常将设定?为一个小于 1 的
正数,?的取值越大则表明后续采样所获得的累计反馈越重要。 ?ℎ?+1(?, ?)可分解为对动作?的立即反馈与下一个状态的值函数之和,即:
?ℎ?+1(?, ?) = ?(?, ?) + ??ℎ(?′, ?′) (6– 44)
其中?′为下一个时序的状态,?′为根据?′和策略ℎ选择的动作。
将上式代入式 6-43 中,可得如下用于单步时序差分学习的值函数迭代公式: ?ℎ′ (?, ?) = ?ℎ(?, ?) + ?[?(?, ?) + γ?ℎ(?′, ?′) − ?ℎ(?, ?)] (6– 45)
显然,对?ℎ(?, ?)的更新建立在?ℎ(?′, ?′)估计值已知基础之上。这与线性规划值迭代中
计算状态值函数时依赖其后续状态值函数的形式比较类似。
上式中只考虑了一个时序步骤后动作值函数的更新情况,迭代公式中只涉及当前状态?、
当前动作?、状态-动作对(?, ?)所对应的奖励函数取值?(?, ?)、下一个时序状态?′以及?′所对
应的动作?′。通常称此类基于单步更新方式的时序差分学习算法为?????算法。
Sarsa算法的具体步骤如下:
(1)随机选择初始状态?(?)策略ℎ,设定?ℎ(?(?), ?(?))初始值并指定参数?, ?; (2)从状态?(?)开始马尔可夫决策过程,使用ϵ −贪心策略选择对应的动作?(?),记录反
馈值?(?(?), ?(?))和更新后的状态?(?+1),并根据状态?(?+1)和策略ℎ使用ϵ −贪心策略选择下一
个动作?(?+1); (3)使用如下公式更新动作值函数:
?ℎ′ (?(?), ?(?)) = ?ℎ(?(?), ?(?)) + ?[?(?(?), ?(?)) + ??ℎ(?(?+1), ?(?+1)) − ?ℎ(?(?), ?(?))] 若动作值函数未收敛,则令?ℎ(?(?), ?(?)) = ?ℎ′ (?(?), ?(?)),返回步骤(1);否则令:
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
18
ℎ∗ = argℎmax?ℎ(?(?), ?(?))
求得最优策略ℎ∗并结束算法。
【例题 6.3】图 6-13 表示某4 × 4 网格游戏,其中用正方形表示的位置(1,1)是智能体运动
的起始位置,用叉号表示的位置(2,3)和 (3,2)是陷阱位置,用圆圈表示的位置 (3,3)为终点
位置。游戏规则为:当智能体运动的目标位置是终点位置时奖励函数值为1,是陷阱位置时
奖励函数值为−1,是其余位置时奖励函数值为0。试用Sarsa算法使得智能体避过陷阱位置并
以最快速度达到终点,其中参数设定为? = 0.9,? = 0.9,? = 0.01。 图 6-13 4 × 4 网格游戏 图 6-14 状态示意图
【解】可将该网格游戏看成是一个马尔科夫决策过程,其中状态空间包括当前位置、陷
阱位置、目标位置以及空位置,并将两个陷阱位置设为同一个状态,决策空间包括上下左右
四个动作,分别用 0,1,2,3 表示,如图 6-14 所示。
现使用Sarsa算法对该进行求解。假设初始策略为随机选择动作,扫描所有状态所对应
的动作空间中的动作,记录所对应的奖励函数值,使用?-贪心策略选择对应动作,记录反馈
值和更新后状态,并根据更新后的状态和策略使用?–贪心策略选择下一个动作。重复上述过
程,直到任意状态所对应动作值函数收敛,此时获得最优策略。具体迭代过程如下:
第 1 次迭代:设置初始位置的状态动作值函数取值均为 0,如表 6-2 所示: 表 6-2 初始位置的?表
状态 动作 0 1 2 3 1 0 0 0 0
这时,在状态?1根据?–贪心策略选择动作,假设所选择的动作为?1 = 1,达到状态?5,
在状态?5根据?–贪心策略选择动作,假设所选择的动作为?5 = 1,达到状态?9,此时根据Sarsa
算法更新公式有:
?ℎ′ (?1, ?1) = ?ℎ(?1, ?1) + 0.01(?(?1, ?1) + 0.9 ∗ ?ℎ(?5, ?5) − ?ℎ(?1, ?1)) = 0 + 0.01(0 + 0.9 ∗ 0 − 0) = 0
更新后的?表如表 6-3 所示:表 6-3 ?表的更新计算结果
状态 动作 0 1 2 3 1 0 0 0 0 5 0 0 0 0 9 0 0 0 0
同理,在状态?9执行上述过程,直到碰到终止状态,即陷阱位置或目标位置,有:
?ℎ′ (?13, ?0) = ?ℎ(?13, ?0) + 0.01(?(?13, ?0) − ?ℎ(?13, ?0)) = 0 + 0.01(−1 − 0) = −0.01
更新后的?表如表 6-4 所示:
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
19
表 6-4 第一轮迭代计算所得?表
状态 动作 0 1 2 3 1 0 0 0 0 5 0 0 0 0 9 0 0 0 0 12 0 0 0 0 13 -0.01 0 0 0 7 0 0 0 0
此时一个情节结束,第一轮迭代结束。接下来可通过编程计算实现后续的迭代过程。例
如,经过 520 次迭代后所得?表如表 6-5 所示。 表 6-5 经过 520 次迭代后所得?表
状态 动作 0 1 2 3 1 0.005156259 0.154963696 0.0000217 0.005014207
5 0.004430395 0.278415073 -0.0000274 0.014190371
9 0.006557989 0.431280385 -0.122478977 0.017349889
12 0.010586489 0.031833657 0.596246003 0.022006643
13 -0.122478977 0.068799989 0.804654539 0.04579385
7 0 0 0 0 2 0.00000921 -0.000175532 -0.0000847 0.003036357
6 0 -0.01 -0.03940399 0.011292609
3 0 -0.0199 -0.000000810 -0.0000000024 14 0.992283254 0.076037698 0.00404853 0.052772335
10 0 0 0 0 4 0 -0.0002682 0 0 8 0 0 0 -0.029701
11 0 0 0 0.01
15 0 0 0 0.074059152
这样第 521 次迭代会在状态?1时根据?–贪心策略选择动作。若所选择动作为?1 = 1,达
到状态?5,则在状态?5根据?–贪心策略选择动作,若所选择的动作为?5 = 1,则达到状态?9,
此时根据Sarsa算法更新公式有:
?ℎ′ (?1, ?1) = ?ℎ(?1, ?1) + 0.01(?(?1, ?1) + 0.9 ∗ ?ℎ(?5, ?5) − ?ℎ(?1, ?1)) = 0.154963696 + 0.01(0 + 0.9 ∗ 0.278415073 − 0.154963696) = 0.155919795
同理可得,在状态?9有: ?ℎ′ (?5, ?5) = 0.279512446;
在状态?12有:?ℎ′ (?9, ?9) = 0.432333795;在状态?13有:?ℎ′ (?12, ?12) = 0.597525434;
在状态?14有:?ℎ′ (?13, ?13) = 0.805538543、?ℎ′ (?14, ?14) = 0.991360421
此时达到目标位置,情节结束,所得?表如表 6-6 所示: 表 6-6 第 521 次迭代后所得?表
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
20
状态 动作 0 1 2 3 1 0.005156259 0.155919795 0.0000217 0.005014207
5 0.004430395 0.279512446 -0.0000274 0.014190371
9 0.006557989 0.432333795 -0.122478977 0.017349889
12 0.010586489 0.038757211 0.597525434 0.022006643
13 -0.122478977 0.068799989 0.805538543 0.04579385
7 0 0 0 0 2 0.00000921 -0.000175532 -0.0000847 0.003036357
6 0 -0.01 -0.03940399 0.011292609
3 0 -0.0199 -0.000000810 -0.0000000024 14 0.991360421 0.076037698 0.00404853 0.052772335
10 0 0 0 0 4 0 -0.0002682 0 0 8 0 0 0 -0.029701
11 0 0 0 0.01
15 0 0 0 0.074059152
最后,经过 7704 次迭代得到如表 6-7 所示近似收敛的所求?表。
表 6-7 经过 7704 次迭代得到的所求?表
状态 动作 0 1 2 3 1 0.330698674 0.472081112 0.201401428 0.354912354
5 0.328504119 0.534740586 0.204759004 0.396069102
9 0.408266139 0.659091417 -0.863299995 0.438684407
12 0.452864782 0.507052898 0.760796198 0.550782416
13 -0.845778048 0.627468983 0.862796309 0.53608069
7 0 0 0 0 2 0.019642589 0.011094581 0.000103667 0.34818731
6 0.017799936 -0.04900995 -0.058519851 0.376322075
3 0.00000515 -0.0199 -0.000000802 0.009947571
14 1 0.715658666 0.422770758 0.603094188
10 0 0 0 0 4 0 -0.0002682 0 0 8 0 0 0 -0.029701
11 0 0 0.0000900 0.086482753
15 0.003008271 0.028954715 0.019619321 0.749827174
如图 6-15 所示,可用箭头符号形式化表示状态所对应的最优策略。由于采用的?–贪心
策略存在一定的随机性,开始随机选取的动作将会影响最终结果,故会出现两条不同的最优
路径,即 1 → 5 → 9 → 12 → 13 → 14 → 10 和 1 → 2 → 3 → 4 → 8 → 11 → 10。□
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
21
图 6-15 最优策略示意图
以上为单步时序差分学习算法,在一次状态更新后便估计和更新动作值函数取值。可进
一步考虑经过?次状态更新后再估计动作值函数取值多步时序差分学习算法。 在初始状态?(0)、动作为?(0)和策略ℎ确定情况下经过?次状态更新,可得到如下估计动
作值函数取值的计算公式: ?ℎ(?)(?(0), ?(0)) = ?(?(0), ?(0)) + ??(?(1), ?(1)) + ⋯ + ??−1?(?(?−1), ?(?−1)) (6– 46)
根据上式可得如下用于多步时序差分学习的值函数迭代公式:
?ℎ′ (?(0), ?(0)) = ?ℎ(?(0), ?(0)) + ? [?ℎ(?)(?(0), ?(0)) − ?ℎ(?(0), ?(0))] (6– 47)
假设整个强化学习过程持续?个时序,则?的可能取值为? = 1,2,… , ?。当? = 1时即为单
步时序差分算法,当? = ?时即为蒙特卡洛强化学习算法。一般情形下,希望能够选择对动
作值函数取值估计最有效的?取值,但通常难以获得最优?取值。为了得到较为精确的值函
数估计,通常综合考虑?的所有可能取值并将其纳入更新过程。具体做法是引入参数λ,并称
一次实验所获得的累计奖励为?收获,记为??λ。λ收获的具体计算公式如下:
??λ = (1 − λ)∑λ?−1?ℎ(?)(?(0), ?(0)) ??=1 (6– 48)
上式将?所有可能取值下的累计反馈纳入计算范围,并使得取值较大的?值所对应累计
反馈对总体累计反馈的影响较小。由此可得如下值函数迭代计算公式: ?ℎ′ (?(0), ?(0)) = ?ℎ(?(0), ?(0)) + ?[??λ − ?ℎ(?(0), ?(0))] (6– 49)
使用上述公式进行动作值函数取值估计并求解最优策略的方法通常称之为??(?)算法。
需要注意的是,虽然可以将 TD(λ)算法归为一类比较特殊的时序差分学习算法,但该算法在
值函数更新时也和蒙特卡洛强化学习方法一样需要等待强化学习过程结束,否则无法通过计
算λ收获值实现对值函数的更新。因此,TD(λ)算法通常是一种效率较低的算法。
6.2.3 Q 学习
Q 学习是一种具体的时序差分学习算法,与基于单步时序差分学习的Sarsa算法类似,Q
学习也只考虑一个时序后动作值函数的更新情况。但与Sarsa算法不同的是,Sarsa算法是一
种同策略算法,选择动作时的策略与更新动作值函数时的策略相同,Q 学习则是一种异策略
算法,在动作选择时所遵循的策略与更新动作值函数时的策略不同。
对于给定的状态-动作对(?, ?),假设根据策略ℎ对(?, ?)进行了?次采样,得到相应的值函
数取值估计为?ℎ(?, ?),若对(?, ?)进行第? + 1次采样,则可得到奖励函数值为?(?, ?)和下一
个状态?′,为使得动作值函数的更新过程更快收敛,Q 学习算法直接选择状态?′所对应的最
大值函数参与更新过程,由此得到如下迭代公式:
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
22
?ℎ′ (?, ?) = ?ℎ(?, ?) + ?[?(?, ?) + ?max?∗?ℎ(?′, ?∗) − ?ℎ(?, ?)] (6– 50)
其中?∗为下一个可能的动作,
可直接使用ϵ −贪心策略选择所有可能动作中使得下一时序状态值函数取值最大的动作
参与更新过程,但对下一个状态?′的选择则是根据当前策略ℎ和状态?′实现,故 Q 学习在动
作选择时所遵循的策略与更新动作值函数时所用的策略不同。
由以上分析可得 Q 学习算法的具体过程如下:
(1)随机选择初始状态?(?)和策略ℎ,设定?ℎ(?(?), ?(?))初始值并指定参数?, ?; (2)从状态?(?)开始马尔科夫决策过程,使用ϵ −贪心策略选择对应的动作?(?)记录反馈
值?(?(?), ?(?))和更新后的状态?(?+1); (3)根据如下公式更新动作值函数的取值: ?ℎ′ (?(?), ?(?)) = ?ℎ(?(?), ?(?)) + ?[?(?(?), ?(?)) + ?max?∗?ℎ(?(?+1), ?∗) − ?ℎ(?(?), ?(?))] (4)若值函数不收敛,则令?ℎ(?(?), ?(?)) = ?ℎ′ (?(?), ?(?))并使用ϵ −贪心策略选择?(?+1)
对应的动作?(?+1),返回步骤(1);否则,令:
ℎ∗ = argℎmax?ℎ(?(?), ?(?)) (6– 51)
求得最优策略ℎ∗并结束算法。
由于 Q 学习在每次迭代时都考察智能体的每一个行为, 故 Q 学习无需特殊的搜索策
略,只需采用贪心策略更新动作值函数就可保证算法收敛。因此,通常认为 Q 学习算法是一
种最有效的无模型强化学习优化算法。图 6-16 房间平面图
【例题 6.4】图 6-16 表示某建筑房间分布平面图,其中编号 0 至 4 表示房间,编号 5 表
示室外。智能体需从 2 号房间出发到达室外。令? = 0.8,? = 0,? = 1,智能体到达室外动 作的奖励函数值为 100,其它动作的奖励函数值为 0。试用 Q 学习算法求解最优路径。
【解】假设初始策略为随机策略ℎ,则可用如图 6-17 所示马尔可夫决策过程表示该路径
规划问题。其中箭头表示动作,例如从 2 号房间状态指向 3 号房间状态的箭头表示智能体从
2 号房间移动到 3 号房间这一动作。
图 6-17 马尔科夫决策过程 图 6-18 初始?表格
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
23
现将智能体位于?号位置的状态记为??,从?号位置移动到?号位置的动作记为???,且令所
有状态动作对的动作值函数初值均为 0,即将其表示为如图 6-18 所示的初始?表格。?表格
中第?行第?列元素为从状态s?转移到状态s?的动作所对应动作值函数的估计值。
使用 Q 学习算法求解最优策略的具体过程如下:
(1)随机选择初始状态,假设随机选择的当前智能体状态为?0 = ?1。根据当前策略,
智能体可选择的动作分别为?13, ?15。根据策略随机选择动作,假设所选择的动作为?15,则
根据 Q 学习算法值函数更新公式可得: ?ℎ′ (?1, ?15) = ?ℎ(?1, ?15) + ?(?1, ?15) + 0.8 × max?∗?ℎ(?1, ?∗) − ?ℎ(?1, ?15) = 0 + 100 + 0 − 0 = 100
由此可得到如图 6-19 所示的第一次更新后?表。 图 6-19 第一次更新后?表 图 6-20 第二次更新后?表 图 6-21 第三次更新后?表 (2)随机选择初始状态,假设随机选择的当前智能体状态为?3,根据当前策略,智能
体可选择的动作分别为?32, ?31, ?34,假设选择的下一动作为?31,则?1 = ?1,状态?1的动作
空间为{?13, ?15},根据 Q 学习算法值函数更新公式可得:
?ℎ′ (?3, ?31) = ?ℎ(?3, ?31) + ?(?3, ?31) + 0.8 × max?∗?ℎ(?1, ?∗) − ?ℎ(?3, ?31) = ?ℎ(?3, ?31) + ?(?3, ?31) + 0.8 × max{?ℎ(?1, ?13)?ℎ(?1, ?15)} − ?ℎ(?3, ?31) = 0 + 0 + 0.8 × 100 − 0 = 80
由此可得到如图 6-20 所示的第二次更新后?表。 (3)随机选择初始状态,假设随机选择的当前智能体状态为?4,根据当前策略,智能
体可选择的动作分别为?40, ?43, ?45,假设选择的下一动作为?45,则?1 = ?5,状态?1的动作
空间为{?51, ?54},根据 Q 学习算法值函数更新公式可得:
?ℎ′ (?4, ?45) = ?ℎ(?4, ?45) + ?(?4, ?45) + 0.8 × max?∗?ℎ(?5, ?∗) − ?ℎ(?4, ?45) = ?ℎ(?4, ?45) + ?(?4, ?45) + 0.8 × max{?ℎ(?5, ?51)?ℎ(?5, ?54)} − ?ℎ(?4, ?45) = 0 + 100 + 0.8 × 0 − 0 = 100
由此可得到如图 6-21 所示的第三次更新后?表。 图 6-22 最终?表 图 6-23 最佳路线示意图
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
24
(4)重复上述过程可得如图 6-22 所示的最终?表,由此将最终策略更新为:
ℎ(s) = arg?max?(?, ?)
从而得到如图 6-23 中箭头所示的智能体从 2 号房间到室外的最优路径。□
6.3 示范强化学习
由于现实世界和问题的复杂性,对强化学习的系统环境进行建模有时是一件非常困难的
事情,而且经常因为状态空间或动作空间过大而难以直接通过对某种数学模型的优化求解获
得最优策略。在面对这种情况时,可让智能体直接向已经掌握问题求解技巧的个体学习求解
经验,即通过示范决策序列进行学习。通常称这类学习方式为示范强化学习。可将示范强化
学习大致划分为两种基本类型,即模仿强化学习和逆向强化学习。模仿强化学习首先让智能
体通过模仿示范决策序列快速有效地掌握较优策略,然后在此基础上使用强化学习方法对已
掌握较优策略作进一步优化,获得最优策略。逆向强化学习首先通过某种优化计算方式获得
一种优化的奖励函数,消除人为确定奖励函数的主观随意性,然后根据所得优化奖励函数完
成强化学习任务。本节简要介绍模仿强化学习和逆向强化学习的基本思想。
6.3.1 模仿强化学习
模仿学习是通过观察和效仿其它个体行为以改善自身行为的一种学习方式。例如儿童通
过模仿成年人的行为方式从而掌握新的技能。在强化学习过程中,直接从零开始通过最大化
值函数学习多步决策的搜索空间有时非常巨大,使得强化学习过程过于复杂且难以实现。此
时可通过模仿强化学习获得最优策略,即让智能体通过模仿其他包括人在内有经验对象获得
具有一定合理性的策略,然后在此基础上做进一步优化计算获得最优策略。显然,模仿强化
学习可以大幅减小搜索范围以有效减低学习过程的计算复杂度。
在模仿强化学习中,通常称被模仿对象为示教者。模仿强化学习的基本模仿思路是让指
示教者提供作为示教信息或模仿范例的决策过程数据,智能体从示教者提供的示教信息中学
习。示教信息中决策过程数据主要包括多步决策过程的序列。具体地说,假设示教者提供了
?步决策过程的序列,其中第?个序列为:
?? = 〈?0(?), ?0(?), ?1(?), ?1(?), … , ??? (?), ??? (?)〉
其中??表示该序列的时序步骤个数。
可分别将序列中每个状态动作对(???, ???)抽象为一个训练样本构造如下训练样本集?: ? = {(?0(1), ?0(1)), (?1(1), ?1(1)), ⋯ , (?0(?), ?0(?)), (?1(?), ?1(?)), … , (??? (?), ??? (?))} 将?中每个训练样本的状态看成样本属性或特征值,动作看成是样本标签值,则?就是
一个带标签的训练样本集,可由此通过监督学习方式训练构造强化学习的初始模型。如果训
练样本来自人类专家的决策过程,则示教者就是人类专家,使用训练样本集合?对训练构造
强化学习初始模型的过程就是智能体模仿人类专家进行决策的过程。通过基于样本集合?的
预训练过程得到初始模型显然优于随机确定的初始化模型,故模仿强化学习可以有效提升迭
代收敛速度并获得较为准确的最优策略。
现结合机器人行走问题实例介绍模仿强化学习的具体过程。假设模仿强化学习的目标是
感知模块
(行为获取)
执行模块
(行为再现)
学习模块
(行为表征)
示教者 执行器
环境
相同行为
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
25
让机器人学会像人类一样能够直立行走,则该学习过程中的示教者可以是人也可以是已掌握
直立行走行为的其它机器人。模仿强化学习首先要让智能体通过行为观测和感知等方式获取
示教者的示教信息,然后通过适当的模仿学习算法将示教信息与模仿者自身特征相结合完成
对示教者的模仿。实现这种机器人行走模仿学习显然需要考虑如下三个问题,即如何获取示
教信息、如何对示教信息进行学习以及如何再现被模仿的行为。
图 6-24 机器人模仿学习基本流程
图 6-24 表示机器人模仿学习的基本流程。如图 6-24 所示,模仿强化学习首先使用感知
模块获取示教者的行为数据,然后通过学习模块将示教者的行为数据转变成由模仿学习获得
的策略,最后通过执行器的运动控制实现行为再现,完成机器人行走技能的学习。通常将机
器人系统通过感知模块获取示教行为信息的过程称为行为获取,将示教者的行为信息通过
学习模块表达为模仿学习策略过程称为行为表征,将使用学习所得最优策略通过执行模块
实现行为模仿的过程称为行为再现。由以上分析可知,机器人模仿学习系统运行的基本流程
主要由行为获取、行为表征和行为再现这三阶段构成。
实现行为获取的具体方法有很多种,其中最常用的方式有以下三种:一是示教者手动移
动机器人的执行机构,类似手把手教学;二是使用基于视觉的动作捕捉方法,包括基于标记
点的视觉动作捕捉和非基于标记点的视觉动作捕捉方法;三是使用穿戴式传感器获取行为信
息。获取示教信息后,通常需使用动态时间规整、主分量分析方法等对其进行运动分割、降
维、滤波、特征提取等预处理,然后将预处理后的示教信息输入学习模型作为模仿学习的训
练样本数据,为行为表征做准备。
行为表征即为行为编码过程,要解决的问题是如何将观察到的示教行为信息映射到机器
人自身的运动系统之中,通常需要确定一个合适的定量指标用于度量模仿学习的性能并通过
该指标获得最优的控制策略。行为表征是模仿学习的关键要点,也是目前模仿强化学习研究
领域的一个热点课题。有效的行为表征方法要求具备较好的泛化能力和鲁棒性,即能够把通 过学习获得的行为技能推广应用到新的环境并且具有较好的抗干扰能力。
机器人行走模仿强化学习的最后一步是将学习获得的控制策略映射到机器人的执行器
空间,通过对机器人底层的运动控制实现可视的行为再现。
模仿强化学习的主要优势在于能够在传统方法不易或不能实现的情况下找到有效的控
制策略以完成复杂的运动任务。随着强化学习研究的不断发展,所面临的问题也越来越多样,
对于环境难以建模的复杂任务,传统的强化学习方法难以有效解决此类任务,通过模仿强化
学习可以利用现有知识快速找到最优策略。但模仿强化学习所得到的智能体灵活性不足,并
且数据处理过程复杂,这限制了该方法在实际场景中的广泛应用。
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
26
6.3.2 逆向强化学习
在强化学习中主要通过最大化值函数方式求解最优策略,值函数通常使用累计奖励反馈
值的数学期望确定。因此,作为计算奖励反馈的奖励函数在强化学习中起着非常关键的作用。
不同的奖励函数可能会使得所求的最优策略有所不同。不合实际的奖励函数会使得所求策略
与实际最优策略之间具有较大偏差,甚至导致学习算法无法收敛。强化学习中的奖励函数通
常是人为给定或由环境确定,使用这种方式确定的奖励函数取值不可避免地带有较强的主观
性,在很多情况下并不符合实际情况,故可考虑从有经验的示教者那里获得比较合理的奖励
函数。逆向强化学习的基本思路就是首先通过某种优化计算方式获得一种优化的奖励函数,
然后根据所得优化奖励函数完成强化学习任务。
图 6-25 逆向强化学习基本流程
然而在很多情况下,人类专家或其他行为较好的示教者虽然能够较好地完成任务却并未
直接考虑奖励函数。例如,在让人类玩家进行例题 6.1 中小游戏时,只需让智能体朝着目标
位置方向移动即可,并没有考虑每步移动所带来的立即反馈奖励值。但这并不是说人类专家
在完成任务时没有奖励函数。事实上,人类专家在完成任何具体任务时都存在显性的或潜在
奖励函数。因为人类专家在完成任务时使用的策略通常最优或接近最优的策略,故可假设所
有策略所产生的累积奖励期望都不高于专家策略所产生的累积奖励期望。可根据该假设和示
教者完成任务的动作序列近似求出潜在的奖励函数。
从示教者完成任务的动作序列中学习获得奖励函数,再通过所学奖励函数完成强化学习
任务的过程称为逆向强化学习。图 6-25 表示一个完整的逆向强化学习过程。
显然,逆向强化学习的关键在于如何通过学习获得所需的奖励函数。奖励函数的求解首
先需要解决如下两个问题:一是可能会有多个奖励函数同时满足专家策略为最优策略的条
件,有时无法确定选择哪个奖励函数最为合理;二是如果所构造的奖励函数由大量零值构成,
则会使得学习者选择任意动作的效果都是等效的,难以获得唯一的最优策略。为解决上述两 个问题,通常不直接计算奖励函数值,而是通过已知基函数的线性组合来逼近最优奖励函数。
也就是说,通过适当调节基函数权重的方式构造所需的奖励函数。可以通过这种方式获得与
任意专家策略相对应的唯一奖励函数值。
具体地说,假设∅(?) = (∅?(?), ∅?(?),… , ∅?(?))?是为基函数向量,其中每个分量是关于
奖励函数的基函数,这些基函数可以是多项式、三角函数等基函数形式,则可将奖励函数?(s)
表示成如下关于基函数的线性组合形式: ?(s) = ??∅(?) (6– 52)
其中? = (?1,?2, … , ??)?是为基函数的权重向量。
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
27
回报函数求解的关键在于如何确定权重向量?。由于逆向强化学习根据示教者完成任务
的动作序列来构造回报函数,故用所求奖励函数获得的最优策略应该与示教者完成任务时所 用策略比较接近。假设使用所求奖励函数获得的最优策略为ℎ,示教者完成任务所用策略为
ℎ∗,可根据值函数定义可求得ℎ在初始状态?0时的状态值函数期望值?(?ℎ(?0)): ?(?ℎ(?0)) = ? [∑???(??)|ℎ ??=0 ] = ? [∑??∅(??)|ℎ ??=0 ] = ?? · ? [∑∅(??)|ℎ ??=0 ] 令?(ℎ) = ?[∑ ∅(??)|ℎ ??=0 ],并假设示教者提供了?次决策过程的序列,将这?次决策过程
的序列组成集合? = {?1,?2, … , ??},其中第?个序列可表示为:
?? = 〈?0? , ?0? , ?1?, ?1? , … , ??? ? , ??? ? 〉
则可得到?(ℎ)的估计值为:
?̂?(ℎ∗) = 1?∑∑??∅(???) ??=0 ??=1 (6– 53)
由于最优策略应与示教者完成任务的动作序列所遵从的策略接近,因此?̂(ℎ∗)应与u(ℎ)
较为相近,即有:
||?̂(ℎ∗) − ?(ℎ)|| ≤ ε
其中?为一个取值较小的正常数。
由此可知,对于任意权重向量||?|| ≤ 1有: |???̂(ℎ∗) − ???(ℎ)| ≤ ||?|| · ||?̂(ℎ∗) − ?(ℎ)|| < ε
为保证最优策略与示教者完成任务所用策略尽可能接近,需要||?̂(ℎ∗) − ?(ℎ)||尽可能小,
为保证所求的回报函数尽可能精确,则需要||?||取值尽可能大,故可通过求解如下优化问题
求得回报函数的权重向量:
? = arg?max||?||≤1min?∈{1,2…,?}??(?̂ (?)(ℎ∗) − ?(ℎ)) (6– 54)
将上述优化问题中目标函数进行标准化,可将其转化为如下形式:
max?,? ? ;?.?. ???(ℎ) ≥ ???̂ (?)(ℎ∗) + ?, ||?|| ≤ 1 (6– 55) (6– 55)式中?̂ (?)(ℎ∗)表示前? − 1次迭代过程中的最优策略。
使用上述方法确定权重向量的学习方式通常称之为学徒学习。由以上分析可知,学徒学
习从某个初始策略开始求解回报函数的参数值,并利用所求回报函数和现有强化学习方法更
新策略,不断重复上述过程直至算法收敛,实现对最优策略的求解。
使用逆向学习方式确定奖励函数的目的是为了避免人为设定回报函数的主观随意性问
题。但逆向学习回报函数的训练构造中又引入了需要人为指定的参数模型,即假设的回报函
数为一组基向量的线性组合形式。从表面上看,这似乎是一个难以解决的矛盾。然而,目前
正在蓬勃发展的深度学习方法正好解决这个矛盾,即使用神经网络表示奖励函数的具体形
式,并以此为基础形成了一套深度强化学习理论和方法。深度强化学习通过将深度学习和强
化学习进行有机结合,使得智能体同时具有深度学习的理解能力和强化学习的决策能力。有
关深度强化学习的具体内容将在后文详细介绍,这里不再赘述。
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
28
6.4 强化学习应用
强化学习的目标是获得一种最优策略将环境状态映射到一组合理的行为,使得智能体获
得最大的长期奖励,并且这种目标主要通过智能体与环境之间不断交互获得最佳序贯决策的
方式实现。由于智能体与环境的交互经常会发生延迟反馈、稀疏奖励等问题,故使用强化学
习理论解决实际问题并不是一件容易的事情。尽管如此,强化学习在游戏、机器人、智能驾
驶和智能医疗等诸多领域得到广泛应用,并产生不少相关产品。尤其是最近几年,强化学习
理论与应用研究通过引入深度学习技术取得了突破性进展,基于深度强化学习理论的应用技
术和产品不断涌现,愈发彰显了强化学习理论的重要性。本节简要介绍强化学习的几个典型
应用,主要包括自动爬山小车、智能避障小鸟和五子棋自动对弈游戏。
6.4.1 自动爬山小车
智能小车爬山问题是指模拟强化学习环境,试图使在山底的小车在动力不足以一次性攀
登到山顶情况下,通过小车来回左右摆动增加动量,成功将小车越过旗杆到达山顶。如图 6- 1 所示,图中的曲线代表一个山谷的地形,其中 S 为山谷最低点,G 为右端最高点,A 则为
左端最高点。这样,小车的任务是在动力不足的条件下,从 S 点以尽量短的时间运动到 G 点。
小车爬山问题除了系统的状态观测值以外,没有任何关于系统动力学模型的先验知识,难以
采用传统的基于模型的最优化控制方法进行求解,因此选择通过使用强化学习的方法来求解。
图 6-26 小车爬山示意图 图 6-27 强化学习开发环境搭建
首先,需要使用 gym 模拟强化学习环境,主要是 Anaconda 软件安装配置以及 gym、 tensorflow 软件库在 Windows 10 系统下的安装。
(1)为了便于管理,需要先装 Anaconda,下载和安装步骤如下:
○1 下载 Anaconda 安装包(推荐利用清华镜像来下载),下载地址:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive
在本书中,安装是 Anaconda3-5.1.0 版本。
○2 安装 Anaconda。下载完成 Anaconda 后,点击该文件进行安装,可以自定义安装路径。
○3 在安装过程中会询问是否将路径安装到环境变量中,勾选此选项。
至此 Anaconda 安装完成,你可以在你的安装目录下看到文件夹 Anaconda3。 (2)利用 Anaconda 建一个虚拟环境。
○1 找到 Anaconda Navigator,打开之后点击 Enviroments。 ○2 点击 Create,出现如图 6-27 所示界面:
在 Name 中填写 Gym,在 Python 中选择 3.5,点击 Create 完成。
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
29
(3)安装 gym、tensorflow
○1 使用快捷键 Win+R 打开 cmd,输入"activate D:\anaconda\envs\Gym"命令,激活 gym
环境。注意,这里 D:\anaconda\envs\Gym 是 Gym 虚拟环境所在的文件夹,依 Anaconda 安装
路径而定。 ○2 使用清华镜像安装 gym,输入: "pip install gym -i https://pypi.tuna.tsinghua.edu.cn/simple " ○3 使用清华镜像安装 tensorflow 的 CPU 版本,输入: "pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple "
对小车爬山问题进行分析,分析系统的状态可以用两个连续变量?和?表示,其中?为小
车的水平位移,?为小车的水平速度,状态空间约定如下: {?|? = [?, ?]?,−1.2 ≤ ? ≤ 0.5, −0.07 ≤ ? ≤ 0.07} ⊆ ?2
当小车位于S点、G点和A点时,y的取值分别为-0.5,0.5和-1.2。动作空间为{?1, ?2, ?3},
表示小车所受水平方向的力,包含三个离散的控制量,?1 = +1、?2 = 0、?3 = −1,分别代
表全油门向前、零油门、全油门向后三个控制行为。在该过程中,系统的动力学特性描述为: {?′ = ?????[? + 0.001? − ????(3?)] ?′ = ?????[? + ?′] 其中,? = 0.0025为与重力有关的系数:?为控制量;?′为新的水平速度;?′为新的水平
位移。目标是在没有任何模型先验知识的前提下,控制小车以最短时间从 S 点运动到 G 点。
上述控制问题可以用一个确定性 MDP 来建模,奖赏函数为: ?? = ? − 0.5
这样,当小车向左(后)运动时奖赏是负的,当小车静止时奖赏为零,当小车向右(前)
运行时奖赏是正的。并且越往右奖赏越大,越往左惩罚越大。
因为小车的状态是连续变量?和?,状态数量非常多,如果全用表格来存储它们,恐怕计
算机有再大的内存都不够,而且每次在这么大的表格中搜索对应的状态也是一件很耗时的
事。不过,在机器学习中,有一种方法对于这种事情很在行,那就是网络模型。网络模型输
入状态值,输出所有的动作值,然后按照 Q 学习的原则,直接选择拥有最大值的动作当作下
一步要做的动作。可以想象,网络模型接受外部的信息,相当于眼睛鼻子耳朵收集信息,然
后通过大脑加工输出每种动作的值,最后通过强化学习的方式选择动作。
前面已经介绍了 Q 学习的计算方法。Q 学习方法基于当前策略进行交互和改进,更像是
一种在线学习的方法。每一次模型利用交互生成的数据进行学习,学习后的样本被直接丢弃。
但如果使用机器学习模型代替表格式模型后再采用这样的在线学习方法,就有可能遇到两个
和机器学习有关的问题: (1)交互得到的序列存在一定的相关性。交互序列中的状态行动存在着一定的相关性,
而对于基于最大似然法的机器学习模型来说,有一个很重要的假设:训练样本是独立且来自
相同分布的,一旦这个假设不成立,模型的效果就会大打折扣。而上面提到的相关性恰好打
破了独立同分布的假设,那么学习得到的值函数模型可能存在很大的波动。
(2)交互数据的使用效率。采用梯度下降法进行模型更新时,模型训练往往需要经过
多轮迭代才能收敛。每一次迭代都需要使用一定数量的样本计算梯度,如果每次计算的样本
计算一次梯度后就被丢弃,那么就需要花费更多的时间与环境交互并收集样本。
为解决上述两个问题,使用样本回放缓存区,缓存区保存了交互的样本信息。通常情况
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
30
下,缓存区的大小会设置得比较大,这样较长一段时间的样本都可以被保存起来。在训练值
函数时,就可以从中取出一定数量的样本,根据样本记录的信息进行训练。这是一种离线学
习法,它能学习当前经历着的,也能学习过去经历过的, 甚至是学习别人的经历。具体过程
如代码 6-1 所示。
def store_transition(self, s, a, r, s_):
if not hasattr(self, ‘memory_counter’):
self.memory_counter = 0
transition = np.hstack((s, [a, r], s_))
index=self.memory_counter% self.memory_size
self.memory[index, :] = transition
self.memory_counter += 1
代码 6-1 存储回放记忆
在基于缓存区的学习过程中,小车一边用自己的策略行动以产生训练集,一边又用这些
训练集来训练、更新自己的策略。如果训练集的(?, ?, ?, ?′)分布与当前的策略过于一致,则
容易导致过拟合。其中(?, ?, ?, ?′)分别表示当前状态,采取的动作,获得的奖赏值以及下一
个状态。若使用了上述的缓存区,当过去的策略产生的数据集被保留下来,与现在策略产生
的数据集混合在一起,会使得整个训练集与当前策略的相似程度下降。但是,这种下降是有
限的,比如训练集中只含有历史上策略产生的数据,就没法发现一些全新的道路。而利用和
探索权衡取舍就是设计来解决这个问题的。
利用和探索是两种智能体的策略。利用意思是,智能体按照当前策略的判断,选择最优
的方式来操作,选取动作?? = ?????(??, ?; ?)执行产生训练集;而探索的意思是,用随机的
策略来选择一个动作??执行产生训练集。在实际中,会设定一个探索利用比,如 0.8,每次
智能体执行操作的时候,生成一个 0 到 1 之间均匀分布的随机数。如果它小于 0.8,则执行
探索策略,而如果它大于等于 0.8,则执行利用策略。这样一来,训练集中就将有一部分的
(?, ?, ?, ?′)是由探索产生的,这有助于我们的训练集包含的成分更加丰富。这种丰富是单靠
着缓存区提供的离线学习策略属性所不具备的。
在实际训练中,采用ε − greedy策略,一般先选取较大的ε,比如 1.0,用它来产生数据
集;然后随着训练的深入,就逐渐减小ε,到大约 0.1 的程度。这样一来,小车所使用的数
据集就会呈现,在一开始与当前策略有较大出入,且包含了较多不同的“套路”相关的经验;
在训练的后期,逐渐与当前的策略趋于一致。这样则可以更好地帮助小车收敛到最优策略。
具体过程如代码 6-2 所示。
def choose_action(self, observation):
observation = observation[np.newaxis, :]
if np.random.uniform() > self.epsilon:
actions_value=self.sess.run(self.q_eval,
feed_dict={self.s: observation})
action = np.argmax(actions_value)
else:
action=np.random.randint(0,
self.n_actions)
return action
代码 6-2 采用ε − greedy策略选取下一步行为
这样不仅交互得到的序列存在一定的相关性会导致模型的不稳定,而且算法本身也是导
致模型不稳定的一个因素。从 Q 学习的计算公式可以看出,算法可以分成如下两个步骤: (1)计算当前状态行动下的价值目标值:∆q(?, ?) = ?(?′) + ????′??−1(?′, ?′)。 (2)网络模型的更新:??(?, ?) = ??−1(?, ?) + 1? [∆q(?, ?) − ??−1(?, ?)]。
可以看出模型通过当前时刻的回报和下一时刻的价值估计进行更新。这里存在一些隐患,
前面提到数据样本差异可能造成一定的波动,由于数据本身存在着不稳定性,每一轮迭代都
可能产生一些波动,如果按照上面的计算公式,这些波动会立刻反应到下一个迭代的计算中,
这样就很难得到一个平稳的模型。为解决这个问题,建立两个结构一样的网络模型,一个为
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
31
target net,一个为 eval net。对于每一条(?, ?, ?, ?′),用 eval net 通过输入?算出Q(?, ?; ?), 用 target net 输入?′算出r + γ????′?(?′, ?′; ?−)。具体过程如代码 6-3 所示: ○1 搭建 target_net,输入小车下一个状态,输出对应动作的 Q 目标值
self.s_ = tf.placeholder(tf.float32,
[None, self.n_features], name=‘s_’)
self.q_next = tf.matmul(l1, w2) + b2
○2 搭建 eval_net,输入小车状态,对应动作 Q 目标值,输出对应动作 Q 估计值
self.s = tf.placeholder(tf.float32,
[None, self.n_features], name=‘s’)
self.q_target = tf.placeholder(tf.float32,
[None, self.n_actions], name=‘Q_target’)
self.q_eval = tf.matmul(l1, w2) + b2
○3 定义 eval_net 损失函数及优化方法:
with tf.variable_scope(‘loss’):
self.loss =
tf.reduce_mean((tf.squared_difference
(self.q_target, self.q_eval))
with tf.variable_scope(‘train’):
self.train_op = tf.train.RMSPropOptimizer
(self.lr).minimize(self.loss)
代码 6-3 搭建两个网络模型
执行一次梯度下降算法∆θ = α[r + γ????′?(?′, ?′; ?−) − ?(?, ?; ?)]∇Q(?, ?; ?),更新
eval net 的参数,而 target net 参数不变。这就会使得 eval net 算出来的Q(?, ?; ?)更加
接近 target -net 给出来的r + γ????′?(?′, ?′; ?−)。可以想象,target net 就是用来提供
不动的标签的,就像是监督学习中的 target 一样。每当 target net 训练了很多个 batch 之
后,直接把 eval net 的所有参数给照搬到 target net 上来,在智能小车爬山中设置C = 300,即每迭代训练 300 次更新 target net 的值,令?− = ?。最后,抽取缓冲区的样本进 行学习训练,更新网络参数。具体过程如代码 6-4 所示: ○1 从 Replay-Buffer 中随机抽取样本
if self.memory_counter > self.memory_size:
sample_index= np.random.choice
(self.memory_size,size=self.batch_size)
else:
sample_index = np.random.choice
(self.memory_counter,size=self.batch_size)
batch_memory = self.memory[sample_index, :]
q_next,q_eval=self.sess.run([self.q_next,
self.q_eval],
feed_dict={self.s
:batch_memory[:,-
self.n_features:],
self.s: batch_memory[:, :self.n_features],})
○2 训练网络模型并保存损失函数的值
_, self.cost = self.sess.run([self._train_op,
self.loss],
feed_dict={self.s: batch_memory
[:,:self.n_features],self.q_target:
q_target})
self.cost_his.append(self.cost)
代码 6-4 训练过程
运行程序,观察小车动态变化。这里设置 10 个轮次,小车每次到达终止状态时,此轮 次结束。小车的初始位置和终止位置如图 6-28 所示:
(a)初始位置图 (b)终止位置图
图 6-28 小车位置变化示意图
轮次结束时,输出轮次编号,以及是否到达目标位置,总奖赏值,ε值。如图 6-37 所示。
从上面可以看出每次小车达到终止状态时,ε − greedy中的 epsilon 稳定在 0.1,说明
了此时的小车,是大概率按照当前网络模型的输出,选择最优的方式来操作,选取动作执行
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
32
到达下一个状态。
在运行过程中,每次小车与环境交互 1000 次后就从缓冲区中进行抽样训练,得到一个
损失函数值。画出训练次数与损失函数的关系如下图 6-29 所示: 图 6-29 训练次数与损失函数函数关系图
从上图可以看出,最初的情节开始时,环境重置,小车根据ε − greedy策略选取动作并
将(?, ?, ?, ?′)存放在缓冲区中。由于开始大概率采用随机的策略来选择一个动作??执行产生
训练集,所以损失函数的值非常大。随着时间的推移,小车大概率利用当前网络模型的输出,
选择最优的方式来操作,选取动作?? = ?????(??, ?; ?)执行产生训练集。经过一段时间的优
化,损失函数的值变得越来越小,越来越稳定。
当一个轮次结束时,系统环境又会重置,缓冲区中又会存在随机的动作产生的(?, ?, ?, ?′)
样本集,导致损失函数变得比较大,产生波动。从上图中可以看出,共存在 10 个波峰,这
与实际中设置的 10 个轮次相对应。
6.4.2 五子棋自动对弈
五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界
智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉
点上,先形成 5 子连线者获胜。现有一个 1212 的棋盘,利用强化学习进行人机对战博弈,
棋局规则为五子棋规则。首先数值化定义一个五子棋问题,棋盘 12×12=144 个交叉点可供
落子,每个点两种状态,有子用 1 表示,无子用 0 表示,用来描述此时棋盘的状态,即棋盘
的状态向量记为?⃗,则有: ?⃗ = (1,0,0,1,⋯ )
假设状态下,暂不考虑不能落子的情况,那么下一步可走的位置空间也是 144 个。将下
一步的落子行动也用一个 144 维的动作向量来表示,记为?⃗,有:
?⃗ = (0,0,0,1,⋯ )
有以上定义,可以把五子棋问题转化为:任意给定一个状态,寻找最优的应对策略,最
早使得棋盘上的五子相连的棋手获胜。从一个棋盘的初始状态,开始思考下一步如何走。回
顾一下人类思考的过程,人类会思考自己可以有哪几种走法,如果走了这里,对手可能会走
哪里,那么还可以在哪里走。自己和对手都会选择最有利的走法,最终价值最大的那一手,
就是需要选择的下法。很明显这个思维过程是一颗树,为了寻找最佳的行棋点的过程,就是
树搜索。五子棋第一手有 144 种下法,第二手有 142 种,第三手有 141,依次类推,即一共
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
33
有 144! 种下法,考虑到存在大量不合规则的棋子分布,但是合理的棋局仍是 一个天文数
字,要进行完全树搜索,是不可能的。
图 6-30 自我对局图
为实现上述的五子棋人机对战,在算法上采用自我对弈强化学习,完全从随机落子开始,
不用人类棋谱。在模型上使用一个策略价值网络模型(??),来计算在当前局面下每一个不
同落子的胜率。策略上,基于训练好的这个网络,进行简单的树搜索。自我对局(self-play)
是系统使用 MCTS 算法进行的自对弈过程。图 6-30 表示自对弈过程?1, ?2, ?3 ⋯ , ??在每一个位
置??,使用策略价值网络模型??执行一次 MCTS 搜索??。根据搜索得出的概率??~??进行落子,
终局??时根据五子棋规则计算胜者?,??是每一步时执行 MCTS 搜索得出的结果,柱状图表示
概率的高低。
在自我对局过程中,系统收集一系列的(?, ?, ?)数据,?表示局面,?是根据 MCTS 根节
点处每个分支的访问次数计算的概率,?是自我对局的结果,其中?和?需要特别注意从每一
步的当前棋手的视角去表示。比如s中用两个二值矩阵分别表示两个棋手的棋子的位置,那
么可以是第一个矩阵表示当前棋手的棋子位置,第二个矩阵表示另一个棋手的棋子位置,也
就是说第一个矩阵会交替表示先手和后手棋手的棋子位置,就看?局面下谁是当前棋手。?也
类似,不过需要在一个完整的对局结束后才能确定这一局中每一个(?, ?, ?)中的 ?,如果最后
的胜者是?局面下的当前棋手,则? = 1 ,如果最后的败者是?局面下的当前棋手,则 ? = −1,
这也就是奖赏函数。使用 MCTS 进行自我对弈的搜索过程如图 6-31 所示:
图 6-31 搜索过程
(1)该搜索树中的每一个边(?, ?)都存储了一个先验概率?(?, ?),一个访问计数
?(?, ?) 和一个动作值?(?, ?)。 (2)选择:如上图 a 每次模拟都通过选择带有最大置信区间上界?(?, ?) + ?(?, ?)的
边来遍历这个树,其中?(?, ?) ∝ ?(?, ?)/(1 + ?(?, ?))。
扩展和评估:如上图 b 使用神经网络扩展叶节点并评估关联的局面 s,((?(?,⋅), ?(?));P
向量的值保存在从 s出来的边上。
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
34
(3)备份:如上图c在该模拟中遍历的每个边(?, ?)都被上传以增加其访问计数?(?, ?),
并将其动作值更新为在这些模拟上的平均估计,?(?, ?) = 1/?(?, ?) ∑ ?(?′) ?′|?,?→?′ ,其中
?′|?, ? → ?′表示该模拟在采取了走法 ? 之后最终从局面 ? 变成了 ?′。 (4)下棋:如上图,一旦搜索完成,就会返回搜索概率π ∝ ?1/?,其中?是来自根的
每次走子的访问次数,?是控制温度的参数;下一步走子是通过搜索概率??完成的,然后
转移到下一个状态??+1。
五子棋具有旋转和镜像翻转等价的性质,这可以被充分利用来扩充自我对局数据,以
及在 MCTS 评估叶子节点的时候提高局面评估的可靠性。在实现中,因为生成自我对局数
据本身就是计算的瓶颈,为了能够在算力非常弱的情况下尽快的收集数据训练模型,每一
局自我对局结束后,把这一局的数据进行旋转和镜像翻转,将 8 种等价情况的数据全部存
入自我对局的缓冲区中。这种旋转和翻转的数据扩充在一定程度上也能提高自我对局数据
的多样性和均衡性。
图 6-32 策略价值网络模型图
策略价值网络模型??是在给定当前局面?的情况下,返回当前局面下每一个可行 action
的概率??以及当前局面评分?的模型,如图 6-32 所示。前面自我对局收集到的数据就是用来
训练策略价值网络模型的,而训练更新的策略价值网络模型也会马上被应用到 MCTS 中进
行后面的自我对局,以生成更优质的自我对局数据。两者相互嵌套,相互促进,就构成了整
个训练的循环。
(1)网络输入:使用了 4 个12 × 12的二值特征平面,其中前两个平面分别表示当前棋 手的棋子位置和对手的棋子位置,有棋子的位置是 1,没棋子的位置是 0。然后第三个平面
表示对手最近一步的落子位置,也就是整个平面只有一个位置是 1,其余全部是 0。第四个
平面,也就是最后一个平面表示的是当前棋手是不是先手,如果是先手则整个平面全部为 1,
否则全部为 0。 (2)网络结构:最开始是公共的 3 层全卷积网络,分别使用 32、64 和 128 个3 × 3的
filter,使用 ReLu 激活函数。然后再分成策略和价值两个输出,在策略这一端,先使用 4 个 1 × 1的滤波器进行降维,再接一个全连接层,使用 softmax 非线性函数直接输出棋盘上每个
位置的落子概率;在价值这一端,先使用 2 个1 × 1的 filter 进行降维,再接一个 64 个神经
元的全连接层,最后再接一个全连接层,使用 tanh 非线性函数直接输出 [-1,1] 之间的局面
评分。整个策略价值网络的深度只有 5~6 层,训练和预测都相对比较快。 (3)网络输出:输出是当前局面下每一个可行行为的概率 ?以及当前局面的评分 v,
而用来训练策略价值网络的是在自我对局过程中收集的一系列的(?, ?, ?)数据。训练的目标
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
35
是让策略价值网络输出的行为概率 ?更加接近 MCTS 输出的概率 ? ,让策略价值网络输出
的局面评分 v 能更准确的预测真实的对局结果 z 。从优化的角度来说,是在自我对局数据
集上不断的最小化损失函数:? = (? − ?)2 − ??
logp+c‖??‖2,其中第三项是用于防止过拟合
的正则项。随着训练的不断进行,网络对于胜率的下法概率的估算将越来越准确。这意味着,
即便某个下法系统没有模拟过,但是通过策略价值网络模型依然可以达到 MCTS 的模拟效
果。也就是说,系统虽然没下过这手棋,但凭借在策略价值网络模型中训练出的“棋感”,
系统可以估算出这么走的胜率是多少。
下面是五子棋自动对弈的具体编程实现过程:
(1)定义五子棋规则,判断五子棋何时结束对局
if (w in range(width - n + 1) and len(set
(states.get(i, -1) for i in range
(m, m + n))) == 1):
return True, player
if (h in range(height - n + 1) and len(set
(states.get(i,-1) for i in range
(m, m + n * width, width))) == 1):
return True, player
if (w in range(width - n + 1) and h in range(height -
n + 1) and len(set(states.get(i,-1) for i in range
(m, m + n * (width + 1), width + 1))) == 1):
return True, player
if (w in range(n - 1, width) and h in range(height –
n + 1) and len(set(states.get(i,-1) for i in range
(m, m + n * (width - 1), width - 1)))== 1):
return True, player
(2)搭建策略价值网络模型
○1 定义网络输入
self.state_input=tf.placeholder(tf.float32,shape=
[None,4,self.board_width,self.board_height],
name=“state”)
self.winner=tf.placeholder(tf.float32, shape=[None],
name=“winner”)
self.winner_reshape = tf.reshape(self.winner, [-1,1])
self.mcts_probs=tf.placeholder(tf.float32,
shape=[None,self.board_width
self.board_height],
name=“mcts_probs”)
○2 创建落子概率输出层
policy_net=tf.layers.conv2d(conv3,filters=4,
kernel_size=1,strides=1,padding=“SAME”,
data_format=‘channels_first’,
activation=tf.nn.relu,name=“policy_net”)
policy_net_flat=tf.reshape(policy_net,shape=[-1,
4self.board_widthself.board_height])
self.action_probs =
tf.nn.softmax(self.policy_net_out,
name=“policy_net_proba”)
policy_net_flat=tf.reshape(policy_net,shape=[-1,
4self.board_widthself.board_height])
self.action_probs =
tf.nn.softmax(self.policy_net_out,
name=“policy_net_proba”)
○3 创建局面评分层
self.policy_net_out=tf.layers.dense
(policy_net_flat,
self.board_widthself.board_height,
name=“output”)
④定义损失函数以及优化方法
l2_penalty = 0
for v in tf.trainable_variables():
if not ‘bias’ in v.name.lower():
l2_penalty += tf.nn.l2_loss(v)
value_loss = tf.reduce_mean(tf.square
(self.winner_reshape - self.value))
cross_entropy=tf.nn.softmax_cross_entropy
_with_logits(logits=self.policy_net_out
,labels=self.mcts_probs)
policy_loss = tf.reduce_mean(cross_entropy)
self.loss=value_loss+policy_loss+
self.l2_const
l2_penalty
self.entropy = policy_loss
self.learning_rate =
tf.placeholder(tf.float32)
optimizer = tf.train.AdamOptimizer
(learning_rate=self.learning_rate)
self.training_op =
optimizer.minimize(self.loss)
(3)构建 MCTS 过程,返回 MCTS 过程的行为和对应的概率值
def get_move_probs(self, state, temp=1e-3):
for n in range(self._n_playout):
state_copy = copy.deepcopy(state)
self._playout(state_copy)
act_visits=[(act,node._n_visits)for act,
node in self._root._children.items()]
acts, visits = zip(act_visits)
act_probs=softmax(1.0/temp
np.log(visits))
return acts, act_probs
(4)进行自我对局并保存对战信息
def start_self_play(self,player,
is_shown=0, temp=1e-3):
self.board.init_board()
if end:
winners_z = np.zeros(len(current_players))
if winner != -1:
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
36
p1, p2 = self.board.players
states, mcts_probs, current_players = [], [], []
while(1):
move,move_probs=player.get_action
(self.board,temp=temp,return_prob=1)
states.append(self.board.current_state())
mcts_probs.append(move_probs)
current_players.append
(self.board.current_player)
self.board.do_move(move)
end, winner = self.board.game_end()
winners_z[np.array(current_players)==
winner]=1.0
winners_z[np.array(current_players) != winner]
= -1.0
player.reset_player()
if is_shown:
if winner != -1:
print(“Winner is player:”, winner)
else:
print(“Game end. Tie”)
return winner, zip(states, mcts_probs,
winners_z)
(5)进行迭代训练并更新神经网络的参数
在本次实验中,网络经过了 8580 次的迭代,下图 6-33 展示的是一次在12 × 12棋盘上
进行五子棋训练的过程中损失函数(? − ?)2 − ??
logp+c‖??‖2随着自我对局局数变化的情况,
损失函数从最开始的 5.5 慢慢减小到了 2.5 左右。 图 6-33 损失函数 图 6-34 策略值
在训练过程中,除了观察到损失函数在慢慢减小,一般还会关注策略价值网络模型输出
的策略,即输出的落子概率分布的熵(−??
logp)的变化情况。正常来讲,最开始的时候,
策略价值网络模型基本上是均匀的随机输出落子的概率,所以熵会比较大。随着训练过程的
慢慢推进,策略价值网络模型会慢慢学会在不同的局面下哪些位置应该有更大的落子概率,
也就是说落子概率的分布不再均匀,会有比较强的偏向,这样熵就会变小。也正是由于策略
价值网络模型输出概率的偏向,才能帮助 MCTS 在搜索过程中能够在更有潜力的位置进行
更多的模拟,从而在比较少的模拟次数下达到比较好的性能。图 6-34 展示的是同一次训练
过程中观察到的策略网络输出策略的熵的变化情况。
(6)人机对战开始
def run():
n_row = 5
width, heig2, 12
try:
board=Board(width=width,
height=height, n_in_row=n_row)
best_policy = PolicyValueNet(width, height,
n_row)
game = Game(board)
mcts_player=MCTSPlayer(best_policy.
policy_value_fn,c_puct=5, n_playout=400)
human = Human()
game.start_play(human,mcts_player,
start_player=1, is_shown=1)
except KeyboardInterrupt:
print(’\n\rquit’)
使用训练好的模型,进行人机对战,可以设置 MCTS 每次下棋模拟的次数以及是否人类
先手。这里设置的模拟次数是 400 次,将 MCTS 每次模拟的次数提高,会使 AI 有更好的表
现,图 6-35 展示了和 AI 对战的 4 局结局,其中每局都是 AI 先手。
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
37
(a)第一局 (b)第二局 (c)第三局 (d)第四局
图 6-35 人机对弈结果
上面的结果显示,玩家赢了一场,AI 赢了三场。在对弈的过程中,不难发现:如果自己
形成活三,那么 AI 就会堵住,防止形成活四。并且 AI 还会构造一些三三禁手,四四禁手的
定式来赢得对局。由于训练时间问题,缓冲区中样本不足,可能有些情况还没有模拟到。例
如,在对弈的过程中,玩家已经形成活四,但是 AI 并没有拦截,反而是自己构建活三。这
应该是在 AI 的自对弈过程中,没有遇到这种情况,所有造成了玩家获胜的局面。有理由相
信,如果条件允许的情况下,AI 的表现会更好。
6.5 习 题 (1)简要说明强化学习的基本思想,并阐述强化学习与监督学习的差异。
(2)给定一个有 3 个状态?1、?2、?3的可观测马尔可夫模型,其初始概率为:
π = [0.5,0.2,0.3]?
转移概率为:
A = [0.4 0.2 0.1 0.3 0.6 0.1 0.3 0.2 0.8]
产生 100 个有 1000 个状态的序列。 (3)形式化地描述一个二阶马尔可夫模型。其参数是什么?如何计算一个给定的状态
序列的概率?对于一个可观测模型如何学习参数?
(4)证明:任意二阶马尔可夫模型都可以转化为一个一阶马尔可夫模型。
(5)给定图 6-36 的网格世界,如果达到目标的奖励为 100 且γ = 0.9,手工计算?∗(?, ?), ?∗(?)以及最优策略的动作。
G S 图 6-36 网格世界
(6)对于题 5 中,假设达到目标的奖励服从均值为 100 和方差为 40 的正态分布。同时
假设动作也是随机的,即当机器人向一个方向前进时,它以 0.5 的概率向预定的方向前进,
同时以 0.25 的概率向两个横向方向之一前进。在这种情况下,学习Q(s, a)。 (7)给出一个可以用部分可观察马尔可夫决策过程建模的强化学习应用的例子。定义
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
38
其中的状态、动作、观测和奖励。
(8)假设我们正站在两扇门前,一扇门在左边,另一扇门在右边。其中一扇门后面是
老虎,另一扇门后有一笔财富。但是我们不知晓。如果我们打开老虎的门,那么我们得到负
奖励,而我们打开有财富的房间,则我们得到正奖励。隐藏状态??是老虎的位置。假设 p 表
示老虎在右边的概率为 1-p: ? ≡ P(?? = 1)
两个动作是??和??,分别对应于左边和右边的门。其奖励是:
?(?,?) 老虎在左边 老虎在右边
打开左边的门 -100 +80
打开右边的门 +90 -100
试求两个动作的期望奖励。
(9)考虑与一个随机下棋的对家对弈 Tic-Tac-Toe。确切地讲,假定对家在有多个选择
时以均匀的概率选择走棋,除非有一个强制性的走棋,这时他采取显然正确的步子。
(a)在此情况下,将学习最优的 Tic-Tac-Toe 策略形成一个 Q 学习问题。在此非确定性
马尔可夫决策过程中,何为状态、动作以及回报?
(b)如果对家选择最优的走棋而不是随机走棋,你的程序能否胜利?请说明理由。
(10)在许多 MDP 中,有可能找到两个策略?1和?2,如果 agent 开始与状态?1,则?1优 于?2;如果 agent 开始于另一个状态?2,则?2优于?1。换言之,??1(?1)> ??2(?1)但??2(?2)> ??1(?2)。解释为什么一个 MDP 总有一个策略?∗,使(∀?,?)??∗(s)> ?π(s)。 (11)证明:考虑一个 Q 学习 agent,在一个有有界回报(∀?, ?)|?(?, ?)| ≤ ?的确定性
MDP 中,Q 学习 agent 使用式:?̂(?, ?) ← ? + ? max
?′ ?̂(?′, ?′)的规则,将表?̂(?, ?)初始化为
任意有限值,并且使用折算因子?,0 ≤ ? < 1。令?̂?(?, ?)代表在第那次更新后 agent 的假设
?̂(?, ?)。如果每个状态-动作对都被无限频繁的访问,那么对所有 s 和 a,当n → ∞时?̂?(?, ?)
收敛到Q(?, ?)。 (12)对于使用式
∆? = γ????
推导使用多层感知器估计 Q 的权重更新公式。
(13)用于 K-摇臂赌博机的 UCB 方法每次选择Q(k) + UC(k)的最大的摇臂,其中Q(k)
为摇臂 k 当前的平均奖赏,UC(k)为置信区间。例如:
Q(k) + √2 ln ? ??
其中 n 为已执行所有摇臂的总次数,??为已执行摇臂 k 的次数。试比较 UCB 方法与ϵ-
贪心法和 Softmax 方法的异同。
(14)请对比学习 Sarsa 算法和 Q 学习方法,比较二者的异同点,并举例说明现实生活
中应用二者算法的实例。 (15)线性值函数近似在实践中往往有较大的误差。试结合 BP 神经网络,将线性值函
数近似 Sarsa 算法推广为使用神经网络近似的 Sarsa 算法。
(16)阐述逆向强化学习如何通过学习获得所需的奖励函数?回报函数如何确定权重向
《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版
39
量??请说明理由。
(17)现有一个如图 37 所示的4 × 4棋盘,其中位置黄色圆(2,2)为智能体运动的起始
位置,位置红色正方形(0,0)为终点位置,智能体每次运动的目标位置是终点位置时奖励函
数取值为 0,否则取值为-1,试通过值迭代学习使得智能体最快达到终点。
图 6-37 游戏棋盘 图 6-38 3 × 3网格
(18)在没有 MDP 模型时,可以先学习 MDP 模型(例如使用随即策略进行采样,从
样本中估计出转移函数和奖赏函数),然后再使用有模型强化学习方法。试述该方法与免模
型强化学习方法的优缺点。
(19)以一个3 × 3网格为例,如图 6-38 所示意起始时刻,智能体可位于 9 个单元格之
一。从集合α ∈ [up, down, right, left]中选择行为。一旦智能体移动到单元格 1,则会立即跳
转到单元格 9 并且得到回报 r=+10。若智能体到达边界,则会停留在当前单元格并得到惩罚
r=-1.根据下式:
?∗(?) = max
???(?)∑???′ ? (???′ ? + ?) ?′ ?∗(??+1)
其中未来回报的折扣因子? = 0.9,行为选择策略π(s, a) = 0.25。试求出各个网格单元的
值函数。

你可能感兴趣的:(强化学习,强化学习)