精华内容
下载资源
问答
  • 强化学习之原理应用

    千次阅读 2019-05-23 15:10:32
    PaddlePaddle原创2019/02/20 17:23强化学习之原理应用强化学习特别是深度强化学习近年来取得了令人瞩目的成就,除了应用于模拟器和游戏领域,在工业领域也正取得长足的进步。百度是较早布局强化学习的公司之一。这...

    强化学习之原理与应用

    强化学习特别是深度强化学习近年来取得了令人瞩目的成就,除了应用于模拟器和游戏领域,在工业领域也正取得长足的进步。百度是较早布局强化学习的公司之一。这篇文章系统地介绍强化学习算法基础知识,强化学习百度的应用,以及百度近期发布的基于PaddlePaddle深度学习框架的强化学习工具PARL。

    强化学习算法 

    强化学习(RL)和其他学习方法的异同

    首先,从宏观层面看,可以通过“三轴”图来看强化学习与其他学习方法的联系和区别:第一条轴deterministic -stochastic可以描述转移概率,决策过程和奖励值分布的随机性;第二条轴fixed dataset -interactive data,表示学习数据的来源方式;第三轴instant reward -delayed reward表示奖励值是立即返回还是有延迟的。我们熟知的有监督学习,针对的是静态的学习数据,以及近似可以看作无延迟的奖励;动态规划针对的则是确定性的环境,以及静态的数据;主动学习针对无延迟的奖励以及交互型的数据;多臂老虎机(multi-armed bandits)则同时处理带有奖励随机性和交互型的数据,但依旧是无延迟的奖励问题;只有强化学习处理三个方向(随机,有延时,交互)的问题。因此,强化学习能够解决很多有监督学习方法无法解决的问题。

    强化学习(RL)的基本定义

    强化学习的主要思想是基于机器人(agent)和环境(environment)的交互学习,其中agent通过action影响environment,environment返回reward和state,整个交互过程是一个马尔可夫决策过程

    举个例子如雅利达游戏:state指看到当前电游屏幕上的图像信息;agent或者人类专家面对state可以有相应的action,比如对应游戏手柄的操作;environment在下一帧会反馈新的state和reward,整个过程可以用马尔可夫决策过程来描述。在这个过程中的environment则主要包括两个机制:一个是transition代表环境转移的概率,另外一个是reward。

    Markov Decision Process和Policy的定义

    可以通过更具体的类比来理解有监督和强化学习的REINFORCE算法的关联。假设在t时刻action以来表示. 在有监督的学习过程中需要人来示范动作, 通常我们希望机器去学习人的示范动作,在这里就代表示范的label。我们一般可以通过最小Negative Log-Likelihood (NLL(见底部的补充1说明)来使得我们的policy函数逼近人的示范。

    从Supervised Learning到REINFORCE

    在交互学习的过程中,没有人的示范,而是让机器自主去做一个动作。我们先考虑reward没有延迟的情况,机器人用一定的初始策略选到这个动作。它不知道自己做的对不对, 但是可以他拿到一个立即的reward。如果我们尝试最小化这样一个目标函数。 同时假设这个动作做对了奖励是+1,做错了奖励是0, 我们可以发现,这个式子跟是一致的,也就是退化为监督学习, 但却并不需要示范label, 只需要reward。

    进一步的,在马尔可夫决策过程迭代中,我们希望优化整个序列的总收益(delayed reward),而不是单步的立即收益。进一步修改目标为,即整个序列如果更好地完成最终总体指标R,就强化整个动作序列的概率,反之弱化整个动作序列的概率。这便是强化学习最简单的策略梯度方法。

    除此之外,DQN、temporal difference等方法,则是基于一个值(critic)评价体系进行迭代,而非直接求解policy。这类方法存在显著问题是无法针对连续动作空间。本文不再展开介绍。

    REINFORCE 和 CreditAssignment

    REINFORCE这类直接求解policy function的方法,效率通常比DQN低很多。以下围棋举例,比如前99步都下得很好,最后1步下的不好,导致满盘皆输。如果用REINFORCE方法,会认为这100步,包括下的不错的前99步都不好。虽然从统计意义上来说,如果下的次数足够多,梯度更新最终仍然是往正确的方向,但显然这是一种学习效率很低的算法。为了改善这个问题,另一类应用更广的方法是actor-critic,其中actor是policy,critic是评价函数,这类方法是将策略函数和值函数一同学习,核心思想是希望评价函数做能够给action返回一个合适针对它自己对于整个棋局影响的“综合”反馈,通常被称为credit Assignment。REINFORCE可以认为用整个序列的总体reward作为credit,而actor-critic赋予每一个动作一个独立的反馈,也叫做advantage。下面列出的是一些不同的advantage的计算方式[1]。其中,1是传统的REINFORCE,而后面的一些计算方式,则通过值函数的迭代,提升advantage计算准确性,从而提高策略梯度的效率。

    从REINFORCE到Advantage Function的计算

    强化学习涉及的算法非常多,种类也非常广,包括:model-free算法,这类算法最为大家所熟知,而它又可以分为critic only,actor only和actor-critic;model based算法,通过对环境建模来进行规划,这类算法在训练过程中具有很高效率,但因为inference的时候需要做planning效率则较低,这类方法最近获得越来越多的关注;还有一些和不同算法结合在一起的组合RL方法,如Auxiliary Tasks, Hiearchical RL,DeepExploration,逆强化学习等。

    强化学习的算法罗列

     强化学习应用-推荐系统 

    2011年之前,强化学习主要用于Intelligent Robotics等控制问题。2012-2013年,强化学习伴随深度学习的高涨逐渐火热起来。2012年,百度已开始将multi-armed bandits用于搜索排序。2014-2017年,百度强化学习用于对话系统,广告定价,新闻推荐等场景;在学术上,也发布了首个AGI评测环境XWorld。2018-19年,百度强化学习工具,研究,应用方面开始全面铺开。

    对于推荐类问题来说,工业界的推荐系统早期比较成熟的方法包括协同过滤,CTR预估等。而现有推荐系统有两个尚未解决得很好的问题,也是业界研究热点:

    1)intra-list correlations:考虑列表里的内容关联。现有推荐系统通常针对用户推荐一个列表,而不是一个一个内容推荐,因此内容之间的组合关联就会有影响。传统的多样性推荐等技术,其实都在解决这个问题。

    2)inter-list correlations:考虑的是列表页间的时序关联,即内容本身对用户的价值,随着时间和交互次数的增加而动态变化。

    百度基于新闻资讯推荐场景,对这两个层级的问题都开展了相应研究工作,并且均涉及强化学习技术:

    在intra-list correlation角度,以往经典做法认为列表内的item之间是相互独立的,以此来预估CTR,又被称为item-independent prediction。

    多样性是在此基础上的一个改进,即以整个组合来考虑推荐内容,而不单纯只考虑item自身。学术界对多样性理论的研究包括DPP,Submodular Ranking等方法[2][3]。Submodular实际上就是对“边际效用递减”这个说法的形式化,通俗的说,把所有商品看成一个集合,随着所拥有的商品数量的增加,那么获得同类商品的满足程度越来越小。在推荐系统中,在上文推荐的基础上进行重新估计,例如下面的图中,第i次新闻推荐内容项为,第i+1次推荐的内容需要考虑去掉已推荐过的相似内容,考虑用户感兴趣的topic空间,给用户推荐的应该是月牙形区域的内容,这便是submodular中的net gain的定义。DPP的做法也类似。

    然而,目前对于多样性的研究缺乏统一的目标定义,多样性也不对最终用户反馈直接负责,导致多样性效果很难客观衡量,往往只能主观调节。

    Submodular排序Net-Gain的计算 

    基于此背景,百度提出了列表页内组合优化框架,整合了学术界对列表页框架的认识。这个框架包括多个方面贡献:1. 提出了完全以用户反馈utility来衡量列表页内组合是否合理的方法。2. 提出了评价-生成的框架来解决组合优化的局部和全局最优的问题,以及off-policy训练的问题。3. 提出了不少新的模型结构,包括Recursive网络,Transformer网络等,用于更加通用地建模列表页内的组合,不仅包括两两关联组合,包括更高阶的组合,正向反向的组合等。百度相关产品在2017年底就上线了序列优化框架,相对于以往很多方法已经取得了不少收益,相关的成果已发表论文[4]。

    建模列表页内内容的一些模型和方法



    Evaluator – Generator列表组合排序框架

    而在inter-list correlation角度,对于新闻推荐这类产品的列表间优化,强化学习面临一个难题是variance过大,可能导致准确率下降。过去Google,京东发表的一些论文,针对这个问题,较为机械地用传统强化学习方法来解决。但是这些方法往往因为定义过大的action空间,以及过长的MDP,导致准确性下降。而且这些成果,大部分都是在理想的实验环境,而非真正的线上环境使用。百度多年前针对机械使用强化学习技术的尝试也发现,对于线上极大规模的排序或者推荐的列表页间的交互优化并没有实际优势。目前百度正在采用Credit Assignment这类新的算法,以更好地解决这些问题,不久之后会发布这些成果。 

    强化学习 应用-对话系统 

    对话系统可以分为任务型对话系统(Task Oriented Dialogue System)和开放对话系统(Open Domain Dialogue System),经典的任务对话系统结构如下。在对话管理中,强化学习可以起到非常重要的作用。

    任务型对话系统流程

    百度早在2012年就开始任务型对话系统的探索,其中一个早期的强化学习实验是2012-2013年做的点餐系统。这是一个百度内部员工使用的外卖订餐Demo。这个Demo基于一些NLU的特征,以及一些对话NLG的模板,利用LSTD模型来迭代对话管理逻辑。这个Demo设计的反馈也很粗糙,就是内部员工自己来标注。这个项目拿到一些结论,但整体不是很理想。

    百度早期探索的对话式点餐系统 

    之后百度在各种垂类对话系统上进行了进一步的的实验。其中比如聊天气的垂类对话。它的特征相对点餐系统多一些,投入的人工评估和标注的资源也更多。最终效果上,有些指标能够超越人精心设计的规则策略。

    百度早期探索的聊天气对话系统

    这之后,随着深度学习的兴盛,学术界也产生了一些成果。如2016年WenTsung-Hsien提出端到端面向任务对话系统[5],使用神经网络把四个模块综合起来,所有模块中的状态都可训练,相对以前工作有较大进步。利用深度强化学习结合端到端的对话模型,在足够的数据下,任务型对话系统可以达到比较理想的效果。

    与任务型对话系统不同,开放式对话系统的潜力更大,难度也更高。百度早期做过一些尝试,比如聊天系统中的对话引导功能,引导用户提出下一句可能的问题。这功能的传统做法是通过语义匹配(semantic matching)网络来学习选择用户点击概率高的引导项,而通过强化学习来提升语义匹配网络的效果,使得语义匹配可以不单单考虑当前的点击概率,而是可以考虑后续的可能引导给出最佳的选择。

    通用引导对话逻辑

    在开放式对话方向的研究基本可以分为基于检索、自动生成两种方式。检索方式受限于有限的语料库,对于最终解决开放式对话问题而言,生成方式更具有潜力。而业界对于开放域的对话的生成,尚没有标准的解决方案。从2015年开始,端到端神经网络开始逐渐展现潜力。而当前端到端的对话系统存在的问题通常包括: 1)生成式回答中没有内容,如经常回复“哈哈”,“呵呵”;2)缺乏逻辑性,如“我有一个女儿,我12岁”;3)答非所问,如问“你从哪里来”,回答“我喜欢踢足球”;4)对话缺乏明确的目标和评价方式,导致效果评估效率低甚至无法实现。

    强化学习作为解决上述部分问题的潜在方法,备受瞩目。但强化学习对话系统也存在显著问题:1)强化学习需要明确的学习目标,或者用户明确反馈,而评价目标很难制定,用户反馈则很难获取;2)强化学习通常需要大量的数据,甚至比有监督学习需要更多的数据。这些是阻碍强化学习应用的关键因素。

    百度目前在开展一个比较有野心的工作,就是建立一套完整的对话评估体系。基于一套完整的评估体系,有可能在包括人-机对话,机-机对话(self-play),机-模拟器对话系统中,引入强化学习,提升对话质量。对于这套评估系统,有几个层面的要求:1)Word-level adversarial safe,使得这套评估系统能够被任何强化学习生成方法作为稳定的学习目标;2)和人的评估接近,可以被不同任务特化。 

    百度正在优化的自动评估的对话进化系统 

    在这套框架下,百度开展了一些尝试性工作。图中是Facebook发布的数据集persona[6],基于两个persona(个性数据),产生两个人之间的对话。通过两个机器人相互聊,聊完之后用evaluation-system来进行评估获得reward,从而强化这两个机器人的对话。相关进展未来将发布。 

    在自动评估-进化框架下,Self-Play训练的效果

     强化学习应用-移行控制 

     NeurIPS 2018 AI for Prosthetics Challenge介绍

    百度在NeurIPS 2018 AI for Prosthetics Challenge中以绝对优势夺冠 

    百度强化学习团队近期在NeurIPS 2018 AI forProsthetics竞赛中,也以绝对优势夺冠。在这个比赛中,需要控制一个人体骨骼肌肉模型的肌肉(19维),学习的目标是按照外部不断变换的给定的速度行走。对没有按照速度行走或者跌落扣分。

    这次比赛中百度用到四个关键技术包括:

    1)模型结构和学习方法上,使用deep deterministic policy gradient[7],该网络结构由4层MLP组成,将速度目标,状态,动作结合在一起建模,使得速度之间具有很好的可转移性。

    百度在NeurIPS 2018AI for Prosthetics Challenge中使用的模型

     2)CurriculumLearning[8]:为了获得稳定的奔跑姿态,首先训练一个高效的高速奔跑姿势,再利用课程学习(CurriculumLearning),设计一系列从易到难的课程,让机器人逐渐地降低速度。通过这种方式,得到一种特别稳定的姿态用于热启动。 

    百度在NeurIPS 2018AI for Prosthetics Challenge中调研的Curriculum Learning启动方法 

    3)DeepExploration[9]:这项技术利用多个header的预测,得到其预测的波动,这个波动代表了当前策略和值的波动范围。这个能够帮助策略有效探索到探索不足的空间。

    4)Parallelization:最后,基于PaddlePaddle的高效的计算框架,采用多个CPU的模拟器,以及一个data server、一个高性能GPU作为单机多卡的训练,将训练性能提高几百上千倍。

    百度在NeurIPS 2018AI for Prosthetics Challenge中使用的Distributed DDPG训练框架 

    基于上述的方法,百度团队不断刷新指标,最终以9980的绝对高分拿下比赛冠军。

    另外一个进展则和自动驾驶相关。端到端的控制在机器人领域一直都具有比较高的吸引力。但控制问题是典型的delayedreward的问题,有监督学习在这个领域作用相对较少。近年来不断有用imitation learning,RL等提升端到端模型的研究。但同时,端到端模型又非常难以训练。百度首次在一个飞行器上实现了一种新的强化学习训练框架,并在避障导航问题中应用。

    百度提出“干预强化学习(IARL)”和普通强化学习的比较

    强化学习用在autonomous driving中的问题有:1)需要大量的数据;2)强化学习需要探索一些冒进的动作,并且经历一些风险和失败(比如碰撞)。然而在真实世界这个成本过大,不可能让无人车或者无人机撞毁无数次来学会如何躲避障碍。

    百度提出的一种解决方案是利用安全员,当发现紧急情况时,安全员会做一些紧急动作。policy如下图所示,是一个比较复杂的端到端网络结构,融合CNN与LSTM(多帧信息)。但是通常不能把无人车或者飞行器真的完全交给这个模型,而是通过引入安全员来保障安全。

    飞行器上使用的端到端控制模型 

    当系统做出错误判断或者出现高危动作时,安全员会及时介入。安全员的每次干预,说明机器的动作不对,这是非常珍贵的反馈信息,可以被机器学习。这就是干预辅助强化学习(Intervention Aided Reinforcement Learning)的思想。百度设计的IARL算法包括两个方面:1. 惩罚任何干预; 2. 学习安全员干预时所采用的操作。

    干预强化学习的流程 

    IARL在policy和loss function中的体现如下,一方面,需要修改behavior policy,因为现在的policy不再是机器完全自主,而是变成了机器和干预的混合策略;第二方面,在reward上,需要对干预的过程做出惩罚;第三方面,对于policy的目标函数进行修改,增加一项用于学习干预过程的imitation learningloss。

    干预强化学习算法 

    该算法最终很好地实现了避障。而这个成果,也发表在CoRL 2018会议上[10],演示视频地址如下: (http://www.iqiyi.com/w_19s79d6rr1.html)

    干预强化学习的效果 

     工具-PARL 

    现在业界已有不少开源强化学习工具,百度也于近期发布了PARL框架。(https://github.com/PaddlePaddle/PARL)PARL是基于PaddlePaddle的一个强化学习框架,特点是:1)灵活性高,支持多数的强化学习算法;2)为数不多的开源其大规模分布式能力的强化学习算法库;3)通过之前介绍的工业级场景,验证了算法库的可用性。

    这套强化学习框架基于3个基础类,分别是agent、algorithm、model。通过不同层级的定制,PARL能够实现方便,灵活,可服用,定制方便的强化学习算法,并具有对于大规模并行能力良好支持。用户可以很方便写出自己独特的定制算法,而不必去管具体通信接口等逻辑。以DQN为例,PARL提供了algorithm的现成DQN算法,用户只需要定制自己的模型即可。

    基于PARL的利用现成的DQN Algorithm来开发Model 

    而如果用户需要定制全新的RL算法,也可以通过定制algorithm简单地实现。

    PARL的DDPG Algorithm实例

     最后,如果需要定义自己的全新的并行RL训练框架,用户能够通过定义一些通信逻辑,实现一些并行化的复杂操作。

    PARL开发并行训练方法实例

    这套强化学习库目前在业界已经引起了不少反响。主打灵活,易用和高并发的PARL能够取得什么样的成果,请拭目以待。

    强化学习的存在问题及应对方法

    强化学习 – 问题和潜在的研究方向

    强化学习绝不是AI的终点,它实实在在解决了一类问题,然而仍然有更多待解决的问题。深度强化学习还远远不够好(Deep Reinforcement Learning Doesn't Work Yet, https://www.alexirpan.com/2018/02/14/rl-hard.html)。总结而言,强化学习存在的这些问题,也是未来值得去突破的方向,包括:

    1)在很多应用中,往往目标不明确。例如对话最终目的一般来说是希望对话系统“表现得像人”,然而这个目标无法清楚地进行数学描述。因此reward modeling是很重要的研究方向。比如百度在推荐排序的时候,使用evaluation-generator的框架,即首先对reward的建模。

    2)强化学习需要海量的样本,甚至比有监督学习还需要更多的样本。解决方法比如使用world model或planning。

    3)奖励函数过于稀疏,难以探索到优质解。研究方向比如分层训练、课程学习和引入辅助任务。

    4)泛化能力比较差,很多结果处在过拟合的区域。可以使用元学习迁移学习,以及近期研究较多的攻防理论来改善。

    5)实验难以复现。很多实验,甚至随机种子不一样都会得到完全不一致的效果。这也是百度将自己的工具开源的原因之一,也是要解决这个问题的第一步。

    而这些方向,既是强化学习研究的前沿,也是很多工业应用面临的实际问题。百度也正在着力研究,期待有更多突破性的产出。

     参考文献

    [1] Schulman, John, etal. "High-dimensional continuous control using generalized advantageestimation." arXiv preprintarXiv:1506.02438 (2015).

    [2] Yue, Yisong, andCarlos Guestrin. "Linear submodular bandits and their application todiversified retrieval." Advances in Neural Information Processing Systems.2011.

    [3] Wilhelm, Mark, etal. "Practical Diversified Recommendations on YouTube with DeterminantalPoint Processes." Proceedings of the 27th ACM International Conference on Informationand Knowledge Management. ACM, 2018.

    [4] WangF , Fang X , Liu L , et al. Sequential Evaluation and Generation Framework for CombinatorialRecommender System[J]. 2019.

    [5] Wen, Tsung-Hsien,et al. "A network-based end-to-end trainable task-oriented dialoguesystem." arXiv preprintarXiv:1604.04562 (2016).

    [6] Zhang, Saizheng,et al. "Personalizing Dialogue Agents: I have a dog, do you have petstoo?." arXiv preprint arXiv:1801.07243(2018). “Self-EvolvingDialogue System with Adversarial Safe Automatic Evaluation”

    [7] Lillicrap, TimothyP., et al. "Continuous control with deep reinforcement learning."arXiv preprintarXiv:1509.02971(2015).

    [8] Bengio, Yoshua, etal. "Curriculum learning." Proceedings of the 26th annualinternational conference on machine learning. ACM, 2009.

    [9] Ian Osband,Charles Blundell, Alexander Pritzel, Benjamin Van Roy, Deep Exploration viaBootstrapped DQN, In NIPS 2016.

    [10] Wang, F., Zhou,B., Chen, K., Fan, T., Zhang, X., Li, J., ... & Pan, J. (2018, October).Intervention Aided Reinforcement Learning for Safe and Practical PolicyOptimization in Navigation. In Conference on Robot Learning.

    PaddlePaddle
    PaddlePaddle

    PaddlePaddle是百度独立研发的深度学习平台,易用,高效,灵活可伸缩,可支持海量图像识别分类、机器翻译和自动驾驶等多个领域业务需求,现已全面开源。

    理论强化学习
    52
    相关数据
    深度学习技术

    深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

    自动驾驶技术

    从 20 世纪 80 年代首次成功演示以来(Dickmanns & Mysliwetz (1992); Dickmanns & Graefe (1988); Thorpe et al. (1988)),自动驾驶汽车领域已经取得了巨大进展。尽管有了这些进展,但在任意复杂环境中实现完全自动驾驶导航仍被认为还需要数十年的发展。原因有两个:首先,在复杂的动态环境中运行的自动驾驶系统需要人工智能归纳不可预测的情境,从而进行实时推论。第二,信息性决策需要准确的感知,目前大部分已有的计算机视觉系统有一定的错误率,这是自动驾驶导航所无法接受的。

    动态规划技术

    动态规划(也称为动态优化),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划将复杂的问题分解成一系列相对简单的子问题,只解决一次子问题并存储它的解决方案(solution),下一次遇到同样的子问题时无需重新计算它的解决方案,而是简单地查找先前计算的解决方案,从而节省计算时间。动态规划适用于有最优子结构(Optimal Substructure)和重叠子问题(Overlapping Subproblems)性质的问题。

    深度强化学习技术

    强化学习(Reinforcement Learning)是主体(agent)通过与周围环境的交互来进行学习。强化学习主体(RL agent)每采取一次动作(action)就会得到一个相应的数值奖励(numerical reward),这个奖励表示此次动作的好坏。通过与环境的交互,综合考虑过去的经验(exploitation)和未知的探索(exploration),强化学习主体通过试错的方式(trial and error)学会如何采取下一步的动作,而无需人类显性地告诉它该采取哪个动作。强化学习主体的目标是学习通过执行一系列的动作来最大化累积的奖励(accumulated reward)。 一般来说,真实世界中的强化学习问题包括巨大的状态空间(state spaces)和动作空间(action spaces),传统的强化学习方法会受限于维数灾难(curse of dimensionality)。借助于深度学习中的神经网络,强化学习主体可以直接从原始输入数据(如游戏图像)中提取和学习特征知识,然后根据提取出的特征信息再利用传统的强化学习算法(如TD Learning,SARSA,Q-Learnin)学习控制策略(如游戏策略),而无需人工提取或启发式学习特征。这种结合了深度学习的强化学习方法称为深度强化学习。

    机器学习技术

    机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

    协同过滤技术

    协同过滤(英语:Collaborative Filtering),简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。协同过滤又可分为评比(rating)或者群体过滤(social filtering)。其后成为电子商务当中很重要的一环,即根据某顾客以往的购买行为以及从具有相似购买行为的顾客群的购买行为去推荐这个顾客其“可能喜欢的品项”,也就是借由社区的喜好提供个人化的信息、商品等的推荐服务。除了推荐之外,近年来也发展出数学运算让系统自动计算喜好的强弱进而去芜存菁使得过滤的内容更有依据,也许不是百分之百完全准确,但由于加入了强弱的评比让这个概念的应用更为广泛,除了电子商务之外尚有信息检索领域、网络个人影音柜、个人书架等的应用等。

    规划技术

    人工智能领域的「规划」通常是指智能体执行的任务/动作的自动规划和调度,其目的是进行资源的优化。常见的规划方法包括经典规划(Classical Planning)、分层任务网络(HTN)和 logistics 规划。

    元学习技术

    元学习是机器学习的一个子领域,是将自动学习算法应用于机器学习实验的元数据上。现在的 AI 系统可以通过大量时间和经验从头学习一项复杂技能。但是,我们如果想使智能体掌握多种技能、适应多种环境,则不应该从头开始在每一个环境中训练每一项技能,而是需要智能体通过对以往经验的再利用来学习如何学习多项新任务,因此我们不应该独立地训练每一个新任务。这种学习如何学习的方法,又叫元学习(meta-learning),是通往可持续学习多项新任务的多面智能体的必经之路。

    推荐系统技术

    推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

    神经网络技术

    (人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

    准确率技术

    分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

    监督学习技术

    监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

    语料库技术

    语料库一词在语言学上意指大量的文本,通常经过整理,具有既定格式与标记;事实上,语料库英文 "text corpus" 的涵意即为"body of text"。

    逻辑技术

    人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

    目标函数技术

    目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

    迁移学习技术

    迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

    过拟合技术

    过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

    无人机技术

    无人机(Uncrewed vehicle、Unmanned vehicle、Drone)或称无人载具是一种无搭载人员的载具。通常使用遥控、导引或自动驾驶来控制。可在科学研究、军事、休闲娱乐用途上使用。

    马尔可夫决策过程技术

    马尔可夫决策过程为决策者在随机环境下做出决策提供了数学架构模型,为动态规划与强化学习的最优化问题提供了有效的数学工具,广泛用于机器人学、自动化控制、经济学、以及工业界等领域。当我们提及马尔可夫决策过程时,我们一般特指其在离散时间中的随机控制过程:即对于每个时间节点,当该过程处于某状态(s)时,决策者可采取在该状态下被允许的任意决策(a),此后下一步系统状态将随机产生,同时回馈给决策者相应的期望值,该状态转移具有马尔可夫性质。

    对话系统技术

    对话系统大致被分成两类: 任务为导向的对话系统,帮助用户去完成特定任务,比如找商品,订住宿,订餐厅等。实现任务为导向的对话系统,主要有两类方式,流水线方法和端到端方法。非任务导向的对话系统,与用户进行互动并提供回答,简单的说,就是在开放领域的闲聊。实现非任务导向对话系统也主要可分为两类,生成方法和基于检索的方法。

    主动学习技术

    主动学习是半监督机器学习的一个特例,其中学习算法能够交互式地查询用户(或其他信息源)以在新的数据点处获得期望的输出。 在统计学文献中,有时也称为最佳实验设计。

    强化学习技术

    强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

    百度机构

    百度(纳斯达克:BIDU),全球最大的中文搜索引擎、最大的中文网站。1999年底,身在美国硅谷的李彦宏看到了中国互联网及中文搜索引擎服务的巨大发展潜力,抱着技术改变世界的梦想,他毅然辞掉硅谷的高薪工作,携搜索引擎专利技术,于 2000年1月1日在中关村创建了百度公司。 “百度”二字,来自于八百年前南宋词人辛弃疾的一句词:众里寻他千百度。这句话描述了词人对理想的执着追求。 百度拥有数万名研发工程师,这是中国乃至全球最为优秀的技术团队。这支队伍掌握着世界上最为先进的搜索引擎技术,使百度成为中国掌握世界尖端科学核心技术的中国高科技企业,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。

    京东机构

    京东(股票代码:JD),中国自营式电商企业,创始人刘强东担任京东集团董事局主席兼首席执行官。旗下设有京东商城、京东金融、拍拍网、京东智能、O2O及海外事业部等。2013年正式获得虚拟运营商牌照。2014年5月在美国纳斯达克证券交易所正式挂牌上市。 2016年6月与沃尔玛达成深度战略合作,1号店并入京东。

    展开全部数据

    补充:
    1在这里插入图片描述
    在这里插入图片描述

    展开全文
  • C++动态类型与静态类型

    千次阅读 多人点赞 2017-07-21 15:00:45
    大多数情况下对象的静态类型和动态类型相同,我们不用关系二者区别;只有多态情况下,即在有虚函数的继承体系中,通过基类的指针或引用调用虚函数时,这时我们就需要关系指针或引用对象的动态类型,因为它们的静态...

    一、前言

        其实关于C++的动态绑定就足以写好多篇博客了,但在这篇文章中我不准备深刻剖析C++动态绑定机制(即虚函数机制),只是说明动态绑定和静态绑定的区别,强调C++对象的动态类型和静态类型。


    二、静态类型与动态类型

        什么是静态类型?什么是动态类型?首先这两种肯定是对象(变量)类型的一种说法,而区分这两种类型最直接的方法就是看表达式的形式。关于一个表达式的对象(变量)的静态类型和动态类型需要从两点进行分析:

            (1)该对象(变量)的静态类型和动态类型是否相等;

            (2)如果该对象的静态类型和动态类型不相等,其动态类型是否有作用。

    对于第(1)点,其实我们可以认为每个对象(变量)都存在动态类型和静态类型,只是大多数情况下一个对象的动态类型和静态类型是相等的,所以我们平常都没有强化这两个概念,如表达式int a; 对象a的静态类型和动态类型就是相等的,所以平常我们都是直接称呼变量a的类型是int。对于第(2)点,首先只有当我们的表达式使用的是指针或引用时对象的静态类型和动态类型才有可能不同,而且就算一个对象的静态类型和动态类型不相等,其还不一定能享受到动态类型所带来的方便(即动态绑定),因为我们知道,动态绑定的前提条件是继承体系中的子类继承并重写了基类的虚函数。

        如果觉得上面的解释有点绕,直接解释静态类型和动态类型的定义,一个对象(变量)的静态类型就是其声明类型,如表达式int a中的int就是对象a的声明类型,即静态类型;而一个对象(变量)的动态类型就是指程序执行过程中对象(指针或引用)实际所指对象的类型,如Base* pB = new Drived; 其中class Drived继承于class Base,则指针对象pB的静态类型就是Base(声明类型),动态类型就是Drived(实际所指对象的类型),又如Base* pB = new Base;此时指针对象pB的静态类型和动态类型也是相等的,都是Base。


    三、动态类型的作用

        上面已经说明了,大多数情况下一个对象的静态类型和动态类型都是相等的,而且就算其静态类型和动态类型不相等,也不一定会使动态类型发挥威力,那到底什么时候一个对象(变量)的动态类型能发挥其威力呢?三个条件:(1)该对象是指针或引用形式;(2)该对象的静态与动态类型不同;(3)应用场景为带虚函数的继承体系结构。其实你可以直接理解为:动态类型就是为动态绑定(C++继承的多态)准备的。只有当上述3个条件都满足了,动态类型才能发挥其威力,即很好的支持虚函数动态绑定机制,为什么呢?这与C++编译器对多态继承结构中的成员函数调用机制有关。

        假设有以下继承结构:class Drived : public Base,然后有表达式p->mem()或obj.mem(),其中mem()是一个类成员函数,但具体是基类还是子类,现在可以不用管,而且我们也不用管p或者obj是指向哪个类。当程序的编译期,当编译器遇到表达式p->mem()或obj.mem(),执行以下步骤:

            (1)首先确定p(或obj)的静态类型,即声明类型;

            (2)然后在p(或obj)的静态类型中查找mem()函数,如果没有找到,按照作用域规则,这时编译器会到其直接基类中寻找,并依次向上,直到达到继承链的顶端,如果在这个过程中找到了,则继续下一步,如果没有找到,则报错;

            (3)一旦找到名字匹配的mem()函数,则编译器会根据mem()是否是虚函数,以及我们是通过指针或引用(如p)来调用mem()函数,还是通过类对象(如obj)来调用mem()函数,生成不同的代码。如果mem()是虚函数且是通过指针或引用调用(如p->mem()),编译器生成的代码会检查其动态类型,这就是动态绑定的过程,也就是说编译器生成的代码会直到运行期确定了动态类型才决定具体调用基类还是子类的虚函数mem();如果mem()不是虚函数且是通过对象调用(如obj.mem()),则编译器会产生一个常规的函数调用代码,可以直接确定调用哪一个mem()函数。


    四、总结

        对上面的介绍进行总结:大多数情况下对象的静态类型和动态类型相同,我们不用关系二者区别;只有多态情况下,即在有虚函数的继承体系中,通过基类的指针或引用调用虚函数时,这时我们就需要关系指针或引用对象的动态类型,因为它们的静态类型毋庸置疑是基类,但动态类型有可能是子类(其实也不是有可能,要想应用多态,其动态类型必须是子类),所以动态类型就是跟虚函数、多态、动态绑定息息相关的。

    展开全文
  • 强化学习

    千次阅读 2019-10-17 14:13:37
    《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版1 第六章 强化学习 我们知道,机器学习是一种从经验数据中构造和改善模型...一种名为强化学习的机器学习类型强化学习又称为再励学习或评价学习,...

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

    展开全文
  • 本章目录第一章 强化学习及OpenAI Gym介绍1.1 强化学习1.1.1 强化学习监督、非监督学习1.1.2 强化学习案例1.1.3 强化学习的要素1.1.4 总结1.2 OpenAI Gym教程1.2.1 安装1.2.2 从源代码进行构建1.2.3 完全安装1.2.4...

    在这里插入图片描述
    获取更多资讯,赶快关注上面的公众号吧!

    第一章 强化学习及OpenAI Gym介绍

    本章内容将介绍强化学习的基本概念、工作原理和监督、非监督学习的不同,并说明如何使用开发和比较强化学习算法的工具Gym。

    1.1 强化学习

    当我们思考学习的本质时,我们首先想到的是通过与环境交互来学习。当婴儿玩耍,挥舞手臂或四处张望时,他没有明确的老师,但他可以通过直接的感觉运动与环境联系。他可以通过这种联系获得大量关于因果关系,行为结果结果,以及如何实现目标的信息。在我们的生活中,这样的互动无疑是对环境和我们自己的主要知识来源。无论我们是学开车还是交谈,我们都可以敏锐地意识到我们的环境对我们所做的事情将作出什么样的反应,并且我们试图通过我们的行为来影响所发生的事情。从交互中学习是几乎所有学习和智能理论的基本思想。
    在这里,我们探索了一种从交互中学习的计算方法。我们不直接对人或动物如何学习进行理论分析,而是探索理想化的学习情境,评估各种学习方法的效率。也就是说,我们采用人工智能研究人员或工程师的角度。我们去探索设计在科学或经济学领域可以有效解决学习问题,并通过数据分析和计算实验来评估这些设计。我们将这种方法称为强化学习,其与其他机器学习方法相比,更侧重于目标导向的交互学习。

    1.1.1 强化学习与监督、非监督学习

    强化学习就是学习怎么做,即如何建立情境-动作映射,以最大化数值奖励信号。学习器并没有被告知采取什么动作,而是通过不断尝试去发现能最大奖励的动作。在最有趣和最具挑战性的情况中,动作不仅影响瞬时报酬,还会影响下一场景,并由此影响后续的奖励。试错搜素和延迟奖励是强化学习最重要的两个特征。
    强化学习与监督学习不同,后者是目前机器学习领域研究较多的一种学习方式。监督学习是从由专家提供的一组带标签的训练集中学习的。每个示例都是对一个情境和说明即标签的描述,该标签就是系统在该情境应该采取的正确动作,通常用于标识该情境所属的类别。这类学习的目的是让系统推断或概括它的响应,以便在未知训练集上也能正确工作。这是一种重要的学习,但仅凭这一点不足以从交互中学习。在交互问题中,代理需要在所有情境中采取正确的典型的可选动作,而获取这样的例子通常是不切实际的。在一个未知的领域,若要使学习收益最大化,代理必须能够从自己的经验中学习。
    强化学习也不同于机器学习研究人员所说的无监督学习,后者通常是发现隐藏在未标记数据集合中的结构。监督学习和非监督学习这两个术语似乎囊括了机器学习的范式,但它们并没有。尽管人们可能会倾向于认为强化学习是一种无监督学习,因为它不依赖于正确行为的例子,但强化学习试图最大化奖励信号,而不是试图寻找隐藏的结构。在一个代理的经验中发现结构对于强化学习当然是有用的,但它本身并不能解决最大化奖励信号的强化学习问题。因此,我们认为强化学习是第三种机器学习范式,与监督学习、非监督学习以及其他范式并列,如图1所示。
    图1 机器学习分支

    图1 机器学习分支
    平衡探索与开发是强化学习中其他学习算法所不具备的挑战之一。为了获得更过的收益,强化学习代理必须倾向于过去已经尝试过并且能够有效获益的动作,但是要发现这样的动作,它又必须去尝试以前没有选择的动作。代理必须充分利用它既有经验以获得收益,但它也必须探索,以便在未来做出更好的工作选择。进退两难的是,要保证任务不失败,不能单一地只探索或利用。代理必须尝试各种各样的动作,并逐步偏向选择那些看起来最好的行动。在随机任务中,每个动作都必须尝试多次,才能获得对期望回报的可靠估计。探索利用困境是数学家们几十年来研究的热点问题,至今仍未解决。现在,我们只是注意到,在有监督和无监督的学习中,甚至不存在探索和开发之间平衡的整个问题,至少在这些范式最纯粹的形式中是这样。 强化学习的另一个关键特征是,它明确地考虑了目标导向的代理与不确定环境交互的整个问题。这与许多只考虑子问题而不考虑子问题如何融入全局的方法相反。例如,我们已经提到,许多机器学习研究关注监督学习,但没有明确说明这种能力最终将如何发挥作用。其他研究人员已经提出了具有一般性目标的规划理论,但没有考虑规划在实时决策中的作用,也没有考虑规划所需的预测模型从何而来。虽然这些方法已经产生了许多有用的结果,它们一个重要的限制在于过于关注子问题。

    1.1.2 强化学习案例

    • 直升机特技飞行;
    • 在西洋双陆棋比赛中击败世界冠军;
    • 管理投资组合;
    • 控制发电站;
    • 让一个人形机器人走路;
    • 很多不同的雅达利游戏中玩得比人类更好。

    1.1.3 强化学习的要素

    除了代理和环境,强化学习系统一般有四个主要元素:策略,奖励信号,值函数,和一个可选的环境模型。
    策略定义了学习代理在给定时间内的行为方式。粗略地说,策略是将环境中感知的状态映射为在这些状态下采取的行动。它对应于心理学中所谓的一系列刺激反应规则或关联。在某些情况下,策略可能是一个简单的函数或查找表,而在其他情况下,它可能涉及到大量的计算,如搜索过程。该策略是强化学习代理的核心,因为它本身就足以确定行为。一般来说,策略可能是随机的,指定了采取每个动作的概率。
    奖励信号定义了强化学习问题的目标。在每一个时间步,环境发给代理的单一数字称为奖励。代理的唯一目标是最大化其长期获得的总奖励。因此,奖励信号定义了对代理而言的好坏事件。在生物系统中,我们可能认为奖励是类似于快乐或痛苦的经历。它们是代理所面临问题的直接精确的特征。奖励信号是改变策略的主要依据;如果策略选择的动作之后是得到了低回报,那么策略可能会被改变,以便在未来的情况下选择其他动作。总之,奖励信号可能是环境状态和所采取的行动的随机函数。
    虽然奖励信号表明什么是直接意义上的好东西,但价值函数指明了长期内什么是好的。粗略地说,一个状态的价值是从该状态开始在未来可以预期累积的总奖励。鉴于奖励体现了环境状态的直接价值,价值则考虑了后续状态及奖励,从而反映了状态长期价值。例如,一个状态的瞬时奖励可能很低,但因为其后续状态具有高额奖励,因而也具有很高的价值,反之亦然。以人类作类比,奖励有点像快乐(如果是高的)和痛苦(如果是低的),而价值则对应于特定状态下一种更为精确和远见的对于满意与不满意的判断。
    从某种意义上说,奖励是主要的,而价值作为奖励的预测是次要的。没有奖励就没有价值,估计价值的唯一目的是获得更多的奖励。然而,在制定和评估决策时,我们最关心的是价值。行动选择是基于价值判断的。我们寻求带来最高价值的动作,而不是最高奖励的,因为这些行动从长远来看对我们的回报最大。不幸的是,确定价值要比确定奖励难得多。奖励基本上是由环境直接给予的,但是价值必须通过一个代理在其整个生命周期中进行的一系列观察来评估和重新评估。事实上,我们所考虑的几乎所有强化学习算法中最重要的组成部分是一种有效估计值的方法。价值评估的中心作用可以说是我们在过去60年中学习强化学习的最重要的东西。
    一些强化学习系统具有第四个也是最后一个要素,既环境模型。这是对环境的模拟,或者说,它对环境的行为做出推断。例如,给定一个状态和动作,该模型可以预测生成的下一个状态和下一个奖励。模型用于规划,规划指的是在实际经历之前考虑未来可能发生的情况来决定行动路线的任何方式。使用模型和规划解决强化学习问题的方法被称为基于模型的方法。更简单的无模型方法正好相反,它通过试错学习。

    1.1.4 总结

    强化学习是一种理解和自动进行目标导向学习和决策的计算方法。它与其他计算方法不同之处在于它强调了代理通过与环境的直接交互进行学习,而不依赖于监督或完整的环境模型。在我们看来,第一个认真处理从与环境的交互中学习以实现长期目标中出现的计算问题的领域就是强化学习。
    强化学习使用马尔可夫决策过程的正式框架来定义学习代理与其环境之间的交互作用,包括状态、动作和奖励。这个框架用简单的方法来表示人工智能问题的基本特征。这些特征包括因果性、不确定性和不确定性,以及目标的存在性。
    奖励和价值函数的概念是大多数强化学习方法的主要特征。我们认为,在策略空间中,价值函数对于有效搜索是非常重要的。价值函数的使用区分了强化学习方法和根据整个策略的评估直接在策略空间中搜索的进化方法。

    1.2 OpenAI Gym教程

    Gym是一个开发和比较强化学习算法的工具包。它对代理的结构没有任何假设,并且兼容于任何数值计算库(如TensorFlow或Theano)。
    Gym库中包含许多可以用于制定强化学习算法的测试问题(即环境),这些环境有共享接口,允许编写通用的算法。

    1.2.1 安装

    首先,需要安装Python 3.5+,只需使用pip安装gym:

    pip install gym
    

    这里需要更新pip至19.2.2版本,直接用以下命令即可:

    python -m pip install --upgrade pip
    

    图2 更新pip

    图2 更新pip

    图3 安装gym

    图3 安装gym
    安装成功后可查看安装路径(D:\Python35\Lib\site-packages)。

    图4 安装路径

    图4 安装路径

    1.2.2 从源代码进行构建

    如果喜欢的话,也可以直接克隆gym git库,当需要更改gym或者添加新的环境时这非常有用。用以下进行下载和安装:

    git clone https://github.com/openai/gym
    cd gym
    pip install -e .
    

    1.2.3 完全安装

    为了安装整个环境集,需要先安装部分系统包。
    MuJoCo安装教程见https://github.com/openai/mujoco-py#obtaining-the-binaries-and-license-key
    Pip版本
    要求Pip版本至少为1.5.0,可执行pip install --ignore-installed pip进行pip升级。
    之后(mujoco-py需要单独安装)可以运行以下命令对所有环境进行完成安装:

    pip install -e .[all]
    

    1.2.4 环境

    下面是运行程序的简单案例,运行环境CartPole-v0 1000步,每一步都渲染环境,然后弹出的窗口将呈现经典的小车倒立摆问题。

    import gym
    env = gym.make('CartPole-v0')
    env.reset()
    for _ in range(1000):
        env.render()
        env.step(env.action_space.sample()) # take a random action
    env.close()
    

    图5 运行示例

    图5 运行示例
    一般情况下,我们会在卡杆离开屏幕之前结束模拟,稍后会详细介绍。现在,请忽略关于即使这个环境已经返回done = True仍然调用step()的警告。

    图6 警告

    图6 警告

    如果想看到其他环境的运行效果,可以将上面的CartPole-v0替换为MountainCar-v0MsPacman-v0(需要Atari依赖)或Hopper-v1(需要MuJoCo依赖)。

    1.2.5 观察

    如果想要在每一步比随机行为做的更高,就需要知道采取的动作是如何在环境中进行交互的。
    环境的step函数返回的值就是我们所需要的,实际上,每一步环境都会返回四个值:

    • observation(object):一个特定的环境对象,代表了从环境中得到的观测值,例如从摄像头获得的像素数据,机器人的关节角度和关节速度,或者棋盘游戏的棋盘状态。
    • reward(float):前一行为所获得的奖励。奖励大小因环境而异,但目标总是提高总奖励。
    • done(boolean):决定是否再次初始化环境。大多数(不一定所有)任务都被定义好了什么情况该结束这个回合。(举个例子,倒立摆倾斜地太远,或失去最后一条命)
    • info(dict):调试过程中诊断信息,有时它会对我们的强化学习学习过程很有用(例如,有时它会包含最后一个状态改变后的原始概率),然而在评估你的智能体的时候你是不会用到这些信息去驱动你的智能体学习的。

    一个经典的强化学习智能体与环境交互的过程可以被描述成如下方式:每次迭代,智能体选择一个动作,这个动作输入到环境中去,智能体会得到下一个观察(也就是下一个状态)和奖励。
    程序开始时先调用reset(),它会返回一个初始的观测值,一个合适的方式编写代码如下所示:

    import gym
    env = gym.make('CartPole-v0')
    for i_episode in range(20):
        observation = env.reset()
        for t in range(100):
            env.render()
            print(observation)
            action = env.action_space.sample()
            observation, reward, done, info = env.step(action)
            if done:
                print("Episode finished after {} timesteps".format(t+1))
                break
    env.close()
    

    通过运行这段代码,可以输出以下视频和结果,可以清楚地看到在哪进行了reset。
    图7 输出结果图7 输出结果

    图7 输出结果

    1.2.6 空间

    在上面的例子中,我们一直在从环境的动作空间中随机抽取动作。但这些动作究竟是什么呢?每个环境都有一个action_space和一个observation_space。这些属性属于Space类型,它们描述了有效动作和观察的格式:

    import gym
    env = gym.make('CartPole-v0')
    print(env.action_space)
    #> Discrete(2)
    print(env.observation_space)
    #> Box(4,)
    

    离散空间允许一个固定的非负数范围,所以在这种情况下有效的动作为0或1。Box空间表示一个n维的box,因此有效的观察值将是一个由4个数字组成的数组。可以通过以下来检查动作的边界范围:

    print(env.observation_space.high)
    #> array([ 2.4       ,         inf,  0.20943951,         inf])
    print(env.observation_space.low)
    #> array([-2.4       ,        -inf, -0.20943951,        -inf])
    

    这种方式可以很有效地帮助我们编写不同环境下的代码,Box和离散的space是最常见的space。你可以从space中进行采样,或者查看一些信息:

    from gym import spaces
    space = spaces.Discrete(8) # Set with 8 elements {0, 1, 2, ..., 7}
    x = space.sample()
    assert space.contains(x)
    assert space.n == 8
    

    1.2.7 可用的环境

    Gym配有多种从难到易的环境,也包含多种不同类型的数据,full list of environments中可以查看概览。

    • Classic controltoy text:完整的小规模任务,大多来自于强化学习文献,适合于入门。
    • Algorithmic:执行计算例如多位数加法和反转序列。一般认为这些任务对于计算机来说很容易,但是挑战在于纯粹从例子中去学习这些算法。这些任务有一个很好的特性,即通过改变序列长度很容易改变难度。
    • Atari:玩经典的Atari游戏。我们以一种易于安装的形式集成了学习环境(这对强化学习研究产生了很大的影响)。
    • 2D and 3D robots:控制仿真机器人。这些任务使用MuJoCo物理引擎,用于快速准确的仿真。包含了一些来自由UC Berkeley研究人员提供的benchmark环境。MuJoCo是一款私有软件,但也提供了免费试用许可证

    1.2.8 注册

    gym的主要目的是提供大量的环境集合,这些环境暴露了一个公共接口,并进行了版本控制以便进行比较。要列出已安装可用的环境,只需询问gym.env .registry:

    from gym import envs
    print(envs.registry.all())
    #> [EnvSpec(DoubleDunk-v0), EnvSpec(InvertedDoublePendulum-v0), EnvSpec(BeamRider-v0), EnvSpec(Phoenix-ram-v0), EnvSpec(Asterix-v0), EnvSpec(TimePilot-v0), EnvSpec(Alien-v0), EnvSpec(Robotank-ram-v0), EnvSpec(CartPole-v0), EnvSpec(Berzerk-v0), EnvSpec(Berzerk-ram-v0), EnvSpec(Gopher-ram-v0), ...
    

    这将给出EnvSpec对象的列表。这些对象定义了特定任务的参数,包括要运行的试验数量和最大步数。例如,EnvSpec(Hopper-v1)定义了一个环境,其中的目标是让一个2D模拟机器人跳跃:EnvSpec(Go9x9-v0)在9x9棋盘上定义了围棋游戏。
    这些环境id被视为不透明的字符串。为了确保将来进行有效比较,环境永远不会以影响性能的方式更改,只会被更新的版本替换。我们现在给每个环境加上一个v0后缀,以便将来的替换可以自然地称为v1、v2等。将
    将自己的环境添加到注册表中非常容易,从而使它们对gym.make()可用。make():只需在加载时注册register()它们。

    1.2.9 背景:为什么有Gym?

    强化学习(RL)是机器学习中涉及决策和电机控制的子领域。它研究代理如何在复杂、不确定的环境中学习如何实现目标。令人兴奋的原因有两个:
    RL非常普遍,包括所有涉及到做出一系列决策的问题:例如,控制机器人的马达使其能够跑和跳;做出商业决策,如定价和库存管理;或玩视频游戏和棋盘游戏。RL甚至可以应用于具有顺序或结构化输出的监督学习问题。
    RL算法已经开始在许多困难的环境中取得良好的效果。RL有着悠久的历史,但直到最近在深度学习方面取得的进展之前,它还需要许多针对特定问题的工程。DeepMind的Atari results、Pieter Abbeel小组的BRETT和AlphaGo都使用了深度RL算法,这些算法没有对环境做太多假设,因此可以应用于其他设置。
    然而,RL的研究也受到两个因素的影响:

    • 需要更好的benchmas。在监督学习中,像ImageNet这样的大型标记数据集驱动了其进步。在RL中,类似的就是大量多样的环境集合。然而,现有的RL环境的开源集合没有足够的多样性,而且它们通常很难设置和使用。
    • 缺乏环境的标准化。在问题定义上的细微差别,如奖励函数或动作集合,可以极大地改变任务的难度。这个问题使得复制已发表的研究和比较不同论文的结果变得困难。

    Gym正试图解决这两个问题。

    展开全文
  • 强化学习基础

    2019-01-06 17:49:34
      2019-01-02 19:47:27 内容目录: 一、强化学习的成功 ...2.2人工智能环境类型 三、问题公式化 3.1数学公式 3.2马尔可夫决策过程 3.3价值函数 四、RL训练术语 4.1基于模型无模型 4.2On-policy...
  • 强化学习的方法总结分类

    千次阅读 2018-07-24 17:03:45
    了解强化学习中常用到的几种方法,以及他们的区别, 对我们根据特定问题选择方法时很有帮助。接下来我们通过分类的方式来了解他们的区别。  第一种分类方法可分为不理解环境(Model-Free RL)和理...
  • 强化学习任务

    2019-07-17 11:22:27
    1.分析强化学习监督学习的联系与差别。 联系:模型形式并无差别,存在着对应关系。 强化学习 监督学习 状态 示例 动作 标记 策略 分类器或回归器 差别: 监督学习:示例⇒\Rightarrow⇒标记 强化...
  • 强化学习(一):简介——什么是强化学习?

    千次阅读 多人点赞 2021-01-22 23:59:35
    本文将介绍强化学习的基本含义,了解什么是强化学习、强化学习的概念基本框架以及强化学习中常见的问题类型。 什么是强化学习? 强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是...
  • 强化学习动态规划、博弈论、有监督学习、无监督学习和进化算法的差异强化学习的特点强化学习 vs. 动态规划强化学习 vs. 博弈论强化学习 vs. 有监督学习强化学习 vs. 无监督学习强化学习 vs. 进化算法 强化学习的...
  • 选自DeepLearning4j机器之心编译参与:Nurhachu Null、李泽南从 AlphaGo 到自动驾驶汽车,我们能在很多最先进的人工智能应用中找到强化学习的身影。这种技术是如何从零开始慢慢学会完成任务,成长为「超越人类水平」...
  • 可以发现,两种方式的唯一区别就在于一个是使用的公共 static 域来暴露单例对象,而另一个是通过静态工厂方法来进行暴露。使用静态工厂方法的好处主要有两点: 第一,通过静态工厂方法引入了一层间接性,在...
  • 我们都知道,人工智能是一个十分重要的...强化学习是机器学习中一个十分重要的方法,那强化学习其他机器学习方法究竟有什么不同呢?下面我们就给大家解答一下这个问题。 首先我们给大家介绍一下什么是强化学习,其...
  • 深度强化学习 基本概念 强化学习 强化学习(Reinforcement Learning)是机器学习的一个重要的分支,主要用来解决连续决策的问题。强化学习可以在复杂的、不确定的环境中学习如何实现我们设定的目标。 深度学习 ...
  • 这是一个很经典的问题,貌似每个人都能说出几点异同点,但是没有多少人(刚毕业或正要毕业的)能系统地、深入地讲出他们的区别 重写方法的规则如下: 1. 参数列表:必须被重写方法的参数列表完全匹配。  2....
  • 文章目录前言第一章:强化学习的基本概念学习——监督, 无监督与强化学习强化学习的体系联系Reward 奖励AgentEnvironmentActionsObservation马尔科夫决策过程马尔科夫链马尔科夫奖励过程马尔科夫决策过程Policy...
  • 来源: ... 随着 DeepMind 公司的崛起,深度学习和强化...除了众所周知的 AlphaGo 之外,DeepMind 之前已经使用深度学习与强化学习的算法构造了能够自动玩 Atari 游戏的 AI,并且在即时战略游戏 StarCraft II 的游戏
  • 读书笔记–《强化学习在阿里的技术演进业务创新》 强化学习和其他学习⽅法不同之处在于强化学习是智能系统从环境到⾏为映射的学习,以使奖励信号函数值最⼤。如果智能体(agent)的某个⾏为策略(action)导致...
  • 强化学习综述

    千次阅读 2018-07-14 22:09:18
    作者:Michael L. Littman等 ...强化学习是关于智能体通过动态环境进行不断交互,从而在“尝试-错误”过程中学习正确行为的问题。这篇文章心理学上的研究有一定的关系,但更值得注意的是,这里的强...
  • 强化学习 - 简介

    2020-07-15 15:37:42
    强化学习中出现而在其他类型学习中未出现的挑战之一,是如何权衡探索(Exploration)利用(Exploitation)之间的关系。 强化学习的另一个关键特征是它明确地考虑了目标导向的个体不确定环境相互作用的 整个...
  • 2、监督学习与强化学习的区别:二者的相同点是都需要大量的数据进行训练,但是二者需要的数据类型不同,监督学习需要的是多样化的标签数据,强化学习需要的是带有回报的交互数据 3、基于模型的强化学习算法利用...
  • 选自alexirpan机器之心编译参与:Nurhachu Null、刘晓坤深度强化学习是最接近于通用人工智能(AGI)的范式之一。不幸的是,迄今为止这种方法还不能真正地奏效。在本文中,作者将为我们解释深度强化学习没有成功的...
  • 我相信,从某种意义上讲,强化学习是人工智能的未来。——强化学习之父,Richard Sutton Google收购DeepMind后,DeepMind取得的成绩在人机大战的历史中留下了浓重的一笔。有人说机器让围棋失去了“性感”的一面,也...
  • 强化学习通过环境的交互来学习如何最大化奖励。 强化学习系统的两个关键要素: 奖励:强化学习系统的目标,包括正奖励和负奖励。 策略:强化学习的学习对象就是策略。决策者根据不同的观测采用不同的动
  •  正如在前面所提到的,强化学习是指一种计算机以“试错”的方式进行学习,通过环境进行交互获得的奖赏指导行为,目标是使程序获得最大的奖赏,强化学习不同于连督学习,区别主要表现在强化信号上,强化学习中由...
  • 强化学习】强化学习分类

    千次阅读 2018-06-21 19:32:14
    https://github.com/tigerneil/deep-reinforcement-learning-family ... ——-主要引用morvan老师的教学视频 【强化学习】强...
  • 本章目录第二章 马尔科夫决策过程和贝尔曼等式2.1 学习目标2.2 代理-环境接口2.3 目标和奖励2.4 回报和片段2.5 片段任务和连续任务的统一表示法2.6 策略值函数2.7 最优策略和最优值函数2.8 最优近似2.9 总结 ...
  • 从今年的九月份到现在,接触机器学习、深度学习再到现在的深度强化学习已经有三个月的时间了。从java web开发到人工智能的领域转变的过程中,学到了很多很杂的东西,感觉这才是我以后要研究的东西。然而,在这个转变...

空空如也

空空如也

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

强化的类型与区别