近年来,深度神经网络模型已成功应用于很多现实世界的大规模应用程序application
中,例如推荐系统。这些推荐系统通常需要同时优化多个目标。例如,当给用户推荐电影时,我们希望用户不仅“购买”和“观看”电影,还希望用户能够喜欢这些电影,从而吸引用户回头观看更多的电影。即,我们可以创建模型来同时预测用户的购买情况和他们的评分情况。
事实上,很多大规模推荐系统已经采用了基于深度神经网络模型的多任务学习。研究人员表示:多任务学习模型可以利用正则化和迁移学习来改善所有任务的模型预测。
但是在实践中,多任务学习模型并不总是在所有任务上都超越相应的单任务模型。实际上很多基于 DNN
的多任务学习模型对诸如数据分布差异和任务之间关系之类的因素很敏感。来自任务差异的固有冲突inherent conflict
实际上会损害至少一部分任务的预测,尤其是当模型参数在所有任务之间广泛共享时。因此,重要的是研究特定任务目标task-specific objective
和任务间关系 inter-task relationship
之间建模的权衡 tradeoff
。
早期的工作研究了多任务学习中的任务差异task difference
,方法是为每个任务假设特定的数据生成过程,并根据假设来度量measuring
任务差异,然后根据任务的差异来提出建议。然而,由于实际应用程序通常具有更复杂的数据模式,因此很难度量任务差异并利用这些工作中建议的方法。
最近的一些工作提出了新的建模技术来处理多任务中的任务差异,而不依赖于显式的任务差异度量。但是,这些技术通常涉及为每个任务添加更多的模型参数,从而适应任务差异。由于大规模推荐系统可能包含数百万或数十亿个参数,这些额外的参数可能是欠约束的under-constrained
(即无法得到充分学习),这可能会损害模型质量。另外,由于serving
资源有限,这些参数的额外计算成本在实际生产环境中通常也是不可实现的。
在论文 《Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts》
中,我们提出了一种新颖的、基于 Multi-gate Mixture-of-Expert: MMoE
结构的多任务学习方法,该方法受到Mixture-of-Expert: MoE
模型和最近的 MoE layer
的启发。
MMoE
显式地对任务关系task relationship
建模,并学习task-specific
函数以利用共享的 representation
。它允许自动分配参数来捕获共享的任务信息shared task information
或特定于任务的信息task-specific information
,而无需为每个任务添加许多新参数。
MMoE
的骨干基于最常用的共享底部Shared-Bottom
多任务DNN
架构。Shared-Bottom
模型架构如图 (a)
所示,其中输入层之后的几个底层 bottom layer
在所有任务之间共享,然后每个任务在bottom representation
的顶部都有一个独立的 tower
网络。
MMoE
模型不是所有任务共享一个底部网络bottom network
,而是有一组bottom network
,如图(c)
所示。每个bottom network
称作一个专家子模型 expert submodel
。论文中每个专家都是前馈神经网络。gating network
。门控网络馈入输入特征input feature
,并输出 softmax
的门控权重,并以这些权重来集成assembling
所有的专家。task-specific
的tower
网络中。通过这种方式,不同任务的门控网络可以学习专家集成的不同混合模式,从而捕获任务关系。以这种方式,我们允许不同的任务以不同的方式利用专家。
为了理解 MMoE
是如何为不同级别level
任务相关性来学习它的专家和任务门控网络task gating network
的,我们进行了一项人工合成实验synthetic experiment
。在该实验中,我们可以通过任务之间的皮尔逊相关系数Pearson correlation
来度量和控制任务相关性。我们使用两个人工合成回归任务,并使用正弦函数作为数据生成机制来引入非线性。
MMoE
优于 baseline
方法,尤其是当任务相关性较低的情况下。MMoE
更容易训练(即可训练性 trainability
),并且收敛到一个更低的 loss
。这与最近的发现有关,即调制modulation
和门控机制可以提高训练非凸深度神经网络的可训练性trainability
。我们进一步评估了 MMoE
在benchmark
数据集(UCI Census-income
数据集)上的性能,该数据集具有多任务的配置。我们比较了几种 state-of-the-art
的多任务模型,这些模型通过软参数共享soft parameter sharing
来建模任务关系,并观察到MMOE
方法的提升。
最后,我们在一个真实的大规模内容推荐系统上测试 MMoE
。在这个系统中,当向用户推荐 item
时,我们同时学习两个分类任务。我们用数千亿个训练样本来训练 MMoE
模型,并将其与Shared-Bottom
的生产模型production model
进行比较。我们观察到离线指标(如 AUC
)有显著提升。此外,我们的 MMoE
模型在在线实验中不断提升在线指标。
通过在benchmark
数据集和真实的大型推荐系统上进行的实验,我们证明了 MMoE
方法在几种 state-of-the-art
多任务学习模型上的成功。
除了上述效果上的优点之外,实际机器学习生产系统的另一个主要设计因素是计算效率,这也是Shared-Bottom
多任务模型被广泛使用的最重要原因之一。该模型的共享部分在serving
时节省了大量的计算。MMoE
模型在很大程度上保留了计算优势,因为门控网络通常都是轻量级的,而专家网络在所有任务中共享。此外,通过将门控网络设计为稀疏的 top-k
门,MMoE
模型有可能实现更好的计算效率。
论文贡献:
Multi-gate Mixture-of-Expert: MMOE
模型,该模型显式地对任务关系进行建模。通过调制 modulation
和门控 gating
网络,我们的模型在建模共享信息 shared information
和建模任务特定信息 task-specific information
之间自动地调整。task relatedness
如何影响多任务学习中的训练动态training dynamics
,以及 MMoE
如何提高模型表达能力和可训练性trainability
。benchmark
数据集、以及具有数亿用户和 item
的大型生产推荐系统进行了实验。我们的实验验证了我们提出的方法在现实环境中的效率efficiency
和效果effectiveness
。相关工作:
DNN
中的多任务学习:多任务模型可以学习不同任务的共性commonalities
和差异differences
。这样做可以提高每个任务的效率和模型质量。
《Multitask learning》
和 《Multitask learning: A knowledge-based source of inductive bias》
提出了一种广泛使用的多任务学习模型,它具有共享底部shared-bottom
模型结构,其中底部隐层在任务之间共享。这种结构大大降低了过拟合的风险,但是可能会因为任务差异导致优化冲突optimization conflicts
,因为所有任务都需要在共享底层上使用相同的parameters
。
为了了解任务相关性如何影响模型质量,早期的工作生成不同的任务相关性的人工合成数据,从而评估多任务模型的有效性。
最近的一些方法不是在任务之间共享隐层和相同的模型参数,而是对特定任务的参数task-specific parameters
添加了不同类型的约束。
例如,对于两个任务,《Low Resource Dependency Parsing: Cross-lingual Parameter Sharing in a Neural Network Parser》
在两组参数之间添加了 L2
约束。
《Cross-stitch networks for multi-task learning》
为每个任务学习 task-specific
隐层 embedding
的 unique combination
。
《Deep multi-task representation learning: A tensor factorisation approach》
使用张量分解模型为每个任务生成隐层参数。
与shared-bottom
模型相比,这些方法具有更多的 task-specific
参数,并且在任务差异导致共享参数更新的冲突时,可以获得更好的性能。但是,大量 task-specific
参数需要更多的训练数据来拟合,并且在大模型中可能效率不高。
子网集成 subnetwork ensemble
& 专家混合expert mixture
:在本文中,我们应用了深度学习中的一些最新发现,例如参数调制parameter modulation
和集成方法ensemble method
来为多任务学习的任务关系建模。在 DNN
中,集成模型ensemble model
和子网络集成 subnetwork ensemble
已被证明能够提高模型性能。
《Learning factored representations in a deep mixture of experts》
和 《Outrageously large neural networks: The sparsely-gated mixture-of-experts layer》
将 mixture-of-experts: MOE
模型转换为基础构建块(MoE layer
),并将它们堆叠在 DNN
中。MoE layer
在训练训练期间和推断期间,根据 layer input
来选择子网(即 expert
)。因此,该模型不仅在建模方面更强大,而且通过将稀疏性引入门控网络来降低计算成本。PathNet
是为通用人工智能处理不同任务而设计的,是一个巨大的神经网络,具有多层、以及每层内多个子模块。在为每个任务训练时,多条路径随机选择并由不同的 workers
并行训练。最佳路径的parameters
是固定的,并选择新的路径来训练新任务。我们从这些工作中获取灵感,通过使用子网(即 expert
)的集成来实现迁移学习,同时节省计算成本。
多任务 Application
:由于分布式机器学习系统的发展,许多大规模的现实世界 application
都采用了 DNN-based
多任务学习算法,并观察到了实质性的质量提升。
《Ask the gru: Multitask learning for deep text recommendations》
中,通过共享 feature representations
和 lower level hidden layers
可以改进文本推荐任务。《Deep neural networks for youtube recommendations》
中,shared-bottom
模型用于学习视频推荐的 ranking
算法。与这些早先的工作类似,我们在现实世界的大规模推荐系统上评估了我们的建模方法。我们证明了我们的方法具有可扩展性,并且与其它 state-of-the-art
建模方法相比具有良好的性能。
先前的工作表明:多任务学习模型的性能高度依赖于数据中固有的任务相关性。然而,实际应用中很难直接研究任务相关性如何影响多任务模型,因为在实际应用中我们无法轻易改变任务之间的相关性并观察其效果。为了对这种影响建立实证研究,我们首先使用人工合成数据,因为这样我们可以轻松地度量和控制任务相关性。
受到 Kang
等人的启发,我们生成了两个回归任务,并使用这两个任务 label
的Pearson correlation
作为任务相关性的定量指标。由于我们关注于 DNN
模型(而不是线性模型),所以我们将回归模型设置为正弦函数的组合。
具体而言,我们通过以下步骤来生成人工合成数据:
给定输入特征向量的维度 ,我们随机生成两个正交的单位向量 ,即:
给定一个缩放常量 、以及一个相关系数分 correlation score
,生成两个权重向量 ,使得:
随机采样一个输入样本 ,其中每个元素来自于标准正态分布 。
为两个回归任务生成两个标签 :
其中:
重复采样 和 ,直到生成足量的数据。
由于采用非线性数据生成过程,因此要生成具有给定皮尔逊相关系数 label
的任务并非易事。相反,我们控制权重向量的余弦相似度,即 ,然后度量结果label
的皮尔逊相关系数。
注意到在线性情况下:
的标签皮尔逊相关系数label Pearson correlation
刚好是 。
在非线性情况下:
此时 也是正相关的,如下图所示。下图给出了标签皮尔逊相关系数(纵轴)和权重余弦相似度weight cosine similarity
(横轴,即 值)之间的关系。对于每个 值,我们生成 10k
个带有两个标签的数据点,并计算这两个标签之间的皮尔逊相关系数。我们我们重复这个过程,并绘制均值,其中 error bar
表示 100
次实验中标准差的 2
倍。
在本文的剩余部分,为简单起见,我们将权重向量的余弦相似度 称作任务相关系数task correlation
。
为了验证在 baseline
多任务模型设置下,低任务相关性会损害模型质量,我们对人工合成数据进行了如下控制实验。
Shared-Bottom
多任务模型。下图给出了不同任务相关系数的 loss
曲线。正如预期所示:随着任务相关性的降低,模型的性能呈下降趋势。对于许多不同的超参数设置,这种趋势是普遍存在的。这一现象验证了我们的假设:即传统的多任务模型对任务关系很敏感。
1.0
表示两个任务具有完全相同的权重向量,但是具有各自独立的噪声。 横轴表示训练 step
的数量,纵轴表示 200
次独立运行的平均 loss
。注意:这两个回归任务是对称的,因此只需报告一个任务的结果即可。Shared-Bottom
网络是宽度为 16
的单层网络、每个 tower
是宽度为 8
的单层网络。模型使用 TensorFlow
实现,并且使用带默认配置的 Adam
优化器进行训练。共享底部多任务模型Shared-Bottom Multi-task Model
:如下图所示为Shared-Bottom
多任务模型,我们将它视为多任务建模的典型baseline
方法。
给定 个任务,该模型由以下部分组成:
shared-bottom network
,以函数 来表示。tower network
,以函数 来表示,每个任务对应一个tower network
。输入层input layer
之后是 shared-bottom network
,而之后是 tower network
。然后每个任务的 tower
产生对应任务的输出 。对于任务 ,其输出可以公式化为:
其中 为输入的样本特征。
这里还有一个核心问题是:多个
output
的目标函数如何融合?我们知道DNN
的优化过程只能优化单个目标函数,但是这里有两个output
,意味着有两个目标函数。如何融合多任务的目标函数也是一个难点,最简单的方法是各个目标函数直接相加。
MoE
:原始的 Mixture-of-Expert:MoE
模型可以形式化为:
其中:
expert
的输出,共有 个专家。门控网络基于输入得到 个专家的权重分布,最终的输出是所有专家输出的加权和。
MoE
是单任务的、多个expert
的集成方法。
MoE Layer
:MoE
最初是作为多个单体模型individual model
的集成方法ensemble method
而开发的,但是有些工作将其转变为基本构建块basic building block
,并将其堆叠在 DNN
中。
MoE Layer
具有和 MoE
模型相同的结构,但是采用前一层的输出作为后一层的输入。然后以端到端的方式训练整个模型。MoE Layer
的主要目标是实现条件计算,其中每个样本中只有网络的一部分是活跃的。对于每个输入样本,模型都可以通过以输入为条件的门控网络来选择全体专家的一个子集。MMoE
:我们提出了一种新的 MoE
模型,该模型旨在捕获任务差异,而不需要比Shared-Bottom
多任务模型多得多的模型参数。新模型被称作Multi-gate Mixture-of-Expert: MMoE
模型,其关键思想是用 MoE Layer
替代 shared-bottom network
。更重要的是,我们为每个任务 添加了一个单独的门控网络 。
具体而言,任务 的输出为:
其中:
embedding
。tower network
的输入。tower network
。我们MMoE
的实现由采用 ReLU
激活函数的多层感知机组成。门控网络只是对输入线性变换然后通过一个 softmax
层:
其中 是线性变换的参数, 是输入特征的维度。
每个门控网络 都可以学习在给定输入 的条件下 select
所有专家的一个子集。对于多任务学习场景下的灵活参数共享,这是理想的。
作为一种特殊情况,如果仅选择一个具有最高 gate score
的专家,那么每个门控网络实际上将输入空间线性地划分为 个区域,每个区域对应一个专家。MMoE
通过决定不同 gate
产生的间隔如何相互重叠,从而能够以一个复杂的方式来建模任务关系。如果任务的相关性较低,则共享专家将受到惩罚,这些任务的门控网络将学会使用不同的专家。
如果任务之间的相关性较低,则不同任务之间倾向于选择不同的专家;如果任务之间的相关性较高,则不同任务之间倾向于选择相同的专家。
和Shared-Bottom
模型相比,MMoE
只有几个额外的门控网络,而门控网络中的模型参数数量可以忽略不计。因此,在多任务学习中,整个模型仍然尽可能地享受知识迁移的好处。
为理解为每个任务引入单独的门控网络如何帮助模型学习task-specific
的信息,我们比较了所有任务共享一个门控的模型结构。我们称之为One-gate Mixture-of-Expert: OMoE
模型,如下图所示。这是 MoE Layer
对Shared-Bottom
多任务模型的直接适配。
OMoE
可以视为多个子模型的ensemble
,因此它的效果要强于shared-bottom
模型。
为了解MMoE
模型是否可以更好地处理任务相关性较低的情况,我们改变了人工合成数据的任务相关性,并观察了不同模型的行为如何变化。
我们还进行了可训练性trainability
分析,并表明和Shared-Bottom
模型相比,MMoE
模型更易于训练。
配置:
输入维度为 100
。
所有 MoE based
模型都有 8
个专家,每个专家都实现为一个隐层维度为 16
的单层网络。tower
网络实现为一个隐层维度为 8
的单层网络。
我们注意到,共享的专家和 tower
中所有参数的总量是 。
对于baseline
的Shared-Bottom
模型,我们仍然将 tower
网络实现为一个隐层维度为 8
的单层网络。我们设置单层的 shared-bottom network
,其隐层维度为 。
所有模型都使用 Adam
优化器训练,学习率在 [0.0001, 0.001, 0.01]
中进行网格搜索。
注意:由于两个回归任务是对称的,因此只需报告一个任务的loss
值即可。
对于每种模型配置,我们重复 200
次独立运行,每次使用随机生成的数据和随机的模型初始化。平均结果如下图所示。可以看到:
对于所有模型,具有较高相关性的数据,其性能要优于具有较低相关性的数据。其中性能以损失函数loss
来衡量。
在具有不同相关性的数据上,MMoE
模型的性能差距要远小于 OMoE
模型和Shared-Bottom
模型。当我们将 MMoE
模型和 OMoE
模型进行比较时,这种趋势尤为明显:
MMoE
模型和 OMoE
模型的性能几乎没有区别。OMoE
模型的性能就会明显降低,而 MMoE
模型的影响很小。因此,在低关联性的情况下,具有 task-specific gate
对任务差异建模至关重要。
就平均性能而言,两种 MoE
模型在所有情况下都优于Shared-Bottom
模型。这表明MoE
结构本身带来了额外的好处。根据这一观察,我们在后续展示了 MoE
模型比Shared-Bottom
模型具有更好的可训练性trainability
。
对于大型神经网络模型,我们非常关心它们的可训练性trainability
,即模型在一系列超参数设置和模型初始化的鲁棒性。
最近,Collins
等人发现,某些门控 RNN
模型(如 LSTM
和 GRU
),这些模型我们认为比普通 RNN
性能更好,更容易训练,而不是具有更好的模型容量。
虽然我们已经证明 MMoE
可以更好地处理任务相关性较低的情况,但是我们也希望更深入地了解它在可训练性方面的表现。利用我们的人工合成数据,我们可以自然地研究我们的模型对于数据和模型初始化中的随机性的鲁棒性。
我们在每种配置下重复实验多次。每次数据都是在相同的分布、但是不同的随机种子生成的,模型的初始化也不同。我们在下图中绘制了重复运行的最终 loss
值的直方图。在直方图中有三个有趣的观察结果:
首先,在所有配置中,Shared-Bottom
模型的性能差异要比 MoE-based
模型大得多。这意味着Shared-Bottom
模型通常比 MoE-based
模型具有更差质量的局部极小值。
其次,当任务相关度为 1
时,OMoE
模型的性能方差与 MMoE
模型的性能方差具有相似的鲁棒性。而当任务相关性降低到 0.5
时,OMoE
模型的鲁棒性有显著的下降。
注意到 MMoE
和 OMoE
唯一的区别在于是否采用多门结构。这验证了多门结构在解决由任务差异导致的冲突conflict
,从而带来的不良局部极小值方面的有效性。
最后,值得观察的是:所有三种模型的最低loss
是可比的。这并不奇怪,因为神经网络在理论上是通用的函数逼近器approximator
。只要有足够的模型容量,就应该存在一个 “正确的” Shared-Bottom
模型来很好地学习这两个任务。
但是请注意:这是 200
个独立实验的分布。而且我们怀疑,对于更大、更复杂的模型(例如,当 shared-bottom network
是RNN
时),获得任务关系的 “正确” 模型的机会可能更低。因此,显式建模任务关系仍然是可取的。
baseline
方法:除了 Shared-Bottom
多任务模型之外,我们还比较了几种 state-of-the-art
多任务深度神经网络模型。
L2-Constrained
:该方法是为一个拥有两个任务的跨语言问题cross-lingual problem
设计的。在该方法中,不同任务的参数由 L2
约束软性共享shared softly
。
假设任务 的 ground truth label
为 ,任务 的预估结果为 ,其中 为模型参数。该方法的目标函数为:
其中:
1
的ground truth label
, 为任务2
的ground truth label
。Cross-Stitch
:该方法通过引入一个 Cross-Stitch
单元,从而在两个任务之间共享知识。Cross-Stitch
单元从任务 1
和任务 2
中获取隔离separated
的隐层 作为输入,并通过以下等式分别输出 :
其中:
cross transfer
。1
和任务 2
中被发送到更高的层的 representation
。 表示第 层。Tensor-Factorization
:在该方法中,将多个任务的权重张量进行张量分解从而用于跨任务的参数共享。为进行比较,我们实现了Tucker
分解以学习多任务模型,据报道该模型可以提供最可靠的结果。
例如,给定输入隐层维度为 、输出隐层维度为 、任务数量 的情况下,权重 是一个 的张量,它由以下等式得到:
其中:
配置:
我们采用了一种超参数调优器hyper-parameter tuner
为所有模型搜索最佳超参数,调优算法是一个高斯过程模型Gaussian Process model
。
除了调优所有方法的学习率和训练step
的数量之外,我们还调优了一些model-specific
的超参数:
MMoE
:专家的数量、每个专家的隐层维度。L2-Constrained
:隐层维度、 系数。Cross-Stitch
:隐层维度、Cross-Stitch layer
的维度。Tensor-Factorization
:系数 、隐层维度。为使得公平地比较,我们通过为每层隐单元数量设置相同的上限来限制所有方法的最大模型大小,即 2048
。对于 MMoE
,它就是 “专家数量” 乘以 “每个专家的隐层维度” 。
我们的方法和所有 baseline
方法都是使用 Tensorflow
来实现的。
UCI census-income
数据集:从 1994
年人口普查数据库中抽取的,包含 299285
个美国成年人的人口信息,每个样本有 40
个特征。
通过将某些特征设置为预测目标,我们从该数据集中构造了两个多任务学习问题,并计算了 10000
个随机样本中任务标签的皮尔逊相关系数的绝对值:
1
:预测收入是否超过5
万美元;任务2
:预测他/她是否从未结婚。绝对皮尔逊相关系数为 0.1768
。1
:预测教育程度是否至少为大学;任务2
:预测他/她是否从未结婚。绝对皮尔逊相关系数为 0.2373
。数据集中有 199523
个训练样本和 99762
个测试样本。我们进一步按 1:1
的比例将测试样本随机划分为验证集和测试集。注意:我们从输入特征中删除教育和婚姻状况,因为这些特征被视为标签。
配置:
由于这两组任务都是二元分类问题,因此我们将 AUC
分数作为评估指标。在这两组中,我们都将婚姻状况任务作为辅助任务,而将第一组中的收入任务、第二组中的教育任务视为主要任务。我们关注主要任务的 AUC
。
对于超参数调优,我们使用验证集上主要任务的 AUC
作为目标。
对于每种方法,我们使用超参数调优器进行数千次实验,以找到最佳的超参数配置。
在找到最佳超参数之后,我们使用随机参数初始化在训练集上对每种方法进行 400
次训练,并在测试集上报告结果(主要任务的平均 AUC
)。
下表给出了两组任务的实验结果,可以看到:
由于这两组中的任务相关性(大致由label
的皮尔逊相关系数来衡量)都不是很强,因此Shared-Bottom
模型在多任务模型中几乎总是最差的(Tensor-Factorization
除外)。
L2-Constrained
和 Cross-Stitch
都为每个任务提供了单独的模型参数,并增加了如何学习这些参数的约束,因此它们的性能要比Shared-Bottom
模型更好。
但是,对模型参数学习的约束很大程度上依赖于任务关系的假设,这不如 MMoE
使用的参数调制机制parameter modulation mechanism
灵活。因此MMoE
在第二组任务中的所有方面都超越其他多任务模型。
Tensor-Factorization
方法在两组中效果都是最差的。这是因为它倾向于对所有任务的隐层权重进行低秩张量和低秩矩阵的泛化。该方法对于任务相关性可能非常敏感,因为当任务之间的相关性较低时,它倾向于过度泛化over-generalize
,并且需要更多的数据和更长的训练时间。
多任务模型未针对验证集上的婚姻状况辅助任务进行调优,而单任务模型则针对辅助任务进行了调优。因此,单任务模型在辅助任务上获得最佳性能是合理的。
我们在谷歌的大型内容推荐系统上进行实验,其中为数十亿用户推荐数十亿个item
。具体而言,给定用户当前消费item
的行为,推荐系统旨在向用户推荐接下来要消费的 item
列表。
我们的推荐系统采用一些现有内容推荐框架,包括一个候选生成器candidate generator
、以及一个深度排序模型。在我们的设置中,深度排序模型可以针对两种类型的排序目标进行优化:
engagement
相关的目标进行优化,如点击率CTR
、互动时长。satisfaction
相关的目标进行优化,如喜欢率 like rate
。我们的训练数据包括数以千亿记的用户隐式反馈,如点击click
和喜欢like
。如果单独训练,则每个任务的模型需要学习数十亿个参数。因此,和分别独立学习多个目标相比,Shared-Bottom
架构具有更小规模的优势。实际上,Shared-Bottom model
已经在生产环境中使用。
配置:
engagement
子任务、satisfaction
子任务。embedding
,并将所有稠密特征归一化为 [0.0,1.0]
之间。Shared-Bottom
模型,我们将 shared-bottom network
实现为一个前馈神经网络,它具有几个全连接层并使用 ReLU
激活函数。每个任务在shared-bottom network
之上构建全连接层作为 tower
网络。MMoE
,我们只需要将 shared-bottom network
的顶层修改为 MMoE layer
,并保持 MMoE layer
的输出维度不变。因此,我们不会在模型训练和 serving
中增加额外的计算成本。baseline
方法,例如 L2-Constrained
和 Cross-Stitch
。由于它们的模型架构,与Shared-Bottom
模型相比,它们的参数数量大约翻了一倍。Tensor-Factorization
进行比较,因为如果没有高效率的工程实现,Tucker
乘积的计算不能扩展到十亿级。batch size = 1024
的 mini-batch
随机梯度下降法进行优化。离线效果评估:对于离线评估,我们在固定的 300
亿条用户隐式反馈集合上训练模型,并在 100
万条数据的hold-out
数据集上进行评估。鉴于satisfaction
子任务的标签要比engagement
子任务的标签稀疏的多,离线结果噪音很大。因此我们只在下表中给出engagement
子任务的 AUC
得分和平方误差R-Squared
得分。
我们分别展示了训练 200
万步(千亿级样本、batch size = 1024
)、400
万步、600
万步之后的结果。可以看到:
在所有指标上,MMoE
均优于其它模型。
这里
OMoE
效果并没有超越Shared-Bottom
,这不符合预期(OMoE
是集成模型)。
L2Constrained
和 Cross-Stitch
比 Shared-Bottom
模型更差。这很可能是由于这两个模型是建立在两个独立的单任务模型上,并且有太多的模型参数使得难以很好地约束constrained
。
注:这里用户隐式反馈数据
300
亿条,但是训练样本有千亿级,是因为还有些负采样的样本。
为更好地理解门控gate
是如何工作的,我们在下图中显示了每个任务的 softmax gate
的分布。可以看到:
MMOE
学到了这两个任务之间的差异,并自动平衡balance
了共享参数和非共享参数。satisfaction
子任务的标签比engagement
子任务的标签更加稀疏,因此satisfaction
子任务的gate
更多地聚焦于单个专家上。在线效果评估:最后,我们在内容推荐系统上对我们的 MMoE
模型进行了在线实验。我们不进行 L2-Constrained
和 CrossStitch
方法的在线实验,因为这两种模型通过引入更多的参数使得 serving
时间加倍。
我们进行了两组实验:
第一组实验是比较Shared-Bottom
模型和单任务Single-Task
模型。Shared-Bottom
模型在engagement
子任务和satisfaction
子任务上都进行了训练。单任务模型仅在engagement
子任务上进行训练。
注意:尽管没有在satisfaction
子任务上进行训练,但是单任务模型在测试时用作排序模型,因此我们也可以计算它推荐结果的satisfaction
指标。
第二组实验是将我们的 MMoE
模型和第一个实验中的Shared-Bottom
模型进行比较。
这两组实验都是使用相同数量的在线流量完成的。下表给出了在线实验的结果,可以看到:
Shared-Bottom
模型,我们看到在线satisfaction
指标大幅提升了 19.72%
、在线engagement
指标略有下降(-0.22%
)。Shared-Bottom
模型相比,通过使用 MMoE
模型,我们同时提升了这两个指标。注意:在该推荐系统中,engagement
指标的原始值比satisfaction
指标的原始值大得多。并且在提高satisfaction
指标的同时,希望没有engagement
指标的下降、甚至是能够有engagement
指标的提升。