《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》
点击率(CTR
)预估在推荐系统中至关重要,即估计用户点击推荐 item
的概率。在很多推荐系统中,系统的目标是最大化点击次数,因为返回给用户的 item
可以根据估计的点击率进行排序。而在其它应用场景中,例如在线广告,提高平台的收入也很重要,因此可以将排序策略调整为 CTR x bid
,其中出价 bid
是平台在 item
被用户点击时获取的收益。无论哪种情况,很明显,关键在于正确预估点击率。
了解用户点击行为背后隐式的特征交互(feature interaction
)对点击率预估很重要。通过我们在主流 app
市场的研究,我们发现人们经常在用餐时间下载外卖 app
,这表明 app
类别(category
)和时间戳之间的交互(二阶交互)可以作为点击率的信号。作为第二个观察,男性青少年喜欢射击游戏和 RPG
游戏,这意味着 app
类别、用户性别、年龄的交互(三阶交互)是点击率的另一个信号。一般而言,用户点击行为背后的特征交互可能非常复杂,低阶特征交互和高阶特征交互都应该发挥重要作用。根据谷歌的 Wide & Deep
模型的见解,同时考虑低阶特征交互和高阶特征交互,比单独考虑任何一种情况都带来了额外的改进。
关键的挑战在于有效地建模特征交互。一些特征交互很容易理解,因此可以由专家设计(例如前面的例子)。然而:
大多数其它特征交互都隐藏在数据中,并且难以先验地识别(例如,经典的关联规则 “尿布和啤酒” 是从数据中挖掘出来的,而不是由专家发现的),只能通过机器学习自动捕获。
即使对于易于理解的交互,专家似乎也不太可能对它们进行详尽(exhaustively
)的建模,尤其是当特征数据量很大时。
尽管简单,广义线性模型(例如 FTRL
)在实践中表现出不错的表现。然而,线性模型缺乏学习特征交互的能力。一种常见的做法是在线性模型的特征向量中手动包含 pairwise
的特征交互。但是这种方法很难推广到建模高阶特征交互、或者建模训练数据中从未出现或者很少出现的特征交互。
因子分解机(Factorization Machine: FM
)将 pairwise
特征交互建模为特征之间潜在向量的内积,并显示出非常有希望的结果。虽然理论上 FM
可以建模高阶特征交互,但是实际上由于复杂性太高,因此通常只考虑二阶特征交互。
作为学习特征 representation
的强大方法,深度神经网络具有学习复杂特征交互的能力。一些想法将 CNN
和 RNN
扩展到 CTR
预测,但是基于 CNN
的模型倾向于相邻特征之间的交互,而基于 RNN
的模型更适合具有顺序依赖性(sequential dependency
)的点击数据。FNN
模型在应用 DNN
之前预训练了 FM
,因此模型受到 FM
能力的限制。PNN
在 embedding
层和全连接层之间引入了 product layer
。正如 Wide & Deep
论文所述,PNN
和 FNN
像其它深度模型一样很少捕获低阶特征交互,而低阶特征交互对于 CTR
预测也是必不可少的。为了同时建模低阶特征交互和高阶特征交互,Wide & Deep
模型结合了线性模型 (wide
部分)和深度模型(deep
部分)。在 Wide & Deep
模型中,wide
部分和 deep
部分分别需要两个不同的输入,并且 wide
部分的输入仍然依赖于专业的特征工程。
可以看到,现有模型偏向于低阶特征交互(如 FM
模型)、或者偏向于高阶特征交互(如 DNN
模型)、或者依赖于手动特征工程(如 Wide & Deep
)。在论文 《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》
中,论文证明了有可能导出一个学习模型,该模型能够以端到端的方式同时学习低阶特征交互和高阶特征交互,并且除了原始特征之外无需任何手动特征工程。论文的主要贡献如下:
论文提出了一种新的神经网络模型 DeepFM
,它集成了 FM
和 DNN
架构。DeepFM
建模了像 FM
这类的低阶特征交互,也建模了像 DNN
这类的高阶特征交互。和 Wide & Deep
模型不同,DeepFM
可以在没有任何特征工程的情况下进行端到端的训练。
DeepFM
可以有效地训练,因为它的 wide
部分和 deep
部分共享相同的输入和 embedding
向量,这和 Wide & Deep
不同。在 Wide & Deep
中,输入向量的维度可能很大,因为在它的 wide
部分的输入向量包含手动设计的 pairwise
特征交互,这大大增加了模型的复杂性。
论文在 benchmark
数据和商业数据上评估了 DeepFM
,结果显示:和现有的 CTR
预测模型相比,DeepFM
有一致的提升。
相关工作:本文提出了一种新的深度神经网络用于点击率预测。最相关的领域是推荐系统中的点击率预测和深度学习。这里我们讨论这两个领域的相关工作。
点击率预测在推荐系统中起着重要作用。除了广义线性模型和 FM
之外,还有一些其它模型用于 CTR
预测,例如 tree-based
模型(《Practical lessons from predicting clicks on ads at facebook》
)、tensor-based
模型(《Pairwise interaction tensor factorization for personalized tag recommendation》
)、支持向量机、贝叶斯模型等等。
另一个相关的领域是推荐系统中的深度学习。在正文部分我们会提到几种用于 CTR
预测的深度学习模型,这里不再赘述。
除了 CTR
预测之外,推荐任务中还有几种深度学习模型。
《Restricted boltzmann machines for collaborative filtering》
提出通过深度学习来改进协同过滤。
《Improving content-based and hybrid music recommendation using deep learning》
通过深度学习提取内容特征来提高音乐推荐的性能。
《Deep CTR prediction in display advertising》
设计了一个深度学习网络来考虑展示广告的图像特征和基础特征。
《Deep neural networks for youtube recommendations》
为 YouTube
视频推荐开发了一个两阶段深度学习框架。
假设训练集
user
和 item
的、一共 field
数据。这些 field
可能是离线的categorical
或者连续的。对于离散 field
,我们进行 one-hot
编码从而得到 one-hot
向量。对于连续 field
,我们直接使用特征本身,或者先离散化(discretization
)之后再进行 one-hot
编码。
假设样本 field
representation
为
其中
ground truth
,表示用户是否点击。
通常 CTR
预估任务就是构建模型 item
的概率。
我们的目标是同时学习低阶特征交互和高阶特征交互。为此,我们提出了一个基于 Factorization-Machine: FM
的神经网络 DeepFM
。如下图所示,DeepFM
由共享相同输入的两个组件组成:FM
组件和 deep
组件。
对于特征 FM
组件从而建模二阶特征交互,同时被馈入 deep
组件从而建模高阶特征交互。
所有参数,包括
其中:CTR
;FM
组件的输出;deep
组件的输出。
FM
组件:如下图所示,该部分是一个 FM
,用于学习一阶特征和二阶交叉特征。
FM
组件由两种操作组成:加法( Addition
)和内积(Inner Product
):
其中: field
的 embedding
维度,
第一项 Addition Unit
用于对一阶特征重要性建模,第二项 Inner Product
用于对二阶特征重要性建模。
deep
组件:如下图所示,该部分是一个全连接的前馈神经网络,用于学习高阶特征交互。
与图像数据、音频数据作为输入(输入纯粹是连续的和稠密的)的神经网络神经网络相比,CTR
预测的输入有很大的不同,这就需要新的网络架构设计。具体而言,CTR
预测的原始特征输入向量通常是高度稀疏的、超高维的、混合了离散和连续的、并按照 field
分组(如性别、位置、年龄)。这建议在馈入第一个隐层之前,embedding
层将输入向量压缩为低维的、稠密的实值向量,否则网络难以训练。
下图重点显示了从输入层到 embedding
层的子网结构。我们想指出这个子网结构的两个有趣的特性:
虽然不同输入 field
特征向量的长度可以不同,但是它们的 embedding
长度
FM
中的潜在特征向量 field
特征向量压缩为 embedding
向量。
在FNN
中,FM
预训练并用于网络权重的初始化。在这项工作中,我们没有像 FNN
那样使用 FM
的潜在特征向量来初始化网络,而是将 FM
模型作为我们整体学习架构的一部分。因此,我们消除了 FM
预训练的需要,而是以端到端的方式联合训练整个网络。
假设 embedding
层的输出为:field i
的 embedding
向量,
其中: l
层,bias
向量。
最终有:
deep
部分的网络深度。
DeepFM
和其它神经网络模型的区别:
FNN
:FNN
是一个 FM
初始化的前馈神经网络。FM
预训练策略有两个限制:embedding
参数可能会受到 FM
的过度影响(over affected
);预训练阶段引入的开销降低了模型效率。此外,FNN
仅捕获了高阶特征交互。
相比之下,DeepFM
不需要预训练,可以同时学习高阶特征交互和低阶特征交互。
PNN
:为了捕获高阶特征交互,PNN
在embedding
层和第一个隐层之间强加了一个 product layer
。根据product
运算的不同类型,有 IPNN
、OPNN
、PNN*
三种变体,其中 IPNN
基于向量的内积、OPNN
基于向量的外积、PNN*
同时采用了 IPNN
和 OPNN
结果的拼接。
为了使得计算更高效,作者提出了内积和外积的近似计算:通过移除一些神经元来近似计算内积;通过将
然而,我们发现外积结果不如内积结果可靠,因为外积的近似计算丢失了很多信息,使得结果不稳定。内积虽然更可靠,但是仍然存在计算复杂度高的问题,因为 product layer
的输出连接到第一个隐层的所有神经元。
与 FNN
一样,所有 PNN
都忽略了低阶特交互。
与 PNN
不同的是,DeepFM
中的 product layer
(即 FM
的二阶交互)的输出仅连接到最终输出层(一个神经元)。并且 DeepFM
同时考虑了高阶特征交互和低阶特征交互。
Wide & Deep
:虽然 Wide&Deep
也可以对低阶特征和高阶特征同时建模,但是 wide
部分需要人工特征工程,而这需要业务专家的指导。相比之下,DeepFM
直接处理原始特征,不需要任何业务知识。
另外,Wide & Deep
的一个直接扩展是:使用 FM
代替 wide
部分的LR
模型,记作 FM & DNN
模型,原始的 Wide & Deep
模型记作 LR & DNN
模型。
FM & DNN
模型更类似于 DeepFM
模型,但是 DeepFM
在 FM
和 DNN
之间共享 embedding
特征。这种特征 embedding
的共享策略同时通过低阶特征交互和高阶特征交互来影响特征的 representation
学习,使得学到的特征 representation
更加精确。
总而言之,DeepFM
和其它深度模型在四个方面的关系如下表所示。可以看到,DeepFM
是唯一不需要预训练和特征工程的模型,同时捕获了低阶特征交互和高阶特征交互。
这里我们根据经验比较 DeepFM
和其它 SOTA
的模型。评估结果表明,我们的 DeepFM
比任何其它SOTA
模型更有效,并且 DeepFM
的效率可以与其它模型中最好的模型相媲美。
数据集:
Criteo Display Ads
数据集:用于预测广告点击率的数据集,包含 13
个连续(continuous
)特征,26
个离散(categorical
)特征。
数据包含 7
天的 11 GB
用户日志(约4100万
条记录)。我们将数据集拆分为 90%
训练集和 10%
测试集。
Company*
数据集:为了验证 DeepFM
在实际工业CTR
预估中的性能,我们在Company*
数据集上进行了实验。
我们从华为 App Store
的游戏中心收集连续 7
天的用户点击数据作为训练集,第八天的数据作为测试集,整个训练集+测试集约 10
亿条记录。在这个数据集中,有 app
特征(如 id
、类目category
等等)、用户特征(如用户已经下载过的 app
)、上下文特征(如操作时间)。
评估指标:AUC
和 Logloss
。
baseline
方法:我们比较了 9
种模型,包括:LR, FM, FNN, PNN(3种变体), Wide & Deep, DeepFM
。
另外,在 Wide & Deep
模型中,为了省去手动特征工程的工作量,我们将 FM
代替了 LR
作为 wide
部分。这个变体我们称作 FM & DNN
,原始的 Wide & Deep
我们称作 LR & DNN
。
配置:对于Company*
数据集,通过超参数搜索来获取最佳超参数。对于 Criteo
数据集,超参数为:
FNN
和 PNN
:dropout rate = 0.5
;采用Adam
优化器;三层网络结构,每层的神经元数量分别为 400 - 400 - 400
;IPNN
模型的激活函数为为tanh
,其它模型的激活函数为 relu
。
DeepFM
:与 FNN/PNN
相同。
LR
:使用 FTRL
优化器。
FM
:采用Adam
优化器;FM
的 embedding
向量维度为 10
。
模型效率( efficiency
)对比:深度学习模型的效率对现实世界的application
很重要。我们通过以下公式比较不同模型在 Ctriteo
数据集上的效率:
实验结果如下图所示,包括在 CPU
(左图)和 GPU
(右图)上的测试。可以看到:
FNN
的预训练步骤拉低了它的训练效率。
虽然 IPNN
和 PNN*
在 GPU
上的加速比其它模型更高,但是由于内积的低效运算,IPNN
和 PNN*
的计算成本仍然很高。
DeepFM
在所有模型中,训练效率几乎是最高的。
效果( effectiveness
)比较:不同模型在这两个数据集上的点击率预测性能如下表所示。可以看到:
学习特征交互提高了点击率预测模型的性能。这个观察结果是因为 LR
模型(这是唯一不考虑特征交互的模型)比其它模型表现更差。
作为最佳模型,DeepFM
在 Company*
和 Criteo
数据集上的 AUC
比 LR
分别高出 0.86%
和 4.18%
(Logloss
方面分别为 1.15%
和 5.60%
)。
同时学习高阶特征交互和低阶特征交互,可以提高 CTR
预测模型的性能。DeepFM
优于仅学习低阶特征交互的模型(即 FM
),也优于仅学习高阶特征交互的模型(即 FNN、IPNN、OPNN、PNN*
)。
和第二好的模型相比,DeepFM
在 Company*
和 Criteo
数据集上的 AUC
分别提高了 0.37%
和 0.25%
(Logloss
方面分别为 0.42%
和 0.29%
)。
同时学习高阶特征交互和低阶特征交互,并且对高阶特征交互和低阶特征交互共享 feature embedding
,可以提高 CTR
预测模型的性能。
DeepFM
优于使用单独特征 embedding
来学习高阶特征交互和低阶特征交互的模型(即 LR & DNN
和 FM & DNN
)。和这两个模型相比,DeepFM
在 Company*
和 Criteo
数据集上的 AUC
分别提高了 0.48%
和 0.33%
(Logloss
方面分别为 0.61%
和 0.66%
)。
总体而言,我们提出的 DeepFM
模型在 Company*
数据集上的 AUC
和 Logloss
分别超过了竞争对手 0.37%
和 0.42%
。事实上,离线 AUC
评估的小幅提升很可能会导致在线 CTR
的大幅提升。正如 Wide & Deep
报道的,相比较于 LR
,Wide & Deep
离线 AUC
提高了 0.275%
,但是在线 CTR
提高了 3.9%
。 Company*’s App Store
每天的营业额为数百万美元,因此即使点击率提高几个百分点,每年也会带来额外的数百万美元。
我们在 Company*
数据集上研究了不同深度模型的不同超参数的影响,其中包括:激活函数、dropout
比率、每层神经元数量、隐层的层数、网络形状。
激活函数:根据论文 《 Product based neural networks for user response prediction》
,relu
和 tanh
比 sigmoid
更适合深度模型。这里我们比较了 relu
和 tanh
激活函数,结果如下图所示。
可以看到:几乎所有的深度学习模型中,relu
比 tanh
效果更好。但是 IPNN
是例外,可能原因是 relu
导致了稀疏性。
dropout
:我们将 dropout
设置为 [1.0, 0.9, 0.8, 0.7, 0.6, 0.5]
,结果如下图所示。当设置正确的 dropout
比例(从 0.6~0.9
)时,模型可以达到最佳性能。这表明向模型添加一定的随机性可以增强模型的鲁棒性。
每层的神经元数量:当其它超参数保持不变,增加每层的神经元数量会带来复杂性。
如下图所示,增加神经元数量并不总是带来好处。例如,当每层神经元数量从 400
增加到 800
时,DeepFM
性能稳定,而 OPNN
的表现更差。这是因为过于复杂的模型很容易过拟合。在我们的数据集中,每层 200 ~ 400
个神经元是个不错的选择。
隐层的层数:如下图所示,一开始增加隐层的层数会提高模型性能。但是,如果隐层的层数不断增加,模型的性能就会下降。这种现象也是因为过拟合。
网络形状:我们测试了四种不同的网络形状:恒定形(constant
)、递增形(increasing
)、递减形(decreasing
)、菱形(diamond
)。
当我们改变网络形状时,我们固定隐层的数量和神经元总数。例如,当隐层的数量为 3
、神经元总数为 600
时,四种不同形状的每层神经元数量为:恒定性 200 - 200 -200
、递增形 100 - 200 - 300
、递减形 300 - 200 - 100
、菱形 150 - 300 - 150
。
实验结果如下图所示,可以看到:恒定形网络在经验上优于其它三种形状,这与《Exploring strategies for training deep neural networks》
的研究结果一致。