精华内容
下载资源
问答
  • ERP整合信息强化管理

    2020-03-04 09:20:01
    由于公司与供货有着长期的良好合作关系,如果公司能够在一个月时间内及时与供货协调,那么超出生产需要的非定制物料可以获得退货待遇。ERP系统帮助公司及时发现物料超量的实际情况,保证了退货周期,从而有效...
  • 任务型对话系统的对话策略是这些产品 回 答 用 户 问 题 的 关 键 , 而 目 前 主 流 的 对 话 策 略 学 习 法 是 釆 用 强 化 学 习 。 通 过强化学习 , 任务型对话系统可以在与用户的交互过程中渐渐学会如何...
  • 正方教务管理系统(完整版)

    热门讨论 2012-12-27 16:33:24
    (2)教学管理上:学分制管理以教学过程为主线管理,淡化行政班,在强化专业学生共性的基础上重视学生的个性化培养。 (3)学籍管理上:学分制的学籍管理关心获得学分或修读的课程,学生可以多次修读相同或不同的...
  • 正方现在教务管理系统

    热门讨论 2012-02-23 01:17:57
    (2)教学管理上:学分制管理以教学过程为主线管理,淡化行政班,在强化专业学生共性的基础上重视学生的个性化培养。 (3)学籍管理上:学分制的学籍管理关心获得学分或修读的课程,学生可以多次修读相同或不同的...
  • 强化学习

    千次阅读 2019-10-17 14:13:37
    第六章 强化学习 我们知道,机器学习是一种从经验数据中构造和改善模型的理论与方法,前述监督学习 和无监督学习主要以带标注或不带标注样本数据作为反映外部环境特征的经验数据。事实 上,除样本数据之外还可使用...

    《机器学习及其应用》汪荣贵等编著 机械工业出版社 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。试求出各个网格单元的
    值函数。

    展开全文
  • 强化学习仿真环境gym搭建

    万次阅读 2018-01-19 20:19:53
    先说说我为什么对强化学习有兴趣了,从大数据到机器学习、深度学习,现在我对智能化真的产生兴趣了,希望有一天能做出自己的机器人。 然而,学习的第一步就是环境,所以首先搭建一个gym的仿真环境。现在大家用的...

    先说说我为什么对强化学习有兴趣了,从大数据到机器学习、深度学习,现在我对智能化真的产生兴趣了,希望有一天能做出自己的机器人。
    然而,学习的第一步就是环境,所以首先搭建一个gym的仿真环境。现在大家用的最多的是openai的gym( openai/gym),或者universe(,openai/universe),。这两个平台非常好,是通用的平台,而且与tensorflow和Theano无缝连接,虽然目前只支持python语言,但相信在不久的将来也会支持其他语言。下面我根据自己的理解,讲下关于gym的一些事情。

    强化学习仿真环境gym(一)

    搞深度强化学习,训练环境的搭建是必须的,因为训练环境是测试算法,训练参数的基本平台(当然,也可以用实际的样机进行训练,但时间和代价是相当大的)。

    现在大家用的最多的是openai的gym( openai/gym),或者universe

    (openai/universe),。这两个平台非常好,是通用的平台,而且与tensorflow和Theano无缝连接,虽然目前只支持python语言,但相信在不久的将来也会支持其他语言。下面我根据自己的理解,讲下关于gym的一些事情。

    Gym的原理是什么?它是新东西吗?

    在我看来,gym并不是完全的新东西,它不过是用python语言写的仿真器。对于仿真器大家肯定并不陌生。学控制的人都用过或听过matlab的simulink,学机械的人应该用过动力学仿真软件adams,gym在本质上和simulink,adams没什么区别。

    如果把Gym,simulink,adams等等这些仿真器去掉界面显示(如动画显示),剩下的本质不过是一组微分方程。所以Gym,simulink,adams等等一切仿真器的本质是微分方程。比如,运动学微分方程,动力学微分方程,控制方程等。Gym在构造环境时,主要的任务就是构建描述你模型的微分方程。

    我们举例说明:

    Gym中的CartPole环境是如何构建的:

    下面的链接是gym中CartPole环境模型:

    github.com/openai/gym/b

    在该环境模型中,最核心的函数是def_step(self, action)函数,该函数定义了CartPole的环境模型。

    图中方框中又是这段代码中最核心的地方,这两行代码便决定了CartPole的模型。简单的模型,通过手工推导便可完成。

    那么对于复杂的模型,比如战斗机器人,各种大型游戏怎么办呢?

    这就需要专门的多刚体仿真软件了,这些软件背后的核心技术都是物理引擎。大家可以搜下物理引擎这个词,游戏以及各种仿真软件都要用到物理引擎,用的多的而且开源的物理引擎有:ODE, Bullet, Havok, Physx等。原则上来说利用这些物理引擎都可以搭建训练环境。Gym在搭建机器人仿真环境用的是mujoco,ros里面的物理引擎是gazebo。

    该小节讲的是gym在ubuntu下的安装,其他系统可参考官网安装过程。

    1.1 为了便于管理,需要先装anaconda. 具体下载和安装步骤如下:

    Step1. 下载anaconda安装包 .推荐利用清华镜像来下载,下载地址为:

    https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive 。

    我装的是Anaconda3-4.3.0版本。

    Step2. 安装anaconda。下载完成anaconda后,安装包会在Dowloads文件夹下,在终Ctrl+Alt+T打开终端)键入cd Downloads, 然后键入 bash Anaconda3_4.3.0-Linux-x86_64.sh(小技巧,键入bash an然后按Tab键,linux系统会自动补全后面的名字)

    Step3. 安装过程会询问你是否将路径安装到环境变量中,键入yes, 至此Anaconda安装完成。你会在目录/home/你的用户名文件夹下面看到anaconda3。关掉终端,再开一个,这样环境变量才起作用。

    1.2. 利用anaconda建一个虚拟环境。

    Anaconda创建虚拟环境的格式为:conda create –-name 你要创建的名字 python=版本号。比如我创建的虚拟环境名字为gymlab(你可以用自己的环境名), 用的python版本号为3.5,可这样写:

    conda create –-name gymlab python=3.5

    操作完此步之后,会在anaconda3/envs文件夹下多一个gymlab。Python3.5就在gymlab下得lib文件夹中。

    1.3 安装gym

    上一步已经装了一个虚拟环境gymlab, 在这一步要应用。

    开一个新的终端,然后用命令source activate gymlab激活虚拟环境,然后再装gym。具体步骤如下:

    Step1. 键入git clone openai/gym,将gym克隆到计算机中. 如果你的计算机中没有安装git, 那么可以键入:sudo apt install git.先安装git.

    Step2. cd gym 进入gym文件夹

    Step3. pip install –e ‘.[all]’进行完全安装。等待,会装一系列的库等. 装完后可以将你的gym安装文件的目录写到环境变量中,一种方法是打开.bashrc文件,在末尾加入语句:

    export PYTHONPATH=你的gym目录:$PYTHONPATH。如果不出意外的话,你就可以开始享用gym了。

    对于step3, 如果报错可以先安装依赖项,键入命令sudo apt-get install -y python-numpy python-devcmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengllibboost-all-dev libsdl2-dev swig,然后再按照Step3的命令安装。

    如果实在windows上安装,报如下错误:


    需要安装ffmpeg,把ffmpeg目录下的3个exe文件,拷贝到python环境中。

    参考:https://zhuanlan.zhihu.com/p/26250938

    展开全文
  • 敏捷软件交付项目管理相关工具

    千次阅读 2011-04-02 16:47:00
    虽然其基本管理思想和管理方法都跳不出通用项目管理范畴,但其面临的全球化、复杂性和治理等方面的独特问题,迫使相关人员不断地去思考和创新软件交付方法和项目管理模式。 创新时代企业发展速度的加快和全球化...
    本文关键字 1 软件交付项目管理面临的挑战 软件交付项目管理的特殊性在于其管理对象是软件交付,虽然其基本管理思想和管理方法都跳不出通用项目管理范畴,但其面临的全球化、复杂性和治理等方面的独特问题,迫使相关人员不断地去思考和创新软件交付方法和项目管理模式。 创新时代企业发展速度的加快和全球化软件交付模式的出现,给软件交付项目管理带来了很多挑战,这些可以总结归纳为四个方面:复杂性、团队、流程和工具。在漫长的IT系统建设过程中,技术的进步、语言的变迁、系统平台的演进以及Web2.0的出现,往往会给企业留下错综复杂的IT基础架构和遗留系统。面对百花齐放的软件开发方法,软件开发团队想方设法建立合适的流程,提高流程的敏捷性,增加业务的响应速度。然而企业内部普遍存在的工具竖井,导致不同的工作环节有不同的工具、流程和数据,这些内容无法整合,就无法提供应用生命周期管理的能力。所有这些正带给今天的软件开发团队前所未有的挑战。 1.1 软件交付项目工件和活动管理的挑战 首先分析一下软件交付过程本身。和人类的其他生产过程一样,软件生产过程就是作为软件交付主体的人或团队,通过项目管理、需求分析、设计、开发、测试和发布等一系列活动,生产出各种工件(交付物),实现软件从早期的需求,到中期的架构和代码,再到可运行的发布版本的不断演进。与任何生命体的成长过程类似,在周而复始的活动到工件的交替过程中,会产生许多软件产品的阶段产物(版本),它们代表了软件产品生命历程的一个快照。 所有这些快照的集合,记录了软件产品从孕育出生到长大成熟的整个生命发展历程。这期间,作为软件生产过程中的主体,人(团队)起到了重要作用,是人(团队)凭借其无比的智慧和经验,始终“呵护”着软件产品,完成其从“童年”、“少年”、“青年”到“成年”的成长历程,处理各种突发事件。 由此可见,软件交付项目最基本的要素,就是作为项目主体的人,及其执行的各种活动和产生的各种工件。整个软件交付生命周期正是在这种以人为主体,以活动和工件为核心的循环往复中,不断向满足利益相关方需求的软件产品靠近。 因此,管理好了活动和工件这两个部分,整个软件交付生命周期就会变得清楚明白,团队协作的力量就会慢慢绽放。这也回答了为什么近些年关注软件交付活动管理的需求管理、变更管理和关注工件管理的配置管理工具会如此盛行,成为很多企业进行过程改进工作的首选。 因此,提高软件交付团队的需求管理、配置管理和变更管理能力,是软件交付项目管理面临的首要挑战。 1.2 软件交付项目进度估计的挑战 如何评估软件交付项目的进度,是软件交付项目管理面临的又一大挑战。对于土木工程项目来说,项目进度一目了然。然而,如果采用传统的瀑布模型,在软件交付项目的大多数里程碑,项目的交付物只是一堆文档或代码,它们就是项目管理团队赖以评估项目进度的唯一依据,进度评估更多地靠主观估计,而不是客观度量,无法客观考虑项目的不确定性、风险和质量偏差导致的进度延期,其结果并不可靠。 因此,在整个软件交付生命周期中,项目计划始终是动态的、不断向目标演进的路标。出现偏差然后修正,这一循环贯穿了项目执行的始终。在采用传统瀑布模型的软件交付项目中,整个项目的风险是在系统集成阶段才迅速降低,而系统集成阶段却发生在整个生命周期的后端,从而造成项目风险和不确定性在整个生命周期中难以快速降低,项目进度难以控制。因此,常常可以听到人们笑谈软件开发的“二八”原则,即当软件项目完成80%时,剩下的20%的工作量往往会消耗掉80%的时间。出现这一现象的根本原因,正是软件项目进度难以估算。 1.3 软件交付项目需求不断变更带来的挑战 软件交付项目的另外一个重大挑战来源于软件需求的善变,这是快速发展的业务环境的特产,也是激烈的市场竞争环境的必然结果。对于软件项目来说,项目范围并不是一个需求文档或合约,而是一个持续谈判和变更的过程。 软件的特殊形态决定了在软件发布之前,软件本身一般是看不到、摸不着的,没有人知道未来的软件到底是什么样子。因此,在项目开始阶段,要想把软件需求说得清清楚楚,基本上是不可能的事情。 而且,需求沟通本身就是一个启发的过程,在用户还没看到可运行的软件之前,本身也很可能不清楚自己的真实需求。而一旦用户看到了实际可运行的软件,人类创造性的思维能力就仿佛瞬间开足马力,新的想法和要求不断奔涌。 2 敏捷开发和项目管理方法 为解决软件交付项目管理面临的挑战,软件工程领域催生了敏捷开发方法。2008年,IBMRational推出大规模敏捷(Agile@Scale)最佳实践,明确指出了以迭代式软件开发、两级项目规划、整体团队协作、持续集成和测试驱动开发作为敏捷过程的核心最佳实践,无缝集成IBMRational最新推出的协作的应用生命周期管理平台。这一最佳实践不但全面地诠释了敏捷开发的实施方法,还能够帮助团队快速建立敏捷项目管理能力,从容应对软件开发项目所面临的各种挑战。 面对软件交付项目计划的动态演进和进度管理难题,IBM敏捷最佳实践进一步强化了著名的迭代式开发,它把整个软件开发过程分解成更可控、可预测的迭代,每个迭代交付可运行的软件发布,从而使整个软件团队能够向利益相关方迭代地展示价值,获取用户反馈,持续改进产品,也使得项目管理团队能够使用客观的、可运行的发布来度量项目的进度,而不是基于主观的对代码和文档的评估。另外,由项目渐进明细的特征所决定,整个项目的项目计划本身也应该是渐进明细的。 因此,敏捷开发推荐的另一个最佳实践是“两级项目规划”,类似于项目管理知识体系中提及的滚动规划,它包括项目级粗线条的不断调整的发布计划和迭代细化的、可执行的迭代计划。在项目执行过程中,细化的迭代计划基本保持稳定不变,用于指导整个团队快速执行,交付所需的产品需求和特性;而粗线条的发布计划可以不断被修正,使其越来越接近通往项目目标的可执行轨迹。通过“两级项目规划”最佳实践,使得整个软件开发团队始终围绕客户需求,动态调整项目计划,实现变更和快速交付业务价值之间的有效平衡。 使用迭代式软件开发带给软件开发团队的一个新挑战,就是如何能够在每个迭代都快速交付出可运行的发布,从而真实地反映项目的进度状况。基于这一挑战,IBM推出了“持续集成”和“每日构建”两个最佳实践。“持续集成”通过进行更频繁的软件集成,更早地发现和反馈错误、降低风险,使得交付的软件在用户的体验和反馈中不断改进、茁壮成长,从而使整个软件交付过程变得更加可控和可预测。而“每日构建”就是通过每天进行软件最新版本的构建,确保开发团队每天的工作成果都能够编译和链接通过,从而确保工作的基本质量,提高团队的质量意识。 它就像软件交付的脉搏,每一次跳动都会产生出一个可度量的结果,即软件的一个版本;它又像是一个生命的指示器,书写着“生命体”(项目)的成长过程。而随着“脉搏的跳动”,软件不断地发展成熟,项目一步一步地接近项目目标。 同时,为了更好地应对变更,满足不断变化的业务发展要求,IBM还推出了“整体团队协作(WholeTeam)”最佳实践,它更加强调用户参与,强调建立团队的自适应、可持续的开发速度和自组织能力,通过团队的紧密协作,快速应对业务需求的变更;通过使整个软件开发团队更加关注客户需求变化,帮助客户更大地提交业务价值。通过“整体团队协作”最佳实践,确保团队围绕着如何实现迭代目标、如何快速交付业务结果进行自组织开发,保证团队的整体绩效。在自组织团队中,工作分配模式从由项目经理分配(推)向团队成员主动承担(拉)的模式转变,相关决策也是由最接近第一线的人进行。 每个团队成员都是工作的负责人,个人的成功就是团队的成功,反之亦然。通过前面的讨论,可以发现,IBM敏捷最佳实践能够有效克服软件交付项目管理的挑战,帮助实现敏捷开发项目的管理。基于这些敏捷最佳实践,业界也产生了很多的敏捷项目管理方法,Scrum和OpenUP就是其中最著名的两种。 配合IBM敏捷最佳实践,2008年,IBM还推出了创新的软件交付团队协作平台——Jazz平台,它能够帮助敏捷项目团队快速实现敏捷的软件交付项目管理。 3 IBM Jazz平台与敏捷的软件交付项目管理 3.1 IBM Jazz平台简介 顺应全球化趋势和Web2.0时代的到来,IBMRational推出了创新的软件交付协作平台——Jazz平台,它是IBMRational精心设计,专门面向全球化、跨地域团队开发的软件交付协作平台,能够改变人们协作构建软件的方式,提高软件交付的自动化、协作性和透明度,它的出现标志了软件交付2.0时代的到来。 Jazz平台基于Internet,提供了统一的软件交付平台,彻底屏蔽了地域的概念,为全球化软件协作交付团队提供了完美解决方案;它基于组件的架构模式,使软件交付生命周期各种能力以服务组件的形式存在,能够无缝地集成软件生命周期各个阶段的任务;它是基于开放的国际标准,通过社区驱动的软件开发模式创造的一个开放、可扩展、高效的协作开发平台。基于这一技术,企业可以自由选择各种组件化的生命周期管理产品和流程,以服务组件的方式,通过Jazz平台提供的统一企业服务总线和数据管理能力,组成了灵活的、可扩展的企业软件交付生产线。 客户可以根据自身发展需要,替换、升级某个服务组件,同时避免影响交付平台的其他部分,这能有效地保护客户投资。 3.2 敏捷的软件交付项目管理工具——IBM Ra t i o n a l Te amConcert IBM Rational Team Concert(简称RTC)是IBM基于Jazz平台推出的第一款商业产品,这是一个协作式的软件开发平台(图5)。Jazz平台的创新技术赋予RTC集中的数据存储和协作服务,在此基础上,RTC完美地实现了配置管理、工作项管理、构建管理能力,能够有效支持“持续集成”和“每日构建”最佳实践。同时,基于Jazz平台的流程和团队感知能力以及各种基于Web2.0的创新技术,RTC为整个软件交付项目团队提供了无障碍沟通协作和报告能力,实现了整体团队最佳实践;基于内置的敏捷开发方法(包括Scrum、OpenUP等),RTC提供了两级项目规划和项目自动化执行跟踪能力,实现了迭代式开发和“两级项目规划”最佳实践。基于Jazz平台的协作能力,RTC为整个软件交付团队提供了一个没有地域限制的虚拟世界的舞台,使团队成员无论身在何处,都像身处同一舞台,在其正在工作的上下文环境中进行实时地协作,特别是当他们处在一个跨地域的工作环境中时,实现彼此的密切协作。 (1)项目启动。使用RTC工作项管理功能,项目经理能够方便地完成项目需求定义和收集,为团队提供统一的需求列表或产品订单(ProductBacklog)。 (2)项目规划。利用RTC的项目规划能力,项目经理能够快速完成项目级粗线条的项目规划或发布规划和迭代级详细的迭代计划。 (3)项目执行。通过内置的敏捷开发过程或其他定制过程的动态执行,RTC可以指挥整个项目团队密切协作,高效工作。 在RTC中,迭代计划中的每个任务都是一个工作项,项目经理可以基于预定义的工作流,将其分配给指定的团队成员,实现工作任务的自动流转。同时,开发人员基于各种工作项进行开发活动,生成的代码和文档可以直接通过RTC内置的配置管理功能存入配置库,实现完整的配置变更管理;通过RTC内置的构建管理功能,完成代码的构建、编译链接和发布,实现需求的全生命周期跟踪和监控。 (4)项目监控。通过各种Web2.0的创新技术的应用,项目经理和团队中的每个人都能够非常方便地了解整个开发团队的组织结构,了解团队中每个人的角色和职责分工,实时了解团队的工作进度和工作状况;通过Feeds、Wiki,Blogs以及即时通信等服务,当存储库中被关心的对象数据变化后(如:源代码变更、工作项状态发生变化等),Feeds服务会主动根据订阅记录进行广播,让所有相关开发人员能够在最短的时间内掌握最新动态,实现高效协作沟通和响应。 (5)项目收尾:使用RTC,软件交付团队可以把团队经验和教训反映到项目管理的过程定义中,同时,通过将其导出成为新的模板,供其他项目团队使用,实现经验教训的固化和重用。使用RTC,敏捷交付项目团队实现了集成的源代码控制、工作项管理和构建管理等,提供了整个开发生命周期的自动化追踪和审计能力。项目经理则可以直接从实际工作中汇总出来的准确的项目健康信息,准确地、自动地捕获项目数据,自动地生成各种所需项目报告。 4 结语 “物竞天择,适者生存”,大自然的基本定律同样决定了软件交付项目管理的发展历程。适应快速的业务变化和企业全球化竞争要求,项目管理者在不断的积极进取中,传承、创新、演绎着敏捷项目管理长青的故事。 在顺应趋势,追求敏捷项目管理能力的征程上,IBM敏捷最佳实践和Jazz平台,为敏捷项目管理团队提供了全面的方法指南和协作平台支撑,能够帮助团队快速实现真正敏捷的项目管理。
    展开全文
  • 深度强化学习系列(1): 深度强化学习概述

    万次阅读 多人点赞 2018-03-30 20:45:33
    深度强化学习及其在自动驾驶中的应用( DRL &amp; ADS ) 专栏系列文章规划 DRL&amp;ADS系列之(1): 强化学习概述 DRL&amp;ADS系列之(2): 深度强化学习及算法讲解 DRL&amp;ADS系列之(3): ADS软...

    机器学习是人工智能的一个分支,在近30多年已发展为一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等的学科。强化学习(RL)作为机器学习的一个子领域,其灵感来源于心理学中的行为主义理论,即智能体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。它强调如何基于环境而行动,以取得最大化的预期利益。通俗的讲:就是根据环境学习一套策略,能够最大化期望奖励。由于它具有普适性而被很多领域进行研究,例如自动驾驶,博弈论、控制论、运筹学、信息论、仿真优化、多主体系统学习、群体智能、统计学以及遗传算法。

    ** RL和监督式学习, 非监督学习之间的区别:**
    ,其主要分为监督学习、非监督学习、深度学习和强化学习(见图1),其中三个之间的区别在于以下三点:

    • (1)、RL并不需要出现正确的输入/输出对,也不需要精确校正次优化的行为。它更加专注于在线规划,需要在探索(在未知的领域)和遵从(现有知识)之间找到平衡,其学习过程是智能体不断的和环境进行交互,不断进行试错的反复练习。
    • (2)、RL的不同地方在于:其中没有监督者,只有一个reward信号;反馈是延迟的,不是立即生成的;时间在RL中具有重要的意义。
    • (3)、 RL并不需要带有标签的数据,有可以交互的环境即可。

    这里写图片描述
    基于此,普通机器学习方法和强化学习之间的的关系已描述清楚。我们知道机器学习算法和深度学习可以做分类,回归、时间序列等经典问题,这已经在很多应用场景,例如语音、文字语义等基础性的人类认知方面取得非常大的突破,但是为什么还要学习强化学习呢?不得不从其应用场景说起。

    RL目前的应用场景:

    • 自动驾驶: 自动驾驶载具(self-driving vehicle)
    • 控制论(离散和连续大动作空间): 玩具直升机、Gymm_cotrol物理部件控制、机器人行走、机械臂控制。
    • 游戏: Go, Atari 2600(DeepMind论文详解)等
    • 理解机器学习: 自然语言识别和处理, 文本序列预测
    • 超参数学习: 神经网络参数自动设计
    • 问答系统: 对话系统
    • 推荐系统: 阿里巴巴黄皮书(商品推荐),广告投放。
    • 智能电网: 电网负荷调试, 调度等
    • 通信网络: 动态路由, 流量分配等
    • 物理化学实验: 定量实验,核素碰撞,粒子束流调试等
    • 程序学习和网络安全: 网络攻防等

    说了这么多,都是关于其背景和应用场景的话题(相关论文见RL-an overview中),那么到底什么是RL, 又是怎么工作的? 以及工作过程中会受那些因素的影响呢? 下文继续回到Rl主题上.

    一、强化学习基本组成及原理

    1.1、RL结构图:

    RL是一种智能体和环境之间不断试错的方法, 通过不断的交互以取得最大的累计期望奖励,它由环境, 智能体和奖励尺度三部分组成,见图:
    这里写图片描述

    在图中, 大脑部分代表智能体(Agent), 地球代表环境(Environment)
    执行过程: 智能体(Agent)通常从环境中获取一个 O t O_{t} Ot, 然后Agent根据 O t O_{t} Ot调整自身的策略做出一个行为(Action: A t A_{t} At)反馈给环境, 环境根据Agent的动作给予Agent一个奖励 R t R_{t} Rt,经过这样,智能体和环境之间进行连续的交互学习,得到了一个{ O , A , R O,A,R O,A,R}的交互历史序列。通常历史序列由观测、行为、奖励三部分组成,被定义为:
    H t = O 1 , A 1 , R 1 , … , O t , A t , R t H_{t} = O_{1},A_{1},R_{1},\dots, O_{t},A_{t},R_{t} Ht=O1,A1,R1,,Ot,At,Rt
    同时状态被定义为函数 f ( ⋅ ) f(\cdot) f()的映射: S t = f ( H t ) S_{t} = f(H_{t}) St=f(Ht),接下来将会对序列通过MDP进行描述:

    1.2、马尔科夫决策过程(MDP)

    马尔科夫决策过程是一个序列决策问题,它由很多的马尔科夫过程元组组成。 首先了解几个名词:
    马尔科夫性: 指系统的下一个状态 S t + 1 S_{t+1} St+1 仅与当前状态 s t s_{t} st有关,表示为:
    P [ S t + 1 ∣ S t ] = P [ S t + 1 ∣ s 1 , s 2 , . . . , s t ] (1) P[S_{t+1}|S_{t}] = P[S_{t+1}|s_{1},s_{2},...,s_{t}] \tag{1} P[St+1St]=P[St+1s1,s2,...,st](1)
    ** 马尔科夫过程:** 它是一个二元组 ( S , P ) (S, P) (S,P), 其中 S S S为有限状态机, P P P为状态转移概率。且状态转移概率矩阵为:

    P = [ P 11 … P 1 n . . . . P n 1 … P n n ] (2) P=\left[ \begin{matrix} P_{11} & \dots & P_{1n} \\ . & & . \\ . & & . \\ P_{n1} & \dots & P_{nn} \end{matrix} \right] \tag{2} P=P11..Pn1P1n..Pnn(2)
    举个例子说明一下(如图):如果给定状态转移概率矩阵P,即每个点到下一个点的状态转移概率,那么从Start出发到End结束存在多条马尔科夫链(多条路径),其中每个链上就是马尔科夫过程的描述。但马尔科夫过程中并不存在action和奖励。因此,从Start开始到end是一个序列决策问题,需要不断的选择路线,以取得最大收益。接下来是MDP

    **马尔科夫决策过程(MDP):** 通常情况马尔科夫决策过程用元组<$S,A,P,R,\gamma$>描述: $S$: 有限状态集 $A$:有限动作集 $P$:状态转移概率 $R$:回报函数 $\gamma$:折扣因子,用来计算累计回报。

    上述是MDP的组成,而我们关心的是它如何工作,继续前面的走方格例子,从Start开始,有两个行为(向右走,向南走),走不通的方向都有 P = 1 4 P= \frac{1}{4} P=41的概率且有不同的奖励,一直反复的走,直到走到End结束,在这个过程中会形成不同的序列,例如序列1:
    { ( S t a r t , R i g h t , P , R 1 ) , ( A , R i g h t , P , R 2 ) , ( B , S o u t h , P , R 3 ) , ( E , S o u t h , P , R 4 ) , ( E n d , S o u t h , P , R 5 ) } \left\{(Start,Right,P,R1),(A,Right,P,R2),(B,South,P,R3),(E,South,P,R4), (End,South,P,R5)\right\} {(Start,Right,P,R1),(A,Right,P,R2),(B,South,P,R3),(E,South,P,R4),(End,South,P,R5)}
    这只是其中一条路径,那从Start到End那条路劲带来的收益最大呢?就需要每一步进行决策,而决策就需要用到策略。下文继续:

    1.3、强化学习的目标及Agent的要素:

    目标: 根据环境状态序列,找到一套最优控制策略,以实现最大累计期望奖励。

    1.3.1 第一要素 ---- 策略

    那么什么是策略呢? 通常情况下被定义为是从状态到行为的一个映射,直白说就是每个状态下指定一个动作概率,这个可以是确定性的(一个确定动作),也可以是不确定性的。
    (1)非确定策略: 对于相同的状态,其输出的状态并不唯一,而是满足一定的概率分布,从而导致即使是处在相同的状态,也可能输出不同的动作,表示为:
    π ( a ∣ s ) = P [ A t = a ∣ S t = s ] (3) \pi(a|s) = P[A_{t}=a|S_{t}=s] \tag{3} π(as)=P[At=aSt=s](3)
    (2)确定行策略: 在相同的状态下,其输出的动作是确定的,表示为:
    a = π ( s ) (4) a = \pi (s) \tag{4} a=π(s)(4)

    如果给定一个策略,就可以计算最大化累计期望奖励了,通常奖励分为及时奖励和长久累计期望奖励,
    **及时奖励:**实时反馈给Agent的奖励 r t r_{t} rt,举例:当玩具直升机根据当前的作态做出一个飞行控制姿势时,好坏会立即得到一个奖励。
    **累计期望奖励:**通常指一个过程的总奖励的期望,比如直升机从飞起到降落整个过程。
    通常累计期望奖励被定义为:
    G t = R 1 + γ R 2 + γ 2 R 3 + ⋯ + γ k − 1 R k = ∑ k = 0 γ k R t + k + 1 (5) G_{t} = R_{1}+\gamma R_{2}+\gamma^{2}R_{3}+\cdots+\gamma^{k-1}R_{k}=\sum_{k=0}^{}\gamma^{k}R_{t+k+1} \tag{5} Gt=R1+γR2+γ2R3++γk1Rk=k=0γkRt+k+1(5)

    假如在策略 π \pi π下,从前文的Start出发,则有不同的路径
    S t a r t → A → B → E → E n d S t a r t → C → D → G → E n d . . . . Start \rightarrow A \rightarrow B \rightarrow E \rightarrow End \\ Start \rightarrow C \rightarrow D \rightarrow G \rightarrow End \\ .... StartABEEndStartCDGEnd....

    每个路径的累计回报 G t G_{t} Gt不同,且在随机策略下 G t G_{t} Gt是随机变量,但它们的期望是一个确定值,因此而被用作值函数的估计。

    1.3.2 第二要素 ---- 值函数

    当Agent采用某个策略 π \pi π时,累计回报服从一个分布,通常将状态S处的期望定义为** 状态值函数**,数学表示为:
    V π ( s ) = E π [ R 1 + γ R 2 + γ 2 R 3 + ⋯ + γ k − 1 R k ∣ S t = s ] (6) V_{\pi}(s) = E_{\pi}[R_{1}+\gamma R_{2}+\gamma^{2}R_{3}+\cdots+\gamma^{k-1}R_{k}|S_{t}=s] \tag{6} Vπ(s)=Eπ[R1+γR2+γ2R3++γk1RkSt=s](6)
    其中 γ ∈ [ 0 , 1 ) \gamma \in [0, 1) γ[0,1) 是折扣因子,用来估算未来对现在的影响,如果 γ = 0 \gamma=0 γ=0,即短视,只看当前的,不关注长期的回报。

    仅仅在状态值函数下求解期望奖励是不够的,我们还需要在某一个状态下,采取某个行为带来的期望回报。用状态-行为值函数衡量当前行为的好坏,其数学表达为:
    q π ( s , a ) = E π [ ∑ t = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] (7) q_{\pi}(s,a)=E_{\pi}[\sum_{t=0}^{\infty}\gamma^{k}R_{t+k+1}|S_{t}=s,A_{t}=a] \tag{7} qπ(s,a)=Eπ[t=0γkRt+k+1St=s,At=a](7)

    为了能够计算在某个状态S下的值函数或者在状态S下采取行为的状态-行为值函数评估累计期望奖励,我们根据下图列出公式组:

    这里写图片描述
    V π ( s ) = ∑ a ∈ A π ( a ∣ s ) q π ( s , a ) (8) V_{\pi}(s) = \sum_{a \in A} \pi(a|s)q_{\pi}(s, a) \tag{8} Vπ(s)=aAπ(as)qπ(s,a)(8)
    注:根据公式(7),从状态s处施加行为a有两种操作,在不同的策略下来估计未来的期望奖励,故采用求和均差得到公式(8),同时从第一幅图左下角得到公式(9),从第二幅图左下角得到公式(10)
    q π ( s , a ) = R s a + γ ∑ a ∈ A P s s ′ a v π ( s ′ ) (9) q_{\pi}(s, a) = R_{s}^{a}+\gamma\sum_{a \in A}P_{ss^{'}}^{a}v_{\pi}(s^{'}) \tag{9} qπ(s,a)=Rsa+γaAPssavπ(s)(9)
    v π ( s ′ ) = ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) q π ( s ‘ , a ’ ) (10) v_{\pi}(s^{'}) = \sum_{a^{'} \in A} \pi(a^{'}|s^{'})q_{\pi}(s^{‘}, a^{’}) \tag{10} vπ(s)=aAπ(as)qπ(s,a)(10)
    将等式(9)代入等式(8),得到等式(11);将(10)代入(9)得到(12)
    v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ‘ ∈ S P s s ′ a V π ( s ′ ) ) (11) v_{\pi}(s) = \sum_{a \in A}\pi(a|s)\left( R_{s}^{a}+\gamma\sum_{s^{‘} \in S}P_{ss^{'}}^{a}V_{\pi}(s^{'}) \right) \tag{11} vπ(s)=aAπ(as)(Rsa+γsSPssaVπ(s))(11)

    q π ( s , a ) = R s a + γ ∑ s ‘ ∈ S P s s ′ a ∑ a ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) (12) q_{\pi}(s, a) = R_{s}^{a}+ \gamma\sum_{s^{‘} \in S}P_{ss^{'}}^{a}\sum_{a \in A}\pi(a^{'}|s^{'})q_{\pi}(s^{'},a^{'}) \tag{12} qπ(s,a)=Rsa+γsSPssaaAπ(as)qπ(s,a)(12)
    由上文公式我们可以总结出:状态值函数和状态-行为值函数的Bellman方程:
    v ( s t ) = E π [ R t + 1 + γ v ( s t + 1 ) ] q ( s t , a t ) = E π [ R t + 1 + γ q ( s t + 1 , a t + 1 ) (13) v(s_{t}) = E_{\pi}[R_{t+1}+\gamma v(s_{t+1})] \\ q(s_{t},a_{t}) = E_{\pi}[R_{t+1}+ \gamma q(s_{t+1},a_{t+1}) \tag{13} v(st)=Eπ[Rt+1+γv(st+1)]q(st,at)=Eπ[Rt+1+γq(st+1,at+1)(13)

    通常计算值函数的目的是为了构建学习从数据中得到最优策略,每个策略对应一个值函数,最优策略对应最优值函数。当且仅当: π ≥ π ∗ \pi \geq \pi^{*} ππ and V π ( s ) ≥ V ∗ ( s ) V_{\pi}(s)\geq V^{*}(s) Vπ(s)V(s)时,最优状态值函数 V ∗ ( s ) V^{*}(s) V(s)为所有策略中值函数最大的,表示为:
    v ∗ ( s ) = max ⁡ π v π ( s ) (14) v^{*}(s) = \max\limits_{\pi}v_{\pi}(s) \tag{14} v(s)=πmaxvπ(s)(14)
    最优状态-行为值函数是所有策略中状态-行为值最大的,表示为:
    q ∗ ( s , a ) = max ⁡ π q π ( s , a ) (15) q^{*}(s, a) =\max\limits_{\pi}q_{\pi}(s,a) \tag{15} q(s,a)=πmaxqπ(s,a)(15)

    同理得到(推导省略),最优的状态值函数和状态-行为值函数如下:
    V π ( s ) = max ⁡ a R s a + γ ∑ s ‘ ∈ S P s s ′ a V ∗ ( s ′ ) (16) V_{\pi}(s) = \max\limits_{a} R_{s}^{a}+\gamma\sum_{s^{‘} \in S}P_{ss^{'}}^{a}V^{*}(s^{'}) \tag{16} Vπ(s)=amaxRsa+γsSPssaV(s)(16)

    q π ( s , a ) = R s a + γ ∑ s ‘ ∈ S P s s ′ a max ⁡ a ′ q ∗ ( s ′ , a ′ ) (17) q_{\pi}(s, a) = R_{s}^{a}+ \gamma\sum_{s^{‘} \in S}P_{ss^{'}}^{a} \max\limits_{a^{'}}q^{*}(s^{'},a^{'}) \tag{17} qπ(s,a)=Rsa+γsSPssaamaxq(s,a)(17)

    最后,如果已知最优状态-行为值函数,最优策略可以直接通过最大化 q ∗ ( s , a ) q^{*}(s,a) q(s,a)得到。
    KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \pi^{*}(a|s) =…


    总结: 到目前为止,关于强化学习的序列问题和贝尔曼方程已经描述完毕,并且上文所有的均是针对小规模MDP过程的求解{在程序中怎么使用也没有讲解(实际编程单独用一节讲解)),且所有的序列都采用表的形式存储,但是针对大规模空间或者连续性动作空间的问题,由于空间存储资源浪费和检索速率低下而无法适用!接下来的三种方法则可以解决该问题,特别是TD方法。


    三、大规模MDP的三种解决方法

    注: 关于部分公式详细的推导过程不详解,具体参David课程或者参考文献[8]

    3.1 动态规划法(Dynamic progarmming)

    动态规划是一种在数学、管理科学、计算机科学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。它常常适用于有重叠子问题和最优子结构性质的问题,在解决子问题的时候,其结果通常需要存储起来被用来解决后续复杂问题。当问题具有下列特性时,通常可以考虑使用动态规划来求解:第一个特性是一个复杂问题的最优解由数个小问题的最优解构成,可以通过寻找子问题的最优解来得到复杂问题的最优解;子问题在复杂问题内重复出现,使得子问题的解可以被存储起来重复利用。
    马尔科夫决定过程(MDP)具有上述两个属性:Bellman方程把问题递归为求解子问题,价值函数就相当于存储了一些子问题的解,可以复用。因此可以使用动态规划来求解MDP。

    这里的规划一般包括两个步骤:“Prediction”和“Control

    • Prediction是指根据当前的MDP和策略输出一个当前策略下的值函数:
      ** ++Input:++ ** MDP< S , A , P , R , γ S,A,P,R,\gamma S,A,P,R,γ>和策略 π \pi π
      ** ++ Output:++ ** V π V_{\pi} Vπ
    • Control是指根据给定MDP找到最优 V ∗ V^{*} V π ∗ \pi^{*} π
      ** ++Input:++ ** MDP< S , A , P , R , γ S,A,P,R,\gamma S,A,P,R,γ>
      ** ++Output: ++** V ∗ V^{*} V π ∗ \pi^{*} π
    3.1.1、策略评估

    在一个序列中每一步决策都需要一个策略,即每一步都有值函数。
    V 1 , V 2 , V 3 , V 4 , … , V π V_{1},V_{2},V_{3},V_{4},\dots,V_{\pi} V1,V2,V3,V4,,Vπ
    策略评估需要解决的问题是对给定的策略 π \pi π进行评估,找到:** optimal policy **, 在策略评估过程中,我们通常采用迭代法进行策略评估。
    ** 解决的方法 **:反向迭代应用状态值函数Bellman期望方程
    ** 具体过程 **:同步反向迭代,即在每次迭代过程中,对于第 k+1 次迭代,所有的状态s的价值用 v s ( s ′ ) v_{s}(s^{'}) vs(s) 计算并更新该状态第 k+1 次迭代中使用的价值 v k ( S ) v_{k}(S) vk(S) ,其中 s ′ s^{'} s是s的后继状态。此种方法通过反复迭代最终将收敛至 V π V_{\pi} Vπ
    V k + 1 ( s ) = R π + γ P π V k ( s ) (19) V^{k+1}(s) = R^{\pi}+\gamma P^{\pi}V^{k}(s) \tag{19} Vk+1(s)=Rπ+γPπVk(s)(19)
    首先我们在一个给定的策略下迭代更新价值函数,为了能够优化策略,贪婪选取行为是一种比较常见的方法。
    π ′ = g r e e d y ( V π ) (20) \pi^{'} = greedy(V_{\pi}) \tag{20} π=greedy(Vπ)(20)
    基于给定策略的价值迭代最终收敛得到的策略就是最优策略,但通过一个回合的迭代计算价值联合策略改善就能找到最优策略不是普遍现象。通常,还需在改善的策略上继续评估,反复多次多次迭代。不过这种方法总能收敛至最优策略$ \pi^{*} $,接下来是策略迭代。

    3.1.2、策略迭代

    在当前策略上迭代计算V值,再根据V值贪婪地更新策略,如此反复多次,最终得到最优策略 π ∗ \pi^{*} π 和最优状态价值函数 V ∗ V^{*} V, 如下图:

    这里写图片描述
    上图是大神David Sliver的slide,

    3.1.3 值迭代

    问题:寻找最优策略π
    解决方法:从初始状态价值开始同步迭代计算,最终收敛,整个过程中没有遵循任何策略。
    注意: ++与策略迭代不同,在值迭代过程中,算法不会给出明确的策略,迭代过程其间得到的价值函数,不对应任何策略。++

    一个最优策略可以被分解为两部分:从状态s到下一个状态s’采取了最优行为 A ∗ A^{*} A ;在状态s’时遵循一个最优策略。
    定理: 一个策略能够使得状态s获得最优价值,当且仅当:对于从状态s可以到达的任何状态s’,该策略能够使得状态s’的价值是最优价值:
    V ∗ ( s ) = max ⁡ a ∈ A R s a + ∑ s ′ ∈ S P s s ′ a V ∗ ( s ′ ) (21) V^{*}(s) = \max\limits_{a \in A}R_{s}^{a}+ \sum\limits_{s^{'}\in S}P_{ss^{'}}^{a}V^{*}(s^{'}) \tag{21} V(s)=aAmaxRsa+sSPssaV(s)(21)
    接下来采用树的思想解释一下:

    价值迭代虽然不需要策略参与,但仍然需要知道状态之间的转移概率,也就是需要知道模型。

    ** 总结:**
    预测问题:在给定策略下迭代计算价值函数。控制问题:策略迭代寻找最优策略问题则先在给定或随机策略下计算状态价值函数,根据状态函数贪婪更新策略,多次反复找到最优策略;单纯使用价值迭代,全程没有策略参与也可以获得最优策略,但需要知道状态转移矩阵,即状态s在行为a后到达的所有后续状态及概率。使用状态价值函数或行为价值函数两种价值迭代的算法时间复杂度都较大,为 O ( m n 2 ) O(mn^{2}) O(mn2) O ( m 2 n 2 ) O(m^{2}n^{2}) O(m2n2)

    3.2 蒙特卡罗法(Monte Calo)

    通过先前的讲解,我们明白了如何从理论上解决一个已知的MDP:通过动态规划来评估一个给定的策略,并且得到最优价值函数,根据最优价值函数来确定最优策略;也可以直接进行不基于任何策略的状态价值迭代得到最优价值函数和最优策略。接下来则是解决被认为是MDP、但却不掌握MDP具体细节的问题,也就是讲述如何直接从Agent与环境的交互来得得到一个估计的最优价值函数和最优策略。直白的说就是在给定的策略同时不清楚MDP细节的情况下,估计Agent会得到怎样的最终奖励。

    3.2.1 蒙特卡罗Introduction

    蒙特卡罗思想: 当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。
    ** MC强化学习:** 指在不清楚MDP状态转移及即时奖励的情况下,直接从经历完整的Episode来学习状态价值,通常情况下某状态的价值等于在多个Episode中以该状态算得到的所有收获的平均。
    ** MC强化学习特点:** 不基于模型本身,直接从经历过的Episode中学习,必须是完整的Episode,使用的思想就是用平均收获值代替价值。理论上Episode越多,结果越准确。

    3.2.1 MC策略评估

    前文已经讲了关于策略评估,其实质是求解值函数,在MC中同样需要一系列完整的Episode(与后文的TD不同)去求解当前策略下的值函数。
    在一个特定的策略 π \pi π下,完整的Episode的序列表示如下:
    S 1 , A 1 , R 2 , S 2 , A 2 , R 3 , ⋯   , S t , A t , R t + 1 , ⋯   , S k ∼ π S_{1},A_{1},R_{2},S_{2},A_{2},R_{3},\cdots,S_{t},A_{t},R_{t+1},\cdots,S_{k} \sim \pi S1,A1,R2,S2,A2,R3,,St,At,Rt+1,,Skπ
    那么,在t时刻状态 S t S_{t} St的收获我们可以描述为:

    G t = R t + 1 + γ R t + 2 + ⋯ + γ T R T (22) G_{t} = R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{T}R_{T} \tag{22} Gt=Rt+1+γRt+2++γTRT(22)
    其中T表示为终止状态,根据前文对值函数的描述,同理状态值函数为:
    V π ( s ) = E π [ G t ∣ S t = s ] (23) V_{\pi}(s)=E_{\pi}[G_{t}|S_{t}=s] \tag{23} Vπ(s)=Eπ[GtSt=s](23)
    在给定一个策略,使用一系列完整Episode评估某一个状态s时,对于每一个Episode,仅当该状态第一次出现时列入计算:
    ** 第一次出现时列入计算:**
    (1)状态出现的次数+1:
    N ( s ) ← N ( s ) + 1 (24) N(s) \leftarrow N(s) + 1 \tag{24} N(s)N(s)+1(24)
    (2)总的收获值更新:
    S ( s ) ← S ( s ) + G t (25) S(s) \leftarrow S(s) + G_{t} \tag{25} S(s)S(s)+Gt(25)
    (3)状态s的价值:
    V ( s ) = S ( s ) / N ( s ) (26) V(s) = S(s) / N(s) \tag{26} V(s)=S(s)/N(s)(26)
    (4)当$ N(s) \rightarrow \infty 时, V(s) \rightarrow v_{\pi}(s)$

    每次访问蒙特卡洛策略评估
    在给定一个策略,使用一系列完整Episode评估某一个状态s时,对于每一个Episode,状态s每次出现在状态转移链时,计算的具体公式与上面的一样,但具体意义不一样。
    (1)状态出现的次数加1:同公式(24)
    (2)总的收获值更新:同公式(25)
    (3)状态s的价值:同公式(26)
    (4)当 N ( s ) → ∞ 时 , V ( s ) → v π ( s ) N(s) \rightarrow \infty 时, V(s) \rightarrow v_{\pi}(s) N(s)V(s)vπ(s)

    提到了在实际操作时常用的一个实时更新均值的办法,使得在计算平均收获时不需要存储所有既往收获,而是每得到一次收获,就计算其平均收获。

    理论公式如下:

    KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \mu_{k} &=\fra…

    因此根据以下伪代码进行MC累计更新: **
    对于一系列Episodes中的每一个: S 1 , A 1 , R 2 , . . . , S T S_{1},A_{1},R_{2},...,S_{T} S1,A1,R2,...,ST
    对于Episode里的每一个状态 S t S_{t} St有一个收获$ G_{t}$ ,每碰到一次$ S_{t}$ ,使用下式计算状态的平均价值 G t G_{t} Gt
          $N(S_{t}) \leftarrow N(S_{t})+1 $
          $ V(s_{t}) \leftarrow V(s_{t})+ \frac{1}{N(s_{t})}[G_{t}-V(s_{t})]$
    非静态问题时,使用这个方法跟踪一个实时更新的平均值是非常有用的,可以扔掉那些已经计算过的Episode信息。此时可以引入参数 $\alpha $来更新状态价值:
          $V(S_{t}) \leftarrow V(S_{t})+\alpha (G_{t}-V(S_{t})) $

    3.3 时间差分学习(TD-learning)

    时序差分学习简称TD学习,它的特点如下:和蒙特卡洛学习一样,它也从Episode学习,但不需要了解模型本身;且它可以学习不完整的Episode,通过自身的引导(bootstrapping,自举)猜测Episode的结果,同时持续更新这个猜测。

    目标:从策略 π \pi π中学习 V π V_{\pi} Vπ
    过程:通过估计量: R t + 1 + γ V ( S t + 1 ) R_{t+1}+\gamma V(S_{t+1}) Rt+1+γV(St+1), 更新策略 π \pi π,依据公式:
    V ( S t ) ← V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] (28) V(S_{t}) \leftarrow V(S_{t})+\alpha[R_{t+1}+\gamma V(S_{t+1})-V(S_{t})] \tag{28} V(St)V(St)+α[Rt+1+γV(St+1)V(St)](28)
    其中: $TD-error = [R_{t+1}+\gamma V(S_{t+1})-V(S_{t})] $


    DP、MC、TD三种方法对比:

    • 1、DP基于模型; MC、TD基于无模型
    • 2、DP采用bootstrapping(自举), MC采用采样,TD采用bootstrapping+采样
    • 3、DP用后继状态的值函数估计当前值函数,MC利用经验平均估计状态的值函数,TD利用后继状态的值函数估计当前值函数
    • 4、MC和TD都是利用样本估计值函数,其中MC为无偏估计,TD为有偏估计
    • 5、最明显的就是下图的值函数的计算方法的不同

    这里写图片描述


    至此,基础RL知识已经讲完,上文对所有的序列信息均通过表的形式存储,这是一种比较对于小状态空间的搞笑解决方法,但是围棋有 1 0 70 10^{70} 1070(非常大)个状态空间,机械臂连续控制等问题无法在表中存储,这些问题总结为两个缺点:

    • 表空间特别大,存储资源的浪费;
    • 由于表特别大,导致检索一次查询效率特别低。

    因此不得不采用一中解决上述缺点的方法进行强化学习,目前比较实用的就是近似价值函数方法.

    四、近似价值函数

    近似值函数:从字面上看就是无限逼近真实值函数(状态值函数 V π ( s ) V_{\pi}(s) Vπ(s)、 状态-行为值函数 Q s , q Q_{s,q} Qs,q)的意思,用数学表示为下面公式(29)[未标注]:

    V ^ ( s , w ) ≈ V π ( s ) \hat{V}(s,w) \approx V_{\pi}(s) V^(s,w)Vπ(s)

    Q ^ ( s , a , w ) ≈ Q π ( s , a ) \hat{Q}(s,a,w) \approx Q_{\pi}(s,a) Q^(s,a,w)Qπ(s,a)
    其中我们的目的就是找到合适的 w w w 来近似值函数, w w w可以是参数化逼近和非参数化逼近,非参数可以理解为通过核函数等方式,参数化后文会讲解。基于此,根据强化学习的输入,输出被表示为三种近似方法,如图:

    这里写图片描述

    • 图(1)表示根据状态本身,输出这个状态的近似价值;
    • 图(2)表示根据状态行为对,输出状态行为对的近似价值;
    • 图(3)表示根据状态本身,输出一个向量,向量中的每一个元素是该状态下采取一种可能行为的价值。

    我们可以将上述的三个正方形盒子视为黑盒子,它就是一个函数近似器,可以将其想象为任何东西,比如l它是一个** 神经网络、决策树、泰勒多项式、线性函数、Fourier/Wavelet base等 **。或者为一切可描述或者无法描述的东西。本文讲介绍神经网络,其他其中方法后续将单独做详解。

    4.1 递增方法 Incremental Methods

    本部分讲述采用神经网络方法进行近似值函数,因为神经网络可以拟合任何一个函数。神经网络j结构如图,对于反向传播更新方式此处不讲:

    这里写图片描述
    我们定义一个目标函数 J ( w ) J(w) J(w)(该函数可微), w w w为vector, 那么目标函数关于 w w w的梯度表示为:
    ∇ w J ( w ) = [ ∂ J ( w ) ∂ w 1 . . . ∂ J ( w ) ∂ w n ] (30) \nabla_{w}J(w)=\left[ \begin{matrix} \frac{\partial J(w)}{\partial w_{1}} \tag{30}\\ . \\ . \\ . \\ \frac{\partial J(w)}{\partial w_{n}} \end{matrix} \right] wJ(w)=w1J(w)...wnJ(w)(30)
    为了能够达到 min ⁡ J ( w ) \min J(w) minJ(w) ,只需在梯度下降或者上身的方向调整 W W W,使其达到局部最小值
    △ w = − 1 2 α ∇ w J ( w ) (31) \triangle w = -\frac{1}{2}\alpha \nabla_{w}J(w) \tag{31} w=21αwJ(w)(31)
    ** 目标**: 找到参数 w w w,最小化状态值函数 V π ( s ) V_{\pi}(s) Vπ(s) 和近似器 V ^ ( s , w ) \hat{V}(s,w) V^(sw)之间的均方差和状态-行为值函数 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a)和近似器 Q ^ ( s , a , w ) \hat{Q}(s,a,w) Q^(s,a,w)之间的的均方差。
    以状态值函数为例:定义目标函数:
    J ( w ) = E π [ ( V π ( s ) − V ^ ( s , w ) ) 2 ] (32) J(w) = E_{\pi}[(V_{\pi}(s)-\hat{V}(s,w))^{2}] \tag{32} J(w)=Eπ[(Vπ(s)V^(s,w))2](32)
    通过梯度下降找到当地最小值:
    KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \triangle w &…
    其实,目前所列的公式都不能直接用于强化学习(看了这么多数学公式,尽然说没用), 因为公式里都有一个实际价值函数 v π ( S ) v_{\pi}(S) vπ(S),而强化学习没有监督数据,因此不能直接使用上述公式。对于只有即时奖励,没有监督数据的强化学习。我们需要找到能替代 v π ( S ) v_{\pi}(S) vπ(S)的目标值,以便来使用监督学习的思路学习到近似函数的参数。

    因此对于强化学习的两个基本问题之一:** Prediction**
    ** 方法:**
    (1)对于MC,target是返回值 G t G_{t} Gt, 即:
    △ w = α ( G t − V ^ ( s , w ) ∇ w V ^ ( s , w ) ) (34) \triangle w = \alpha(G_{t}-\hat{V}(s,w)\nabla_{w}\hat{V}(s,w)) \tag{34} w=α(GtV^(s,w)wV^(s,w))(34)
    (2) 对于TD(0),target是TD-target R t + 1 + γ V ^ ( S t + 1 , w ) R_{t+1}+\gamma\hat{V}(S_{t+1},w) Rt+1+γV^(St+1,w),即:
    △ w = α ( R t + 1 + γ V ^ ( S t + 1 , w ) − V ^ ( s , w ) ∇ w V ^ ( s , w ) ) (35) \triangle w = \alpha(R_{t+1}+\gamma\hat{V}(S_{t+1},w)-\hat{V} (s,w)\nabla_{w}\hat{V}(s,w)) \tag{35} w=α(Rt+1+γV^(St+1,w)V^(s,w)wV^(s,w))(35)

    因此对于强化学习的两个基本问题之一:** Control**
    那么如何把近似函数引入到控制过程中呢?我们需要能够近似状态-行为值函数对价值函数近似而不是仅针对状态价值函数近似。为什么呢?
    因为** Model-free控制需要满足两个条件:**

    • 1、在模型未知的条件下无法知道当前状态的所有后续状态,进而无法确定在当前状态下采取怎样的行为更合适。通常使用状态行为对下的价值Q(s,a)来代替状态价值, 即: π ′ ( s ) = arg ⁡ max ⁡ a ∈ A Q ( S , a ) \pi^{'}(s) = \arg\max\limits_{a\in A}Q(S,a) π(s)=argaAmaxQ(S,a)
    • 2、探索(Exploration):即使满足条件(1),至少还存在一个问题,即当我们每次都使用贪婪算法来改善策略的时候,将很有可能由于没有足够的采样经验而导致产生一个并不是最优的策略,因此需要不停的探索(Exploration)新行为,即: π = ϵ \pi = \epsilon π=ϵ- g r e e d y ( Q w ) greedy(Q_{w}) greedy(Qw)

    这里写图片描述
    从一系列参数开始,得到一个近似的状态-行为值函数,在Ɛ-greedy执行策略下产生一个行为,执行该行为得到一个即时奖励,以此数据计算目标值,进行近似函数参数的更新。再应用这个策略得到后续的状态和对应的目标值,每经历一次状态就更新依次参数,如此反复进行策略的优化,同时逼近最优价值函数。

    因此对于** 策略评估 **,即近似策略评估:
    q ^ ( s , a , w ) ≈ q π ( s , a ) (36) \hat{q}(s,a,w) \approx q_{\pi}(s,a) \tag{36} q^(s,a,w)qπ(s,a)(36)

    策略改善: 采用Ɛ-greedy

    状态-行为值函数的近似过程类似与状态值函数(此处不描述,直接给结论):

    △ w = α ( q π ( s , q ) − q ^ ( s , a , w ) ) ⋅ ∇ w q ^ ( s , a , w ) (37) \triangle w = \alpha(q_{\pi}(s,q)-\hat{q}(s,a,w))\cdot \nabla_{w}\hat{q}(s,a,w) \tag{37} w=α(qπ(s,q)q^(s,a,w))wq^(s,a,w)(37)

    至此,第一篇结束!

    第二篇《深度强化学习及算法讲解》

    声明:
    1 本文内容均属原创,受知识水平有限,如有错误之处,请联系作者以便于修改纠正.
    2 本文所有参考他人论文, 书籍,知识栏目, 图片等一切有关知识均在Blog末尾以引用格式进行标注, 再次表示致谢. 如有他人内容未标明引用的请联系本文作者,以添加引用,在此表示歉意!

    参考文献:

    [1]. Richard S.Sutton and Andrew G. Barto,Reinforcement learning: An Introduction,second edition.2017.
    [2]. Lucian Busontu et al, Reinforcement learning and dynamic programming using function approximators.
    [3]. 郭宪 方勇纯, 深入浅出强化学习:原理入门
    [4]. Howard M.Schwartz 连晓峰(译), 多智能体机器学习:强化学习方法
    [5]. David Sliver, Introduction to Reinforcement learning
    (UCL:https://www.youtube.com/channel/UCP7jMXSY2xbc3KCAE0MHQ-A)
    [6]. 阿里技术, 从虚拟世界走进现实应用,强化学习在阿里的技术演进与业务创新.
    [7]. Deep Reinforcements Learnin- An Overview()
    [8].https://zhuanlan.zhihu.com/reinforce
    [9]. https://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA##
    [10].https://www.youtube.com/watch?v=W_gxLKSsSIE&list=PL5nBAYUyJTrM48dViibyi68urttMlUv7e
    [11]. https://www.youtube.com/watch?v=CIF2SBVY-J0

    展开全文
  • 为有效防范和遏制我国煤矿煤与瓦斯突出事故,全面推进煤层“零突出”目标管理,通过对国内外煤与瓦斯突出分级研究成果及我国当前强化防突管理措施的调研,提出了突出煤层分级管理方 案并进行深入分析和探讨,确定了...
  • 包括过程组合知识领域表 项目管理详细任务 输入 输出 工具与技术 易混淆工具技术分布图 整合管理 范围 进度 成本 质量 资源 沟通 风险 采购 相关方十大知识领域的itto
  • 项目沟通管理:包括通过开发工作,以及执行用于有效交换信息的各种活动,来确保项目及其相关方的信息需求得以满足的各个过程。其过程包括: 规划沟通管理:基于每个相关方或相关群体的信息需求、可用的组织过程资产...
  • 剖析强化学习 - 第六部分

    千次阅读 2018-05-03 22:08:32
    欢迎来到“解剖强化学习”系列的第六部分。到现在我们已经了解了强化学习如何工作。然而,我们将大部分技术应用于机器人清洁示例,我决定采用这种方法的原因,是因为我认为应用于不同技术的同一个例子,可以帮助读者...
  • 我们的管理:IT管理

    万次阅读 2013-11-22 11:00:40
    我们的管理:IT管理一、IT导向业界有句话叫:企业管理软件公司不用管理软件就是耍流氓。所以我们第一导向就是自己使用自己的软件处理自己的业务。我们的泛财务软件有:预算、资金、成本管理、费用、应收应付、合同,...
  • 2020ICML多智能体强化学习论文简介

    千次阅读 2020-09-22 10:10:48
    强化学习最新论文汇总如有错误,欢迎指正所引用内容链接强化学习论文汇总2020 如有错误,欢迎指正 本篇为自我学习过程中的要点记录,仅作学习使用。 所引用内容的链接将全部粘贴于下方,如有侵权,请与本人联系。 所...
  • 管理

    万次阅读 2015-06-14 06:43:43
    管理思想的发展科学管理理论泰罗提出的管理制度:1. 对工人提出科学的操作方法,以便合理利用工时,提高效率。2. 在工资制度上实行差别计件制3. 对工人进行科学的选择、培训和提高4指定科学的工艺规程,并用文件形式...
  • 深度强化学习报道来源:NIPS2019编辑:DeepRLNeurIPS(前称NIPS)可谓人工智能年度最大盛会。每年全球的人工智能爱好者和科学家都会在这里聚集,发布最新研...
  • 1、项目沟通管理:包括通过开发工作,以及执行用于有效交换信息的各种活动,来确保项目以及相关方的信息需求得以满足的各个过程。由两个部分组成:制定策略,确保沟通对相关方行之有效;执行必要活动,以落实沟通...
  • Ray强化学习分布式框架及RLlib

    千次阅读 2019-04-09 11:39:38
    最近阅读了 Ray: A Distributed Framework for Emerging AI Applications RLlib: Abstractions for Distributed Reinforcement ...首先这是一个开源项目,相关的文档已经可以轻松在网上获得。分布式框架 ...
  • 结合信息系统项目管理师考试大纲,针对项目管理十大知识领域中的整体管理,进度管理,范围管理这三个领域,进行强化记忆,将自己强化记忆后的内容以记忆敲出的形式分享给大家。
  • 强化学习@AAAI2019

    千次阅读 2020-10-08 16:50:45
    具有多步强化学习的全卷积网络用于图像处理 Ryosuke Furuta@The University of TokyoNaoto Inoue@The University of TokyoToshihiko Yamasaki@The University of Tokyo 古田凉介@东京大学井上直人@东京大学山崎俊彦@...
  • 机器人强化学习之使用 OpenAI Gym 教程与笔记 除了试图直接去建立一个可以模拟成人大脑的程序之外, 为什么不试图建立一个可以模拟小孩大脑的程序呢?如果它接 受适当的教育,就会获得成人的大脑。 — 阿兰·图灵 ...
  • Deepmind团队在17年12月5日发布的最新Alpha Zero中,非常重要的一种方法就是强化学习(reinforcement learning),又称再励学习、评价学习,是一种重要的机器学习方法,靠自身的经历进行学习。通过这种方式,RLS在行动...
  • 本文来自于:零缺陷文化中心 零缺陷读后感:本文写的非常清晰到位,重点介绍了华为公司质量管理前后的发展历程,同时也给我们一些质量管理的思路和指引。希望感兴趣的同学能够领悟下质量管理的精髓。从2000年开始,...
  • 时间快速速地往前跑了一个月了,每月一次的学习思考之旋律又开始发挥作用了,本次课程是我非常关注的绩效管理与商业模式,在绩效管理上我们也期望能够在一起在老师带领下深度探讨... 系统化的战略思维包括如下6个
  • 经济管理学中常用的模型分析法

    万次阅读 2018-03-28 09:24:04
    经济管理学中常用的模型分析法常用的分析模型有:波特五力模型、波士顿矩阵、鱼骨分析法、5W1H分析法、麦肯锡7S模型、杜邦分析法、营销漏斗模型、可行性分析、绩效分析;SMART原则、SWOT分析、PEST分析法、GROW模型...
  • PMP-36项目风险管理

    千次阅读 2019-06-17 22:36:30
    项目要面对各种制约因素和假设条件,而且还要应对可能相互冲突和不断变化的相关方期望,组织应该有目的的以可控的方式去冒险,以平衡风险和回报,并创造价值 项目风险管理旨在识别和管理未被其他项目管理过程所管理....
  • 软件项目管理考前复习资料

    万次阅读 多人点赞 2018-12-12 16:53:27
    软件项目管理概述 1.实现项目目标的制约因素有: 项目范围 成本 进度计划 客户满意度 2.项目管理包括: 启动过程组 计划过程组 执行过程组 控制过程组 收尾过程组 3.什么是项目: 为了创造一个唯一的产品或者...
  • 2)强化协调机制:会使团队之间协作沟通所需要的成本大幅上升。 3)规模巨大,投资巨大,建设时间长。 大型复杂项目一般均可分解为若干个子项目。 大型复杂项目的特征:(4项) 1)项目周期长 2)项目规模大 3)项目...
  • 项目管理第十一章项目风险管理

    千次阅读 2020-09-21 12:08:51
    项目管理第十一章项目风险管理 项目风险管理:项目风险管理的目的在于提高正面风险的概率和影响,降低负面风险的概率和影响,从而提高项目成功可能性。其过程包括: 规划风险管理:定义如何实施风险管理活动的过程...
  • 不论是在技术层面还是在产品层面,大数据平台环境下的权限管理工作都是一个让人伤脑筋的烫手山芋,它不仅仅是一个技术问题,还是一个业务问题,甚至还可能是一个人际沟通和权衡利益得失的哲学问题。。。所以,以下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,758
精华内容 8,703
关键字:

强化相关方管理