经典论文阅读(二)--DIN:深度兴趣网络

DIN(Deep Interest Network)是由阿里妈妈精准定向广告算法团队在KDD2018提出的针对电商场景深入理解用户兴趣的预估模型,也可适用于其他场景。

主要贡献:

  1. 指出了使用固定长度的向量来表达用户多样性的兴趣的局限性,设计了新颖的Deep Intrest Network,它引入了局部激活单元(local activation unit)来自适应地从给定广告的历史行为中学习用户兴趣的表达。
  2. 开发了两种技术来训练工业级深度网络:i) mini-batch aware的正则化,避免了在NN的巨量参数上计算正则。ii) 一个数据自适应的激活函数(Dice),在泛化推广PReLU过程中考虑到了输入数据的分布。
  3. 在公开和阿里的数据集上做了深入的实验,验证了DIN和训练技术的有效性。并公开了代码。

一、背景

1. Motivation

现有的深度CTR预估模型都可以归结为Embedding&MLP的范式:首先通过embedding layer将大规模的稀疏特征投影为低维连续的embedding vector,然后将这些向量concatate后输入到一个全连接网络中,计算其最终的预估目标。Embedding&MLP模型利用一个固定的向量 V u V_u 去表达用户就会成为模型表达用户多样兴趣的瓶颈。此固定用户向量 V u V_u 的维度限制了整体模型解空间的秩, 而向量的维度受计算力以及泛化性的限制不可能无限制的扩充。
实际上当我们要预测一个User V u V_u 对一个目标Item I t I_t 的点击率,我们可能并不需要 V u V_u 表达用户的所有兴趣,我们只需要表达其和 I t I_t 相关的兴趣。
Motivated by this, 提出了DIN模型捕捉针对不同商品时用户不同的兴趣状态,并用一个根据不同预估商品目标动态变换的 V u V_u 来表达用户与之相关的兴趣。

DIN方法基于对用户历史行为数据的两个观察:

  • 1、多样性,一个用户可以对多种品类的东西感兴趣;
  • 2、局部激活,只有一部分的历史数据对目前的点击预测有帮助,比如系统向用户推荐泳镜时会和用户点击过的泳衣产生关联,但是跟用户买的薯片、书籍等就关系不大。

于是,DIN设计了一个attention结构,对用户的历史数据和待估算的广告之间部分匹配,从而得到一个权重值,用来进行embedding间的加权求和。

2. 相关工作

LS-PLM和FM模型可以看作是一类只有一个隐藏层的网络,首先在稀疏的输入采用embedding层,然后利用专门设计的transformation函数来做target fitting,以此来捕获特征之间的组合关系。
PNN尝试通过在embedding层之后引入一个product乘积层来捕捉高阶的特征交互。
DeepFM利用一个因子机作为Wide&Deep中的"Wide"模块,从而不需要人工特征工程。
总之整体结构都是embedding层和MLP的组合,我们的基模型采用类似的方式。

神经机器翻译(NMT)对所有的译文使用一个加权求和来获得期望的释义,并且只专注于生成下一个目标单词的相关信息。最近,在搜索广告的上下文信息上应用Attention机制,与NMT类似,对model text使用RNN,然后学习一个全局的隐向量来帮助把’attention’集中在每个query的关键词上。

DIN设计了一个局部激活单元(Local Activation Unit)来对相关的用户行为做软搜索,并使用一个加权求和的Pooling来获得用户对给定广告的兴趣的自适应表达。

DIN提出Adaptive regularizaion来防止过拟合,效果显著。此外,引入dice activation function进一步加强了模型的表达效果。

二、系统详解

4.1 特征表示

在这里插入图片描述

multi-hot编码包含了丰富的用户兴趣信息,注意不需要组合特征。

4.2 Base模型(Embedding&MLP)

在这里插入图片描述

嵌入层:
输入one-hot和multi-hot的特征向量,转化为低维稠密向量。

池化层和Concat层:
不同用户有不同的行为编号,multi-hot后的行为特征向量 t i t_i 中的非零数字各有不同,使得相应的embedding向量各有不同。由于全连接层只能处理固定长度的输入,获取固定长度向量的常规操作就是:
通过一个pooling层将embedding向量转换成固定长度的向量:
       e i = p o o l i n g ( e i 1 , e i 2 , . . . e i k ) ( 1 ) {\bf e}_i = pooling({\bf e}_{i_1},{\bf e}_{i_2},...{\bf e}_{i_k}) \quad\qquad\qquad (1)

基础模型通常使用sum pooling计算用户embedding; DIN通过使用weighted sum pooling计算用户embedding。
注:DIN中使用的是weighted-sum,其实就是加权的sum-pooling,权重经过一个activation unit计算得到。

然后把固定长度的向量表示连接起来,就得到了overall的向量表示。

**MLP: ** 使用全连接层来自动地学习特征组合。

**Loss: ** 目标函数是负的对数似然函数:
       L = 1 N ( x , y ) S ( y l o g p ( x ) + ( 1 y ) l o g ( 1 p ( x ) ) ) , ( 2 ) L=-\dfrac{1}{N}\sum\limits_{(x,y)\in S}(ylogp(x)+(1-y)log(1-p(x))), \qquad\quad (2)
其中,S是大小为N的训练集,x是网络的输入,y属于{0,1}是label,p(x)是网络softmax层后输出的预估概率值。

4.3 DIN的结构

Base模型的固定长度向量表示,忽略了候选广告的不同,每个用户的向量是固定的。为了达到要求,简单地扩展embedding向量的维度将会严重增加学习的参数个数,而且容易过拟合。
DIN模型的结构如图所示:

在这里插入图片描述

DIN通过一个兴趣激活模块(Activation Unit),用预估目标Candidate ADs的信息去激活用户的历史点击商品,以此提取用户与当前预估目标相关的兴趣。权重高的历史行为表明这部分兴趣和当前广告相关,权重低的则是和广告无关的“兴趣噪声”。我们通过将激活的商品和激活权重相乘,然后累加起来作为当前预估目标ADs相关的兴趣状态表达。 最后我们将这相关的用户兴趣表达、用户静态特征和上下文相关特征,以及ad相关的特征拼接起来,输入到后续的多层DNN网络,最后预测得到用户对当前目标ADs的点击概率。

加入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 ω j e j {\bf v}_U (A) =f({\bf v}_A,e_1,e_2,..,e_H)=\sum\limits_{j=1}^{H}a(e_j, {\bf v}_A)e_j = \sum\limits_{j=1}^{H}\omega_je_j
其中,{e1,e2,…eH}是长度为H的用户U的用户行为embedding vector, v A {\bf v}_A 是广告A的embedding vector,
这样, v U ( A ) {\bf v}_U (A) 的值随着广告的不同而变化(向量长度为H)。如图右上角所示,外积(Out Product)函数 a ( ) a(\cdot) 是一个输出为激活权重的前馈神经网络,把用户行为的embedding和广告的embedding向量这两部分输入,加上它们的out product喂给一个随后的网络,是一种显而易见的关联性建模方法。

对每个兴趣表示赋予不同的权值,这个权值是由用户的兴趣和待估算的广告进行匹配计算得到的,也就是 a ( ) a(\cdot) 所学习到的。这就是本文引入注意力机制的核心点。

Activation Unit实现Attention机制,对Local Activation建模;
Pooling(weighted sum)对Diversity建模(见Base Model)。

We have tried LSTM to model user historical behavior data in the sequential manner. But it shows no improvement. 尝试对用户历史行为数据使用LSTM进行时序方式的预测,并没有得到改善。

三、训练技术

5.1 Mini-batch Aware Regularization

过拟合是模型训练中的很容易出现的问题。

通常的做法是加入L1、L2防止过拟合,但这种正则方式对于工业级CTR数据不适用,结合其稀疏性及上亿级的参数,以L2正则化为例,需要计算每个mini-batch下所有参数的L2-norm,参数上升至亿级之后计算量太大,不可接受。

用户数据符合长尾定律(long-tail law),也就是说很多的feature id只出现了几次,而一小部分feature id出现很多次。这在训练过程中增加了很多噪声,并且加重了过拟合。直接去掉出现次数比较少的feature id会导致模型更容易过拟合,而且阈值作为一个新的超参数,需要大量的实验来选择。

DIN提出了高效的Mini-batch aware正则化,只计算mini-batch中非零项的L2-norm。
     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\limits_{j=1}^{K}\|w_j\|_2^2=\sum\limits_{(x,y)\in S}\sum\limits_{j=1}^{K}\dfrac{I(x_j\neq 0)}{n_j}\|w_j\|_2^2, \quad\qquad\quad (4)

其中 w j w_j 是第j个embedding vector,指示函数 I ( x j 0 ) I(x_j\neq 0) 表示x是否有特征id j, n j n_j 表示在所有样本中特征id J出现的次数。在mini-batch aware方式中,等式4可以转换成等式5,近似为下面的等式6:
     L 2 ( W ) j = 1 K m = 1 B a m j n j w j 2 2 . ( 6 ) L_2(W)\approx \sum\limits_{j=1}^{K}\sum\limits_{m=1}^{B}\dfrac{a_{mj}}{n_j}\|w_j\|_2^2 . \quad\qquad (6)

第m个mini-batch的梯度w.r.t 特征j的embedding weights就是:
在这里插入图片描述
其中 B m B_m 表示第m轮mini-batch, a m j = m a x x , y B m I ( x j 0 ) a_mj=max_{x,y \in B_m}I(x_j\neq 0) 表示在mini-batch 中至少一个实例具有特征id j j w j w_j 表示第j个embedding vector。

5.2 Data Adaptive Activation Function

DIN的论文中,我们还对激活函数做了改进,提出了黑魔法DICE激活函数
目前应用的比较广的激活函数ReLU和PReLU的计算过程可以描述为:
     { s i f    s > 0 α s    i f    s 0. = p ( s ) s + ( 1 p ( s ) ) α s \left\{ \begin{array}{lr} s \qquad if \,\, s \gt 0 \\ \alpha s \quad\,\, if \,\, s \leq 0. \end{array} \right. \quad = p(s)\cdot s + (1 - p(s))\cdot \alpha s

我们把P(s)称为控制函数,这个控制函数其实就是一个整流器,可以看到无论是PReLU还是ReLU的控制函数都是一个阶跃函数,其变化点在s = 0处,意味着面对不同的输入这个变化点是不变的。实际上神经元的输出分布是不同的, 面对不同的数据分布采用同样的策略可能是不合理的,因此在我们提出的Dice激活函数中我们改进了这个控制函数,让它根据数据的分布来调整,这里我们选择了统计神经元输出的均值和方差来描述数据的分布:
在这里插入图片描述
控制函数:
在这里插入图片描述

5.3 Metrics and Result

使用了一种“An variation of user weighted AUC” 用于度量用户间order,通过平均每个用户的AUC,公式如图:
在这里插入图片描述
引入了RelaImpr metric 去度量模型的相对提升度。
在数据集上的实验表明:

在这里插入图片描述
DIN可以自适应得到用户兴趣的不同表示,极大提升了模型的表达能力;此外,DIN引入了Dice进一步提升了模型表现。

Ref:
[1] 论文发表在这里
[2] github官方wiki

猜你喜欢

转载自blog.csdn.net/rover2002/article/details/106586881
DIN