介绍

youtube在2019公布了它的MMoE多目标排序系统《Recommending What Video to Watch Next: A Multitask Ranking System》。

摘要

在本paper中,我们介绍了一个大规模多目标排序系统,用于在工业界视频分享平台上推荐下一个要观看的视频。该系统会面临许多挑战,包括:存在多个竞争性的排序目标(ranking objectives),以及在user feedback中的隐式选择偏差(implicit selection biases)。为了解决这些挑战,我们探索了多种软参数共享技术(soft-parameter sharing techniques),比如:Multi-gate Mixture-of-Experts,以便对多个排序目标进行有效最优化(optimize)。另外,我们会采用一个Wide&Deep框架来缓和选择偏差(selection biases)。我们演示了我们提出的技术可以在youtube推荐质量上产生有效提升。

介绍

在本paper中,我们描述了一个关于视频推荐的大规模排序系统。也就是说,给定用户当前观看的一个视频,推荐该用户可能会观看和享受的下一个视频。通常推荐系统会遵循一个two-stage设计:candidate generation、ranking。该paper主要关注ranking。在该stage,推荐器会具有数百个候选,接着会应用一个复杂的模型来对它们进行排序,并将最可能观看的items推荐给用户。

设计一个真实世界的大规模视频推荐系统充满挑战:

  • 通常有许多不同的、有时甚至有冲突的待优化目标。例如,我们想推荐用户点击率高、愿与朋友共享的、包括观看高的视频
  • 在该系统中通常有隐式偏差(implicit bias)。例如,一个用户通常点击和观看一个视频,仅仅只因为它的排序高,而不是因为用户最喜欢它。因此,从当前系统的数据生成来进行模型训练会是有偏的,这会造成(feedback loop)效果[33]。如何有效和高效地学习减少这样的biases是个开放问题。

为了解决这样的挑战,我们为ranking system提出了一个有效的多任务神经网络架构,如图1所示。它会扩展Wide&Deep模型,通过采用Multi-gate Mixture-of-Experts(MMoE) [30]来进行多任务学习。另外,它会引入一个浅层塔结构(shallow tower)来建模和移除选择偏差。我们会应用该结构到视频推荐中:给定当前用户观看的视频,推荐下一个要观看的视频。我们在实验和真实环境中均有较大提升。

图1 我们提出的ranking系统的模型架构。它会消费user logs作为训练数据,构建Multi-gate Mixture-of-Experts layers来预测两类user behaviors,比如:engagement和satisfaction。它会使用一个side-tower来纠正ranking selection bias。在顶部,会组合多个预测到一个最终的ranking score

特别的,我们首先将我们的多任务目标分组成两类:

  • 1) 参与度目标(engagement objectives),比如:用户点击(user clicks),推荐视频的参与度
  • 2) 满意度目标(satisfaction objectives),比如:用户喜欢一个视频的程度,在推荐上留下一个评分

为了学习和估计多种类型的用户行为,我们使用MMoE来自动化学习那些跨潜在冲突的多目标共享的参数。Mixture-of-Experts[21]架构会将input layer模块化成experts,每个expert会关注input的不同部分。这可以提升从复杂特征空间(由多个模块生成)中学到的表示。接着,通过使用多个gating network,每个objective可以选择experts来相互共享或不共享。

为了建模和减小来自有偏训练数据的选择偏差(selection bias,比如:position bias),我们提出了添加一个shallow tower到主模型中,如图1左侧所示。shallow tower会将input与selection bias(比如:由当前系统决定的ranking order)相关联,接着输出一个scalar作为一个bias项来服务给主模型的最终预测。该模型架构会将训练数据中的label分解成两部分:从主模型中学到的无偏用户工具(unbiased user utility),从shallow tower学到的估计倾向评分(estimated propensity score)。我们提出的模型结构可以被看成是Wide&Deep模型的一个扩展,shallow tower表示Wide部分。通过直接学习shallow tower和main model,我们可以具有优点:学习selection bias,无需对随机实验resort来获取propensity score。

为了评估我们提出的ranking系统,我们设计了offline和live实验来验证以下的效果:

  • 1) 多任务学习
  • 2) 移除一个常见的selection bias (position bias)

对比state-of-art的baseline方法,我们展示了我们提出的框架的改进。我们在Youtube上进行实验。

主要贡献有:

  • 介绍了一种end-to-end的排序系统来进行视频推荐
  • 将ranking问题公式化成一个金目标学习问题,并扩展了Multi-gate Mixture-of-Experts架构来提升在所有objectives上的效果
  • 我们提出应用一个Wide&Deep模型架构来建模和缓和position bias
  • 我们会在一个真实世界的大规模视频推荐系统上评估我们的方法,以及相应的提升

2.相关工作

3.问题描述

本节,我们首先描述了推荐下一次要观看的视频的问题,我们引入了一个two-stage setup。

除了上述提到的使用隐式反馈来构建ranking systems挑战外,对于真实的大规模视频推荐问题,我们需要考虑以下因素:

  • 多模态特征空间(Multimodal feature space)。在一个context-aware个性化推荐系统中,我们需要使用从多模态(例如:视频内容、预览图、音频、标题、描述、用户demographics)来学习候选视频的user utility。从多模态特征空间中为推荐学习表示,对比其它机器学习应用来说是独一无二的挑战。它分为两个难点:1) 桥接从low-level的内容特征中的语义gap,以进行内容过滤(content filtering) 2) 为协同过滤学习items的稀疏表示
  • 可扩展性(Scalability)。可扩展性相当重要,因为我们正构建一个数十亿用户和视频的推荐系统。模型必须在训练期间有效训练,在serving期间高效运行。尽管ranking system在每个query会对数百个candidates进行打分,真实世界场景的scoring需要实时完成,因为一些query和context信息不仅仅需要学习数十亿items和users的表示,而且需要在serving时高效运行。

回顾下我们的推荐系统的目标是:在给定当前观看的视频和上下文(context)时,提供一个关于视频的ranked list。为了处理多模态特征空间,对于每个视频,我们会抽取以下特征(比如:视频的meta-data和视频内容信号)来作为它的表示。对于context,我们会使用以下特征(比如:人口统计学user demographics、设备device、时间time、地点location)。

为了处理可扩展性,如[10]描述相似,我们的推荐系统具有两个stages:候选生成、ranking。。。

3.1 候选生成

我们的视频推荐系统会使用多种候选生成算法,每种算法会捕获query video和candidate video间的某一种相似性。例如,一个算法会通过将query video的topics相匹配来生成candidates;另一个算法则会基于该视频和query video一起被观察的频次来检索candiate videos。我们构建了与[10]相似的一个序列模型通过用户历史来生成个性化候选视频。我们也会使用[25]中提到的技术来生成context-aware high recall relevant candiadtes。最后,所有的candidates都会放到一个set中,给ranking system进行打分。

3.2 Ranking

我们的ranking系统会从数百个candidates中生成一个ranked list。不同于candidate generation,它会尝试过滤掉大多数items并只保留相关items,ranking system的目标是提供一个ranked list以便具有最高utility的items可以展示在top前面。因此,我们使用大多数高级机器学习技术常用的NN结构,以便能足够的建模表现力来学习特征关联和utility关系。

4.模型结构

4.1 系统总览

我们的ranking system会从两类用户反馈数据中学习:1) engagement行为(比如:点击和观看) 2)satisfaction行为(比如:likes和dismissals)。给定每个candidate,ranking system会使用该candidate、query和context的的特征作为输入,学习预测多个user behaviors。

对于问题公式,我们采用l2r的框架。我们会将ranking问题建模成:一个具有多个objectives的分类问题和回归问题的组合。给定一个query、candidate和context,ranking模型会预测用户采用actions(比如:点击、观看、likes和dismissals)的概率。

为每个candidate做出预测的方法是point-wise的方法。作为对比,pair-wise或list-wise方法可以在两个或多个candidates的顺序上做出预测。pair-wise或list-wise方法可以被用于潜在提升推荐的多样性(diversity)。然而,我们基于serving的考虑主要使用point-wise ranking。在serving时,point-wise ranking很简单,可以高效地扩展到大量candidates上。作为比较,对于给定的candidates集合,pair-wise或list-wise方法需要对pairs或lists打分多次,以便找到最优的ranked list,限制了它们的可扩展性。

4.2 ranking objectives

我们使用user behaviors作为训练labels。由于用户可以对推荐items具有不同类型的behaviors,我们将我们的ranking system设计成支持多个objectives。每个objective的目标是预测一种类型的与user utility相关的user behavior。为了描述,以下我们将objectives分离成两个类别:engagement objectives和satisfaction objectives。

Engagement objectives会捕获user behaviors(比如:clicks和watches)。我们将这些行为的预测公式化为两种类型的任务:对于像点击这样行为的二元分类任务,以及对于像时长(time spent)相关的行为的回归任务。相似的,对于satisfaction objectives,我们将:与用户满意度相关的行为预测表示成二元分类任务或者回归任务。例如,像点击/like这样的行为可以公式化成一个二元分类任务,而像rating这样的行为被公式化成regression任务。对于二元分类任务,我们会计算cross entropy loss。而对于regression任务,我们会计算squared loss。

一旦多个ranking objectives和它们的问题类型被定下来,我们可以为这些预测任务训练一个multitask ranking模型。对于每个candidate,我们将它们作为多个预测的输入,并使用一个形如加权乘法的组合函数(combination function)来输出一个组合分(combined score)。该权值通过人工调参,以便在user engagements和user satisfactions上达到最佳效果。

4.3 使用MMoE建模任务关系和冲突

多目标的ranking systems常使用一个共享的bottom模型架构。然而,当任务间的关联很低时,这样的hard-parameter sharing技术有时会伤害到多目标学习。为了缓和多目标间的冲突,我们采用并扩展了一个最近发布的模型架构:MMoE(Multi-gate Mixture-of-Experts)【30】。

MMoE是一个soft-parameter sharing模型结构,它的设计是为了建模任务的冲突(conflicts)与关系(relation)。通过在跨多个任务上共享experts,它采用Mixture-of-Experts(MoE)结构到多任务学习中,而对于每个task也具有一个gating network进行训练。MMoE layer的设计是为了捕获任务的不同之处,对比起shared-bottom模型它无需大量模型参数。关键思路是,使用MoE layer来替代共享的ReLU layer,并为每个task添加一个独立的gating network。

对于我们的ranking system,我们提出在一个共享的hidden layer的top上添加experts,如图2b所示。这是因为MoE layer可以帮助学习来自input的模态信息(modularized information)。当在input layer的top上、或lower hidden layers上直接使用它时,它可以更好地建模多模态特征空间。然而,直接在input layer上应用MoE layer将极大增加模型training和serving的开销。这是因为,通常input layer的维度要比hidden layers的要更高。

图2 使用MMoE来替换shared-bottom layers

我们关于expert networks的实现,等同于使用ReLU activations的multilayer perceptrons。给定task k, prediction ,以及最后的hidden layer ,对于task k的具有n个experts output的MMoE layer为:,可以用以下的等式表示:

…(1)

其中:是一个lower-level shared hidden embedding,是task k的gating network,是第i个entry,是第i个expert。gating networks是使用一个softmax layer的关于input的简单线性转换。

…(2)

其中,是线性变换的自由参数。与[32]中提到的sparse gating network对比,experts的数目会大些,每个训练样本只利用top experts,我们会使用一个相当小数目的experts。这样的设置是为了鼓励在多个gating networks间共享experts,并高效进行训练。

4.4 建模和移除Position和Selection Baises

隐式反馈被广泛用于训练l2r模型。大量隐式反馈从user logs中抽取,从而训练复杂的DNN模型。然而,隐式反馈是有偏的,因为它由已经存在的ranking system所生成。Position Bias以及其它类型的selection biases,在许多不同的ranking问题中被研究和验证[2,23,41]。

在我们的ranking系统中,query是当前被观看过的视频,candidates是相关视频,用户倾向于点击和观看更接近toplist展示的视频,不管它们实际的user utility——根据观看过的视频的相关度以及用户偏好。我们的目标是移除从ranking模型中移除这样的position bias。在我们的训练数据中、或者在模型训练期间,建模和减小selection biases可以产生模型质量增益,打破由selection biases产生的feedback loop。

我们提出的模型结构与Wide&Deep模型结构相似。我们将模型预测分解为两个components:来自main tower的一个user-utility component,以及来自shallow tower的一个bias component。特别的,我们使用对selection bias有贡献的features来训练了一个shallow tower,比如:position bias的position feature,接着将它添加到main model的最终logit中,如图3所示。在训练中,所有曝光(impressions)的positions都会被使用,有10%的feature drop-out rate来阻止模型过度依赖于position feature。在serving时,position feature被认为是缺失的(missing)。为什么我们将position feature和device feature相交叉(cross)的原因是,不同的position biases可以在不同类型的devices上观察到。

图3 添加一个shallow side tower来学习selection bias(比如:position bias)

5.实验结果

本节我们描述了我们的ranking system实验,它会在youtube上推荐next watch的视频。使用由YouTube提供的隐式反馈,我们可以训练我们的ranking models,并进行offline和live实验。

Youtube的规模和复杂度是一个完美的测试。它有19亿月活用户。每天会有数千亿的user logs关于推荐结果与用户活动的交互。Youtube的一个核心产品是,提供推荐功能:为给定一个观看过的视频推荐接下来要看的,如图4所示。

图4 在youtube上推荐watch next

5.2.3 Gating Network分布

为了进一步理解MMoE是如何帮助multi-objective optimization的,我们为在每个expert上的每个task在softmax gating network中绘制了累积概率。

5.3 建模和减小Position Bias

使用用户隐式反馈作为训练数据的一个主要挑战是,很难建模在隐式反馈和true user utility间的gap。使用多种类型的隐式信号和多种ranking objectives,在serving时在item推荐中我们具有更多把手(knobs)来tune以捕获从模型预测到user utility的转换。然而,我们仍需要建模和减小在隐式反馈中普遍存在的biases。例如:在用户和当前推荐系统交互中引起的selection biases。

这里,我们使用提出的轻量级模型架构,来评估如何来建模和减小一种类型的selection biases(例如:position bias)。我们的解决方案避免了在随机实验或复杂计算上花费太多开销。

5.3.1 用户隐反馈分析

为了验证在我们训练数据中存在的position bias,我们对不同位置做了CTR分析。图6表明,在相对位置1-9的CTR分布。所图所示,我们看到,随着位置越来越低,CTR也会降得越来越低。在更高位置上的CTR越高,这是因为推荐更相关items和position bias的组合效果。我们提出的方法会采用一个shallow tower,我们展示了该方法可以分离user utility和position bias的学习。

图6 位置1-9的CTR

5.3.2 Baseline方法

为了评估我们提出的模型架构,我们使用以下的baseline方法进行对比。

  • 直接使用position feature做为一个input feature:这种简单方法已经在工业界推荐系统中广泛使用来消除position bias,大多数用于线性l2r rank模型中。
  • 对抗学习(Adversarial learning):受域适应(domain adaptation)和机器学习公平性(machine learning fairness)中Adversarial learning的广泛使用的启发,我们使用一个相似的技术来引入一个辅助任务(auxiliary task),它可以预测在训练数据中的position。随后,在BP阶段,我们不让梯度传递到主模型(main model)中,以确保主模型的预测不依赖于position feature。

5.3.3 真实流量实验结果

表2展示了真实流量实验结果。我们可以看到提出的方法通过建模和消除position biases可以极大提升参与度指标。

5.3.4 学到的position biases

图7展示了每个position学到的position biases。从图中可知,越低的position,学到的bias越小。学到的biases会使用有偏的隐式反馈(biased implicit feedback)来估计倾向评分(propensity scores)。使用足够训练数据通过模型训练运行,可以使我们有效学到减小position biases。

图7 每个position上学到的position bias

5.4 讨论

参考

介绍

从历史行为中建模用户的动态偏好,对于推荐系统来说是个挑战。之前的方法采用序列神经网络以从左到右的方式将用户历史交互编码成隐表示,来生成推荐。尽管它们是有效的,这种从左到右的单向模型是次优的,我们对此仍有争论,因为有以下的限制:

  • a) 单向结构限制了在用户行为序列中的隐表示的能力(power)
  • b) 通常这样的一个严格排序的序列,并不总是实际可行的

为了解决这样的限制,我们提出了一个序列推荐模型,称为:BERT4Rec,它采用deep bidirectional self-attention机制来建模用户行为序列。为了避免信息泄漏,以及对双向模型的有效训练,我们采用了Cloze objective到序列推荐中,通过联合条件(从左到右的context)预测在序列中随机的masked items。这种方式下,通过允许在用户历史行为中的每个item以及融合从左到右的信息,我们学习了一个bidirectional表示模型来做出推荐。我们在4个benchmark数据集上进行了大量实验,表明我们的模型要胜过state-of-art的序列模型。

1.介绍

用户兴趣的准确表征是一个推荐系统的核心。在许多真实应用中,用户当前兴趣是天然动态和演化的,受他们历史行为的影响。例如,一个用户可能在购买一个任天堂(Nintendo) Switch后,购买配件(比如:Joy-Con controller);但是在正常情况下他不会单买配件。

为了建模这样的序列动态性,提出了许多方法[15,22,40]基于用户历史交互来做出序列化推荐(sequential recommendations)。他们的目标是:在给定一个用户的过往历史交互后,预测他可能会交互的后继item(s)。最近,大量工作采用序列化神经网络(比如:RNN)来建模[14,15,56,58]。这些工作的基本模式是:将用户历史行为编码成一个vector(例如:用户偏好的表示),并使用一个从左到右的序列模型基于隐表示来做出推荐

图1 序列推荐模型架构的不同。BERT4Rec可以通过Cloze task来学习一个双向模型,而SASRec和RNN-based模型是从左到右的单向模型,只能顺序预测next item

尽管这些方法很流行并且是有效的,我们仍有争论:这种从左到右的单向模型不足够学到关于用户行为序列的最优表示。主要限制(如图1c和1d所示),这样的单向模型限制了历史行为序列中的items的隐表示的能力,其中每个item只能从之前的items的信息中进行编码(encode)。另一个限制是,之前提出的单向模型最初引入是为了使用原始顺序的序列数据,比如:文本(text)和时序数据。他们通常假设在数据上有一个严格有序的序列,但对于真实应用中的用户行为来说并不总是正确的。实际上,由于存在许多不可观察的外部因素,在一个用户历史交互行为中的items选择,可能不会遵循一个严格的顺序假设。在这种情况下,在用户行为序列建模中在两个方向上包含上下文(context)很重要。

为了解决上述限制,我们使用一个双向模型来学习用户历史行为序列的表示。特别的,受BERT的成功启发,我们提出使用深度双向self-attention模型到序列推荐中,如图1b所示。对于表征能力(representation power),在文本序列建模的深度双向模型的良好结果,表明对于序列表示学习的两个方向包含context很有意义。对于更严格的顺序假设,比起在建模用户行为序列上使用单向模型,我们的模型更适合,因为在双向模型中所有items都可以利用两侧的context。

然而,对于序列化推荐(sequential recommendation)来说训练双向模型并不简单和直接。常见的序列推荐模型通常以从左到右方式训练,并在输入序列中为每个位置预测下一个item。如图1所示,在一个深度双向模型中同时在左向到右向上联合上context,可能会造成信息泄露,例如:允许每个item间接地“看到target item”。这会使得预测future项变得不重要,该网络可能不能学到任何有用的东西

为了解决该问题,我们引入了Cloze task[6,50]来取代在单向模型(例如:序列化预测next item)中的目标函数。特别的,我们在输入序列中随机将一些items进行遮掩(mask)(例如:使用一个特别token[mask]进行替代),接着基于围绕他们的context来预测这些masked items的ids。这种方式下,我们可以避免信息泄露,并通过允许在输入序列中的每个item的表示融合(fuse)左和右的context,学到一个双向表示模型。除了训练一个双向模型外,Cloze objective的另一个优点是,它可以生成更多样本(samples)在多个epochs上训练一个更强大的模型。然而,Cloze task的缺点是,对于最终任务(例如:sequential recommendation)不一致。为了解决该问题,在测试期间,我们会在输入序列的末尾添加特殊token “[mask]”来表示我们需要预测的item,接着基于它的最终hidden vector来作出推荐。实验表明,我们的模型要更好。

主要贡献有:

  • 提出了使用双向self-attention网络,通过Cloze task来建模用户行为序列。据我们所知,这是首个在推荐系统中引入双向序列建模和Cloze objective的研究
  • 比较了该模型与state-of-the-art方法
  • 分析了在提出模型中的关键构成

2.相关工作

回顾下相关工作。

2.1 通用推荐

推荐系统的早期工作通常会使用CF,并基于它们的历史交互来建模用户偏好。在众多CF方法中,MF是最流行的方法,它会将users和items投影到一个共享的向量空间中,并通过两个向量间的内积来估计一个用户对该item的偏好。item-based的最邻近方法有[20,25,31,43]。他们会通过使用一个预计算好的i2i相似矩阵,结合它们历史交互上的items间的相似度,来估计一个用户在一个item上的偏好。

最近,深度学习已经重构了推荐系统。早期的工作是两层的RBM CF。

基于深度学习的另一条线是,通过集成辅助信息(比如:文本[23,53]、图片[21,55]、音频特征[51])到CF模型中来学习item的表示来提升推荐效果。另一条线是,替代常用的MF。例如,NCF会通过MLP替代内积来估计用户偏好,而AutoRec和CDAE则使用auto-encoder框架来预测用户评分。

2.2 序列化推荐

不幸的是,上述方法中没有一个是用于序列化推荐(sequential recommendation)的,因为他们会忽略用户行为中的顺序。

在序列化推荐中的早期工作,通常会使用MC(markovchains)来捕获用户历史交互。例如,Shani[45]将推荐生成公式化为一个序列优化问题,并采用MDP(Markov Decision Process)来求解它。之后,Rendle结合MC和MF通过FPMC来建模序列化行为和兴趣。除了一阶MC外,更高阶的MC也可以适用于更多之前的items。

最近,RNN和它的变种,Gated Recurrent Unit(GRU)[4]和LSTM(LSTM)在建模用户行为序列上变得越来越流行。这些方法的基本思想是,使用多种recurrent架构和loss function,将用户之前的记录编码成一个vector(例如:用户偏好的表示,可用于预测),包含:GRU4Rec、DREAM、user-based GRU、attention-based GRU(NARM))、improved GRU4Rec(BPR-max/Top1-max),以及一个有提升的抽样策略[14]。

与RNN不同,许多深度模型也被引入进序列化推荐中。例如,Tang[49]提出了一个卷积序列网络(Caser)来学习序列模式,它同时使用水平和垂直卷积filters。Chen[3]和Huang[19]采用Memory Network来提升序列化推荐。STAMP使用一个带attention的MLP来捕获用户的通用兴趣和当前兴趣。

2.3 Attention机制

Attention机制在建模序列化数据(例如:机器翻译、文本分类)中展示了令人满意的潜能。最近,一些工作尝试采用attention机制来提升推荐效果和可解释性[28,33]。例如,Li[28]将attention机制引入到GRU中来捕获用户序列行为以及在session-based推荐中的主要目的。

上述提到的工作基本上将attention机制看成是对于原始模型的一种额外的组件。作为对比,Transformer[52]和BERT[6]在multi-head self-attention上单独构建,并在文本序列建模中达到了state-of-the-art的效果。最近,对于在建模序列化数据中使用纯attention-based网络有上升的趋势。对于序列化推荐来说,Kang[22]引入了一个二层的Transformer decoder(例如:Transformer语言模型)称为SASRec来捕获用户的序列化行为,并在公开数据集上达到了state-of-the-art的效果。SASRec与我们的工作紧密相关。然而,它仍是一个单向模型,并使用了一个非正式的(casual) attention mask。而我们使用Cloze task以及一个双向模型来编码用户的行为序列。

3.BERT4Rec

我们首先引下研究问题、基本概念。

3.1 问题声明

在序列化推荐中,假设:

  • :表示一个用户集合
  • 表示一个items集合
  • :表示对于用户按时间顺序的交互序列,其中是用户u在timestep t上交互的item,是用户u交互序列的长度。

给定交互历史,序列化推荐的目标是预测:用户u在timestep 的交互的item。它可以公式化为,为用户u在timestep 上建模所有可能items的概率:

3.2 模型结构

这里,我们引入了一个新的序列化推荐模型,称为BERT4Rec,它采用Transformer中的双向编码表示到一个新任务(sequential Recommendation)中。它在流行的self-attention layer上构建,称为“Transformer layer”。

如图1b所示,BERT4Rec通过L个双向Transformer layers进行stack组成。每个layer上,它会通过使用Transformer layer并行地跨之前层的所有positions交换信息,来迭代式地修正每个position的表示。通过如图1d的方式,以step-by-step的RNN-based的方式来前向传播相关信息进行学习,self-attention机制会赋予BERT4Rec直接捕获任意距离间的依赖。该机制会产生一个全局的receptive field,而CNN-based方法(比如:Caser)通常有一个受限的receptive field。另外,对比RNN-based方法,self-attention更容易并行化。

对比图1b, 1c, 1d,大多数显著的不同之处是,SASRec和RNN-based方法都是从左到右的单向结构,而BERT4Rec使用双向self-attention来建模用户的行为序列。这种方式下,我们提出的模型可以获取关于用户行为序列的更强大表示,来提升推荐效果。

3.3 Transformer Layer

如图1b所示,给定一个长度为t的输入序列,我们在每一层l的每个position i上同时使用transformer layer来迭代式地计算隐表示。这里,我们将进行stack在一起来形成一个矩阵(matrix) ,因为我们会在实际上同时计算所有positions的attention function。如图1a所示,Transformer layer Trm包含了两个sub-layers:一个Multi-head self-attention sub-layer以及一个position-wise feed-forward network。

Multi-Head self-Attention. Attention机制在许多任务中变为序列建模的一部分,它可以捕获在representation pairs间的依赖,无需关注序列中的距离。之前的工作表明,在不同positions上的不同表征子空间上的信息进于jointly attend是有用的[6,29,52]。因而,我们可以采用multi-head self-attention来替代执行单一的attention函数。特别的,multi-head attention会首先使用不同的、可学习的线性投影,将线性投影到h个子空间(subspaces)上,接着以并行的方式使用h个attention functions来生成output表示,它们可以进行拼接,然后进行再次投影

…(1)

其中,每个head的投影矩阵是可学习的参数。

这里,出于简洁性,我们忽略掉layer上标l。实际上,这些投影参数并不是跨网络共享的。这里,Attention函数是scaled dot-product attention:

…(2)

这里,query Q, key K 和value V使用等式(1)中不同学到的投影矩阵从相同的矩阵进行投影。 temperature 被引入用来生成一个softer attention分布,以避免极小的梯度。

Position-wise feed-forward网络

如上所述,self-attention sub-layer主要基于线性投影。为了使该模型具有非线性以及不同维度间的交叉,我们在self-attention sub-layer的outputs上使用一个Position-wise Feed-forward network,每个position独立且相同。它包含了两个仿射变换(affine transformations),两者间具有一个GELU activation(Gaussian Error Linear Unit):

…(3)

其中:

  • 是标准gaussian分布的累积分布函数,
  • 是可学习参数,并且跨所有positions共享

出于便利我们忽略layer上标l。事实上,这些参数在layer与layer间是不同的。在本工作中,根据OpenAI GPT和BERT,我们使用一个更平滑的GELU activation而非标准的ReLU activation。

Stacking Transformer layer

如上所述,我们可以使用self-attention机制,来很轻易地捕获跨整个行为序列的item-item交叉。然而,通过将self-attention layers进行stacking来学习更复杂的item transition patterns是有利的。然而,该网络会随着更深而变得更难训练。因此,我们两个sublayers的每一个周围都采用一个residual连接,如图1a所示,并使用layer normalization。另外,在它们被normalized后,我们会在每个sub-layer的output上采用dropout[47]。也就是说,每个sub-layer的output是:,其中:是通过sublayer自身实现的函数,LN是由[1]定义的layer normalization function。我们会使用LN来在相同layer上的所有hidden units上归一化inputs,以便加速网络训练。

总之,BERT4Rec以如下形式重新定义了每个layer的hidden表示:

3.4 Embedding Layer

所上所述,由于不使用任何recurrence或convolution模块,Transformer layer Trm不会意识到输入序列的顺序。为了利用输入的顺序信息,我们在Transformer layer stacks的底部,将position embeddings引入到input item embeddings中。对于一个给定的item ,它的输入表示通过对相应的item embedding和positinal embedding进行求和来构成:

其中,对于item 是第d维的embedding,是position index=i上的d维positional embedding。在本模型中,我们使用可学习的positional embeddings来替代确定的sinusoid embedding以提升更高的效果。positional embedding matrix 允许我们的模型来标识要处理哪一部分的input。然而,它也在最大句长N上做了限制。因而,我们需要将输入序列截断取最近的N个items (如果t>N)。

3.5 Output layer

在L layers后,会跨之前层上的所有positions来层次化交换信息,对于input序列的所有items,我们会获得最终的output 。假设我们将item 在timestep t上进行mask,我们接着基于图1b的来预测masked items 。特别的,我们会应用一个两层的feed-forward网络,并使用GELU activation来生成一个在target items上的output分布:

…(7)

其中:

  • 是可学习的投影矩阵
  • 是bias项
  • 是对于item set V的embedding矩阵

我们在input layer和output layer上使用共享的item embedding matrix来减缓overfitting并减小模型size。

3.6 模型学习

训练

常见的单向序列推荐模型通常通过为输入序列中的每个position预测next item的方式来进行训练(如图1c和1d)。特别的,input序列的target是一个shfited版本 。然而,如图1b所示,在双向模型中的left context和right context进行联合,可能会造成:每个item的最终output表示会包含target item的信息。这会使得预测将来项变得更平凡,网络不会学到任何有用的东西。对于该问题一种简单的解法是,从长度为t的原始行为序列中创建t-1个样本(带有next items的子序列,形如:),接着使用双向模型将每个历史子序列进行encode,以预测target item。然而,该方法非常耗时、耗资源,因为我们必须为在序列中的每个position创建一个新样本并进行单独预测。

为了高效地训练我们的模型,我们使用了一个新的objective: [50](在[6]中被称为“Masked Language Model”)来序列推荐中。它是一种测试(test),由将某些词移除后的语言的一部分组成,其中参与者(participant)会被要求填充缺失的词(missing words)。在我们的case中,对于每个training step,我们对输入序列中的所有items的一部分进行随机遮掩(randomly mask)(通过使用特殊token “[mask]”进行替代),接着只是基于它的left context和right context来预测masked items的原始ids。例如:

Input: —->

labels:

对应于”[mask]”的最终的hidden vectors,会被feed给一个在item set上的output softmax,这与常规的序列推荐相同。事实上,我们会为每个masked input 定义loss来作为关于该masked targets的负log似然:

…(8)

其中,是用户行为历史的masked版本,是在它上的random masked items,是masked item 的true item,概率如等式(7)定义。

Cloze task的一个额外优点是,它可以生成更多样性来训练模型。假设一个长度为n的序列,如图1c和图1d所示的常规序列预测可以为训练生成n个唯一的样本,而BERT4Rec在多个epochs上可以获得的样本(如果我们随机mask k个items)。它允许我们训练一个更强大的单向表示模型。

Test

如上所述,我们会在训练和最终序列推荐任务间不匹配(mismatch),因为Cloze objective是为了预测当前maskted items,而序列推荐的目标是预测the future。为了解决该问题,我们会在用户行为序列的结尾添加特殊token “[mask]”,接着,基于该token的最终hidden表示预测next item。为了更好匹配(match)序列推荐任务(例如:预测last item),我们也可以在训练期间生成只在输入序列中mask最后一个item的抽样。它与序列推荐的fine-tuning相似,可以进一步提升推荐效果。

3.7 讨论

这里,我们会讨论我们的模型与之前的工作的关系。

SASRec

很明显,SARRec是从左到右的单向版本的Bert4Rec,它使用单个head attention以及causal attention mask。不同的结构导至不同的训练方法。SASRec会为序列中的每个position预测next item,而Bert4Rec会使用Cloze objective预测序列中的masked items。

CBOW & SG

另一个非常相似的工作是CBOW(Continuous Bag-of-Words)和(SG)Skip-Gram。CBOW会使用在context(包含左和右)中的所有word vectors的平均来预测一个target word。它可以看成是一个简版的BERT4Rec:如果我们在BERT4Rec中使用一个self-attention layer,并在items上具有均匀的attention weights,不共享的item embeddings,移除positional embedding,并将中心项mask住。与CBOW相似,SG也可以看成是BERT4Rec的简版(mask所有items,除了它自身)。从该角度看,Cloze可以看成是CBOW和SG的objective的一个通用格式。另外,CBOW使用一个简单的aggregator来建模word序列,因为它的目标是学习好的word representations,而非sentence representations。作为对比,我们会寻找一个更强大的行为序列表示模型(deep self-attention network)来作出推荐。

BERT

尽管我们的BERT4Rec受NLP中BERT,它与BERT仍有许多不同之处:

  • a) 大多数主要区别是,BERT4Rec是一个用于序列推荐的end-to-end模型,而BERT是一个用于句子表示的pre-training模型。BERT会利用大规模task-independent语料来为许多文本序列任务pre-train句子表示模型,因为这些任务会共享关于该语言的相同背景知识。然而,在推荐任务中不受该假设约束。这样,我们可以为不同的序列化推荐datasets训练BERT4Rec end-to-end。
  • b) 不同于BERT,我们会移除next sentence loss和segment embeddings,因为BERT4Rec会建模一个用户的历史行为,只有在序列推荐中有一个序列

4.实验

评估了三个数据集:

  • Amazon Beauty:Amazon.com收集的产品review数据集。
  • Steam:从在线视频游戏发生商Steam中收集得到,
  • MovieLens:MovieLens电影数据集

4.5 hidden维度d的影响

4.6 Mask比较的影响

4.7 最大序列长度N的影响

4.8 消融(Ablation)研究

参考

Minmin Chen、Alex Beutel等在《Top-K Off-Policy Correction for a REINFORCE Recommender System》中提出使用强化学习来提升youtube推荐。主要是从bias/variance的角度出发,具体方法如下:

摘要

工业界推荐系统会处理非常大的动作空间(action spaces)——数百万items来进行推荐。同时,他们需要服务数十亿的用户,这些用户在任意时间点都是唯一的,使得用户状态空间(user state space)很复杂。幸运的是,存在海量的隐式反馈日志(比如:用户点击,停留时间等)可用于学习。从日志反馈中学习是有偏的(biases),这是因为只有在推荐系统上观察到的反馈是由之前版本的推荐系统(previous versions)选中的。在本文中,我们提出了一种通用的方法,在youtube生产环境上的top-k推荐系统中,使用一个基于策略梯度的算法(policy-gradient-based algorithm,比如:REINFORCE),来解决这样的偏差。该paper的主要贡献有:

  • 1.将REINFORCE扩展到生产环境推荐系统上,动作空间有数百万;
  • 2.使用off-policy correction来解决在从多种行为策略中收集的日志反馈的数据偏差(data biases)
  • 3.提出了一种新的top-K off-policy correction来解释我们一次推荐多个items的策略推荐
  • 4.展示了探索(exploration)的价值

我们通过一系列仿真(simulations)和youtube的多个真实环境,来展示我们的方法的效果。

1.介绍

在工业界,通过推荐系统来帮助用户从海量内容中挑选和发现用户感兴趣的少部分内容。该问题十分具有挑战性,因为要推荐海量的items数目。另一方面,将合适的item在合适的时间上曝光给正确的用户,需要推荐系统能基于历史交互,不断地适应用户的兴趣漂移。不幸的是,对于一个大的状态空间(state space)和动作空间(action space),我们只观察到相对少量的数据,大多数用户只被曝光了少量items,而显式反馈的数据占比更少。也就是说,推荐系统在训练时只能接受相当稀疏的数据,例如:Netflix Prize Dataset只有0.1%的数据是dense的。因此,推荐系统的大量研究会探索不同的机制来处理相当稀疏的情况。从隐式用户反馈(比如:点击、停留时间)中学习,对未观察到的交互进行填充,对于提升推荐是很重要的一步。

大多数独立的研究线上,增强学习(RL)已经在游戏、机器人领域取得了相当大的进步。RL通常聚焦于构建agents,在一个环境(environment)中采取哪些动作(action)来最大化一些长期收益(long term reward)。这里,我们探索了将推荐解析成:构建RL agents来最大化每个用户使用该系统的长期满意度。在推荐问题上,这提供给我们一个新的视角和机会来基于在RL最新进展之上进行构建。然而,将这些新东西应用于实际还是有许多挑战。

如上所述,推荐系统需要处理大的状态空间(state spaces)和动作空间(action spaces),在工业界尤其显著。推荐可提供的items集合是不确定的(non-stationary),新items会不断被引入到系统中,从而产生一个日益增长的带新items的动作空间(action space),这会产生更稀疏的反馈。另外,在这些items上的用户偏好是会随时间一直漂移的(shifting),从而产生连续演化的用户状态(user states)。在这样一个复杂的环境(environment)中,通过这些大量actions进行reason,在应用已有RL算法时提出了独特的挑战。这里,我们分享了我们的实践:在非常大的动作空间和状态空间中,在一个神经网络候选生成器(neural candidate generator)上(一个top-k推荐系统)应用REINFORCE算法[48]。

除了大量动作和状态空间外,推荐系统中的RL仍是有区别的:只有有限提供的数据。经典的RL应用通过self-play和仿真(simulation)生成的大量训练数据,已经克服了数据无效性(data inefficiencies)。相比较而言,推荐系统的复杂动态性,使得对于仿真生成真实推荐数据是不可能的。因此,我们不能轻易寻找(probe for)关于之前的state和action space的未探索领域上的回报(reward),因为观测到的回报(observing reward)需要为一个真实用户给出一个真实推荐。作为替代,该模型几乎依赖于之前推荐模型们(models即policies)所提供的数据,大多数模型我们是不能控制的或不再可以控制。对于从其它policies中大多数日志反馈,我们采用一个off-policy learning方法,在该方法中我们会同时学习之前policies的一个模型,当训练我们的新policy时,在纠正数据偏差时包含它。我们也通过实验演示了在探索数据(exploratory data)上的价值(value)。

最终,在RL方法中大多数研究主要关注于:产生一个可以选择单个item的policy。而真实世界的推荐系统,通常会一次提供用户多个推荐[44]。因此,我们为我们的top-K推荐系统定义了一个新的top-K off-policy correction。我们发现,在模拟和真实环境中,标准off-policy correction会产生一个对于top-1推荐来说最优的policy,而我们的top-K off-policy correction会生成更好的top-K推荐。我们提供了以下的贡献:

  • 1.REINFORCE推荐系统:我们在一个非常大的action space中,扩展了一个REINFORCE policy-gradient-based方法来学习一个神经网络推荐policy。
  • 2.Off-Policy候选生成:我们使用off-policy correction来从日志反馈中学习,这些日志从之前的model policies的一个ensemble中收集而来。我们会结合一个已经学到的关于行为策略(behavior policies)的神经网络模型来纠正数据偏差。
  • 3.Top-K Off-policy Correction:我们提供了一个新的top-K off-policy correction来说明:我们的推荐一次输出多个items。
  • 4.真实环境的提升:我们展示了在真实环境中(在RL文献中很少有这种情况),这些方法对于提升用户长期满意度的价值。

我们发现,这些方法的组合对于增加用户满意度是很有用的,并相信对于在推荐中进一步使用RL仍有许多实际挑战。

2.相关工作

增强学习:Value-based方法(比如:Q-learning),policy-based方法(比如:policy gradients constitue经典方法)来解决RL问题。[29]中罗列了现代RL方法的常见比较,主要关注于异步学习(asynchronous learning),它的关键点是扩展到更大问题上。尽管value-based方法有许多优点(比如:seamless off-policy learning),他们被证明是在函数逼近(function approximation)上是不稳定的[41]。通常,对于这些方法来说,需要进行大量的超参数调参(hyperparameter tuning)才能达到稳定行为。尽管许多value-based方法(比如:Q-learning)取得了实际成功,这些算法的策略收敛(policy convergence)没有被充分研究。另外,对于函数逼近来说,Policy-based方法只要给定一个足够小的learning rate,仍然相当稳定。因此,我们选择一个policy-gradient-based方法(尤其是REINFORCE[48]),将这种on-policy方法适配到在当训练off-policy时提供可靠的policy gradient估计。

神经网络推荐系统:与我们的方法紧密相关的另一条线是,在推荐系统中应用深度神经网络[11,16,37],特别是使用RNN结合时序信息和历史事件用于推荐[6,17,20,45,49]。我们使用相似的网络结构,通过与推荐系统的交互来建模用户状态(user states)的演进。由于神经网络架构设计不是本文重点,有兴趣可以自己了解。

推荐系统中的Bandit问题:在线学习方法很流行,由于新的用户反馈是可提供的,可以快速被适配到推荐系统中。Bandit算法比如(UCB)[3],会以一种解析可跟踪的方式(它在regret上提供了很强的保证)来权衡exploration和exploitation。不同的算法,比如:Thomson sampling【9】,已经被成功应用于新闻推荐和展示广告。Contextual bandits提供了一种关于基础在线学习方法的context-aware refinement,并会将推荐系统朝着用户兴趣的方向裁减[27]。Agarwal【2】使得contextual bandits可跟踪,并且很容易实现。MF和bandits的混合方法被开发出来用于解决cold-start问题[28]。

推荐系统中的倾向得分(Propensity Scoring)和增强学习(Reinforcement learning):学习off-policy的问题在RL中是很普遍的,通常会影响policy gradient。由于一个policy会演进,因此在对应梯度期望下的分布需要重新计算。在机器人领域的标准方法[1,36],会通过限制policy更新的方式来绕过,以便在某一更新policy下新数据被收集之前,不能从实质上变更policy,作为回报,它会提供关于RL目标函数的单调提升保证。这样的近似(proximal)算法很不幸不能应用于item目录和用户行为快速变化的推荐情景中,因此大量的policy会发生变更。同时,对于大的状态空间和动作空间规模来说,收集日志反馈很慢。事实上,在推荐系统环境中,对于一个给定policy的离线评估已经是个挑战。多个off-policy estimators会利用逆倾向得分(inverse-propensity scores)、上限逆倾向得分(capped inverse-propensity scores)、以及许多变量控制的measures已经被开发出[13,42,43,47]。Off-policy评估会将一个相似的数据框架纠正为off-policy RL,相似的方法会被应用于两个问题上。逆倾向指数已经被大规模的用于提升一个serving policy【39】。Joachims[21]为一个无偏排序模型学习了一个日志反馈的模型;我们采用一个相似的方式,但使用一个DNN来建模日志行为策略(logged behavior policy),它对于off-policy learning来说是必需的。更常见的是,off-policy方法已经被适配到更复杂的问题上(比如:[44]为石板推荐)。

3.增强推荐

为便于理解,这里插入了张图(from 李宏毅课程)。

我们开始描述我们的推荐系统,及我们的RL-based算法。

对于每个用户,我们考虑一个关于用户历史交互行为的序列,它会记录下由推荐系统的动作(actions,比如:视频推荐)、用户反馈(比如:点击和观看时长)。给定这样一个序列,我们会预测下一个发生的动作(action:比如:视频推荐),以便提升用户满意度指标(比如:点击、观看时长)。

我们将该过程翻译成一个马尔可夫决策过程(Markov Decision Process: MDP),其中:

  • S:用于描述用户状态(user states)的一个连续状态空间(state space)
  • A:一个离散的动作空间(action space),它包含了推荐可提供的items
  • :是一个状态转移概率
  • :回报函数(reward function),其中是立即回报(immediate reward),它通过在用户状态(user state)s上执行动作a得到
  • :初始state分布
  • :对于future rewards的discount factor

我们的目标是:寻找一个policy (它会将一个在item上的分布转化成:基于用户状态的条件来推荐),以便最大化由推荐系统获得的期望累积回报(expected cumulative reward)

这里,在轨迹(trajectories) 上采用的期望,它通过根据policy: 来获得。

提供了不同族的方法来解决这样的RL问题:Q-learning[38], Policy Gradient[26,36,48]以及黑盒优化(black box potimization)[15]。这里我们主要关注policy-gradient-based方法,比如:REINFORCE[48]。

我们假设:policy的一个函数形式为,参数为。根据各policy参数的期望累积回报(expected cumulative reward)的梯度,可以通过”log-trick”的方式进行解析法求导,生成以下的REINFORCE梯度:

…(1)

在online RL中,在由正在考虑的policy生成的轨迹(trajectories)上计算得到的policy gradient,policy gradient的估计是无偏的,可以分解成:

…(2)

对于一个在时间t上的动作(action),通过使用一个discouted future reward 将替换得到的该近似结果,可以减小在梯度估计时的方差(variance)。

4.off-policy collrection

由于学习和基础设施的限制,我们的学习器(learner)没有与推荐系统的实时交互控制,这不同于经典的增强学习。换句话说,我们不能执行对policy的在线更新,以及立即根据更新后的policy来生成轨迹(trajectories)。作为替代,我们会接收的的关于actions的日志反馈由一个历史policy(或者一个policies组合)选中,这些policies在action space上会具有一个与正在更新的policy不同的分布。

我们主要关注解决:当在该环境中应用policy gradient方法时所带来的数据偏差。特别的,在生产环境中在部署一个新版本的policy前,我们会收集包含多个小时的一个周期性数据,并计算许多policy参数更新,这意味着我们用来估计policy gradient的轨迹集合是由一个不同的policy生成的。再者,我们会从其它推荐(它们采用弹性的不同policies)收集到的成批的反馈数据中学习。一个原本的policy gradient estimator不再是无偏的,因为在等式(2)中的梯度需要从更新后的policy 中抽取轨迹(trajectories),而我们收集的轨迹会从一个历史policies 的一个组合中抽取

我们会使用importance weighting[31,33,34]的方法来解决该分布不匹配问题(distribution)。考虑到一个轨迹 ,它根据一个行为策略抽样得到,那么off-policy-corrected gradient estimator为:

其中:

是importance weight。该correction会生成一个无偏估计器(unbiased estimator),其中:轨迹(trajectories)会使用根据抽样到的actions进行收集得到。然而,由于链式乘积(chained products),该estimator的方差是很大的,这会快速导致非常低或非常高的importance weights值

为了减少在时间t时该轨迹上的每个gradient项的方差,我们会首先忽略在该链式乘法中时间t后的项,并在将来时间采用一个一阶近似来对importance weights进行近似:

这会产生一个具有更低方差的关于policy gradient的有偏估计器(biased estimator):

…(3)

Achiam[1]证明了:该一阶近似对于学到的policy上的总回报的影响,会通过来限定幅值,其中是在间的总方差,是在下的discounted future state分布。该estimator会权衡精确的off-policy correction的方差,并仍能为一个non-corrected policy gradient收集大的偏差,这更适合on-policy learning。

4.1 对policy 进行参数化

这里有:

  • user state (): 我们对每个时间t上的user state建模,这可以同时捕获用户兴趣的演进,它使用n维向量来表示。
  • action (): 沿着该轨迹(trajectory)每个时间t上的action会使用一个m维向量进行嵌入。

我们会使用一个RNN [6, 49]来建模状态转移

我们使用了许多流行的RNN cells(比如:LSTM, GRU)进行实验,最终使用一个简单的cell,称为:Chaos Free RNN (CFN)[24],因为它的稳定性和计算高效性。该state会被递归更新:

…(4)

其中:

  • 是update gate
  • 是input gate

考虑到一个user state s, policy 接着使用一个简单的softmax进行建模:

…(5)

其中:

  • 是每个action a在action space A中的另一个embedding(注:前面的是m维,而是与相同维度)
  • T是时序(通常设置为1)。T值越大会在action space上产生一个更平滑的policy。

在softmax中的归一化项需要检查所有可能的动作,在我们的环境中有数百万量级。为了加速计算,我们会在训练中使用sampled softmax。在serving时,我们使用一个高效的最近邻查寻算法来检索top actions,并使用这些actions来近似softmax概率,如第5节所述。

总之,policy 的参数包含了:

  • 两个action embeddings
  • 在RNN cell中的权重矩阵:
  • biases:

图1展示了一个描述main policy 的神经网络架构。给定一个观察到的轨迹 它从一个行为策略(behavior policy)中抽样得到,该新策略(new policy)首先会生成一个关于user state 的模型,它使用一个initial state 并通过等式(4)的recurrent cell迭代得到。给定user state ,policy head会通过等式(5)的softmax来转化在action space分布。有了,我们接着使用等式(3)生成一个policy gradient来更新该policy。

图1 该图展示了policy 的参数变量(parametrisation)以及behavior policy

4.2 估计behavior policy

伴随等式(3)的off-policy corrected estimator出现的一个难题是:得到behavior policy 。理想状态下,对于一个选中action的日志反馈(logged feedback),我们希望也能记录(log)下选中该action的behavior policy概率。直接记录该behavior policy在我们的情况下是不可行的,因为:

  • (1) 在我们的系统中有许多agents,许多是不可控的
  • (2) 一些agents具有一个deterministic policy,将设置成0或1并不是使用这些日志反馈(logged feedback)的最有效方式

作为替代,我们采用[39]中首先引入的方法,并估计行为策略,在我们的情况中是在系统中一个多种agents的policies的混合(它们使用logged actions)。给定一个logged feedback集合 ,Strehlet[39]会以不依赖user state的方式,通过对整个语料的action频率进行聚合来估计。作为对比,我们会采用一个依赖上下文(context-dependent)的neural estimator。对于收集到的每个state-action pair(s, a),我们会估计概率,它指的是该behavior policies的混合体来选中该action的概率,使用另一个softmax来计算,参数为如图1所示,我们会复用该user state s(它由main policy的RNN model生成),接着使用另一个softmax layer来建模该mixed behavior policy。为了阻止该behavior head干扰到该main policy的该user state,我们会阻止该gradient反向传播回该RNN。我们也对将的estimators分开进行实验,由于会计算另一个state representation,这会增加计算开销,但在离线和在线实验中不会产生任何指标提升。

尽管在两个policy head 间存在大量参数共享,但两者间还是有两个明显的不同之处

  • (1) main policy 会使用一个weighted softmax、考虑上长期回报(long term reward)来进行有效训练;而behavior policy head 只会使用state-action pairs进行训练
  • (2) main policy head 只使用在该trajectory上具有非零回报(non-zero reward)的items进行训练(注3);而behavior policy 使用在该轨迹上的所有items进行训练,从而避免引入在估计时的bias

注3:1.具有零回报(zero-reward)的Actions不会对中的梯度更新有贡献;2.我们会在user state update中忽略它们,因为用户不可能会注意到它们,因此,我们假设user state不会被这些actions所影响 3.它会节约计算开销

在[39]中是有争议的:一个behavior policy(在给定state s,在time 上的它会确定式选中(deterministically choosing)一个action a;在time 上选中action b),可以看成是:在日志的时间间隔上,在action a和action b间的随机化(randomizing)。这里,在同一点上是有争议的,这也解释了:给定一个deterministic policy,为什么behavior policy可以是0或1。另外,由于我们有多个policies同时进行acting,在给定user state s的情况下,如果一个policy会确定式选中(determinstically choosing)action a,另一个policy会确定式选中action b,那么,以这样的方式估计可以近似成:在给定user state s下通过这些混合的behavior policies,action a被选中的期望频率(expected frequency)。

4.3 Top-K off-policy Correction

在我们的setting中存在的另一个挑战是:我们的系统会一次推荐一个包含k个items的页面。由于用户会浏览我们的推荐(整个集合或部分集合),会与多个item存在潜在交互,我们需要选择一个相关items集合,而非单个item。换句话说,我们会寻找一个policy ,这样每个action A会选择一个包含k items的集合,来最大化期望累积回报(expected cumulative reward):

轨迹(trajectory) 会通过根据进行acting来获得。不幸的是,动作空间(action space)在该集合推荐公式是指数式增长,我们从中选择的items数过大,阶数是百万级。

为了让该问题可跟踪,我们假设一个无重复(non-repetitive) items的集合的期望回报(expected reward)等于在集合中每个item的expected reward的和。更进一步,我们通过对每个item a根据softmax policy 进行独立抽样,接着进行去重来限制生成action A集合。也就是:

注意:集合会包含重复的items,可以移除重复项来形成一个无重复的集合A。

在这些假设下,我们可以对该集合推荐setting采用REINFORCE算法,将在等式(2)的梯度更新修改为:

其中:

  • :表示的是一个item a出现在最终的无重复集合A中的概率。这里,

我们接着更新等式(3)中的off-policy corrected gradient,通过使用替代,生成top-K off-policy correction factor:

…(6)

对比等式(6)和等式(3),top-K policy会增加一个额外的乘子到original off-policy correction factor的中:

…(7)

现在,我们回顾下该额外乘子:

  • 随着。对比起标准的off-policy correction,top-K off-policy correction会通过一个K因子来增加policy update;
  • 随着。该乘子会使policy update归0
  • 随着K的增加,以及会达到一个合理的范围, 该乘子会更快地将graident减小于0

总之,当期望的item在softmax policy 具有一个很小的量,比起标准的correction,top-K correction会更可能推高它的likelihood。一旦softmax policy 在期望的item上转化成一个合理的量(以确认它可能出现在top-K中),correction接着会将梯度归0, 不再尝试推高它的似然。作为回报,它允许其它感兴趣的items在softmax policy中占据一定的量。我们会在仿真和真实环境中进一步演示,而标准的off-policy correction会收敛到一个当选择单个item时最优的policy,top-K correction会产生更好的top-K推荐。

4.4 Variance Reduction技术

在本节开始,我们会采用一个一阶近似来减小在梯度估计时的方差(Variance)。尽管如此,梯度仍会有较大的方差,因为等式(3)中展示的具有很大的importance weight,这与top-K off-policy correction相类似。具有较大值的importance weight是因为由(1)中来自behavior policy的new policy 的导数具有较大值所产生,特别的,new policy会探索那些被behavior policy很少探索过的区域。也就是说,和(2)在估计中有大的方差

我们测试了在counterfactual learning和RL文献中提出的许多技术来控制在梯度估计时的方差。大多数这些技术会减小方差,但在梯度估计时会引入一些bias。

Weight Capping。

我们测试的第一种方法会简单的将weight设置上限

…(8)

c的值越小,会减小在梯度估计时的方差,但会引入更大的bias。

NIS(归一化重要性抽样:Normalized Importance Sampling)

我们使用的第二种技术是引入一个ratio来控制变量,其中我们使用经典的权重归一化,如下:

由于,归一化常数等于n,batch size在预期之中。随着n的增大,NIS的效果等价于调低learning rate。

TRPO(Trusted Region Policy Optimization). TRPO会阻止new policy 背离behavior policy,它通过增加一个正则项来惩罚这两个policies的KL散度。它会达到与weight capping相似的效果。

5.探索(EXPLORATION)

有一点很明确:训练数据的分布对于学习一个好的policy来说很重要。现有的推荐系统很少采用会询问actions的探索策略(exploration policies),这已经被广泛研究过。实际上,暴力探索(brute-force exploration),比如:,对于像Youtube这样的生产系统来说并不是可行的,这很可能产生不合适的推荐和一个较差的用户体验。例如,Schnabel【35】研究了探索(exploration)的代价。

作为替代,我们使用Boltzmann exploration[12]来获取探索数据(exploratory data)的收益,不会给用户体验带来负面影响。我们会考虑使用一个随机policy,其中推荐会从中抽样,而非采用最高概率的K个items。由于计算低效性(我们需要计算full softmax),这对于考虑我们的action space来说开销过于高昂。另外,我们会利用高效的ANN-based系统来查询在softmax中的top M个items。我们接着会feed这些M个items的logits到一个更小的softmax中来归一化该概率,接着从该分布中抽样。通过设置,我们仍可以检索大多数概率块,限制了生成坏的推荐的风险,并允许计算高效的抽样。实际上,我们会通过返回top 个最大概率的items,以及从剩余的个items中抽取个items,来进一步平衡exploration和exploitation

6.实验结果

我们展示了:在一个工业界规模的推荐系统中,在一系列仿真实验和真实实验中,这些用于解决数据偏差(data biases)的方法的效果。

6.1 仿真

我们设计了仿真实验来阐明:在更多受控环境下off-policy correction的思想。为了简化我们的仿真,我们假设:该问题是无状态的(stateless),换句话说,reward R与user states是相互独立的,action不会改变user states。作为结果,在一个trajectory上的每个action可以被独立选中。

6.1.1 off-policy correction

在第一个仿真中,我们假设存在10个items:每个action的reward等于它的index,也就是说:(可以理解成按reward大小排好序)。当我们选中单个item时,在该setting下最优的policy总是会选中第10个item(因为它的reward最大),也就是说:

我们使用一个无状态的softmax来对参数化:

如果observations是从behavior policy 中抽样得到的,那么等式(1)中不对数据偏差负责的naively使用policy gradient的方式,会收敛到以下的一个policy:

这具有一个明显的缺点(downside):behavior policy越选择一个次优(sub-optimal)的item,new policy越会朝着选择相同的item偏移

图2: 当behavior policy 倾向于喜欢最小reward的actions时,(比如:),所学到的policy ,(左):没有使用off-policy correction; (右): 使用off-policy correction

这里我附上了我的理解代码(本节的目的,主要是为说明:当存在behavior policy倾向喜欢选择较小reward actions时,不使用off-policy correction效果会差):

1
2
3
4
5
6
7
8
actions = [1,2,3,4,5,6,7,8,9,10]
b = lambda x: (11-x)/55.0
beta = [b(i) for i in actions]
rxb = [(i+1)*j for i, j in enumerate(beta)]
total = sum(rxb)
pi = [i/total for i in rxb]

图2比较了:当behavior policy 倾向于最少回报的items,分别使用/不使用 off-policy correction及SGD所学到的policies 。如图2(左)所示,没有对数据偏差负责naivly使用behavior policy的方式,会导致一个sub-optimal policy。在最坏的case下,如果behavior policy总是选择具有最低回报的action,我们将以一个任意差(poor)的policy结束,并模仿该behavior policy(例如:收敛到选择最少回报的item)。另外一方面,使用off-policy correction则允许我们收敛到最优policy ,无需关注数据是如何收集的,如图2(右)。

6.1.2 Top-K-policy correction

为了理解标准off-policy correction和top-K off-policy correction间的不同,我们设计了另一个仿真实验,它可以推荐多个items。我们假设有10个items,其中,具有更低reward的其余items为:这里,我们关注推荐两个items的问题,即K=2。 behavior policy 会符合一个均匀分布(uniform distribution),例如:以平等的机率选择每个item。

给定从中抽样到的一个observation ,标准的off-policy correction具有一个SGD,以如下形式进行更新:

其中,是learning rate。SGD会根据在下的expected reward的比例继续增加item 的似然(likelihood),直到,此时的梯度为0。换句话说,top-K off-policy correction以如下形式进行更新:

其中,是在第4.3节定义的乘子。当很小时,,SGD会更强烈地增加item 的似然。由于会达到一个足够大的值,会趋向于0. 作为结果,SGD不再强制增加该item的likelihood,即使当仍小于1时。作为回报(in return),这会允许第二好(second-best)的item在所学到的policy上占据一些位置。

图3 学到的policy . (左): 标准的off-policy correction; (右): 对于top-2推荐,使用top-k correction.

图3展示了使用标准(left) off-policy correction和top-k off policy correction)(右)学到的policies 。我们可以看到,使用标准的off-policy correction,尽管学到的policy会校准(calibrated),从某种意义上说,它仍会维持items关于expected reward的顺序,它会收敛到一个policy:它能在top-1 item上将整个mass转换(cast),也就是:。作为结果,学到的policy会与在次优item(本例中的)和其余items间的差异失去联系。换句话说,该top-K correction会收敛到一个在第二优item上具有较大mass的policy,而维持在items间optimality的次序。作为结果,我们可以推荐给用户两个高回报(high-reward) items,并在整体上聚合更多reward。

6.2 真实环境

具有仿真实验对于理解新方法有价值,任何推荐系统的目标最终都是提升真实用户体验。我们因此在真实系统中运行A/B test实验。

我们在Youtube中所使用的生产环境上的 RNN candidate genreation model上评估这了些方法,相似的描述见[6,11]。该模型是生产环境推荐系统的众多候选生成器(candidate generators)之一,它们会进行打分(scored)然后通过一个独立的ranking模型进行排序(ranked),之后再在Youtube主页或视频观看页的侧边栏上展示给用户视频。如上所述,该模型的训练会采用REINFORCE算法。该立即回报(immediate reward) r被设计来体现不同的用户活动(user activities);被推荐的视频如果没有点击会收到零回报(zero reward)。长期回报(long-term reward)r会在4-10小时的时间范围内进行聚合。在每个实验中,控制模型(control model)和测试模型(test model)会使用相同的reward function。实验会运行许多天,在这期间模型会每隔24小时使用新事件作为训练数据进行持续训练。我们可以查看推荐系统的多种在线指标,我们主要关注用户观看视频时长,被称为:ViewTime。

这里的实验描述了在生产系统中的多个顺序提升。不幸的是,在这样的setting中,最新(latest)的推荐系统会为下一次实验提供训练数据,结果是,一旦生产系统包含了一个新方法,后续的实验就不能与之前的系统相进行比较。因此,后续的每个实验都应该看成是为每个(compoenent)单独分析,我需要在每一部分声明:在从新方法接收数据起,之前的推荐系统是什么。

6.2.1 Exploration

我们开始理解探索数据(exploratory data)在提升模型质量上的价值。特别的,我们会measure是否服务(serving)一个随机策略(stochastic policy),在该policy下我们使用在第5节中描述的softmax模型进行抽样,可以比serving一个确定策略(deterministic policy)(这种模型总是推荐根据softmax使用最高概率的K个items)来产生成好的推荐。

我们开展了一系列实验来理解:serving一个随机策略(stochastic policy) vs. serving一个确定策略(deterministic policy)的影响,并保持训练过程不变。在该实验中,控制流量(control polulation)使用一个deterministic policy进行serving,测试流量(test traffic)的一小部分使用第5节描述的stochastic policy进行serving。两种policies都基于等式(2)相同softmax model进行训练。为了控制在serving时stochastic policy的随机量,我们使用等式(5)的不同时间(temperature) T来区分。T值越低,会将stochastic policy降为一个deterministic policy,而一个更高的T会产生一个random policy,它以相等的机会推荐任意item。T设置为1, 我们可以观察到,在实验期间ViewTime在统计上没有较大变化,这意味着从sampling引入的随机量不会直接伤害用户体验。

然而,该实验的setup不会说明,在训练期间提供探索数据的好处。从日志数据中学习的一个主要偏差之一是,该模型不会观察未被之前推荐policy所选中actions的反馈(feedback),对数据进行探索会缓和该问题。我们展开了以下实验,其中,我们将探索数据引入到训练中。为了这样做,我们将平台上的用户分成三个buckets:90%,5%,5%。前两个buckets使用一个deterministic policy并基于一个deterministic model进行serving,最后一个bucket的用户使用一个基于一个使用exploratory data训练的模型得到的stochastic policy进行serving。deterministic model只使用由前两个分桶的数据进行训练,而stochastic model则使用第一和第三个buckets的数据进行训练。这两个模型会接收相同量的训练数据,结果表明,由于存在exploration,stochastic model更可能观察到一些更罕见state、action pairs的结果。

根据该实验过程,我们观察到在test流量中,在ViewTime上一个很大的增长。尽管提升并不大,它由一个相当小量的探索数据(只有5%的用户体验了该stochastic policy)所带来。我们期待stochastic policy被全量后所能带来的更高增益。

6.2.2 Off-policy Correction

在使用一个stochastic policy之后,我们会在训练期间对合并进的(incorporating)off-policy correction进行测试。这里,我们遵循一个更传统的A/B testing setup【注6】,我们会训练两个模型,它们均会使用所有流量。控制模型(control model)会根据等式(2)进行训练,通过reward对样本进行加权。测试模型(test model)会遵循图1的结构,其中该模型会同时学习一个serving policy 以及behavior policy 。serving policy会使用等式(3)描述的off-policy correction进行训练,其中每个样本会同时使用reward以及importance weight 进行加权来解决数据偏差。

【注6】:实际中,我们使用一个相当小比例的用户做为test polulation;作为结果,我们记录的feedback则几乎通过control model获取

在实验期间,我们观察到,学到的policy(test)会开始偏离behavior policy(control)(它被用于获取流量)。图4画出了:根据在控制流量中视频的排序(rank),对应在control/experiment流量中nominator所选中的视频(videos)的CDF(累积分布函数)(rank 1是由控制模型最可能指定的视频,最右表示最小可能指定)。我们看到,test model并不会模仿收集数据所用的模型(如蓝色所示),test model(绿色所示)会更喜欢那些被control model更少曝光的视频。我们观察到:来自top ranks之外视频的nominations的比例,在experiment流量中以几倍的因子递增。这与我们在图2仿真中观察到的现象一致。当忽略在数据收集过程中的偏差时,会创建一个“rich get richer”现象,其中,在学到的policy所指定(nominated)的一个视频,会只因为它在behavior policy上很难指定,采用off-policy correction可以减小该效应。

图4: 根据在control population中视频的排序(rank),在control 和test population中nominated的视频的CDF。标准的off-policy correction会解决”rich get richer”现象

有意思的是,在真实环境中,我们不会观察到control和test 流量(polulation)间在ViewTime上有一个大的改变。然而,我们看到,在视频观看(vv)数上有0.53%的提升,这在统计上是很大的,表明用户确实获得了更大的enjoyment。

6.2.3 top-k off-policy

理解超参数

最后,我们直接比较了超参数的不同选择对top-k off-policy correction的影响,以及在用户体验上的不同。我们会在top-k off-policy correction成为生产模型之后执行这些测试。

actions数目

我们首先探索了在top-K off-policy correction中K的选择。我们训练了三个结构相同的模型,分别使用:。控制(生产)模型(control(production) model)是top-K off-policy model,它使用K=16. 我们在图5中绘制了在5天实验中的结果。如第4.3节所示,K=1时,top-K off-policy correction会变成标准的off-policy correction。当K=1时,会失去0.66%的ViewTime(对比baseline K=16)。这进一步证明,该收益是由top-K off-policy correction带来的。设置K=2时,效果比生产模型还差,但gap降到了0.35%。K=32时效果与baseline相当。K=8时,有+0.15%的提升。

Capping

这里,我们在所学推荐器的最终质量上考虑了variance reduction技术。如4.4节所述,weight capping可以在初始实验中带来最大的online收益。我们不会观察到从归一化importance sampling或TRPO中进一步的metric提升。我们使用一个回归测试来学习weight capping的影响。我们比较了一个模型,它使用等式(8)中cap ,以及进行训练。正如我们在importance weight上提出的限制,学到的policy 可以潜在overfit到一个更少记录的actions,它们可能接收高的reward。在真实实验中,我们观察到使用importance weight在ViewTime中有0.52的损失。

参考

openai在《Proximal Policy Optimization Algorithms》提出了PPO。我们来看下:

摘要

我们提出了一个在RL中关于policy gradient方法的一个新家族,它可以在以下两者间做交替:通过与enviroment进行交互的方式sampling data,以及使用SGA(随机梯度上升)来最优化一个目标函数。标准的policy gradient方法会在每个data sample上执行一个梯度更新(gradient update),我们提出了一个新的目标函数,它可以允许多个关于minibatch updates的epochs。新的方法,我们称之为proximal policy optimization(PPO),它具有一些TRPO的优点,但更易于实际,更通用,并且具有更好的抽样复杂度(经验上)。我们的实验在许多benchmark任务上测试了PPO,包括仿真机器人运动(simulated robotic locomotion)和Atari游戏,我们展示了PPO的效果要好于其它online policy gradient方法,整体会在样本复杂度、简洁性和Wall-time上达到一个较好的平衡。

1.介绍

2.背景: Policy Optimization

2.1 Policy Gradient方法

Policy Gradient方法通过计算一个关于policy gradient的estimator,并将它插入到一个SGA(随机梯度上升)算法上。最常用的gradient estimator具有以下形式:

…(1)

其中:

  • 是一个stochastic policy
  • 是一个在timestep t时advatage function的estimator
  • 期望表示在一个会在sampling和optimization间做交替的算法中,一个有限batch的样本上的经验平均(empirical average)。

那些使用自动微分软件(automatic differentiation software)的实现,通过构建一个目标函数:它的梯度是policy gradient estimator,estimator 通过对以下的目标函数进行微分得到:

…(2)

在该loss 上使用相同的trajectory执行多个step的optimization时,这样做并不是空穴来风,经验上它通常会导致具有破坏性的大梯度更新(见6.1节)

2.2 Trust Region方法

在TRPO中,目标函数(”surrogate” objective)会服从在policy update的size上的一个constraint的方式最大化。特别的:

服从:

…(4)

此处,是在更新之前policy参数的向量。在对目标函数做一个线性近似、并且对constraint做一个二次方近似后,该问题可以使用共轭梯度算法(conjugate gradient)有效地被近似求解。

TRPO的理论证明建议我们使用一个正则项(penalty)来替代constraint,比如,对一些系数求解以下没有constraint的最优化问题:

…(5)

这遵循以下事实:一个固定的surrogate objective(它会计算在states上的最大KL)会形成在policy 一个下界(例如:一个pessimistic bound)。TRPO会使用一个hard constraint,而非一个penalty,因为它很难选择单个值在多个不同问题(或者甚至在单个问题中,其中特征会随学习过程发生变化)上效果好。因而,为了达到我们关于一阶算法的目标(模仿TRPO的单调提升),实验展示了,它不足以简单选择一个固定的penalty系数,并使用SGD对等式(5)的penalized objective进行最优化;需要额外的修改。

3.对Surrogate Objective进行裁减(Clip)

假设表示概率比值,因而。TRPO会最大化一个”surrogate”目标函数:

…(6)

上标CPI指的是保守策略迭代(conservative policy iteration)[KL02],其中该objective是被提出的。没有constraint后,对最大化将会导致一个过大的policy update;因而,我们现在会考虑如何去修改该objective,来惩罚将远离1的那些policy的变更

我们提出的主要的objective如下:

…(7)

其中epsilon是一个超参数,比如。该objective的动机如下。min中的第一项是。第二项 ,通过将概率进行clipping来修改surrogate objective,它会移除这样的动机:将移出区间外。最终,我们采用clipped和unclipped objective的最小值,因此,最终的objective是在unclipped objective上的一个下界(例如:一个pessimistic bound)。有了这个scheme,当对该objective做出提升时,我们只能忽略在概率上的变更,如果包含它会使得objective更糟糕。注意:对应围绕(比如:r=1)的一阶,然而,当远移时他们变得不同。图1画出了在上的单个项(比如:单个t);注意,概率 r是在或者上做裁减取决于advantage是正或负。

图1: 画出了surrogate function 的某一项(比如:单个timestep),作为概率比值r的一个函数,对于正的advantages(左)和负的advantages(右)。每个polit上的红色部分展示了optimization的起点(比如:r=1)。注意:会对所有这些项进行求和

图2: surrogate objectives,因为我们会在初始policy参数间插入,updated policy参数,我们会在PPO的一次迭代后计算。updated policy具有与intial policy相差0.02的KL divergence,这一点上是最大的。。。

图2提供了另一个关于surrogate objective 的来源。它展示了一些objectives是如何随着我们沿policy update的方向(通过PPO在一个continuous control问题上)变化的。我们可以看到,是在上的一个下界,它带有一个penalty,会对过大的policy update进行惩罚

4.Adaptive KL Penalty系数

另一种方法可以被做为是clipped surrogate objective的一个替代选择,这种方法为:在KL divergence上使用一个penalty,并对该penalty系数自适应(adapt)以便在每次policy update时能完成达到KL divergence 的一些target value。在我们的实验中,我们发现,KL penalty比clipped surrogate objective的效果要差,然而,我们在这里仍会包含它,因为它是一个很重要的baseline

在该算法是最简单实现中,我们会在每次policy update时执行以下steps:

  • 1.使用一些minibatch SGD的epochs,来优化KL-penalized objective:
  • 计算
    • if
    • if

更新后的被用于下一次policy update。有了该scheme,我们会偶尔看到那些KL divergence与存在很大差异的policy updates,然而,这很少见,因为会很快进行调整。上述关于参数1.5和2的选择是启发式的,但算法对它们非常不敏感。的初始值是另一个超参数,但实际上不是很重要,因为该算法会很快对它进行调整。

5.算法

前一节的surrogate losses可以被计算,并使用一个关于典型的policy gradient实现上一个很小变更的版本进行微分。对于使用自动微分的实现,一个简单的构建loss 来替代,会在该objective上执行多个SGA steps。

大多数用于计算variance-reduced advantage-function的estimators会使用一个学到的state-value function;例如,generalized advantage estimation[Sch+15a],或者finite-horizon estimators[Mni+16]。如果要使用一个在policy function和value function间共享参数的神经网络架构,我们必须使用这样一个loss function:它可以结合policy surrogate和一个value function error项。该objective可以进一步通过添加一个entropy bonus进行扩展来确保足够的探索(exploration),正如[Wil92, Mni+16]所建议的。通过组合这些项,我们可以获取以下的objective,它可以近似最大化每个迭代:

….(9)

其中:

  • 是系数
  • S表示一个entropy bonus
  • 是一个squared-error loss:

在[Mni+16]中普及的一种policy gradient实现,很适合使用RNN,可以为T timesteps运行policy(其中:T要比episode length要小很多),并使用收集到的样本进行一个upate。该种实现需要一个advantage estimator(它不会看到超过timestep T后的)。[Mni+16]中所使用的该estimator为:

…(10)

其中:t指的是time index ,在一个长度为T的trajectory segment内。

我们可以使用一个truncated版本的generalized advantage estimation对该方式进行泛化,当时即可以化简为等式(10):

….(11)(12)

使用固定长度的trajectory segments的一个PPO算法,如下所示。每个迭代中,(并行的)N个actors中的每个都会收集T timesteps的数据。接着,我们会在这些NT timesteps的数据上构建surrogate loss,并在K个epochs上使用minibatch SGD(或者,Adam)来进行optimize。

算法1

6.实验

参考

deepmind在《Emergence of Locomotion Behaviours in Rich Environments》提出了PPO。我们来看下:

1.介绍

2.使用Distributed PPO进行大规模增强学习

我们在增强学习上关注的点是,在丰富的仿真环境上使用连续state和action spaces。我们的算法在多个任务变种上是健壮的,可以有效扩展到其它领域。我们将轮流介绍每个issues。

使用PPO的Robust policy gradients

深度学习算法基于大规模、高吞吐的optimization方法,在离散和低维action spaces中(比如:Atari games和三维导航(3D navigation))可以产生state-of-the-art的结果。作为对比,许多之前的工作都是基于连续动作空间的,关注一些可对比的小问题。大规模、分布式的optimization较少广泛使用,相应的算法也很少被开发。我们发布了一个robust policy gradient算法,很适合高维连续控制的问题,可以使用分布式计算扩展到许多更大的领域上。

Policy gradient算法为连续控制(continuous control)提供了一个吸引人的范式。他们通过根据stochastic policy 的参数直接最大化rewards的期望和:

该期望会对应于由policy 和系统动态性(dynamics) 两者所联合生成的trajectories的分布:

对应的目标函数的梯度是:

其中:

  • 是一个baseline(它不依赖于或者future states和actions)。该baseline通常会选择

实际上,期望的future return通常近似于使用一个sample rollout,通过一个学到的近似和参数来替代。

Policy gradient的estimates可以有很高的variance,算法对于超参数的设置很敏感。有许多方法可以使得policy gradient算法更健壮。一种有效的measure是:采用一个trust region constraint,可以限制policy update的任意更新量(amount)。采用该思想的一种流行算法是:TRPO(trust region policy optimization)。在每个迭代中,给定当前参数,TRPO会收集一个(相对较大)的batch数据,并优化surrogate loss:

它会服从一个constraint:policy被允许更改多少,以KL divergence的方式表示:

是advantage function,可以通过得到。

PPO算法可以被看成是一个依赖于一阶梯度的TRPO的近似版本,它可以更方便地使用RNNs,并可以用在一个大规模分布式setting中。trust region constraint通过一个正则项来实现。使用的正则项系数依赖于该是否先前违反了constraint。算法1展示了PPO算法的伪代码。

算法1 PPO

在算法1中,超参数是在每个iteration上policy的期望变更。如果在policy上的实际变更很低、或者大大超过target KL,归一化项可以控制着KL-正则参数的调整(例如:落在区间之外)。

分布式PPO(DPPO)进行可扩展增强学习

为了在丰富的、仿真环境上达到较好性能,我们实现了一个分布式版本的PPO算法(DPPO),数据的收集和梯度计算在workers间是分布式的。我们使用同步更新和异步更新进行实验,发现平均梯度和将以同步方式使用会导致更好的结果。

原始的PPO算法会使用完整的rewords求和来估计advantages。为了使用RNN及batch updates,同时支持可变长的episodes,我们会遵循与[2]相似的策略(strategy),并使用一个长度为K的空间的截断BPTT(truncated backpropagation through time)。这使得它很自然地(虽然不是必须)使用K-step returns来估计advantage,例如:我们会在相同的K-step windows对rewards求和,并在K-steps后对value function进行bootstrap:

John Schulman[20]的公开提供的PPO实现对于核心算法增加了一些修改。它们包含了对inputs、rewards、以及在loss中的一个额外项(它会惩罚对于较大违反trust region constraint的情况)的normalization。我们采用在分布式setting中相似的augmentations,但发现在跨多个workers间对多个统计进行sharing和synchronization需要一些注意。我们的分布式实现(DPPO)采用tensorflow,参数在一个parameter server中,workers会在每个gradient step后同步它们的参数。伪码和详情在附件中提供。

A.DPPO

A.1 算法详情

DPPO算法的伪码在算法2和算法3中提供。W是workers的数目;D会为workers的数目设置一个阀值,它们的gradients必须被提供来更新参数。M,B是在给定一个batch的datapoints,使用policy和baseline updates的sub-iterations的数目。T是在参数更新被计算之前每个worker收集的data points的数目。K是用于计算K-step returns和truncated BPTT的time steps的数目。

算法2:

算法3:

normalization

根据[20]我们会执行以下的normalization steps:

  • 1.我们会通过减mean并除以标准差,将observations(或者 states )进行归一化。。。
  • 2.我们会通过一个正在运行的关于标准差的estimate对reward进行缩放(scale),在整个实验过程中进行聚合
  • 3.我们会使用关于advantages的per-batch normalization

跨workers共享算法参数

在分布式setting中,我们发现,对于跨workers的data normalization来说共享相关统计很重要。Normalization在数据收集(collection)期间使用,统计会在每个environment step之后被本地更新。当一次迭代完成时,统计的本地变改(local changes)在数据收集(collection)后被应用到全局统计中。随时间变化(time-varying)的正则化参数也会跨workers共享,但更新会基于本地统计(它基于对每个worker在本地计算的平均KL)来决定,通过使用一个调整参数由每个worker单独使用。

额外的trust region constraint

当KL超过期望变更的一个特定margin时(),我们也会采用一个额外的罚项。在我们的分布式实现中,该criterion会在一个per-worker basis上进行测试和应用。

参考