当前位置:   article > 正文

【推荐算法】DeepFM模型:A Factorization-Machine based Neural Network for CTR Prediction

deepfm

1、DeepFM背景

DeepFM可以看做是在FM算法的基础上衍生出来的算法,DeepFM通过将FM与DNN相结合,联合训练FM模型和DNN模型,用FM做特征间的低阶组合,用DNN做特征间的高阶组合。相比于谷歌最新的Wide&Deep模型,DeepFM模型的Deep component和FM component从Embedding层共享数据输入,同时不需要专门的特征工程。

DeepFM广泛应用于CTR预估领域,通过用户的点击行为来学习潜在的特征交互在CTR中至关重要。隐藏在用户点击行为背后的特征交互,无论是低阶交互还是高阶交互都可能会对最终的CTR产生影响。FM算法,可以对特征间成对的特征交互以潜在向量内积的方式进行建模,并表现出不错的效果。然而,FM由于高的复杂性不能进行高阶特征交互,常用的FM特征交互通常局限于二阶。其他的基于神经网络的特征交互的方法要么侧重于低阶或者高阶的特征交互,要么依赖于特征工程,因此,DeepFM出现了。DeepFM表明,通过一个端到端的方式学习所有阶特征之间的交互并且不严格依赖特征工程也是可行的。

DeepFM小结:

  • DeepFM是一个结合了FM结构和DNN结构的新的神经网络模型,并且DeepFM能够像FM那样进行低阶特征间的交互,也能够像DNN那样进行高阶特征间的交互。同时,DeepFM能够进行端到端的训练且不依赖于特征工程。
  • DeepFM的FM component和Deep component共享相同的输入,因此能够完成高效训练。

2、DeepFM算法细节

假设训练数据集合的形式为:(\chi , y)\chi是一个包含m-fields的数据记录,y表示用户的点击行为。通常,y=1表示用户点击了某个item,y=0表示用户没有点击这个item。\chi可能包含绝对field和连续field,其中的绝对field由one-hot编码的向量表示,连续field可以由它本身的值表示也可以通过离散化的one-hot编码的向量表示。这样每个实例可以被转换成(x,y)的形式,其中:

这里的x通常是高维稀疏的一个d-dim向量。点击预估的实验目的就是去构建一个模型:\widehat{y} = CTRmodel(x)来预估一个用户在给定上下文场景进行一次点击的概率。

2.1 DeepFM

DeepFM意在去学习出低维和高维的特征交互,因此DeepFM是一个基于神经网络的FM模型。

2.1.1 DeepFM模型结构

DeepFM的模型结构如下图所示:

从模型结构图不难看出,DeepFM由两部分组成:FM部分和deep部分,且FM部分和deep部分共享相同的原始特征向量输入,这样可以保证DeepFM能够同时学习低阶和高阶特征组合。这样的模型结构最终保留着以下特点:

  • 不需要预训练FM得到隐向量;
  • 不需要人工特征工程;
  • 能够同时学习低阶和高阶的组合特征;
  • FM模块和Deep模块共享Feature Embedding部分,可以更快的训练,以及更精确的训练学习。

对于特征i,标量wi用来衡量这个特征的1阶重要性,向量Vi用来衡量这个特征和其他特征进行组合后的影响。Vi被输入到FM部分用于对2阶特征组合建模,同时被输入到deep部分用于对高阶特征组合建模。所有的模型参数,包括wi、Vi和其他网络参数W^{(l)}b^{(l)}通过以下的损失函数联合训练得到:

这里,\widehat{y} \epsilon (0,1)是预估的ctr,y_{FM}是FM部分的输出,y_{DNN}是deep部分的输出。

从网络结构可以看出,DeepFM模型的网络结构

  • 输入层(Sparse Features):输入数据包括类别特征和连续特征;
  • Embedding层(Dense Embeddings):该层的作用是对类别特征进行Embedding向量化,将离散特征映射为稠密特征。该层的结果同时提供给FM Layer和Hidden Layer,即FM Layer和Hidden Layer共享相同的Embedding层。
  • FM Layer:该模型主要提取一阶特征和两两交叉特征;
  • Hidden Layer:该模块主要是应用DNN模型结构,提取深层次的特征信息;
  • 输出层(Output Units):对FM Layer和Hidden Layer的结果进行Sigmoid操作,得出最终的结果。

2.1.2 DeepFM模型结构详细说明

  • 输入层(Sparse Features)

DeepFM的输入可由连续型变量和类别型变量共同组成,且类别型变量需要进行One-Hot编码。正是由于One-Hot编码,导致了输入特征变得高维且稀疏。针对高维稀疏的输入特征,DeepFM采用了word2vec的词嵌入(WordEmbedding)思想,把高维稀疏的向量映射到相对低维且向量元素都不为零的空间向量中,不同的是DeepFM根据特征类型进行了field区分,即将特征分为了不同的field。

在处理特征时候,我们需要对离散型数据进行one-hot转化,经过one-hot之后一列会变成多列,这样会导致特征矩阵变得非常稀疏。

图片

如何处理连续性特征与离散型特征,并将它们转换成field需要进一步介绍。

  • Embedding层(Dense Embeddings)

embedding层对类别特征进行embedding向量化,将离散特征映射为稠密特征。embedding层的输入就是分field的特征,也就是说embedding层完成了对不同特征按field进行了向量化FM层和Hidden层共享的就是embedding层的输出结果。

  • FM层(FM Layer)

FM Layer的输入是embedding层的输出,FM Layer主要是提取一阶特征和两两交叉的二阶特征。如上图所示,Field_i、Field_j、Field_m中的黄色圆点指向Addition节点的黑线表示的是FM直接对原始特征做的一阶计算,而embedding层每个field对应的embedding会有两条红线连接到Inner Product节点表示的是FM对特征进行的二阶交叉计算。

  • 隐藏层(Hidden Layer)

Hidden Layer主要是应用DNN的模型结构,用于提取深层次的特征信息。Hidden Layer的输入也是embedding层的输出(与FM Layer共享输入)。从embedding层输出到Hidden Layer是一种全连接计算。

  • 输出层(Output Units)

输出层主要对FM Layer和Hidden Layer的结果进行Sigmoid操作,得出最终的结果。

2.2 FM Component

DeepFM中的FM部分是一个factorization machine,关于FM可以参考这篇博客【推荐系统】推荐算法系列之FM:Factorization Machines。除了所有特征间的一个线性组合(1阶),FM模型也支持以独立特征向量内积形式的成对特征组合(2阶)。相比于先前的方法,FM在处理2阶特征组合的时更有效,尤其在训练数据集是稀疏的场景。在先前的方法中,特征i和特征j的组合参数只有在特征i和特征j同时出现在相同的数据记录中才能得到训练。然而在FM中,这个参数可以通过向量Vi和向量Vj的内积的形式完成更新。这样,FM能够训练Vi(Vj)无论i(j)是否出现在数据记录中。这样很少出现在训练集中的特征组合也能够被FM很好的学习出来。

DeepFM中FM部分的输出是一个Addition单元和许多个Inner Product单元的累加和。

其中,Addition单元(<w, x>)反应1阶特征的重要性,Inner Product单元表示2阶特征组合的重要性。

FM部分模型结构

从网络结构可以看出,FM部分的网络结构

  • 输入层(Sparse Features):输入数据包括类别特征和连续特征;
  • Embedding层(Dense Embeddings):该层的作用对类别特征进行Embedding向量化,将离散特征映射为稠密特征;
  • FM Layer:该模型主要提取一阶特征和两两交叉特征;
  • 输出层(Output Units):对FM Layer的结果进行Sigmoid操作,得出最终的结果。

2.3 Deep Component

DeepFM中的deep部分是一个前馈神经网络,用来学习高阶特征组合。

DeepFM中的deep部分将一条向量输入到神经网络。通常,点击预估的任务的神经网络输入要求网络结构的设计。点击预估的原始特征输入向量通常是高度稀疏的、超高维、连续值与绝对值混合、按fields分组的形式,这就需要网络中有一个嵌入层(embedding layer)在将向量输入到第一个hidden层之前来将输入向量压缩成一个低维、实值稠密的向量,否则网络将难于训练。

DNN部分模型结构

从网络结构可以看出,DNN部分的网络结构

  • 输入层(Sparse Features):输入数据包括类别特征和连续特征;
  • Embedding层(Dense Embeddings):该层的作用对类别特征进行Embedding向量化,将离散特征映射为稠密特征;
  • Hidden Layer:该模块主要是应用DNN模型结构,提取深层次的特征信息;
  • 输出层(Output Units):对FM Layer的结果进行Sigmoid操作,得出最终的结果。

input-layer到embedding-layer的模型结构

上图展示的是input层到embedding层的网络结构,这个网络结构设计有两点需要说明:

  • 尽管不同field的输入长度不同,但是所有field都会embedding成k维
  • FM得到的隐藏特征向量V此时作为用来压缩输入field向量到embedding向量的网络权重。

解释一下上述第2点:假设k=5,首先,对于输入的一条记录,同一个field只有一个位置是1(field是one-hot的形式),那么在由输入得到dense vector的过程中,输入层只有一个神经元起作用,得到的dense vector其实就是输入层到embedding层与该神经元全连接的五条线的权重,即vi1,vi2,vi3,vi4,vi5。这五个值组合起来就是我们在FM中所提到的Vi。在FM部分和DNN部分,这一块是共享权重的,对同一个特征来说,得到的Vi是相同的。

DeepFM将FM模型和DNN模型都当作全面学习的网络结构,这一点跟一些其他的方法中通过预训练FM的隐藏向量进而对网络进行初始化的方式有些不同。这样的方法可以消除对FM的预训练,并且可以通过端到端的方式完成对整个网络的联合训练。

假设embedding层的输出可表示为:

其中,e_{i}是第i个field的embedding,m是field的数量。这样a^{(0)}被输入到DNN网络,其前向传播函数为:

其中,l是DNN每一层的网络深度,\sigma是一个激活函数。a^{(l)}是网络输出,W^{(l)}是模型权重,b^{(l)}是第l层的偏置项。经过这个网络之后,一个稠密实值特征向量被生成,然后这个稠密实值特征向量被输入到sigmoid函数进行点击预估:

这里,\left | H \right |是隐藏层的数量。

需要强调的是FM和DNN共享相同的特征embedding,这样做的好处是:

  • 可以从原始数据中学习低阶和高阶的特征组合;
  • 不需要专门的额外的特征工程(Wide&Deep模型需要特征工程)。

2.4 Hyper-Parameter Study

这部分简单的给出论文中尝试的DeepFM一些网络参数设置:

  • Activation Function:relu、tanh,相比于sigmoid,relu、tanh更适合deep模型。
  • Dropout:We set the dropout to be 1.0, 0.9, 0.8, 0.7,0.6, 0.5,Dropout影响一个神经元被保留在网络中的概率,Dropout是折中精度和网络复杂度的一种正则化技术。
  • Number of Neurons per Layer:DeepFM performs stably when the number of neurons per layer is increased from 400 to 800,In our dataset, 200 or 400 neurons per layer is a good choice,增加每层神经元的个数可能造成网络更复杂,复杂的模型容易过拟合。
  • Number of Hidden Layers:1, 3, 5, 7,增加隐藏层的数量在模型开始的时候会提升效果,但是如果隐藏层的数量一直增加可能会造成效果下降,这也是一种过拟合现象。

3、DeepFM与其他神经网络的关系

这个部分主要将DeepFM和其他点击预估的深度模型进行对比。涉及的一些模型结构图如下:

3.1 FNN

FNN是一个基于FM初始化的前馈神经网络。FNN采用的FM预训练策略可能会带来两个限制:

  • FM会过度影响embedding参数;
  • 预训练阶段的引入可能会造成效率降低。

此外,FNN只能进行高阶特征组合。而DeepFM在不需要预训练的同时,支持低阶和高阶特征组合。

3.2 PNN

为了学习高阶特征组合,PNN在embedding层和第一个hidden层之间引入了一个点积层。根据点积的计算类型,PNN有着3个变种:基于向量内积的IPNN、基于向量外积的OPNN、基于内积和外积的PNN*。

PNN中,点积层的输出被连接到第一个隐藏层的所有神经元,而DeepFM的点积层的输出只连接到最后的输出层(1个神经元)。

此外,与FNN类似,PNN也只能处理高阶特征组合。

3.3 Wide&Deep

Wide&Deep支持同时学习低阶和高阶的特征组合,它的“wide”部分需要对输入进行专门的特征工程。与之对比,DeepFM不需要专门的特征工程来控制输入,而是输入的原始数据直接进行学习。

将Wide&Deep的LR部分替换成FM部分后,网络结构和DeepFM很相似。但是,DeepFM在FM部分和deep部分共享特征embedding,这个特征embedding的共享策略影响低阶和高阶特征组合的表示,这样可以使得表示更精确。

总结,DeepFM不需要预训练和特征工程,并且能够同时学习低阶和高阶特征组合。

4、参考资料

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/827053
推荐阅读
相关标签
  

闽ICP备14008679号