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



转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com

AIQ 机器学习大数据 知乎专栏 点击关注

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

编辑整理:王成林

内容来源:百度大脑 &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 简历请手动复制职位详情链接投递。


更多高质资源 尽在AIQ 机器学习大数据 知乎专栏 点击关注

转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com