查看原文
其他

「回顾」强化学习:原理与应用

王凡 DataFunTalk 2021-04-25

分享嘉宾:王凡 百度 资深研发工程师

编辑整理:王成林

内容来源:百度大脑&DataFun AI Talk《强化学习:原理与应用

出品社区:DataFun

注:文末附有百度自然语言处理部的职位信息,感兴趣的小伙伴可以关注下。


今天分享话题主要是跟强化学习有关,因为强化学习最近在工业界是非常火热。从加入百度开始,我主要就是做这一块。强化学习是一个比较大的话题,分享的内容大概是三个部分:1)强化学习的基本算法;2)部分百度内部的强化学习应用;3)最后是强化学习的工具介绍,最近团队刚发布一款工具叫做PARL,是PaddlePaddle的一个强化学习库。



算法部分



上图右边部分是最能说明强化学习的过程:一个机器人(agent),它会跟环境(environment)有一个交互,其中agent是通过action来影响environment,environment会返回reward和state,这个交互过程会不断地交互迭代。上图左下角部分描述以上迭代过程,我们称之为马尔可夫决策过程。


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


举个例子如雅利达游戏,状态(state)指看到当前电游屏幕上,包括图像还有其他各种信号信息。当人或者机器看到一个state可以有相应的action。这个action就是游戏手柄的操作。然后进入下一个过程。整个过程可以用马尔可夫决策过程来描述。马尔可夫决策过程有两个要素,一个是transition代表环境转移的概率,另外一个reward。



从有监督和强化学习两个学习目标的角度来理解以上过程,在有监督学习过程中,在t时刻action我们称为在有监督的学习过程中需要人来示范动作我们希望机器去学习人的示范动作,那么这个人的示范就成了label。我们通过最小Negative Log-Likelihood (NLL)来使得我们的policy函数逼近人的示范。




接下来介绍另外一种学习策略目标是最大化长期收益,序列过程如下图最上面所示。定义一个Q值,是从某个t开始,一直到最终结束的回报总和。这种序列可能无限长,为了不致于使得Q值没有清晰的定义,我们引入gamma(衰减系数)。






在离散过程中,state和action都是有限的,用目标Q减去当前Q作为误差。让Q值逼近想要目标。连续情况会比较复杂,需要一个model或者function来逼近它,此时Q值是一个模型,theta是参数,state和action是特征,比如深度学习中神经网络模型,此时模型的目标函数是希望贝尔曼误差最小,这就是temporal difference error。


目前用得比较多的DQN仍然无法解决Action是连续的情况,为了解决action连续的情况,我们还是需要引入policy function。但是,REINFORCE这类直接求解Policy Function的方法,效率通常比DQN要低很多。举例来说,比如说下围棋前99步都下得很好,最后一步下的不好,导致满盘皆输。但是如果我们用REINFORCE方法,我们认为这100步都不好,包括其中下得其实不错的前99步。虽然从统计意义上来说,如果下的次数足够多,梯度更新最终仍然是会往正确的方向,但毋庸置疑,即这是一种学习效率很低的算法。为了改善这个问题,另一类应用更广的方法是actor-critic。actor是policy,critic是评价函数。 我们希望评价函数做一件事情,不论结果怎么样,都会给action返回一个合适针对它自己对于整个棋局影响的“综合”反馈,这个所谓的综合反馈在学术界又叫做credit assignment。REINFORCE是可以认为用整个序列的总体Reward作为credit。 而actor-critic赋予每一个动作一个独特的反馈,叫做advantage,它能够针对action做一些独立的反馈。下面列出的是一些不同的advantage的计算方式。



强化学习涉及的算法范围非常广,包括:


1)model-free算法, 这类现在应用比较多,它又可以分为critic only,actor only和actor-critic。


2)model based算法,通过对环境建模来进行规划,这类算法最近逐渐获得越来越多的关注。


3)还有一些和不同算法结合在一起的advanced RL,如Auxiliary Tasks可以学习一些稀疏的任务。还有反向强化学习,元强化学习等等。



应用部分-推荐系统


2011年之前强化学习是处于一个不温不火的状态。主要用到强化学习的是Intelligent Robotics,用在控制问题,因为控制问题特别适用于强化学习。2012-2013年,强化学习是伴随深度学习的高涨逐渐火热起来, 这一年openAI发布了Gym环境。就百度来说,2012年的时候,百度开始用multi-armed bandit在排序和搜索上面。2014-2017年百度在工业界进行探索,有一些成功和失败的经验。百度早在12年也成立深度学习研究院,其中一项工作是发布了XWorld,这个作为一个通用AI(AGI)环境在学术界引起了不小关注。到2017年,百度有不少强化学习应用,例如凤巢的定价系统,还有feed流的推荐。


强化学习在百度的一个重要应用是feed流推荐系统。工业界的推荐系统最早使用方法是协同过滤,追求用户对一个新闻的偏好估计。现在的推荐系统有两个研究热点:


1)intra-list correlations:考虑的是列表页多样性,即列表里的内容关联。举例来说,在同一个页面一次展现多个相同或者类似内容,哪怕用户喜欢其中单独每一个,也不一定能接受。


2)dynamic evolution或者inter-list correlations:考虑的是列表页之间关联,即推出的一个新闻不仅仅于点击与否,还需考虑点击行为对接下来的推荐影响,例如头条或者百度等App一次会推荐很多新闻。另外一个层级是内容是不断出现的,例如刷新一次过后,又推荐一次内容。核心点是在于激发用户的兴趣点,例如昨天对某种类型新闻感兴趣,那今天可能就不那么感兴趣。



我们一般的推荐,可以认为叫做k-items recommender system,问题定义为一次性给用户k个item,然后收集用户点击行为。以往经典做法是基于item independent 的假设,来预估点击ctr之类的,我们把这个叫做item-independent prediction. 不同用户的item点击是独立的,这种假设存在的问题是没有考虑多样性的情况。


一般解决多样性的方法有1)submodular ranking(次模函数排序),submodular实际上就对“边际效用递减”这个说法的形式化,通俗的说就是把所有商品看成一个集合,随着所拥有的物品数量的增加,那么获得剩下物品所得到的满足程度越来越小。在推荐系统中,在上文推荐的基础上进行重新估计,例如下面的图中第i次新闻推荐内容项为,第i+1次推荐的内容需要考虑去掉已推荐过的相似内容,考虑用户感兴趣的topic空间,给用户推荐的应该是月牙形区域的内容,这便是submodular中的net gain的定义。



这种假设存在问题有:


1)模型任务多样性不是一个简单的统一的公式能总结的,实际上是跟用户和其topic是相关的。例如有的用户就是喜欢多看一样或类似的东西,另一些用户不喜欢。 


2)多样性之外的correlation没有考虑,这些correlation可能包括正向的correlation,例如推荐两个有关联的topic,比单独推荐一个topic更感兴趣。


3)还有一个问题是局部与全局最优的问题。



首先考虑的建模方式是:


1)将已经排列的前文建模到模型中。这种建模方式也存在缺点,如实际中用户可能会被有些东西迷住,然后回过头看东西,这种情况是无法用前文的内容来描述。


2)采用上文和下文来同时建模。我们采用rnn/gru/lstm建模上文或者下文,上下文同时建模就会变成双向的rnn/gru/lstm模型。



但是双向模型是无法直接用来排序的。为此我们提出一种方法Evaluator-generator framework,该系统特点是把高精度的评估模型作为一个衰减序列的模型。系统中有一系列的generator结构,generator的目标是生成能够在evaluator上面拿到最高的分数的序列。



对于Generator来说,因为建模没有考虑到下文和全局(整个序列)的整体收益,所以最佳方式是考虑强化学习,为此我们提出了一种网络结构,revised pointer network(RPN)适合这种情况,RPN的特点是:


1)是一种set2seq的建模方法;


2)能够将候选未排序的结合变成推荐序列。



以下是实验部分结果,已在百度的内容分发取得不错的结果,获得过百度最高奖。



应用部分-对话系统


NLU里面最重要的应用就是对话系统,小组从2012年就开始探索对话系统,做了不少原型系统。小组还参与部分度秘(duer os前身)的工作,还有一个就是open-domain对话系统的工作。


对话系统主要包括NLU、state tracker、dialogue policy和NLG四个部分。



图中state tracker把状态流变成state descriptor,dialogue policy根据state descriptor来获取action,最终生成结果。目前基于任务的对话系统大概还是这个结构。


最早强化学习在对话系统中的应用是2012-2013年做的点餐系统,这个项目拿到一些结论,但不是很确信。



另外一个原型是天气预报系统,特征相对点餐系统多一些,这个原型能得出些重要结论,如发现有些指标能够超越人精心设计的规则策略,说明即通过学习还是有可能超过工程师精心设计的规则对话管理。



后来度秘里面也做了一个这样类似的功能,如对话引导,引导用户下一句说话,这过程可以通过强化学习来进行,核心部分是语义匹配DQN。



2016年Wen Tsung-Hsien提出一种端到端的面向任务对话系统,使用神经网络把四个模块综合起来。所有模块中的状态都是可训练,这相对以前工作是进步一大步。



在open-domain方向最近的进展情况分为基于检索、自动生成两种方式。



而对于开放域的对话系统,则尚没有标准的解决方案。一般认为,端到端神经网络是一个非常有潜力的方向。而端到端的对话系统存在的问题有:


1)生成式回答中没有内容,如对话会变成“哈哈”,“呵呵”

2)缺乏逻辑性,如“我有一个女儿,我12岁”

3)答非所问,例如问:“你从哪里来”,回答“我喜欢踢足球” 

4)最后一种是对话没有目标。


强化可以是解决以上问题的有效方法,但是也存在问题:


1)强化学习需要明确的学习目标。

2)强化学习需要用户的反馈,而这些反馈太昂贵,因为需要大量的数据,而且可能比有监督学习需要更多的数据集。


目前方法是尝试去解决reward如:


1)用户模拟器;

2)自我对话(self-play),两个机器人对话,然后评估对话质量;

3)adversarial self-play,即在评估的时候,加入对抗训练,把机器对话定义为假性对话,人与人之间对话是真性对话,评估时需要分辨出真假性对话,那就能给出正确的reward。


小组目前在做的是把以上的方法集成起来,让对话自动进行,具体如下。



基于以上考虑,我们做一些尝试性工作,图中是FB发布的数据集persona,基于两个persona(个性数据),产生两个人之间的对话. 这两个机器人相互聊,聊完之后用evalution-system来进行评估获得reward,然后用来强化这两个机器人的对话。



应用部分-移行控制



另外一个工作,是NeurIPS 2018中的一个比赛,叫AI for Prosthetics. 在这个比赛中,需要控制一个人体骨骼肌肉模型的肌肉(19维),需要学习的目标是按照外部不断变换的给定的速度行走。对没有按照速度行走或者跌落扣分处理。这个任务需要将强化学习和迁移学习相结合才能解决。


这次比赛中用到4个trick:


1)模型结构上:使用deep deterministic policy gradient,该网络结构由4层MLP组成,以速度为学习目标,具体网络结构与强化学习结合情况如下。



2)Curriculum Learning :课程学习并不是一开始就使用的。开始的学习指定速度低速行走的效果并不是很好,所以尝试换个思路改变问题的目标,让其跑的越快越好。这样训练我们发现能够得到非常高效的姿态。我们猜测低速行走是一个多解的问题。而在高速时,机器的姿态必须特别高效,其解相对更少。但比赛中的目标是更为低速的行走空间,因此需要进行迁移学习。我们将高速奔跑但是姿势较好的policy用于热启动,然后训练其逐步往低速的空间前一。通过这种方式我们得到了更好的奔跑姿势。在其中我们利用了课程学习,设计一系列从易到难的课程,让其逐渐地降低速度。通过这种方式,会得到一种特别稳定的姿态用于热启动。



3)Deep Exploration 我们利用多个header的相似预测,得到其预测的波动,这个波动代表了当前策略和值的波动范围。这个能够帮助策略有效探索到探索不足的空间。


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



另外一个项目跟自动驾驶方面相关,我们利用原始的传感器信号直接决策控制信号(端到端控制)。我们在一个飞行器上进行这个实验。而训练控制模型是典型的延迟反馈问题,强化学习非常适合解决这类问题。


然而强化学习用在autonomous driving中存在的问题有:


1)需要大量的数据;

2)强化学习需要一些冒进的动作,并且需要经历一些风险和失败(比如碰撞)。然而在真实的世界这个成本过大,我们不可能让无人车真的撞毁无数次来学会如何躲避障碍。


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



当我们系统做出错误判断或者出现高危动作是,安全员会及时介入。在以往的无人车中,安全员都只作为安全保障或者测试用。然而,安全员的每次干预,说明机器的工作不对。这其实是一个非常珍贵的反馈信息,应该被机器反过来学习。这也是设计IARL的初衷。我们设计的IARL算法包括两个方面:


1)惩罚任何干预; 

2)学习安全员干预时所采用的操作。



IARL在policy和loss function中的体现如下:


1)我们需要修改behvior policy,因为现在的policy不再是机器完全自主,而是变成了机器和干预的混合策略。


2)我们在reward上,对干预的过程做出惩罚。


3)我们对于policy的目标函数进行修改,增加一项用于学习干预过程的安全员操作。



实验结果如下:


工具-PARL


PARL是PaddlePaddle上的一个强化学习平台,特点是:


1)灵活性高,支持不同框架的强化学习;


2)为数不多的开源其大规模分布式能力的库。而如谷歌的tensorflow里面有很多限制,并没有完全开放出来,尤其是在工业级的应用层面;


3)同时支持工业界应用和科研任务。


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



而如果用户需要定制全新的RL算法,而且库里面本来没有,也可以童工定制Algorithm简单地实现。



最后,我们也展示一个例子,用户能够通过定义一些通信逻辑,实现一些并行化的复杂操作。



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


最后讲讲强化学习当前存在的一些问题和最有潜力的方向。


1) 在很多应用中,往往是目标不明确,例如对话最终目的是什么,像人?像人这个目标又该如何定义?解决方法是reward modeling,最近谷歌也在做这个方向。例如百度在推荐排序的时候,使用evalution-generator的框架,即首先对reward的建模而不是一上来就学习。


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


3) 奖励函数过于稀疏,极其难以探索到优质解。解决方法有分层训练、课程学习和引入辅助任务。


4) 泛化能力非常差,基本可以说很多是处在过拟合的区域。可以使用元学习,迁移学习,以及近期大火的攻防理论来改善。


5) 实验难以复现:很多实验,甚至随机种子不一样都会得到完全不一致的效果。我们提倡开源,也是要解决这个问题的第一步。


参考文献:

[1] Schulman, John, et al. "High-dimensional continuous control using generalized advantage estimation." arXiv preprint arXiv:1506.02438 (2015).

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

[3] Wilhelm, Mark, et al. "Practical Diversified Recommendations on YouTube with Determinantal Point Processes." Proceedings of the 27th ACM International Conference on Information and Knowledge Management. ACM, 2018.

[4] From item-wise recommendation to combinatorial recommendation: Sequence Optimization Approach

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

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

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

[8] Bengio, Yoshua, et al. "Curriculum learning." Proceedings of the 26th annual international conference on machine learning. ACM, 2009.

[9] Ian Osband, Charles Blundell, Alexander Pritzel, Benjamin Van Roy, Deep Exploration via Bootstrapped 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 Policy Optimization in Navigation. In Conference on Robot Learning.


作者介绍:

王凡 百度 资深研发工程师

王凡,百度自然语言处理部资深研发工程师。负责在线学习技术方向。长期深耕MAB(Multi-Armed Bandits)、强化学习等机器学习领域的研究工作,并领导相关技术在大规模工业级场景的应用。18年参与“川流”项目,通过在百度信息流产品实现多目标序列最优化框架 RSE框架,获得百度最高奖。


内推职位:

公司:百度

地点:深圳

职位:

1. 自然语言处理部_自然语言处理高级工程师/高级研究员

职位详情:

https://talent.baidu.com/mobile/recruit/position-detail.html?postId=129014&type=32


2. 自然语言处理部_机器学习高级工程师/高级研究员

职位详情:

https://talent.baidu.com/mobile/recruit/position-detail.html?postId=129015&type=32


投递:投递职位1简历请点击文末阅读原文自动跳转,投递职位2简历请手动复制职位详情链接投递。


——END——


DataFun算法交流群欢迎您的加入,感兴趣的小伙伴欢迎加管理员微信:



文章推荐:

「回顾」智能写作:人工智能为媒体内容创作赋能

「开工大吉」DataFun社区人工智能大数据1123页电子书免费送

「回顾」强化学习在自然语言处理中的应用

「回顾」自然语言处理中的多任务学习

「行知」镶嵌在互联网技术上的明珠:漫谈深度学习时代点击率预估技术进展


本文配套PPT见:

「沙龙年货」DataFun社区技术沙龙资料合集大放送


看官点下「好看」再走呗!👇

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存