DIN(Deep Interest Network for Click-Through Rate Prediction)深度兴趣网络 论文阅读
背景
在广告或推荐中,用户的行为序列是一类非常重要的特征(如用户最近购买的商品序列),在以往的工作中我们一般是直接对序列特征求sumpooing(如下图base model),这个方案存在两个缺点:
1. 假设当前候选广告为上衣,用户的历史购买序列包含了裤子、帽子、洗衣机、电视等,直观上可以看出裤子和帽子和当前广告的相关性比较高,应该有更大权重。而普通sum pooling是等权的
2. 没有考虑到用户兴趣的变话,这个可以通过加入购买时间相关的特征来解决
DIN的模型结构如下图所示,DIN采用了attention的结构学习了候选广告和用户行为序列中不同物品的相似性权重,其实就是一种weighted-sum pooling方法
模型结构
DIN核心模型结构就是Activation Unit,其作用就是用来计算候选广告和用户行为序列物品的权重,最后求weighted-sum pooling,可以用下面公式表示:
注意:这里和self-attention不同,没有对权重过softmax归一化:
Mini-batch Aware Regularization
为了防止过拟合,我们常常会对参数进行L1,L2正则化。但是推荐系统是大规模系数参数,在没有加L2正则化时,每个mini batch只需要更新batch内出现的非0特征,但是加了L2正则后,所有的参数都要被更新,极大的增加了计算量。
因此,论文提出了 mini-batch aware regularization,它的主要思想是只对每个mini-batch中参数不为0的部分加L2正则,而不是对整个参数矩阵进行更新。这样可以避免对那些没有出现在mini-batch中的特征进行惩罚,从而保留更多的信息。此外,它还在一定程度上解决了数据长尾分布的过拟合问题。对长尾部分样本施加较大的惩罚而对短尾部分施加较小的惩罚来防止模型对于长尾部分的过拟合。
Dice 激活函数
PReLU是常用的激活函数
其中,p(s) = I(s > 0)
Dice激活函数是一种改进的ReLU类激活函数,它的特点是可以根据数据的分布来自适应调整阶跃变化点,从而避免ReLU的死亡问题和不灵敏问题。它的定义如下:
模型实践
下面介绍实践中行为序列的构建和权重的计算步骤:
1. 构建长度为k的用户点击行为序列(序列中的每个商品用商品id、类别、行为时间等特征来表示(key),如果一个用户行为序列少于k,末尾用0填充)
2. 选取广告泛化特征来表示该广告(query)
3. tf.concat([query,key, query-key, query*key], axis=-1) 来计算候选广告和用户历史行为商品的相似性(权重),然后把这个权重经过几层nn后乘以用户历史行为广告特征的embedding,做weighted-sum pooling