<Deep Interest Network for Click-Through Rate Prediction>阅读笔记

Deep Interest Network for Click-Through Rate Prediction一文来自阿里妈妈的盖坤团队。为了更好地在在线广告系统中建立CTR预估模型,通过探索用户的历史行为来提取用户的兴趣显得尤为关键。而用户的历史行为数据有两个特点: 1. 多样性。当用户在浏览时,对各种商品感兴趣。 2. 局部活动性 即当前的兴趣只与部分历史行为相关。如下图。

image.png|400

大多点击率预估模型,就难以抓住这两个特点。为此,盖坤团队提出了一种Deep Interest Network(DIN)模型。如果以历史商品表示用户的兴趣的话,这种模型在用户历史商品和广告商品间建立了注意力网络(attention network),以对用户的兴趣赋以不同的权重。同时也提出了一种不同的激活函数,改进了我们常用的Relu激活函数。 ​ ​

1. Deep Interest Network模型

文中基础模型包括两步:(1)将稀疏ID类特征变换到embeded向量。(2)使用全连接层。但是注意到每个用户的有过历史行为的商品数并不同,导致输入的商品序列的输入向量长度并不相同。所以我们一般增加一个pool 层(例如进行相加),得到固定长度的向量。如下图的左侧。

image.png

大家会发现在这个做池化的过程中,各个历史行为数据的权重相同,违背了刚才提到的历史行为数据的两个特点,即多样性和局部活动性。因此,类似于文本翻译任务中的注意力网络(attention network),在解码阶段的每个单词的权重是不一样的,CTR预估引入类似的注意力机制,让历史商品的权重不同。当然,也不是直接对历史商品施加不同的权重,历史商品的权重也需要与广告商品相关。

例如,设有用户向量$V_u$和广告商品向量$V_a$,对于一个固定的用户而言,$V_u$在embedding空间是固定的。如果用内积来计算用户与广告的相关性的话,可以表示为$F(U,A)=V_u \cdot V_a$。现在有$F(U,A)$$F(U,B)$,如果两个值比较大,也就是说用户与这两个广告A和B都相关。那么在向量$V_A$和向量$V_B$连线上的点与用户也是强相关的,为了保证这一点,势必对学习用户向量和广告向量的向量表达又带来了一个约束条件。

所以作者引入了Deep interest network(DIN),其结构如上图的右边表示。用户的embedding向量$V_u$可以表示为广告的embedding向量的函数表示。
math V_u=f(V_a)=\sum_{i=1}^N w_i \ast V_i=\sum_{i=1}^Ng(V_i,V_a) \ast V_i ​ 在这里,$V_i$表示历史行为id的embedding向量,例如商品 id,店铺 id等。$V_u$为所有行为id的权重,$w_i$为 attention score,表示行为 i 对用户兴趣向量$V_u$关于候选广告$A$的权重。在实际实现上,表示输入$V_i$$V_a$经过激活单元的输出。 ​

2. 自适应激活函数Dice

激活函数PReLU的表达式可定义为 math y_i= \begin{cases} y_i& {if \ y_i>0}\\ a_iy_i& {if \ y_i \leq 0} \end{cases} 为了应对工业界大规模的稀疏向量,加快收敛,文章设计了一种激活函数,称为 Dice. math y_i=a_i(1-p_i)yi+p_iy_i math p_i=\frac{1}{1+e^{-\frac{y_i-E[y_i]}{\sqrt{Var[y_i]+\epsilon}}}} ​ 而$E[y_i]$$Var[y_i]$直接来自于mini batch的数据,可采用动量的方法来计算。 math E[y_i]_{t+1}'=E[y_i]_t'+\alpha E[y_i]_{t+1} math Var[y_i]_{t+1}'=Var[y_i]_t'+\alpha Var[y_i]_{t+1} ​ 这里$\alpha$一般可取0.99。
Dice的关键点在可动态根据数据调整rectifier point(整备点?),不同于PReLU 直接基于$y_i$是否大于0,相当于是一个软整备点。 ​ ​