论文《Deep Interest Network for Click-Through Rate Prediction》阅读
论文概况
这篇论文是阿里出品,关于推荐系统中点击率预测的一篇论文,发表在KDD 2018。提出了模型 DIN,主要的创新点就是论文题目中的 interest 一词,本文提出了一种基于 目标 item (对于CTR预测领域就是ad)的一种注意力神经网络模型。另外,还提出了 MBA正则化 (mini-batch aware regularizaiton)方法 和 PReLU/Dice 激活函数。
Introduction
作者在这里解释了DIN的初衷,针对特定的一件商品的推荐,如果特征中包含用户的历史行为,那么不能一概而论地对所有商品进行均等地计算,而以往的Embedding&MLP类型方法中,对历史商品没有进行侧重,这是不合理的。
在DIN中,作者针对目标item对历史行为进行了attentive learning。举例来说,如果一个人买了一件游泳镜,那这一定是因为这个人之前买过泳装,泳帽之类的东西,跟这个人买的羊毛衫、电脑之类的其它东西不太相关。基于此,提出了 DIN 模型。
Deep Interest Network
先上图:
图分为两部分,左边为 baseline —— 主流方法; 右边为DIN 模型方法。
Feature Representation
这里就是上文提到的稀疏矩阵,分为四类,包括用户特征,用户历史行为,目标ad特征,以及上下文特征。
作者这里将特征分为了四类,用户特征,用户历史行为,目标ad特征,以及上下文特征。这里不明白如何处理数据的,可以参考Factorization Machines一文,这里是典型的因子分解机模型的处理方法,这里贴个图。
简单讲下,就是每一行就是一个 interaction,包含了user、item的信息,用户的历史信息(用户的观影历史),以及context上下文信息,target是电影打分结果。
Base Model (Embedding&MLP)
就是先embedding层将稀疏特征降维,成为dense特征。
再输入 MLP ,完成多层非线性变换,经过softmax, 输出概率。
这类 base 模型的缺点是embedding大小固定,不能表示更多的信息。
The structure of Deep Interest Network
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 (3) \mathbf{v}_U(A) = f(\mathbf{v}_A, \mathbf{e}_1 , \mathbf{e}_2, \cdots, \mathbf{e}_H ) \\ = \sum\limits_{j=1}^{H}{a(\mathbf{e}_j, \mathbf{v}_A) \mathbf{e}_j } \\ = \sum\limits_{j=1}^{H}{ \mathbf{w}_j \mathbf{e}_j } \tag{3} vU(A)=f(vA,e1,e2,⋯,eH)=j=1∑Ha(ej,vA)ej=j=1∑Hwjej(3)
这里的H 和图例中的 N 是一个东西,属于文中的一点小纰漏。
结合模型架构图(图2)来看,首先这个公式表示的是user的embedding,给定目标广告 A ,与base model不同的是,最终的user behavior的表示是所有的历史浏览向量的加权之和。权重为 a ( e j , v A ) a(\mathbf{e}_j, \mathbf{v}_A) a(ej,vA) ,这个a就是图2追踪的activation unit的内容,如下所示:
计算方法是通过N个user behavior history中的任意一个,分别于target ad 向量做外积(即两向量的法向量),再连同两个向量本身进行concatenation,再传入两层MLP(第一层为PReLU/Dice层,后续介绍,也是本文的一个创新点)中,得到N个实数权重。
N个实数权重分别与N个user behavior vector进行加权相乘,传入后面的MLP中。
Training Techniques
Mini-batch Aware Regularization
作者这里提出了小批量感知的正则化,简称MBA regularization。作者指出,如果在批处理过程中,输入的向量是稀疏的,每次更新也只更新少量几个模型参数(为0的都不会更新,参考梯度下降算法),因此如果正则化加入了整个模型的L2正则化,反而会降低模型性能。
因此,作者只将小批量输入中向量的非 0 位置对应的模型参数 对应的 embedding 矩阵位置那一列的参数进行更新。具体的计算如下:
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
(4)
L_2(W) = ||W||_2^2 = \sum_{j=1}^K||w_j||_2^2 \\ = \sum\limits_{(x, y)\in S}{ \sum\limits_{j=1}^{K}{\frac{I(x_j\neq0)}{n_j}||w_j||_2^2} } \tag{4}
L2(W)=∣∣W∣∣22=j=1∑K∣∣wj∣∣22=(x,y)∈S∑j=1∑KnjI(xj=0)∣∣wj∣∣22(4)
其中,
w
j
∈
R
D
w_j\in \mathbb{R}^D
wj∈RD 是 embedding 矩阵的第 j 列,K是所有的feature长度。这里是将架构图中分散开进行的embedding过程合在一起说的,这样更容易表达。
上式是传统的全部参数都进行更新的L2正则化,代表将所有K列的embedding向量进行2范式平方计算。更进一步地,就是将训练集中所有的instance加入运算,具体的, n j n_j nj 是第 j j j 个 feature 在 训练集中出现的次数,公式(4)中第二行代表在中间加入一个出现次数的权重,然后再外面加和,这个想法和归一化类似。
L 2 ( W ) = ∑ j = 1 K ∑ m = 1 B ∑ ( x , y ) ∈ B m I ( x j ≠ 0 ) n j ∣ ∣ w j ∣ ∣ 2 2 (5) L_2(W) = { \sum\limits_{j=1}^{K} \sum_{m=1}^{B} \sum\limits_{(x, y)\in B_m} {\frac{I(x_j\neq0)}{n_j}||w_j||_2^2} } \tag{5} L2(W)=j=1∑Km=1∑B(x,y)∈Bm∑njI(xj=0)∣∣wj∣∣22(5)
有了上面的想法,很自然地,就可以将批处理中同一个 Batch 中出现的特征进行二范式加入进去,这样就会缩小更新的参数范围,如公式(5)所示。公式(5)就是将公式(4)中的同时处理,分散到每个batch中。式(4)中 , B B B 代表 batch个数, B m {B}_m Bm 代表第 m 个batch。
更进一步地,
L 2 ( W ) ≈ ∑ j = 1 K ∑ m = 1 B α m j n j ∣ ∣ w j ∣ ∣ 2 2 (6) L_2(W) \approx { \sum\limits_{j=1}^{K} \sum_{m=1}^{B} {\frac{\alpha_{mj}}{n_j}||w_j||_2^2} } \tag{6} L2(W)≈j=1∑Km=1∑Bnjαmj∣∣wj∣∣22(6)
其中, α m j = max ( 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) 代表第 m 个batch 中 第 j 个特征 是否出现。 因为 I ( x j ≠ 0 ) {I(x_j\neq0)} I(xj=0)只有 0 和 1, 所以加上 max ( ⋅ ) \max(\cdot) max(⋅) 同样还是 0 或者 1。
公式(6)中使用的是约等号,因为 ∑ ( x , y ) ∈ B m I ( x j ≠ 0 ) \sum\limits_{(x, y)\in B_m}{{I(x_j\neq0)}} (x,y)∈Bm∑I(xj=0) 最大也就是 B m B_m Bm ,属于 O ( N ) O(N) O(N) ,常数次大小,所以使用 是否出现来代替,这里使用 α m j \alpha_{mj} αmj 替换计算的原因我估计是为了计算简便,不需要考虑批数据中每个instance。
由上式,可以得出 w j w_j wj 的更新公式,如下所示:
w j ← w j − η [ 1 ∣ B m ∣ ∑ ( x , y ) ∈ B m ∂ L ( p ( x ) , y ) ∂ w j + λ α m j n j w j ] (7) w_j \leftarrow w_j - \eta \left[ \frac{1}{|B_m|} \sum\limits_{(x, y)\in B_m} \frac{\partial L(p(x), y)}{\partial w_j} + \lambda \frac{\alpha_{mj}}{n_j}w_j \right] \tag{7} wj←wj−η⎣ ⎡∣Bm∣1(x,y)∈Bm∑∂wj∂L(p(x),y)+λnjαmjwj⎦ ⎤(7)
上式组合了两项内容, ∑ ( x , y ) ∈ B m ∂ L ( p ( x ) , y ) ∂ w j \sum\limits_{(x, y)\in B_m} \frac{\partial L(p(x), y)}{\partial w_j} (x,y)∈Bm∑∂wj∂L(p(x),y) 是 log loss 损失函数的偏导求解, λ α m j n j w j \lambda \frac{\alpha_{mj}}{n_j}w_j λnjαmjwj 是MBA 正则化损失项的偏导部分。
其中, η \eta η是学习率; λ \lambda λ 是 正则化项的系数。
这里需要说明的是,MBA 正则化项,只考虑了embedding matrix 的正则化,对于后面的MLP部分的正则化没有添加。
Data Adaptive Activation Function
这部分简要介绍,实际上就是根据batch中数据的分布进行 激活函数中心点 变换的一个函数。
总结
这篇文章由阿里出品,中心思想就是在用户的user behavior中加入了目标ad 参与计算注意力,完成预测的推荐算法。
除此以外,该文还有两个创新点是:
- 针对稀疏数据提出的MBA正则化 —— mini-batch aware regularization;
- 针对批数据处理提出的激活函数 —— pReLU / Dice。