论文原文
链接:https://arxiv.org/abs/1706.06978
题目:《Deep Interest Network for Click-Through Rate Prediction》
一,背景
点击率预测是工业领域的一项基本任务应用程序,例如在线广告,推荐系统。最近(当时是18年)深度学习已经提出了基于模型的模型,该模型遵循类似的Embedding&MLP范例。在这些方法中,大规模稀疏输入首先将特征映射到低维嵌入向量中,然后以分组方式转换为定长向量。最后,将它们concat在一起以馈入多层感知器(MLP),以学习特征之间的非线性关系。这样,无论候选广告是什么,用户特征都被压缩为固定长度的表示向量。(其实就是embedding -> mlp -> sigmoid -> ctr)
使用定长向量将成为瓶颈,在进行embedding和MLP方法来捕获用户的不同兴趣有效地利用丰富的历史行为时,这种固定的模型不够灵活,只是简单的把所有的embedding向量输入到dnn中,最后输出一个ctr预估值,这种简单固定的方法会损害推荐系统中用户的兴趣多样性。
先介绍两个关键字定义:
Diversity:用户在浏览的过程中显示出的兴趣是十分多样的,表现在用户的点击物品的多样性。
Local activation: 由于用户兴趣的多样性,只有部分历史数据会影响到当次推荐的物品是否被点击,而不是所有的历史记录。
直观的理解是这样,在预测候选广告时,不必将某个用户的所有多样化兴趣压缩到相同的向量中,因为只有部分用户兴趣会影响他/她的行为(单击或不单击)。例如,一位女游泳运动员会点击推荐的护目镜,主要是因为购买了泳衣,而不是上周购物清单中的鞋子。(其实用现在的眼光去看,已经可以联想到去用attention了),候选广告也会作为输入向量,并影响着与候选广告相关性比较高的行为。
一个例子: 例如,一个年轻的母亲最近浏览了许多商品,包括毛尼大衣,T恤,耳环,小米手机,ipad,泡面,沐浴露,手提袋,皮革手袋和童装,当候选广告是iphone时,跟小米手机,ipad的相关性就很大,而跟其他物品的相关性就比较小了。 显然,在页面上显示的广告仅匹配或激活了该母亲的部分兴趣。
二,特征与模型的构建
Din里面共有四类特征,用户特征、用户行为特征、广告特征、上下文特征
table 1特征不仅用单值特征还有多值特征,用户行为特征是multi-hot的,即多值离散特征。对于one-hot类型单特征,我们只需要进行简单的embedding就行,而对于离散的多值特征,我们要进一步处理,一般是进行pooling操作,后面的embedding层在介绍。
2.1 Embedding层
对于one-hot特征,就是经过一个embedding层得到一个D维向量;
对于multi-hot,也是经过一个embedding层,但是出来的维度是 ✖️D,是第i个feature的multi-hot中1的个数(不是固定的)。
可以想到对这些vector直接concat,但是这是不切实际的,因为在离散多值特征中1的个数根本就无法确定,concat出来的vector长度也就不固定,而全连接层只能处理固定长度的vector,所以这种直接concat的操作是不可行的。对于这个问题,文中对multi-hot类型的特征做pooling操作。
对于这个D维的向量做一次pooling操作,进行poolong操作后的维度也就固定下来了,pooling的具体操作是din论文中的核心部分,下面会先介绍一下在Base Model中是怎么操作的,然后引入din模型的操作。
2.2 Base Model
Fig 1看到这里我就有一点困惑了当时,这个User Behaviors就是用户的点击过的商品嘛其实,在table 1中也可以看到用户的行为序列中的物品id数达到了,跟Sequential Recomendation中用户的点击序列大同小异,在seqRec中,用户的点击序列是用RNN来处理,以现在的眼光去看rnn-based model时,自然会想到用attention去对序列中不同的物品进行加权操作。但是在当时,阿里提出这篇论文的时候是用到了attention这种思想,attention这种机制还没正式的有一个定义(据说)。好了,回到我们的base model中,在base model中,最user behaviors中的所有embedding vector仅做sum pooling操作,有一个有点是sum pooling出来后向量获得了固定的长度。
上面提到了RNN/LSTM,为什么不用LSTM对用户历史行为建模,文中尝试使用过,但是没有效果。 与NLP任务中受语法约束的文本不同,用户历史行为的序列可能包含多个并发兴趣。 这些兴趣的快速跳跃和突然结束导致用户行为的顺序数据似乎很嘈杂。
2.3 Deep Interest Network
Fig 2先不介绍这个网络的细节,从直觉来看,整个网络只有一部分跟Base Model不一样,就是我们在2.1中提到的din的核心-weight sum pooling,也就是attention操作。
attention 操作是候选广告的embedding vector,是embedding vector list中的一个向量,两个都是D维向量。可以把看成Q,K,V中的Q和V,看成K,a(.) 求weight的操作,就是一个规模比较小的全连接神经网络。
上面这个公式的意义跟上文中提到的那个例子的直观理解是一样的,如果不能理解,下面拿出原文的例子进行解释。
Fig 3 Example这里最后一句话让我很费解,传统注意力机制的方法会因为在a(.)结果出来后进行归一化(softmax)而损失resolution(解析度),思考了下,猜测应该是为了让权值很大部分不会因为归一化后影响力削弱了,而是让这个值直接作用在对应的上。
2.4 损失函数和模型的细节
2.4.1 损失函数
损失函数用二分类交叉商损失函数
2.4.2 激活函数
激活函数有两个,这个应该是尝试后才知道那个激活函数适合这个模型:
Fig 4 PReLUPReLU采用值为0的分割点,当每一层的输入遵循不同分布时,这可能不适合,也就是分割点不一定为0,是由数据本身的分布决定的。 考虑到这一点,文中设计了一种名为Dice的新型数据自适应激活函数。
Fig 4 Dice激活函数E(s)和Var(s)是一个mini-batch样本的均值和方差,Dice的关键思想是根据输入数据的分布自适应地调整分割点,其值设置为输入的平均值。
2.4.3 正则化
CTR中输入稀疏而且维度高,通常的做法是加入L1、L2、Dropout等防止过拟合。但是论文中尝试后效果都不是很好。用户数据符合长尾定律,很多的feature id只出现几次,而一小部分feature id出现很多次。这在训练过程中增加了很多噪声,并且加重了过拟合。
对于这个问题一个简单的处理办法是直接去掉出现次数比较少的feature id。但是这样就人为的丢掉了一些信息,改变了样本数据的原始分布,导致模型更加容易过拟合,同时阈值的设定作为一个新的超参数,也是需要大量的实验来选择的。
事实上,在推荐系统的任务中,embedding操作是影响ctr预估的最主要原因,而且会加大很多的计算量,因为在模型的训练过程中,embedding参数的量是很大的,像good_id这种一般都是有十几亿以上的量。
因此,阿里提出了自适应正则的做法,即:
1.针对feature id出现的频率,来自适应的调整他们正则化的强度;
2.对于出现频率高的,给与较小的正则化强度;
3.对于出现频率低的,给予较大的正则化强度。
正则化经过进一步的细化:
是batchsize,表示一个批次中是否至少有一个实例的特征ID为j。
2.5 实验结果
还有很多细节有待讨论,后面在详细阅读吧。
网友评论