作者以及单位
Guorui Zhou et al.阿里巴巴
论文下载地址:Deep Interest Network for Click-Through Rate Prediction (arxiv.org)
核心故事:局部激活Local Activation
解决问题
如何更好的在推荐系统候选结果中做排序(排序的文章很少),简称DIN,文章主要目的是为了预测点击率,是CTR的问题。
这个文章提出了一个观点:因为之前的RecSys大会一般有意的接收50%的传统方法,50%的深度学习方法。在本文中谈到深度学习调参训练复杂,相比传统算法虽然简单,但是现在类似SGD传统方法,要达到深度学习的准度,必须把L2调的很准。但是调整L2的这个mini-batch(批量梯度下降)是一件非常耗时的事情
也就是说,深度学习没有以前那么难调了,传统方法也没有以前那么简单了。
研究动机
要讲motivation,必须先说一下之前的工作的问题是什么,才能解释这个文章重点是改变了什么。
1.传统方法,大家熟知的“特征工程”绝对直接影响推荐结果。凡是有做过大数据比赛的经验的,都知道为了找implicit和explicit的特征,基本上是很花精力的。
2.流行的方法,比如:Wide&Deep, DeepFM等,将DNN应用于CTR预估的套路是现在排序的主流,一般分为两步:
2.1 在DNN的输入层上加一层embedding,把高纬度、稀疏的数据转换为低维度的数据。
2.2 增加多个全链接层,学习特征之间的非线性关系!
即Sparse Features -> Embedding Vector -> MLPs -> Output
优点:绝对比人工找特征快!准!狠!
缺点:用户数据中有很多包含用户多样性的信息,转换为低维只有一小部分才会影响推荐结果。原文如下:These models often transform corresponding list of embedding vectors into a fixed-length vector via sum/average pooling, which causes loss of information.
动机:借鉴了attention中注意力的机制,设计了attention-like network structure,能够激活局部(Local Activate)的相关历史兴趣数据,当相关性越高的历史行为,会获得更高的attention score,从而做到(Diversity + Local Activation)建模,和之前工作比,增强了模型更丰富的表达效果。
研究方法
之前说到了动机,因为CTR问题中普通存在“高维度”和“稀疏性”的特点。说一下研究方法中DIN和以前工作的异同。
简单版的叙述:
之前的深度学习:为了得到一个固定长度的Embedding Vector表示,原来的做法是在Embedding Layer后面增加一个Pooling Layer。Pooling可以用sum或average。最终得到一个固定长度的Embedding Vector,是用户兴趣的一个抽象表示,常被称作User Representation。缺点是会损失一些信息。
DIN使用Attention机制来解决这个问题。主要区别是“局部激活Local Activate”,自适应地调整User Representation。就是说:在Embedding Layer -> Pooling Layer得到用户兴趣表示的时候,依据给定Ad,通过计算用户历史行为与该给定Ad的相关性,赋予不同的历史行为不同的权重,实现局部激活。从最终反向训练的角度来看,就是根据当前的候选广告,来反向的激活用户历史的兴趣爱好,赋予不同历史行为不同的权重。
复杂版的叙述:
MLP只能接受固定长度的输入,但是每个用户在一段时间内的商品点击序列长度可能会不同,属于变长特征,那么该如何处理这样的变长特征?base模型采用pooling的方式,一般有两种方法,求和或者平均,求和就是对多个商品的embedding,在每个对应的维度上做求和。平均就是对多个embedding,在每个对应的维度上求平均。
不管用户点击过多少个商品,经过pooling之后,得到的最终表示向量embedding和每个商品的embedding维度都是相同的。
不管用户点击过多少个商品,经过pooling之后,得到的最终表示向量embedding和每个商品的embedding维度都是相同的。
不管用户点击过多少个商品,经过pooling之后,得到的最终表示向量embedding和每个商品的embedding维度都是相同的。
BASE模型中每个商品有3个特征域,包括商品自身,商品类别,商品所属的商铺。对于每个商品来说,3个特征embedding拼接之后才是商品的表示向量。对商品序列做pooling,base中采用的是求和的方式,pooling之后得到用户行为序列的表示向量。然后再和其他的特征embedding做拼接,作为MLP的输入。
MLP输入端的整个embedding向量,除了candidate的embedding部分,其余的embedding部分可以视为用户的表示向量。base模型对于任何要预测的candidate,不管这个candidate是衣服,电子产品等,用户的表示向量都是确定的、不变的,对于任何candidate都无差别对待,但问题就是:用户的兴趣具有多样性。
Attention的思想是:与candidate相关的商品权重大一些,与candidate不相关的商品权重小一些(在pooling的时候)这是attention的contribution,不是本文的contribution!
本文的contribution:将candidate与点击序列中的每个商品发生交互来计算attention分数。具体计算方法如DIN中右上角的Activation Unit所示,输入包括商品和candidate的embedding向量,以及两者的外积。对于不同的candidate,得到的用户表示向量也不同,具有更大的灵活性。利用Activation Unit实现Attention机制,对Local Activation建模(与传统的attention机制差别是舍弃!舍弃!舍弃!了顶层的softmax,实现依据ad对用户行为特征进行权重判定)
例如,用户的点击序列中90%是衣服,10%是电子产品,有一件T恤和一部手机需要预测CTR,那么T恤会激活大部分的用户行为,使得根据T恤计算出来的用户行为向量在数值上更大,相对手机而言。
DIN的论文中还提出了两个小的改进点。一个是对L2正则化的改进,在进行SGD优化的时候,每个mini-batch都只会输入部分训练数据,反向传播只针对部分非零特征参数进行训练,添加上L2之后,需要对整个网络的参数包括所有特征的embedding向量进行训练,这个计算量非常大且不可接受。论文中提出,在每个mini-batch中只对该batch的特征embedding参数进行L2正则化。第二个是提出了一个激活函数Dice。对于Relu或者PRelu来说,rectified point(梯度发生变化的点)都在0值,Dice对每个特征以mini-batch为单位计算均值和方差,然后将rectified point调整到均值位置。
DIN, MBA 以及Dice均能进一步提升模型表现,三者结合时,模型表现达到最好(原文Taken together, DIN with MBA regularization and Dice achieves total 11.65% RelaImpr and 0.0113 absolute AUC gain over Base-Model)。
但说实话,看了这个结果我感觉有点失望,一顿操作猛如虎,结果比LR只高了不到1个点(movielens上)。但是在文章说用的alibaba自己的数据上提升了10个点。
但是这个文章应用的意义或许很大,如利用DIN,可以看到同的历史兴趣爱好对于当前候选广告的权重不同,做到了local activation:
创新点
1.DIN可以更好地捕捉了用户兴趣的多样性特征(去了sofemax)。
2.通过小批量的正则化器,节省了深度网络上大量的正则化计算具有大量参数,有助于避免过度拟合。
3.通过自适应激活函数Dice,通过考虑输入的分布来的PReLU使模型性能良好。
PReLU其实是ReLU的改良版,PReLU能提高准确率但是也稍微增加了过拟合的风险。Dice可以看做是PReLU的一种推广,主要思想是依据输入数据分布进行自适应调整修正点,该修正点不再默认为0,而是设定为数据均值;其次,Dice的一个好处是平滑过渡两个状态。
结论
本文解决的是一个什么问题?
如何对用户多种多样的兴趣建模。已有方法是:使用Pooling对Embedding Vector求和或者求平均。同时这也解决了不同用户输入长度不同的问题,得到了一个固定长度的向量。这个向量就是用户表示,是用户兴趣的代表。
但是,直接求sum或average损失了很多信息。
所以针对不同的behavior id赋予不同的权重,这个权重是由当前behavior id和候选广告共同决定的(Attention机制),实现了Local Activation。DIN使用activation unit来捕获local activation的特征,使用weighted sum pooling来捕获diversity结构。
参考:
从DIN到DIEN看阿里CTR算法的进化脉络 - 知乎 (zhihu.com)
CTR预估 论文精读(八)--Deep Interest Network for Click-Through Rate Prediction_Dby_freedom的博客-CSDN博客