计算广告CTR----DeepFM学习笔记

论文:《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》

Abstract

  CTR预估中,一个很重要的内容就是去挖掘点击背后隐藏的特征交互(interaction),尽管取得了很大的进展,现有的方法似乎对低阶或高阶交互有很大的偏向,或者需要专门的特性工程。文章提出了DeepFM模型,能够实现端到端训练,不需要额外的特征工程,并且可以自动地提取交叉特征。该模型DeepFM在一种新的神经网络体系结构中结合了分解机的推荐能力和深度学习学习特征能力。与谷歌最新的Wide&deep相比,DeepFM对其“Wide和“deep“部分的输入是共享的,除了原始功能之外,不需要进行特征工程。综合实验验证了DeepFM对现有CTR预测模型的有效性和有效性,包括基准数据和商业数据。
  现有的一些模型都不能很好地解决这个问题。基于FTRL的LR,线性模型无法实现交叉。FM,理论上可以实现任意阶交叉,但出于复杂度考虑往往只做到二阶交叉。CNN,只适合相邻特征之间关联程度大的数据。RNN,只适合具有时间依赖性的数据。FNN和PNN,专注高阶交叉,缺乏低阶交叉。Wide&Deep,仍然部分依赖与人工特征工程。


Introduction

点击率(CTR)的预测在推荐系统中至关重要,在推荐系统中,任务是估计用户单击推荐项的概率。在许多推荐系统中,目标是最大限度地提高点击次数,因此返回给用户的项目可以按照估计的CTR进行排序;
              计算广告CTR----DeepFM学习笔记_第1张图片
  对于CTR预测来说,了解用户点击行为背后隐含的特征交互是非常重要的。通过我们在一个主流应用市场的研究,我们发现人们通常会在用餐时间下载食品递送应用程序,这表明应用程序类别和时间戳之间的(订单)交互可以作为CTR的一个信号。作为第二个观察,男性青少年喜欢射击游戏和RPG游戏,这意味着应用程序类别、用户性别和年龄的(第3级)交互是CTR的另一个信号。一般来说,用户点击行为背后的这些特性交互可能是非常复杂的,其中低阶和高阶功能交互都应该扮演重要的角色。根据google的Wide&DeepModel的讲到,考虑低阶和高阶功能交互比单独考虑这两种情况都带来了额外的改进。
  关键的挑战在于有效地建模特征交互。一些特征交互可以很容易理解,因此可以由专家设计(如上面的实例)。 但是,大多数其他功能交互都隐藏在数据中并且难以识别先验(例如,经典的关联规则“尿布和啤酒”是从数据中挖掘出来的,而不是由专家发现的),这只能通过机器学习自动捕获。 即使对于易于理解的交互,专家似乎也不可能对其进行详尽的建模,尤其是当特征数量很大时。
  尽管它们很简单,但是诸如FTRL之类的广义线性模型在实践中表现出了不错的性能。 然而,线性模型缺乏学习特征交互的能力,并且通常的做法是在其特征向量中手动包括成对特征交互。 这种方法难以概括为模拟高阶特征交互或者从未或很少出现在训练数据中的那些。 分解机器(FM)模型成对特征相互作用作为特征之间潜在向量的内积和显示出有希望的结果。 虽然原则上FM可以模拟高阶特征交互,但实际上通常由于高复杂性而仅考虑2阶特征交互。
  作为学习特征表示的有效方法,深度神经网络具有学习复杂特征交互的潜力。一些想法扩展了CNN和RNN用于CTR预测,但是基于CNN的模型偏向于相邻特征之间的相互作用,而基于RNN的模型更适合具有顺序依赖性的点击数据。研究特征表示并提出因子分解 - 机器支持的神经网络( FNN)。该模型在应用DNN之前预先训练FM,因此受到FM能力的限制。通过在嵌入层和完全连接层之间引入产品层,研究特征交互,并提出基于产品的神经网络(PNN)。如PNN和FNN所述,与其他深度模型一样,捕获很少的低阶特征交互,这对于CTR预测也是必不可少的。模拟低和高阶特征交互,提出了一个有趣的混合网络结构(Wide & Deep),它结合了线性(“wide”)模型和深度模型。在该模型中,“wide part” 和“deep part”,分别需要两个不同的输入,“wide part”的输入仍然依赖于特征工程。

DeepFM

  DeepFM由两部分组成:FM component + deep component,两者共享同一个输入。每个特征 xi,有一个权重 wi 用于FM一次项计算,一个 k 维的 latent vector Vi 用于FM二次项计算,Embedding之后还会输入到 deep component。所有参数,包括FM的参数和神经网络的参数,是联合训练的(joint training):

              这里写图片描述


FM Component

              这里写图片描述
                     计算广告CTR----DeepFM学习笔记_第2张图片

Deep Component

                    计算广告CTR----DeepFM学习笔记_第3张图片
Deep component 是一个前向NN,用于学习更高阶的交叉特征。原始的高维稀疏特征向量被Embedding层压缩成低维稠密特征向量,然后再送入NN的hidden layer。
                     计算广告CTR----DeepFM学习笔记_第4张图片
Embedding是对每一个field做的,虽然field vector长短不一,但经过Embedding之后,会变成定长 k。一个field里的每个特征xi对应一个k维Vi,比如上图第一个特征x1对应V1=[V11,V12,⋯,V1k],只是在这条样本中x1=0,所以V1得不到训练,x2=1所以V2能得到训练。
Embedding层的输出是一m×k维向量,可以表示为a=[e1,e2,⋯,em],ei表示 field i 的 Embedding。这个向量将作为DNN的第一层输入,之后每一层和前一层的关系都可表示为下式,最终DNN的输出是 :
                           这里写图片描述(假设总共有H层隐层)
                            这里写图片描述阿尔法是激活函数
FM就是整体结构的一部分,跟着DNN一起训练。


DeepFM和其他神经网络的关系

计算广告CTR----DeepFM学习笔记_第5张图片

FNN:

FNN is a FM-initialized feedforward neural network.
FNN使用预训练的FM来初始化DNN,然后只有Deep部分,不能学习低阶组合特征。

FNN缺点:
  1. Embedding的参数受FM的影响,不一定准确
  2. 预训练阶段增加了计算复杂度,训练效率低
  3. FNN只能学习到高阶的组合特征。模型中没有对低阶特征建模。

PNN:

为了捕获高阶特征。PNN在第一个隐藏层和embedding层之间,增加了一个product layer。
根据product的不同,衍生出三种PNN:IPNN,OPNN,PNN* 分别对应内积、外积、两者混合。
作者为了加快计算,采用近似计算的方法来计算内积和外积。

  内积:通过剔除神经元来近似计算内积
  外积:把m*k维的vector转换成k维度的vector。由于外积丢失了较多信息,所以一般没有内积稳定。
  但是内积的计算复杂度依旧非常高,原因是:product layer的输出是要和第一个隐藏层进行全连接的。

PNN缺点:
  和fnn一样,所有pnn都忽略低阶特征交互.

Wide & Deep

设计的初衷是想同时学习低阶和高阶组合特征,但是wide部分需要领域知识进行特征工程。

Wide部分可以用LR来替换,这样的话就和DeepFM差不多了。
Wide&Deep缺点:
  需要特征工程提取低阶组合特征

DeepFM优点:

  1. 没有预训练(no pre-training)
  2. 共享Feature Embedding,没有特征工程(no feature engineering)
  3. 同时学习低阶和高阶组合特征(capture both low-high-order interaction features)

计算广告CTR----DeepFM学习笔记_第6张图片


实验
  在Kaggle比赛中使用的公开数据集Criteo Dataset与私有数据集中对LR,FM,FNN,PNN,Wide&Deep,与DeepFM模型进行对比实验。在性能评估中,在GPU与CPU两种计算模式下,DeepFM几乎均为最有效的模型。在有效性评估中,AUC与LogLoss两种评价指标下,DeepFM均达到了最优的结果。


超参数选择

激活函数
计算广告CTR----DeepFM学习笔记_第7张图片

dropout概率

计算广告CTR----DeepFM学习笔记_第8张图片

神经元个数
计算广告CTR----DeepFM学习笔记_第9张图片

隐层层数
计算广告CTR----DeepFM学习笔记_第10张图片

网络形状
计算广告CTR----DeepFM学习笔记_第11张图片

计算广告CTR----DeepFM学习笔记_第12张图片

如有问题请留言!

你可能感兴趣的:(机器学习算法)