DIN要解决的问题
DIN(Deep Interest Network)是阿里巴巴用于解决工业级CTR预估问题的预测模型,论文收录于KDD 2018。这篇论文的主要贡献有三点:提出了DIN模型;提出了mini-batch aware regularizer来减少计算量和规避过拟合;根据输入数据的分布设计了Dice激活函数。
对于cost-per-click(CPC)型的广告系统,广告通常是基于eCPM(effective cost per mille)排序的,eCPM是广告竞价与系统预估的CTR的乘积。对于电商平台也是一样,商品往往基于CVR进行排序,而CVR又是商品价格与CTR的乘积。因此不同于个性化推荐中仅用于排序的CTR模型,广告系统与电商平台的CTR模型需要有很高的精度。在DIN之前,CTR预估往往通过embedding+MLP的形式,将用户特征编码为同一个定长向量,再拼接广告或商品向量送入MLP进行预测。而实际情况则是面对不同的广告或商品候选集,用户的不同兴趣会对CTR的结果产生不同影响。此前的模型往往无法从大量历史行为中很好地挖掘出用户分散的兴趣,而DIN则是希望通过Attention机制对用户历史行为进行更有针对性的挖掘,并且实现工业可用的实战模型。
以电商平台为例,用户行为的一大特点就是兴趣广泛。但是为用户进行推荐时,应当针对不同的商品挖掘用户不同的兴趣点。举例来说,比如一个人现在希望购买泳镜,那么进行推荐时,该用户之前购买泳衣的行为就应当比该用户购买鞋子的行为,具有更大的影响权重。因此DIN希望针对不同的候选商品,将用户用更相关的向量进行表示。
DIN的网络结构
在CTR预估任务中,数据一般以多组离散数据的形式出现,比如:[weekday=Friday, gender=Female, visited_cate_ids={Bag, Book}, ad_cate_id=Book]。这种形式的数据一般会被转化为one-hot和multi-hot拼接而成的高维稀疏特征。之后这种高维特征将会被embedding为低维的稠密特征。
在论文中,embedding+MLP这种形式的CTR预估模型被视作base model。这类base model会通过池化将不定长的用户行为转化为定长向量,之后再将这些向量与其他定长向量进行拼接,最终得到可以输入MLP的向量。损失函数选用负对数似然函数:
L
=
−
1
N
∑
(
x
,
y
)
∈
S
(
y
log
p
(
x
)
+
(
1
−
y
)
log
(
1
−
p
(
x
)
)
)
L=-\frac{1}{N}\sum_{(x,y)\in S}(y\log{p(x)}+(1-y)\log{(1-p(x))})
L=−N1(x,y)∈S∑(ylogp(x)+(1−y)log(1−p(x)))
其中,
S
S
S是训练集,
N
N
N是训练集大小,
x
x
x是网络输入,
y
∈
{
0
,
1
}
y\in\{0,1\}
y∈{0,1}是标签,
p
(
x
)
p(x)
p(x)是经过softmax后的网络输出,也就是点击
x
x
x的概率。
虽然这种base model的特征处理方式可以把用户不定长的数据转为定长向量,但是这个向量是固定的,它仅仅取决于用户本身,完全不考虑匹配的广告和商品。这种固定的低维向量会成为用户兴趣描述的瓶颈,而扩充维度又会造成需要学习的参数过多以及过拟合的问题。为了优雅地解决这个低维向量描述用户兴趣的问题,DIN摒弃了对相同用户仅使用同一个向量并以此描述用户所有兴趣的做法,转为针对不同的广告计算用户对于这个广告相关的局部兴趣。
对于将要给用户曝光的广告,DIN会将它的向量与用户行为序列中每个商品的向量分别送入activation unit中,以求得每个商品对于这个特定的广告应该具有的权重,然后将权重与行为序列中的商品相乘,这样再通过池化层后,用户的行为序列部分的特征就是有加权的了。可以将整个过程理解为一个加权池化:
v
U
(
A
)
=
f
(
v
A
,
e
1
,
e
2
,
.
.
.
,
e
H
)
=
∑
j
=
1
H
a
(
e
j
,
v
A
)
e
j
=
∑
j
=
1
H
w
j
e
j
v_U(A)=f(v_A,e_1,e_2,...,e_H)=\sum_{j=1}^Ha(e_j,v_A)e_j=\sum_{j=1}^Hw_je_j
vU(A)=f(vA,e1,e2,...,eH)=j=1∑Ha(ej,vA)ej=j=1∑Hwjej
其中
{
e
1
,
e
2
,
.
.
.
,
e
H
}
\{e_1,e_2,...,e_H\}
{e1,e2,...,eH}是用户
U
U
U的行为序列向量,
v
A
v_A
vA是广告
A
A
A对应的向量值,
a
(
⋅
)
a(\cdot)
a(⋅)是一个前馈神经网络,用来计算行为序列中的商品
e
j
e_j
ej用于预测广告
v
A
v_A
vA的CTR时的贡献权重,也就是attention,接收的输入值是
e
j
e_j
ej与
v
A
v_A
vA的外积。这种计算方式保证了为用户
U
U
U曝光广告
v
A
v_A
vA时,广告的向量值
v
U
(
A
)
v_U(A)
vU(A)是不同于为其他用户曝光时的向量值的。
与传统attention不同的是,DIN不是用softmax对权重进行归一化,而是保留运算出的结果值直接作为权重,以此反应用户的兴趣强度。另外,DIN的作者尝试过使用LSTM对用户的行为序列进行序列化的处理,但是没有什么效果。因为如果作为时序数据处理的话,数据中包含了许多各不相同的兴趣,而这些兴趣在序列中的快速切换显得数据本身的噪声很大。作者认为这部分的序列化建模会是之后的研究方向之一。
Mini-batch Aware Regularization
为了避免过拟合,在模型训练时往往会引入正则项作为模型的惩罚系数。但是直接将 l 1 l_1 l1和 l 2 l_2 l2正则项应用在输入稀疏的模型上会导致大量的额外运算。以 l 2 l_2 l2为例,在每个mini-batch中,本来只有非零特征的参数才需要进行更新;引入 l 2 l_2 l2后,在每个mini-batch中,所有参数都被引入计算,这使得运算量变得难以承受。
在DIN的论文中,作者提出了一种更为高效的正则项,即mini-batch aware regularization。它仅计算每个mini-batch中出现过的特征的
l
2
l_2
l2正则。将全部向量词典中的参数记作
W
∈
R
D
×
K
W\in\mathbb R^{D\times K}
W∈RD×K,其中
D
D
D为向量的维度,
K
K
K为特征的维度。将
l
2
l_2
l2正则扩展到
W
W
W的样本中去:
L
2
(
W
)
=
∥
W
∥
2
2
=
∑
j
=
1
K
∥
w
j
∥
2
2
=
∑
x
,
y
∈
S
∑
j
=
1
K
I
(
x
j
≠
0
)
n
j
∥
w
j
∥
2
2
L_2(W)=\lVert W\rVert_2^2=\sum_{j=1}^K\lVert w_j\rVert_2^2=\sum_{x,y\in S}\sum_{j=1}^K\frac{I(x_j\neq0)}{n_j}\lVert w_j\rVert_2^2
L2(W)=∥W∥22=j=1∑K∥wj∥22=x,y∈S∑j=1∑KnjI(xj=0)∥wj∥22
其中
w
j
∈
R
D
w_j\in\mathbb R^D
wj∈RD是第
j
j
j个向量,
I
(
x
j
≠
0
)
I(x_j\neq0)
I(xj=0)表示
x
x
x是否具有特征
j
j
j,
n
j
n_j
nj为特征
j
j
j在所有样本中出现的次数。上式可以变形为mini-batch aware的方式:
L
2
(
W
)
=
∑
j
=
1
K
∑
m
=
1
B
∑
(
x
,
y
)
∈
B
m
I
(
x
j
≠
0
)
n
j
∥
w
j
∥
2
2
L_2(W)=\sum_{j=1}^K\sum_{m=1}^B\sum_{(x,y)\in\mathcal B_m}\frac{I(x_j\neq0)}{n_j}\lVert w_j\rVert_2^2
L2(W)=j=1∑Km=1∑B(x,y)∈Bm∑njI(xj=0)∥wj∥22
其中
B
B
B是mini-batch的数量,
B
m
\mathcal B_m
Bm表示第
m
m
m个mini-batch。用
a
m
j
=
m
a
x
(
x
,
y
)
∈
B
m
I
(
x
j
≠
0
)
a_{mj}=max_{(x,y)\in\mathcal B_m}I(x_j\neq0)
amj=max(x,y)∈BmI(xj=0)表示在第
m
m
m个mini-batch,即
B
m
\mathcal B_m
Bm中,是否存在至少一个样本包含特征
j
j
j。上式可以被近似为:
L
2
(
W
)
≈
∑
j
=
1
K
∑
m
=
1
B
a
m
j
n
j
∥
w
j
∥
2
2
L_2(W)\approx\sum_{j=1}^K\sum_{m=1}^B\frac{a_{mj}}{n_j}\lVert w_j\rVert_2^2
L2(W)≈j=1∑Km=1∑Bnjamj∥wj∥22
上式可以视作mini-batch aware版本的
l
2
l_2
l2正则。特征
j
j
j的向量权重梯度为:
w
j
←
w
j
−
η
[
1
∣
B
m
∣
∑
(
x
,
y
)
∈
B
m
∂
L
(
p
(
x
)
,
y
)
∂
w
j
+
λ
a
m
j
n
j
w
j
]
w_j\gets w_j - \eta \left[\frac{1}{\lvert\mathcal B_m\rvert}\sum_{(x,y)\in\mathcal B_m}\frac{\partial L(p(x),y)}{\partial w_j}+\lambda\frac{a_{mj}}{n_j}w_j\right]
wj←wj−η
∣Bm∣1(x,y)∈Bm∑∂wj∂L(p(x),y)+λnjamjwj
上式仅计算在第
m
m
m个mini-batch中出现过的特征的参数。
Dice: Data Adaptive Activation Function
PReLLU常被用作激活函数:
f
(
s
)
=
{
s
i
f
s
>
0
α
s
i
f
s
≤
0
=
p
(
s
)
⋅
s
+
(
1
−
p
(
s
)
)
⋅
α
s
f(s)=\left\{ \begin{aligned} &s & if \ s>0 \\ &\alpha s & if \ s\le0 \end{aligned} \right.=p(s)\cdot s+(1-p(s))\cdot\alpha s
f(s)={sαsif s>0if s≤0=p(s)⋅s+(1−p(s))⋅αs
其中
s
s
s是激活函数的输入值,
α
\alpha
α是学习参数,
p
(
s
)
p(s)
p(s)则是用来调节
f
(
s
)
f(s)
f(s)针对不同的
s
s
s的取值所返回不同结果的调节函数。DIN的论文提出了一种更为适应多种数据分布的调节函数,并将使用了这种调节函数的激活函数命名为Dice:
f
(
s
)
=
p
(
s
)
⋅
s
+
(
1
−
p
(
s
)
)
⋅
α
s
,
p
(
s
)
=
1
1
+
e
−
s
−
E
[
s
]
V
a
r
[
s
]
+
ϵ
f(s)=p(s)\cdot s+(1-p(s))\cdot\alpha s, p(s)=\frac{1}{1+e^{-\frac{s-E[s]}{\sqrt{Var[s]+\epsilon}}}}
f(s)=p(s)⋅s+(1−p(s))⋅αs,p(s)=1+e−Var[s]+ϵs−E[s]1
其中
E
[
s
]
E[s]
E[s]和
V
a
r
[
s
]
Var[s]
Var[s]在训练阶段分别为
s
s
s在该mini-batch中的均值与方差,在测试阶段则改为数据的滑动平均和期望。
ϵ
\epsilon
ϵ是一个极小的常数,在论文中使用的是
1
0
−
8
10^{-8}
10−8。Dice可以看作是根据不同数据分布进行相应调节的PReLU,当均值与方差都为
0
0
0时,Dice退化为PReLU。