DeepFM论文详解

目前的CTR预估模型,实质上都是在“利用模型”进行特征工程上狠下功夫。传统的LR,简单易解释,但特征之间信息的挖掘需要大量的人工特征工程来完成。由于深度学习的出现,利用神经网络本身对于隐含特征关系的挖掘能力,成为了一个可行的方式。DNN本身主要是针对于高阶的隐含特征,而像FNN(利用FM做预训练实现embedding,再通过DNN进行训练,有时间会写写对该模型的认识)这样的模型则是考虑了高阶特征,而在最后sigmoid输出时忽略了低阶特征本身。

鉴于上述理论,目前新出的很多基于深度学习的CTR模型都从wide、deep(即低阶、高阶)两方面同时进行考虑,进一步提高模型的泛化能力,比如DeepFM。

很多文章只是简单对论文进行了翻译,本文重点则在于详细分析模型原理,包括给出论文中略过的模型推导细节,鉴于本人小白,因此如有问题,欢迎各位大牛指出改正。之后会尝试复现论文。好了废话不多说,下面开始装逼。

首先给出论文模型图,由于文章画的很好,就直接贴图了:

可以看到,整个模型大体分为两部分:FM和DNN。简单叙述一下模型的流程:借助FNN的思想,利用FM进行embedding,之后的wide和deep模型共享embedding之后的结果。DNN的输入完全和FNN相同(这里不用预训练,直接把embedding层看作一层的NN),而通过一定方式组合后,模型在wide上完全模拟出了FM的效果(至于为什么,论文中没有详细推导,本文会稍后给出推导过程),最后将DNN和FM的结果组合后激活输出。

embedding和FM

之所以放在一样说,主要是模型在embedding的过程中,也是借助了FM的方式,首先说明下二阶FM的形式:

其中向量V就是对应特征的隐向量(不太懂FM可以先学习下该算法)。而在目前很多的DNN模型中,都是借助了FM这种形式来做的embedding,具体推导如下:

同样借助原文的图,这里k表示隐向量的维数,Vij表示第i个特征embeding之后在隐向量的第j维。假设我已经给出了V矩阵,

其中第5-15个特征是同一个field经过one-hot编码后的表示,这是隐向量按列排成矩阵,同时,它也可看作embedding层的参数矩阵,按照神经网络前向传播的方式,embedding后的该slot下的向量值应该表示为:

可以看到这个结果就是一个5维的向量,而这个普通的神经网络传递时怎么和FM联系到一起的,仔细观察这个式子可以发现,由于是离散化或者one-hot之后的X,所以对于每一个field的特征而言,截断向量X都只有一个值为1,其他都为0。那么假设上述slot的V中,j为7的特征值为1,那么矩阵相乘之后的结果为:

从结果中可以看到,实质上,每个slot在embedding后,其结果都是one-hot后有值的那一维特征所对应的隐向量,FNN也是同样如此。看到这里,在来解释模型中FM部分是如何借助这种方式得到的。回到模型的示意图,可以看到在FM测,是对每两个embedding向量做内积,那么我们来看,假设两个slot分别是第7和第20个特征值为1:

是不是感觉特别熟悉,没错,这个乘积的结果就是FM中二阶特征组合的其中一例,而对于所有非0组合(embedding向量组合)求和之后,就是FM中所有二阶特征的部分,这就是模型中FM部分的由来。

当然,FM中的一阶特征,则直接在embedding之前对于特征进行组合即可,这个很简单,就不解释了。

模型当中的FM中涉及的参数同样会参与到梯度下降中,也就是说embedding层不会只是初始化使用,实质上这里可以理解为是直接用神经网络来做了embedding,无疑他比FM本身的embedding能力来得更强。

DNN

DNN部分就可说的不多了,依然采用了全连接的深度神经网络的方式,只是在最后激活输出时,会对FM和DNN的结果一起做embedding:

由于像有tensorflow这样的神器存在,搭建一个这样的神经网络模型并非难事,因此大多时候就忽略了模型本身的work方式,比如如何迭代,涉及的参数矩阵包括4个:DNN中每层的W矩阵、DNN中每层的b向量、embedding层的V矩阵(FM的二阶表示V)、FM的一阶表示w。此部分的梯度下降推导笔者会之后补上

(其中DNN部分的详细推导可参考:http://blog.csdn.net/zynash2/article/details/79360195)

你可能感兴趣的:(神经网络,推荐系统)