阿里提出了Partitioned Normalization、Star Topology FCN、Auxiliary Network应用到多场景建模,在各个场景上面取得不错的效果。
两个场景:
- 淘宝主页的banner,展示一个商品或者一个店铺或者一个品牌
- 猜你喜欢:双列的形式展示商品流
不同场景的user和item有重叠,但是user在不用的场景行为模式是不同的,简单将所有样本混合在一起训练一个共享的模型无法处理这样不同数据分布的多个场景。如果每个场景单独整一个模型,缺点显而易见:小场景的数据较少,模型很难学;场景多了后维护多个模型资源消耗和人力成本不可接受。
多任务学习针对的是数据分布相同,但是各个任务目标的label空间不同。基于此,现在的多任务学习都是基于底层的共享,但是保持任务输出层的独立性。直接应用多任务学习到多场景学习上面无法充分利用场景之间的关系,而且忽略了多个场景的数据分布差异。
总体结构如下
为了加速训练及训练的稳定性,通常是对embedding进行batch内归一化normalization,
γ
\gamma
γ和
β
\beta
β是可学习的缩放和偏差参数,
μ
\mu
μ和
σ
2
\sigma^2
σ2是batch内的均值和方差,测试阶段,使用移动平均统计的均值
E
E
E和方差
V
a
r
Var
Var来替换。BN假设所有样本服从独立同分布,但是多场景中,这个假设就不成立了,各个场景内的样本服从本场景的独立同分布。
z
‘
=
γ
z
?
E
V
a
r
+
?
+
β
\mathbf z‘ = \gamma \frac{\mathbf z - E}{\sqrt{Var + \epsilon}} + \beta
z‘=γVar+??z?E?+β
提出partitioned normalization (PN) 来解决,训练时每个batch来自第 p p p个场景, γ \gamma γ和 β \beta β是全局的缩放和偏差参数, γ p \gamma_p γp?和 β p \beta_p βp?是场景相关的缩放和偏差参数,在测试阶段,也使用各场景移动平均的均值 E p E_p Ep?和方差 V a r p Var_p Varp?来替换。
z ‘ = ( γ ? γ p ) z ? E p V a r p + ? + β p + β \mathbf z‘ = (\gamma * \gamma_p) \frac{\mathbf z - E_p}{\sqrt{Var_p + \epsilon}} + \beta_p + \beta z‘=(γ?γp?)Varp?+??z?Ep??+βp?+β
从消融分析上看,STAR FCN叠加LN比BN好,PN比LN好
有一个共享的FCN,每个场景有一个单独的FCN网络,使用
W
∈
R
c
×
d
W\in R^{c \times d}
W∈Rc×d和
W
p
∈
R
c
×
d
W_p \in R^{c \times d}
Wp?∈Rc×d以及
b
∈
R
d
b \in R^d
b∈Rd和
b
p
i
n
R
d
b_p in R^d
bp?inRd分别表示共享FCN和场景
p
p
p的FCN网络的权重和偏差,第
p
p
p个场景最终的FCN权重
W
?
W^*
W?表示为
W
?
=
W
?
W
p
;
b
?
=
b
p
+
b
W^* = W \otimes W_p; b^* = b_p + b
W?=W?Wp?;b?=bp?+b
场景
p
p
p的FCN网络输出
o
u
t
p
∈
R
d
out_p \in R^d
outp?∈Rd计算如下
o
u
t
p
=
φ
(
(
W
?
)
T
i
n
p
+
b
p
?
)
out_p = \varphi ( (W^*)^Tin_p + b_p^* )
outp?=φ((W?)Tinp?+bp??)
这里增加的FCN网络的参数相对于整体参数基本忽略不计。
结构示意图
从消融分析看,基础模型加PN结果好于基础模型加BN,STAR FCN加BN好于基础模型加BN,STAR FCN加PN好于STAR FCN加BN。
辅助网络是为了学习场景之间的差异的,一般所有特征都是同等的丢到模型中去学习,但是经过复杂的模型之后,还是很难学到场景之间的差异。直接将场景标识ID的embedding和其他特征embedding拼接起来作为辅助网络的输入,经过一个简单的2层FCN,输出一维的logit结果
s
a
s_a
sa?,然后加到指定场景的logit上面
s
p
s_p
sp?得到最后的logit,经过激活函数得到预估结果。
y
^
p
=
s
i
g
m
o
i
d
(
s
p
+
s
a
)
\hat{y}_p = sigmoid(s_p + s_a)
y^?p?=sigmoid(sp?+sa?)
从消融分析上看,加辅助网络比不加更好,说明辅助网络的确学到了场景之间的差异。
m i n ∑ p = 1 M ∑ i = 1 N p ? y i p log ? y ^ i p ? ( 1 ? y i p ) log ? ( 1 ? y ^ i p ) min \sum_{p=1}^M \sum_{i=1}^{N_p} -y_i^p \log \hat{y}_i^p - (1-y_i^p) \log (1-\hat{y}_i^p) minp=1∑M?i=1∑Np???yip?logy^?ip??(1?yip?)log(1?y^?ip?)
GAUC 即每个用户的加权AUC
A
U
C
=
∑
i
n
#
i
m
p
r
e
s
s
i
o
n
i
×
A
U
C
i
∑
i
n
#
i
m
p
r
e
s
s
i
o
n
i
\rm AUC = \frac{\sum_i^n \rm \#impression_i \times AUC_i}{\sum_i^n\#impression_i}
AUC=∑in?#impressioni?∑in?#impressioni?×AUCi??
OverAll AUC
混合所有样本在一起计算的AUC
测试用到了19个场景
各场景表现