推荐系统(十九)Gate网络(二):百度GemNN(Gating-Enhanced Multi-Task Neural Networks)
推荐系统系列博客:
- 推荐系统(一)推荐系统整体概览
- 推荐系统(二)GBDT+LR模型
- 推荐系统(三)Factorization Machines(FM)
- 推荐系统(四)Field-aware Factorization Machines(FFM)
- 推荐系统(五)wide&deep
- 推荐系统(六)Deep & Cross Network(DCN)
- 推荐系统(七)xDeepFM模型
- 推荐系统(八)FNN模型(FM+MLP=FNN)
- 推荐系统(九)PNN模型(Product-based Neural Networks)
- 推荐系统(十)DeepFM模型
- 推荐系统(十一)阿里深度兴趣网络(一):DIN模型(Deep Interest Network)
- 推荐系统(十二)阿里深度兴趣网络(二):DIEN模型(Deep Interest Evolution Network)
- 推荐系统(十三)阿里深度兴趣网络(三):DSIN模型(Deep Session Interest Network)
- 推荐系统(十四)多任务学习:阿里ESMM(完整空间多任务模型)
- 推荐系统(十五)多任务学习:谷歌MMoE(Multi-gate Mixture-of-Experts )
- 推荐系统(十六)多任务学习:腾讯PLE模型(Progressive Layered Extraction model)
- 推荐系统(十七)双塔模型:微软DSSM模型(Deep Structured Semantic Models)
- 推荐系统(十八)Gate网络(一):新浪微博GateNet
我司这篇文章老实讲,创新点是弱了点,这应该也是被SIGIR’21录用为短文的原因吧。个人认为这篇文章最让人感兴趣的反而不是这个模型结构,而是文章中笔墨不多的凤巢目前模型架构的一些trick,然而遗憾的是不知道是因为短文篇幅受限的原因还是不想过多描述的原因(大概率是这个原因),这部分没有被过多的介绍。
一、GemNN模型中Gate
关于GemNN中gate如图1所示,他这里有三个显著的特点:1. gate的位置在embedding层到MLP全连接层之间。2. 他没有对每个feature单独做gate,而是把所有的feature拼接(concatenation)后,再做gate。3. gate的方式是bit-wise的。
关于第2个特点,可以形式化的来表述下。假设用
E
=
[
e
1
,
e
2
,
.
.
.
,
e
n
]
T
E = [e_1, e_2,...,e_n]^T
E=[e1,e2,...,en]T来表示concatenated embeddings,
n
n
n表示特征的数量,
e
i
∈
R
d
e_i \in R^d
ei∈Rd表示每个field(比如『性别』作为一个feature,那么『男』就是为性别这个feature的一个field,同样『女』也是为一个filed)的embedding维度为
d
d
d维。然后对
E
E
E以bit-wise方式做gate,
G
=
[
g
1
,
g
2
,
.
.
.
,
g
n
]
T
=
a
c
t
(
W
∗
E
+
b
)
G=[g_1, g_2,...,g_n]^T=act(W*E +b)
G=[g1,g2,...,gn]T=act(W∗E+b),
a
c
t
(
⋅
)
act(\cdot)
act(⋅)为激活函数,
W
W
W的维度为
R
(
n
d
)
×
(
n
d
)
R^{(nd)\times(nd)}
R(nd)×(nd)。这个地方,
W
W
W的维度需要好好理解下,我再来上个公式帮助大家理解:
[
g
1
g
2
.
.
.
g
n
]
=
a
c
t
(
[
w
1
,
1
w
1
,
2
.
.
.
w
1
,
n
d
w
2
,
1
w
2
,
2
.
.
.
w
2
,
n
d
.
.
.
.
.
.
.
.
.
.
.
.
w
n
d
,
1
w
n
d
,
2
.
.
.
w
n
d
,
n
d
]
⋅
[
e
1
,
1
e
1
,
2
.
.
.
e
1
,
d
.
.
.
e
n
,
1
e
n
,
2
.
.
.
e
n
,
d
]
+
[
b
1
b
2
.
.
.
b
n
d
]
)
(1)
\begin{bmatrix} g_1\\ g_2\\ ... \\ g_n \\ \end{bmatrix} = act(\begin{bmatrix} w_{1,1}& w_{1,2}& ...&w_{1,nd} \\ w_{2,1}& w_{2,2}& ...&w_{2,nd} \\ ...& ...& ...& ...\\ w_{nd,1}& w_{nd,2}& ...&w_{nd,nd} \\ \end{bmatrix}\cdot \begin{bmatrix} e_{1,1}\\ e_{1,2}\\ ... \\ e_{1,d} \\ ...\\ e_{n,1}\\ e_{n,2}\\ ... \\ e_{n,d} \\ \end{bmatrix} + \begin{bmatrix} b_1\\ b_2\\ ... \\ b_{nd} \\ \end{bmatrix}) \tag{1}
⎣⎢⎢⎡g1g2...gn⎦⎥⎥⎤=act(⎣⎢⎢⎡w1,1w2,1...wnd,1w1,2w2,2...wnd,2............w1,ndw2,nd...wnd,nd⎦⎥⎥⎤⋅⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡e1,1e1,2...e1,d...en,1en,2...en,d⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤+⎣⎢⎢⎡b1b2...bnd⎦⎥⎥⎤)(1)
计算得到 G G G后,再与原来的embedding向量做哈达玛积(element-wise product),即 [ g 1 ⊗ e 1 , g 2 ⊗ e 2 , . . . , g n ⊗ e n ] [g_1\otimes e_1, g_2\otimes e_2,...,g_n\otimes e_n] [g1⊗e1,g2⊗e2,...,gn⊗en]
二、GemNN中一些经验
凤巢在自己的场景下实验得出一些经验,仅供参考:
- gate作用在embedding层与输入层之间效果比作用在隐藏层之间好。
- gate使用bit-wise效果好于vector-wise。
- gate网络的激活函数sigmoid无论在收敛性和auc增益上都要显著好于其它的激活函数。
据我所知,凤巢那边为了降低线上耗时,还做了网络参数量化压缩,大概压缩了50%的参数量,AUC持平。
三、其他
这篇论文最核心的我觉得下面这张图,但是非常遗憾的是这个地方在这篇论文中描述的比较少,我们能看到的就是链路上相同的特征embedding会被shared的,这里的shared不是训练时share,而是类似于预训练热启。结合图来说,就是user-ad ranking模型、ad-mt matching模型、user-ad-mt模型一些公共的特征会被共享。
参考文献