19推荐系统19SNR:多任务学习
Posted 炫云云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19推荐系统19SNR:多任务学习相关的知识,希望对你有一定的参考价值。
1、前言
多任务联合学习不仅可以帮助互相联系的多任务之间学习更充分,还可以节省在线计算性能。
传统的Shared-Bottom网络结构在多个任务之间关联度较弱时对各个任务的学习效果会有一定的损伤,而之前的诸如软参数共享等模型方面的尝试又显得不够灵活或者性能消耗太大。
本文提出了一种SNR的算法框架,在保留经典Shared-Bottom网络结构性能优势的前提下实现了更灵活的参数共享。
- 提出了一种 SNR (Sub-Network Routing)的 MTL 模型结构,该模型对任务之间的相关性强弱不敏感,借助简单的 NAS(Neural Architecture Search),可以对 Sub-Network 进行组合,学习一个好的模型结构;
- 在大规模数据集 YouTube8M 进行试验,和典型的 MTL 模型对比(Shared-Bottom、MMoE、ML-MMoE),验证了模型的有效性;
- 探索了模型不同部分之间关系,探索在线上 serving 的时候性能和效果之间如何权衡;
2、模型结构
经典的Shared-Bottom网络结构存在一个明显的问题:当共同训练学习的多个任务之间联系不强的时候会严重损害各自任务的效果。因为相对于多个目标各自训练独立模型而言,Shared-Bottom的网络结构会在共享的网络底层引入了Bias。
针对这种多任务之间可能存在的冲突问题,一个直观的优化思路是针对多个不同的任务进行灵活的网络参数共享,我们希望使关联更多的任务共享更多的模型参数,关联较少的任务共享更少的模模型参数。譬如,Google在KDD 2018提出来的MMoE模型就是将共享的底层网络划分为多个expert子网络,然后对于不同的任务使用不同的gating网络灵活共享expert子网络的输出。这种模块化有利于多任务模型的可训练性。 但是,MMoE模型存在的一个问题是它只能够针对共享的experts子网络进行有限的组合。
在这种模块化的基础上,通过控制不同层次子网络之间的连接路由,可以实现多任务模型中不同程度的参数共享。我们称这个框架为子网络路由(SNR)。
与MMoE类似,**SNR模型将共享的底层网络模块化为子网络。不同的是,SNR模型使用编码变量(coding variables)来控制子网络之间的连接,**并且设计了两种类型的连接方式:SNR-Trans和SNR-Aver,如下图所示。同时,解决简单的NAS(Neural Architecture Search)来学习子网络的组合得到一个针对给定多任务场景的最优网络结构。
图
1
:
多
任
务
模
型
。
(
a
)
S
h
a
r
e
d
−
B
o
t
t
o
m
(
S
B
)
模
型
:
传
统
多
任
务
神
经
网
络
模
型
。
(
b
)
带
变
换
的
子
网
络
路
由
(
S
N
R
−
T
r
a
n
s
)
模
型
:
将
共
享
层
划
分
为
子
网
络
,
子
网
络
之
间
的
连
接
(
虚
线
)
为
变
换
矩
阵
乘
以
标
量
编
码
变
量
。
(
c
)
平
均
子
网
络
路
由
(
S
N
R
−
A
v
e
r
)
模
型
:
将
共
享
层
划
分
为
多
个
子
网
络
,
子
网
络
之
间
的
连
接
(
虚
线
)
为
加
权
平
均
,
以
标
量
编
码
变
量
为
权
值
。
图1:多任务模型。(a) Shared-Bottom (SB)模型:传统多任务神经网络模型。\\\\ (b)带变换的子网络路由(SNR-Trans)模型:将共享层划分为子网络,子网络\\\\ 之间的连接(虚线)为变换矩阵乘以标量编码变量。(c)平均子网络路由\\\\ (SNR-Aver)模型:将共享层划分为多个子网络,子网络之间的连接\\\\ (虚线)为加权平均,以标量编码变量为权值。
图1:多任务模型。(a)Shared−Bottom(SB)模型:传统多任务神经网络模型。(b)带变换的子网络路由(SNR−Trans)模型:将共享层划分为子网络,子网络之间的连接(虚线)为变换矩阵乘以标量编码变量。(c)平均子网络路由(SNR−Aver)模型:将共享层划分为多个子网络,子网络之间的连接(虚线)为加权平均,以标量编码变量为权值。
SNR-Trans
假设后续有两层子网,下层有3个子网,上层有2个子网。 u 1 , u 2 , u 3 u_{1}, u_{2}, u_{3} u1,u2,u3 代表共享子网络的输出, v 1 , v 2 v_{\\mathbf{1}}, \\boldsymbol{v}_{\\boldsymbol{2}} v1,v2 代表变换后的结果。那么SNR-Trans可以表示为如下的矩阵变换操作
[
v
1
v
2
]
=
[
z
11
W
11
z
12
W
12
z
13
W
13
z
21
W
21
z
22
W
22
z
23
W
23
]
[
u
1
u
2
u
3
]
\\left[\\begin{array}{l} \\boldsymbol{v}_{1} \\\\ \\boldsymbol{v}_{\\mathbf{2}} \\end{array}\\right]=\\left[\\begin{array}{lll} z_{11} \\boldsymbol{W}_{11} & z_{12} \\boldsymbol{W}_{12} & z_{13} \\boldsymbol{W}_{\\mathbf{1 3}} \\\\ z_{21} \\boldsymbol{W}_{\\mathbf{2 1}} & z_{22} \\boldsymbol{W}_{\\mathbf{2 2}} & z_{23} \\boldsymbol{W}_{\\mathbf{2 3}} \\end{array}\\right]\\left[\\begin{array}{l} u_{1} \\\\ \\boldsymbol{u}_{2} \\\\ \\boldsymbol{u}_{3} \\end{array}\\right]
[v1v2]=[z11W11z21W21z12W12z22W22z13W13z23W23]⎣⎡u1u2u3⎦⎤
其中
W
i
j
W_{i j}
Wij为从第
j
j
j下级子网络到第
i
i
i下级子网络的变换矩阵,
z
z
z为编码变量(控制连接的一组二进制变量)。
其中W是变换矩阵, W i j W_{i j} Wij 代表从下层第 i i i个子网络连接到上层第 j j j个子网络的变换;而 z z z则代表编码变量 ,0-1二进制变量来控制是否连接,举例来说
- 如果将 z z z全部设置为1,那么SNR-Trans退化为经典的Shared-Bottom模型;
- 如果将 z 11 = z 22 = 1 z_{11} = z_{22} = 1 z11=z22=1,而其他位置的元素设置为0,那么SNR-Trans即退化为两个单独的子模型。
SNR-Aver
同样的,SNR-Aver可以表示为如下的变换。
[
v
1
v
2
]
=
[
z
11
I
11
z
12
I
12
z
13
I
13
z
21
I
21
z
22
I
22
z
23
I
23
]
[
u
1
u
2
u
3
]
\\left[\\begin{array}{l} v_{1} \\\\ v_{2} \\end{array}\\right]=\\left[\\begin{array}{lll} z_{11} I_{11} & z_{12} I_{12} & z_{13} I_{13} \\\\ z_{21} I_{21} & z_{22} I_{22} & z_{23} I_{23} \\end{array}\\right]\\left[\\begin{array}{l} u_{1} \\\\ u_{2} \\\\ u_{3} \\end{array}\\right]
[v1v2]=[z11I11z21I21z12I12以上是关于19推荐系统19SNR:多任务学习的主要内容,如果未能解决你的问题,请参考以下文章
推荐系统(十四)多任务学习:阿里ESMM(完整空间多任务模型)
推荐系统(十四)多任务学习:阿里ESMM(完整空间多任务模型)