Fork me on GitHub

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

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

编辑整理:王成林

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

今天分享话题主要是跟强化学习有关,因为强化学习最近在工业界是非常火热。从加入百度开始,我主要就是做这一块。强化学习是一个比较大的话题,分享的内容大概是三个部分: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简历请手动复制职位详情链接投递。


本文地址:https://www.6aiq.com/article/1550074205898
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出