最近刚刚读了盖坤团队大佬的DIN,收获颇多,在此总结一下
论文名称:Deep Interest Network for Click-Through Rate Prediction
论文地址:Deep Interest Network for Click-Through Rate Prediction
DIN提出的背景和目的
2018年8月,盖坤大神提出了Deep Interest Network。阿里认为,目前很火热的Embeddng&MLP类模型中,为了更好的训练模型,阿里认为传统的embedding方式,即直接将稀疏特征嵌入到一个固定长度的向量来表征一个用户是不正确的,因为直接这样操作,会损害用户的重要行为特征,比如本次的候选物品是茶杯,那么之前买过的杯子的行为就会对此次候选物品的点击率产生较大影响,但是,如果使用过大的向量来表征用户的话,训练又很困难,所以阿里提出,不同的用户行为物品应该具有不同的weight
,将用户的行为信息也嵌入到表征用户dense vector
中,最终形成一个动态的向量(我个人的理解就是,原来是对于同一个用户以及相应的同一组用户历史行为其表征向量相同,但是阿里的模型说,要考虑用户历史行为对当前决策的影响,所以对于相同的用户,候选物品不同对应的dense vector
也不同)。同时,阿里在论文中提出了两个训练技巧,分别是mini-batch aware regularizer
和data adaptive function
,前一个用来解决计算l2正则化参数量过大的情况,后面那个主要是应用在局部即或单元中,论文中提到,PReLU这个激活函数选择了一个0矫正点,如果不同层的输入数据分布不一致,那么结果会受到影响,所以阿里提出了一个类似的激活函数Dice
,这个后面会介绍,总的来说,也就是阿里能提出而且有能力训练这么复杂的模型QAQ
DIN模型的基本原理和结构
首先,阿里对于之前用户兴趣类算法给出了一个基本的模型,也就说在DIN之前,所有和用户兴趣相关的CTR预估模型都可以归结为这个基本模型,如下图:
所以说,这里明显的缺陷,就是用户历史行为所体现的不同兴趣对于当前候选物品的决策影响体现不出来,对于同一个用户,嵌入之后的向量都一样嘛。如果想要表达更多用户的兴趣,就要用更大长度的embedding size
,这样又难以训练并且容易发生过拟合,基于此阿里提出DIN模型,总体结构如下图所示:
可以看到,除了embedding
部分,其余部分和base model
基本一致。这里,为了表示不同的用户历史兴趣对当前决策的影响,同时受NMT任务的启发,阿里提出了一个locally activation union
,将某个时刻用户行为的embedding
输入进去和候选ad一起计算,得到相应的attention score
,然后对所有的behaviors
作加权和,得到一个表示用户兴趣的向量,这个局部激活单元的计算公式如下:
但是这里我目前仍有疑惑,为什么使用外积呢?(我太菜了,还请dalao们指点)
Mini-batch Aware Regularization
这个是阿里提出在工业界训练的技巧,主要是针对于解决在大规模稀疏场景下,采用SGD对引入L2正则的loss进行更新时计算开销过大的问题。我们知道,使用l1或l2正则化,可以有效防止过拟合,但是在计算的时候,需要对全部参数都进行计算,这个计算量有些大。这部分读了一些文章,有些dalao指出,good_id
这个属性出现的频率,会影响最后的结果,也就是说有些good_id
出现的很频繁,会引入噪声,简单的方法就是直接去掉这些特征,但是这样会造成有用信息的损失,于是结合计算量大的问题,阿里提出了这个小批量自适应正则化,即(说实话,论文中没找到这段描述,还请各位dalao指点一下这个说法的出处QAQ):
1.针对feature id出现的频率,来自适应的调整他们正则化的强度;
2.对于出现频率高的,给与较小的正则化强度;
3.对于出现频率低的,给予较大的正则化强度。
具体的推导公式如下:
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)=||W||_2^2=\sum_{j=1}^K{||w_j||_2^2}=\sum_{(x,y)\in S}{\sum_{j=1}^K{\frac{I(x_j \neq 0)}{n_j}||w_j||_2^2}}
L2(W)=∣∣W∣∣22=j=1∑K∣∣wj∣∣22=(x,y)∈S∑j=1∑KnjI(xj=0)∣∣wj∣∣22
这个是基本的求
l
2
l_2
l2范式的公式,
n
j
n_j
nj是指j号特征在所有样本中出现的次数,
I
I
I是一个指示函数,加上batch之后,这个公式就变成下面这个样子:
这样计算分子的和也是比较麻烦的,我们只想要得到feature_id
的频率,所以就不对分子进行求和,这样可以加速计算过程,我们直接使用
α
m
j
=
m
a
x
(
x
,
y
)
∈
B
m
I
(
x
j
≠
0
)
\alpha_{mj}=\\max_{(x,y) \in B_m}I(x_j\neq0)
αmj=max(x,y)∈BmI(xj=0)来代替原式的分子,这个式子的意思是如果j特征至少出现一次,它就是1,否则就是0,最后
l
2
l_2
l2正则化的惩罚项就变成了下面那个样子:
对于SGD优化算法,我们只更新不为0的参数,即最后的参数的更新公式为:
Data Adaptive Activation Function
阿里改进了激活函数,我们知道为了解决梯度弥散问题,可以将激活函数由
s
i
g
m
o
i
d
sigmoid
sigmoid改为
R
e
L
U
ReLU
ReLU,但是
R
e
L
U
ReLU
ReLU会引入神经元永久性死亡问题,从而导致模型不收敛,为了解决这个问题,业界提出了Leaky ReLU激活函数,但是这个激活函数的超参数
α
\alpha
α需要人为确定,这样为了能让模型自动学习这个参数
α
\alpha
α,有dalao提出了PReLU激活函数,它长成下面这个样子:
其中
p
(
s
)
=
I
(
s
>
0
)
p(s)=I(s>0)
p(s)=I(s>0)是一个指示函数,但是阿里提出,这个激活函数采用了一个值为0的矫正点,当每层的输入分布变化的时候,这个激活函数可能会出现问题(我个人觉的好像是因为0这个点不可导,阿里希望这个函数梯度能平滑一些),所以基于这一点,阿里提出了一个新的激活函数Dice,这个东西可以看作PReLU的一般形式,即:
其中
p
(
s
)
p(s)
p(s)不再是指示函数,而是变成了一个分布函数,可以看到,
E
[
s
]
E[s]
E[s]和
V
a
r
[
s
]
Var[s]
Var[s]都是根据每一层的输入数据计算的,所以不同的输入数据,这个
p
(
s
)
p(s)
p(s)的分布函数就会发生变化,另外也可以使整个激活函数变得很平滑,注意这个
ϵ
\epsilon
ϵ一般取一个很小的常量,文中说经验上取
1
0
−
8
10^{-8}
10−8
实验结果
阿里使用亚马逊、MovieLens和阿里自身的数据集,同时以LR、BaseModel、Wide&Deep、PNN以及DeepFM作为baseline,对比DIN的效果。评价指标选择user-group AUC
,这个指标的相关知识有位大神总结的很清楚(传送门),读完之后,有种恍然大明白的感觉,其实就是为了解决线上线下排序策略不一致的问题,即线上一般都是在一个用户的session内进行排序,而线下评估的时候,传统的AUC是对全集的评估结果,论文中给出的基于用户分组的AUC的公式如下:
同时,为了将自身的模型和base model作更明显的对比,阿里用一个叫RelaImpr
的指标来衡量相对提升值:
对比各个模型在Amazon和MovieLens数据上的效果
可以看到,将激活函数PReLU改为Dice确实效果更好一些
对比不同正则化方法的效果
阿里使用不同的正则化方法来防止过拟合,同时对比了不同的方法的效果,最后确实是阿里的MBA效果更好一些,另外论文中提到了一个细节,就是尽管基于出现频率的正则化方式效果比Droupout要好,但是这种方法过滤掉了大量低频率的商品,这样会损失很多信息,从而使选择的物品更倾向于热门物品。
对比不同模型在阿里真实数据集上的效果
在线A/B测试的效果
阿里将模型上线,持续了一个月的时间,最终阿里发现CTR较以往提升了10%,并且提升了3.8%的RPM利润,阿里指出公司每天接收的用户请求数目巨大,但是还要保证模型计算的实时性,例如:为一个用户预测100个广告,需要的时间要少于10ms,这样其实需要很多优化技术,像数据并行处理,模型并行处理等等,以及要对GPU的显存进行优化,以及能使用多个cuda核并行进行矩阵运算。
DIN的可视化展示
首先为了验证local activation unit
的有效性,阿里将一位妈妈买一件羽绒服作为候选物品,同时将这位妈妈不同的行为的attention score
可视化展示出来:
可以看到,衣服类对于当前妈妈买羽绒服这个决策有着很大的影响。
同时,阿里随机挑选9个大类,每个大类100个物品作为候选集预测这个妈妈的行为(我个人感觉,候选物品是在变化的,但是妈妈过去的行为在实验过程中是固定的),通过s-SNE降维方法,把所有候选物品作sum-pooling
之后的稠密向量作聚类并绘制成为热点图,如下图所示:
可以看出,颜色越深,就代表妈妈对这类物品越感兴趣。形状相似的物品,种类也相似,可以看到,阿里的DIN同时还将不同的候选集进行了聚类处理。