解决的问题
多任务学习在推荐场景中已经得到了广泛的应用。然而多任务模型常常会受到负迁移的影响而性能变差。为解决这一问题,本文提出了Progressive Layered Extraction (PLE),它将共享组件和每个任务独有的组件分隔开,并引入了一种先进的路由机制来深层的语义抽取分离出来。
跷跷板现象
在多任务学习中负迁移是很常见的现象,这一现象在相关性不强的任务间尤为显著。对于有着复杂关联性的多任务学习,我们还观察到了跷跷板现象:在全部任务中超越单任务模型是非常困难的。我们将会通过腾讯的视频推荐系统来说明这一现象。
视频推荐的MTL排序系统
如上图所示,我们的视频推荐系统在排序阶段有多个目标。在接到线上请求后,排序模型为每一个任务预测一个分数,最终的分数由下面的公式的得到,最终得分top N的视频被推荐给用户。
s
c
o
r
e
=
p
V
T
R
w
V
T
R
×
p
V
C
R
w
V
C
R
×
p
S
H
R
w
S
H
R
×
.
.
.
×
p
C
M
R
w
C
M
R
×
f
(
v
i
d
e
o
_
l
e
n
)
score = p_{VTR}^{w_{VTR}} \times p_{VCR}^{w_{VCR}} \times p_{SHR}^{w_{SHR}} \times ... \times p_{CMR}^{w_{CMR}} \times f(video\_len)
score=pVTRwVTR×pVCRwVCR×pSHRwSHR×...×pCMRwCMR×f(video_len)
其中
w
w
w是各个分数的权重,
f
(
v
i
d
e
o
_
l
e
n
)
f(video\_len)
f(video_len)是一个非线性函数,例如sigmoid或对数函数,权重是通过线上实验确定的超参。
在几个目标中,VCR和VTR是两个重要的指标,VCR(完播率)是一个回归任务,用MSE loss来预测每次播放的进度。VTR(播放率)是一个二分类任务,利用交叉熵损失来预测有效播放,即播放时长超过某个阈值的一次播放行为。
跷跷板现象
为了更好地描述VCR和VTR间的跷跷板现象,我们用一系列模型进行了实验,包括hard parameter sharing,cross-stitch, sluice network和MMOE,此外我们还提出了两个新的结构如下图b和c所示:
下图展示了实验结果,位于右上角的模型的性能更好(VTR的AUC较高同时VCR的MSE较低)。
如前所述,VCR和VTR间的关系是复杂的。它们之间有一定程度的偏序关系,并且不同的样本会显露出不同的关联。因此共享相同静态权重的Cross-stitch和sluice网络不能学到样本间的相关性。MMOE能够在一定程度上学习到样本和任务间的差异,因此比其他的baseline模型表现更好。然而在MMOE模型中,expert被几个任务无差别地共享,因此MMOE无法习得任务间的复杂关系,有可能会给某些任务带来噪声甚至伤害其性能。并且MMOE忽略了不同expert间的交互,这可能会限制模型的性能。
本文提出的PLE模型的目的就是解决跷跷板和负迁移问题。PLE的关键思想如下:首先它显式区分了共享的和任务专用的expert,其次,多层expert和门控机制被引入来学习到更多抽象表示。最后,我们利用了一个新颖的路由机制来为expert间的交互建模,从而在复杂任务之间实现了更加有效的知识迁移。如上图所示,PLE的性能远远优于MMOE和其他baseline。
PLE
在本节我们首先提出了CGC模型,是一个能够显式将共享expert和任务专属expert分开的模型。然后我们将CGC推广到一般PLE,最后我们优化了损失函数。
Customized Gate Control (CGC)
如上图所示,CGC模型底部是一些expert模块,顶部是不同任务的网络。每个expert模块都有多个expert,每个expert模块中的expert个数是模型的超参。在CGC中,共享expert是为了学习任务间共享的模式,而每个任务独有的pattern留给任务独有的expert来学习。
在CGC中,共享expert和任务独有的expert通过一个门控网络来进行选择性融合。如上图所示,我们的门控网络就是一个单层的带有softmax激活函数的前馈网络,前馈网络的输入是expert的输出。
以下是原文中一段误人子弟的公式:
第
k
k
k个门控网络的输出可以写成
g
k
(
x
)
=
w
k
(
x
)
S
k
(
x
)
g^k(x) = w^k(x)S^k(x)
gk(x)=wk(x)Sk(x)其中
x
x
x是模型输入,
w
k
(
x
)
w^k(x)
wk(x)是第
k
k
k个任务的加权函数:
w
k
(
x
)
=
S
o
f
t
m
a
x
(
W
g
k
x
)
w^k(x) = Softmax(W^k_gx)
wk(x)=Softmax(Wgkx)其中
W
g
k
∈
R
(
m
k
+
m
s
)
×
d
W^k_g \in R^{(m_k+m_s)\times d}
Wgk∈R(mk+ms)×d,
m
s
m_s
ms和
m
k
m_k
mk分别是共享expert和任务
k
k
k独有的expert,
d
d
d是输入的维度。
S
k
(
x
)
S^k(x)
Sk(x)是一个由全部expert输出组成的矩阵。
S
k
(
x
)
=
[
E
(
k
,
1
)
T
,
E
(
k
,
2
)
T
,
.
.
.
,
E
(
k
,
m
k
)
T
,
E
(
s
,
1
)
T
,
E
(
s
,
2
)
T
,
.
.
.
,
E
(
s
,
m
s
)
T
]
T
S^k(x) = [E^T_{(k, 1)}, E^T_{(k, 2)}, ..., E^T_{(k, m_k)}, E^T_{(s, 1)}, E^T_{(s, 2)}, ..., E^T_{(s, m_s)}]^T
Sk(x)=[E(k,1)T,E(k,2)T,...,E(k,mk)T,E(s,1)T,E(s,2)T,...,E(s,ms)T]T
结合上图来看,这段公式的意思就是PLE的门控机制跟MMOE并没有什么区别只是每个Gate的输入多了一个或多个task-specific的expert输出。
PLE
CGC将task-specific和共享的组件清晰地分开了。然而在目前多任务学习中越来越“深”的语义表达需要更加清晰地进行区分。为解决这一问题,我们将CGC推广到PLE,如下图所示,PLE利用一个多层的网络来抽取更高层的share-bottom信息。
除每个任务单独的expert有单独的门之外,extraction网络也为共享expert引入了门控网络。因此PLE中不同任务的参数并不是在最底层的CGC中就完全分开,而是在上层逐渐分开。上层extraction网络中,门控网络的输入是下层门控网络输出融合的结果。任务
k
k
k的第
j
j
j个extraction网络:
g
k
,
j
(
x
)
=
w
k
,
j
(
g
k
,
j
−
1
(
x
)
)
S
k
,
j
(
x
)
g^{k,j}(x) = w^{k,j}(g^{k,j-1}(x))S^{k,j}(x)
gk,j(x)=wk,j(gk,j−1(x))Sk,j(x)
即上层单个任务的门控网络输入是下层当前任务的输出,
w
k
,
j
w^{k,j}
wk,j是门控网络的权重矩阵,
S
k
,
j
(
x
)
S^{k,j}(x)
Sk,j(x)是下层当前任务的expert和共享expert。而上层共享expert门控网络的输入与某个任务的门控网络有一些区别:上层共享expert门控的输入是下层所有expert。