原始论文:DeepFM:A Factorization-Machine based Neural Network for CTR Prediction
DeepFM:基于神经网络的因式分解机做点击率预估
摘要
对于推荐系统中的最大化CTR来说,学习那些用户行为背后的复杂而精确的特征交叉项是至关重要的。尽管有很大的提升,但是方法似乎在低阶或者高阶的交差项上带有很强的偏置项,又或者会要求专业性的特征工程。在这篇文章,我们会展示可以构造出一个端到端的学习模型,特别是对于低阶和高阶的交叉项的学习。DeepFM,提出的这个模型联合了因式分解机的推荐能力和一个新的神经网络结构在特征方面的深度学习能力。相比于Google提出的最新的Wide & Deep模型,DeepFM的“wide”和“deep”部分有一个共享输入层,并且除了最原始的特征不需要额外的特征工程。综合性的实验结果证明了DeepFM相比于其他的CTR模型在基础数据及和商业数据集上都有着更好的效果和效率。
1 介绍
点击率(CTR)预测对于推荐系统是至关重要的,它是估计用户对某个商业项目进行点击的概率。大部分的推荐系统的目标是最大化点击次数,所以返回给用户的项目可以按照估计出的CTR进行排序;然而对于其他的高级应用例如在线广告,提升CTR可以增加企业的收入,所以总体上来说,排序的策略可以调整为CTR*bid,这里的bid是指用户每次点击给系统产生的收益。但是不管怎样,不断提升CTR可以创造更多的收益。不论什么情况,可以明确地是准确地预测CTR是最关键的。
通过用户的点击行为序列学习到背后潜在的特征交叉项对于CTR预测是特别重要的。根据我们在主流的app商店的研究,发现用户常常在用餐时间下载外卖类app,这就是一种二阶的交互信息:app应用类别和时间,这类的二阶交互信息可以用以CTR预估。再比如,男性青少年偏爱射击类和角色扮演游戏,这表明了这个三阶的交叉项:包含了性别,年龄和app的应用类别,也是有助于CTR。总的来说,这些用户行为背后的特征交互是非常复杂的,这里的低阶和高阶的特征交叉项都有着特别重要的作用。2016年谷歌的Wide & Deep model系统基于低阶和高阶特征的交互信息在整体上都带来了额外的性能提升。
建模的核心挑战在于特征之间的交互信息。一些容易理解的特征交叉项可以有专业的人设计出来(例如上述举例的)。然而,大多数的特征交互项是隐藏于数据背后且难以利用先验知识发现的(例如啤酒与尿布的案例,是通过通过数据的而不是专家发现的),这种是仅可以通过机器学习字段捕获的。基于对于一些易理解的交互项来说,它们看上去也不像转接能够构造出来的,特别是在特征数量特别庞大的时候。
尽管普通的线性模型特别的简单,例如FTRL,但是在实际应用中却展示了相当好的效果。然而,线性模型缺少学习特征交叉项的能力,所以一般是在后期手动方式添加特征之间的交互项。这样的方法不仅难以泛化到高阶特征,也难以应付训练集中较少或者尚未出现的特征。2010年提出的因子分解机(FM)可以解决这个问题,FM是通过隐向量的内积表现特征之间的交叉项。尽管原则上FM可以构建高阶的特征交叉项,但是在实际中考虑到构建特征之间更高阶的关系会更加复杂,所以一般只采用2阶。
深度学习在特征表示上是一个很强大的算法,所以在学习复杂的特征交叉项上也具有很大潜力。所以就扩展出了一些想法,例如用CNN和RNN来做CTR预估。但是基于CNN的模型只能处理相邻特征,而基于RNN的模型由于天然的序列依赖特性更适于CTR领域。2016年有学者提出了Factorization-machine supported Neural Network (FNN),该模型用FM进行预训练,再输入到DNN,因此这也使得模型受限于FM。Qu等人于2016年提出Product-based Neural Network (PNN)在嵌入层和全连接层之间引入一个product 层来表示特征之间的相互作用。其实FNN和PNN都仅仅能够表达低阶的特征间相互作用,且程度有限。为了能够同时表达低阶和高阶的特征信息,cheng等人于2016年提出一个混合网络结构:Wide & Deep模型,该模型融合了一个线性模型(wide)和深度学习模型。在这个模型中,两个部分wide part和deep part分别需要两个不同的输入,其中wide part需要依赖专家的特征工程。
可以看出现有模型偏向于低或高阶特征交互,或依赖于特征工程。在本文,我们证明了可以构建一个学习模型,它是可以通过端到端的方式学习到所有阶数的特征交叉项,而除了原始的特征不需要任何额外的特征工程我们的主要贡献总结如下:
- 我们提出了一个新的神经网络模型DeepFM,它是结合了FM和深度神经网络(DNN)的结构。它既可以像FM一样构建低阶的特征交叉项也可以像DNN一样拟合高阶的特特征交叉项。而不像Wide & Deep模型,DeepFM可以在无需任何特征工程的条件下进行端到端的训练。
- 我们对DeepFM在基础数据集和商业数据集上都进行了评估,结果表明了它相对于目前已存在的CTR预估模型有一致性的提升效果。
2 我们的方法
假设数据的训练集包含n个样本$(\mathcal{X},y)$,其中$\mathcal{X}$是一个包含m个特征域的数据集,一版记录了相关的用户和物品对,并且$y \in (0,1)$对应的标签标示用户的点击行为(1表示用户点击了物品,否则为0)。$\mathcal{X}$可能会包含类别型特征(例如性别,位置)和连续型特征(例如年龄)。每个类别型特征都会被表示成一个one-hot编码的向量,每个连续型特征都会用它自己的值表示,或者在进行离散后也表示成一个one-hot编码的向量。然后,每个样本都会被转换成$(x,y)$,其中$x = [x_{field_1},x_{field_2},\cdots, x_{field_j},\cdots,x_{field_m}]$是一个d维的向量,$x_{field_1}$是$\mathcal{X}$中第j个特征的向量表示。一般的,x是一个高维且极度稀疏的向量。CTR预估的任务就是构建一个预测模型$\hat y = CTR_model(x)$来预估在给定上下文的条件下一个用户点击某个app的概率。
2.1 DeepFM
我们的目标是学习高阶和低阶的特征交叉项。为了做到这个,我们提出了基于神经网络的因式分解机(DeepFM)。如图1所示,DeepFM由两部分组成,FM部分和deep部分,二者共享同一输入层。对于特征i,一个标量$w_i$作为权重来表示其一阶的重要性,一个潜在的向量$V_i$用来衡量它与其他特征的交叉项的重要性。$V_i$被喂入FM部分取构建2阶的特征交叉项,同时也被喂入深度部分取构建高阶的特征交叉项。所有的参数,包括$w_i,V_i$和网络参数$(W^{(l)},b^{(l)})$都在合并的模型中进行联合训练的:
其中,$\hat y \in (0,1)$是预测的CTR,$y_{FM}$是FM部分的输出结果,$y_{DNN}$是深度部分的输出结果。
FM部分
FM部分是一个因式分解机,它是在[Rendle,2010]中提出来用在推荐中学习特征交叉项的。除了线性的(一阶)特征交叉项,FM还利用特征间的隐向量的内积构建了成对的(二阶)特征交叉项。相比于以前的方法,特别是在数据集很稀疏的时候它可以更有效地捕获到二阶特征交叉项。在以前的算法中,特征i和j组成的交叉项的参数只能在某一数据记录同时出现特征i和j的时候才能得到训练。而在FM模型中,它们会通过它们的隐含向量$V_i和V_j$的内积计算得到。得益于这种灵活的设计,无论i(或j)何时出现在数据记录中FM模型都能够训练隐含向量$V_i(V_j)$。因此,那些从不或者很少出现在训练数据中的特征交叉项可以有FM模型很好的学习到。
如图2所示,FM的输出是由一个累加单元加上一系列内几单元组成的:
其中$w \in R^d 和 V_i \in R^k$(k是给定的)。累加单元$(
Deep部分
深度部分是一个前馈神经网络,通常是来学习高阶特征交叉项的。如图3所示,一条数据记录(一个向量)被喂入神经网络。相比于输入数据是图片或者音频的神经网络,即输入数据是连续且密集的,CTR预估模型的输入数据则大不相同,它要求一个新设计的网络结构。特别地,CTR预估的原始特征输入向量一般都是高度稀疏的、超高维度的、类别型和连续型混合的并且聚合到特征域的(例如性别,位置,年龄)。这表明嵌入层是在将数据输入到第一层隐含层之前将输入向量压缩到了一个低维且密集的实值向量,否则网路将无法进行训练。
图4提取了输入层到嵌入层的子网络结构。我们能够之处这个网络结构中的两个有趣的特点:1)尽管不同输入特征域向量的长度不同,但是它们 的嵌入向量确实相同大小(k)的;2)FM中的隐含特征向量(V)是作为网络的权重,它们是学习到的用来将输入特征向量压缩成嵌入向量的。在论文[Zhang tw al., 2016],V是由FM提前训练好的值来作为初始化的。在这里,不是使用FM的隐含特征向量来初始化网络,而是除了DNN模型外,我们是将FM模型作为我们整体学习框架中的一部分。如此,我们就不需要通过FM来提前训练了,相反我们是将整体的网络结构以端到端的方式来进行联合训练。将嵌入层的输出表示成:
其中$e_i$是第i个特征的嵌入,m是特征的个数。然后,$a^{(0)}$是喂入到深度神经网络的,并且前向的过程是:
其中l是网络的层数,$\sigma$是激活函数。$W^{(l)},a^{(l)}, b^{(l)}$分别是输出,模型权重和第l层的偏置项。之后,一个密集的实值特征向量就产生了,这最终会输入到CTR预估模型的sigmiod激活函数中去:$y_{DNN} = \sigma(W^{|H|+1} \cdot a^H + b^{|H|+1})$,其中$|H|$是隐含层的数量。
值得指出的是FM部分和deep部分共享同一特征嵌入层,这就带来了两个好处:1)可以从原始特征中同时学习了低阶和高阶的特征交叉项;2)不需要像Wide & Deep一样在输入层上做专门的特征工程。
2.2 与其他神经网络之间的关系
受到深度学习在多种应用中取得巨大成功的影响,最近很多用来做CTR预估的深度模型被开发出来。这一部分将我们提出的DeepFM与其他现存的CTR预估深度模型进行比较。
FNN:如图5左侧所示,FNN是一个FM初始化的前馈神经网络模型[Zhang et al., 2016]。FM预训练的方法导致了两个限制:1)嵌入层的参数会由FM完全决定;2)引入的预训练步骤会使得模型的有效性降低。此外,FNN仅能捕获高阶的特征交叉项。相反,DeepFM不需预训练并且能够学习到高阶和低阶的特征交叉项。
PNN:为了抓取高阶的特征交叉项,PNN在嵌入层和第一层隐含层之间强加了一个乘积层[Qu et al., 2016]。根据乘积运算的不同类型,又有三种不同的模型:IPNN,OPNN和PNN,其中IPNN是基于向量内积的,OPNN是基于外积的,PNN是基于内积和外积一起的。
为了使得计算更加有效,作者提出了一个内积和外积的近似计算:1)内积可以通过消除某些神经元来近似计算;2)外积可以通过将m个k维的特征向量压缩成一个k维的向量来近似计算。然而,我们发现外积相对于内积不太可靠,这是因为外积的这种近似计算会丢失很多信息使得结果不稳定。尽管内积相对比较可靠,它仍然需要很高的计算复杂度,因为乘积层的输出是与第一层隐含层所有的神经单元相连的。不同于PNN,DeepFM中的乘积层的输出仅与最终的输出层(一个神经元)相连。例如FNN,所有的PNN都忽略低阶特征交叉项。
Wide & Deep:Wide & Deep(图5右侧所示)是由谷歌提出的来同时构建低阶和高阶特征交叉项的。如论文[Cheng te al., 2016]所示,它在“宽”部分部分的输入时需要专业的特征工程(例如,在app推荐中的用户安装的app和展示的app间的交叉特征)。相反,DeepFM不需要太多大额专业知识来处理输入层就可以直接地从原始特征中学习。
一个简单地扩展就是用FM替换这个模型中的LR部分(本文的第三部分我们也评估了这一扩展)。这个扩展类似于DeepFM,但是DeepFM在FM和deep部分之间共享了嵌入层。这种特征嵌入层共享的方法通过低阶和高阶特征交叉项影响了(以回传的方式)特征的表达,这就使得其可以更精确的构建特征表达。
总结:综上所述,DeepFM和其他深度模型之间关系主要是表1中提到的4个方面。如我们所见,DeepFM是一个不需要预训练和特征工程的模型,并且能够抓取低阶和高阶的特征交叉项。
3 实验
数据集
我们基于以下两个数据集来评估我们提出的DeepFM模型的效果和效率:
1) Criteo Dataset:Criteo Dataset包含4500万的用户点击记录,有13个连续型特征和26个类别型特征。我们将数据集随机得分为两部分:90%用来作为训练集,剩下的10%作为测试集。
2)Company Dataset:为了验证DeepFM模型在真实的工业CTR预估中的表现,我们在Company Dataset数据集上进行了实验。我们从Company App Store的游戏中心收集了连续7天的的用户点击记录数据作为训练集,下一天的数据作为测试集。全部收集的数据集大概有10亿条记录。在这个数据集中,有应用的特征(例如名称和类型等等),用户特征(例如用户下载的应用等等),上下文特征(例如操作时间等等)。
评估指标
在我们的实验中主要使用两个评价指标:AUC和Logloss。
模型比较
我们在实验中比较了9个模型:LR, FM, FNN, PNN (三种变体), Wide & Deep, 和 DeepFM.在Wide & Deep模型中,为了消除特征工程的工作量,我们将原始的 Wide & Deep 模型中宽部分的LR用FM来代替。为了区别 Wide & Deep 的这两种变体模型,我们分别把它们命名为 LR & DNN 和 FM & DNN。
参数设定
为了在Criteo dataset数据集上评估模型,我们追随[Qu et al., 2016]中的FNN和PNN的参数设定:(1)dropout:0.5;(2)网络结构:400-400-400;(3)优化器:Adam;(4)激活函数:IPNN用tanh,其他的深度模型用relu。为了公平,我们的DeepFM模型使用同样的设定。LR和FM的优化器分别是FTRL和Adam,并且FM隐含的维度是10.
为了在公司的数据集上获得每个模型最好的效果,我们仔细地进行参数学习,会在3.3部分详细讨论。
3.2 效果评估
在这一部分,我们会评估3.1部分列出的模型,并且在两个数据集上对比它们的效果和效率。
效率对比
深度学习模型的销量在现实世界中是非常重要的。我们通过以下公式对比了各个模型在Criteo数据集上的效率表现:$\frac{|training time of deep CTR model|}{|training time of LR|}$。结果如图6所示,包含了在CPU(左侧)和GPU(右侧)上的测试结果,我们观察到了以下结果:1)FNN的预训练使其变得不是很有效率;2)尽管IPNN 和 PNN*在GPU上的表现要好于其他模型,但由于内积计算的操作使得他们仍然具有很高的计算成本;3)DeepFM几乎在所有的测试中表现地最有效率。
效果对比
不同CTR预估模型在Criteo和Company*的数据集上的表现如表2所示,我们可以得到如下观察结果:
- 学习特征交叉项能够提升CTR预估模型的效果。这一发现实际上是来自于LR(它是唯一一个没有考虑特征交叉的模型)的表现要差于其他模型。对于Company* 和 Criteo数据集来说,DeepFM作为最好的模型其表现在AUC上要比LR分别高出0.86%和4.18%。
- 同时学习高阶和低阶的特征交叉项能够提高CTR预估模型的表现。DeepFM 模型的表现要好于那些仅仅学习低阶特征交叉项(例如FM)或者高阶特征交叉项(例如FNN, IPNN, OPNN, PNN*)的模型。相比于第二好的模型,DeepFM 在两个数据集上的AUC分别提升了0.37%和0.25%(Logloss 分别提升了0.42% 和0.29%)。
- 同时学习高阶和低阶的特征交叉项的时候,还共享特征的嵌入能够提高CTR预估模型的表现。DeepFM 的表现要好于那些在学习高阶和低阶特征交叉项的时候使用不同的特征嵌入的模型(例如LR & DNN 和 FM & DNN)。相比于这两个模型,在 Company* 和 Criteo 数据集上,DeepFM在AUC上要分别提升0.48%和0.33%(在Logloss上分别提升0.61%和0.66%)。
总的来说,我们提出的 DeepFM 模型打败了其他的竞争者,在Company* 数据集上的AUC 和 Logloss分别提升了0.37%和0.42%。实际上,离线AUC评估指标的小改进很肯带来在线CTR的显著提升。如[Cheng et al., 2016]中所述,相比于LR,Wide & Deep 将AUC提高了0.275%(离线),在线的CTR提高了3.9%。公司应用商店的每日流量价值百万美元,因此即使是几个百分点的CTR提升也能够带来每年百万美元的额外收入
3.3 超参数研究
我们研究了在公司数据集上不同模型的不同超参数的影响力。顺序是:1)激活函数;2)dropout率;3)每层神经元个数;4)隐含层的层数;5)网络形状。
激活函数
根据[Qu et al., 2016]所述,在深度模型中relu和tanh是比sigmoid更适合的。再本文中,我们对比了深度模型在使用relu和tanh的效果。如图7所示,除了IPNN外,在所有的深度模型中relu都比tanh更加合适。可能的原因是relu降低了稀疏性。
Dropout
Dropout[Srivastava et al., 2014]是网络中一个神经元保留下来的概率。Dropout 是一种用来折中神经网络的准确度和复杂度的正则技术。我们分别尝试了dropout在1.0,0.9,0.8,0.7,0.6,0.5下的效果。如图8所示,所有的模型当它们的dropout提前设定好的时候(0.6到0.9)都取得了它们最好的表现。结果表明往模型中加入一些合理的随机性能够增强模型的稳健性。
每层的神经网络个数
当其他因素保持一致的时候,增加每一层的神经元个数会引入更高的复杂度。正如我们从图9可以观察到的,增加每一层的神经元个数并不总是能够带来收益。例如,当每一层神经元的个数从400增加到800的时候,DeepFM 的表现趋于稳定;更糟的是,当我们把神经元车上从400增加到800的时候OPNN表现反尔变差了。这是因为过度复杂的模型容易造成过拟合。在我们的数据集中,每一层设定200-400神经元是一个不错的选择。
隐含层的个数
如图10所呈现的,增加隐含层的个数在一开始能够提高模型的表现,然而,如果层数一直增加他们的表现则会逐渐变差。这种现象一版也是由于过拟合造成的。
网络形状
我们测试了4种网络形状:不变、增长、减小和菱形。当我们改变网络的结构,我们会固定隐含层的个数以及总神经元的个数。例如,当隐含层数量是3且总神经元个数是600的时候,四中网络形状是:不变(200-200-200),增长(100-200-300),减小(300-200-100)和菱形(150-300-150)。正如从图11中可以看到,“不变”的网络形状一般要好于其他三种形状,这也与之前的研究保持了一致性[Larochelle et al., 2009]。
4 相关工作
在这篇文章,我们提出了一个新的深度学习网络结构用来做CTR预估。最相关的领域就是推荐系统中的CTR预估和深度学习。在这一部分,我们讨论一下这两个领域的相关工作。
CTR预估在推荐系统是特别地重要。除了一般的线性模型和FM,还有一些其他的模型会被用来做CTR预估,例如基于树,基于张量的模型,支持向量机,以及贝叶斯模型。
其他相关的领域就是推荐系统中的深度学习了。在第1部分和第2.2部分,我们已经提到了几个用来做CTR预估的深度学习模型,因此在这里我们不再讨论它们。一些深度模型一般会被用于推荐任务而不是CTR预估。[Salakhutdinov et al., 2007; Sedhain et al., 2015; Wang et al., 2015]提出通过深度学习来改进协同过滤。[Wang andWang, 2014; van den Oord et al., 2013]的作者通过深度学习来提取一些满意的特征用于改进音乐推荐。[Chen et al., 2016]设计了一个深度学习网路用来构建广告展示中的图片特征和基础特征。[Covington et al., 2016]开发了一个两部神经网络框架用来做YouTube的视频推荐。
结论
在本文中,我们提出了DeepFM模型,是一个基于神经网络的因式分解机用来做CTR预估,克服了当前最先进模型的缺点并获得了一个更好的表现。DeepFM 是联合训练了一个深度部分和FM部分。它是通过以下几个优势获得了更好地表现:1)它不需要任何预训练;2)它能够同时学习高阶和低阶的特征交叉项;3)它引入了一个特征嵌入层共享的策略来避免特征工程。我们在两个实际数据集上进行了大量的实验来比较DeepFM和最先进模型之间的效果和效率。我们的实验结果表名了:1)DeepFM在两个数据集上的AUC和Logloss的表现都要好于最先进的模型;2)DeepFM相比于当下最先进有效的深度模型而言要更有效率。
在未来的研究中有两个有趣的方向。一个是探索一些策略(例如引入pooling层)来增强学习更有用的高阶特征交叉项。另一个就是在GPU集群上训练DeepFM来解决大规模数据的问题。