NFM--FM的神经网络化尝试

一:绪论:

我们都知道,无论是FM还是FMM,归根到底是一个二阶特征交叉的模型。受到组合爆炸问题的困扰,FM几乎不可能扩大到三阶以上,这就不可避免的限制了FM的表达能力(不管是一阶特征还是两辆组合的二阶特征,本质上都是线性模型,同时高阶特征对于FM模型来说,训练复杂度过高),而深度神经网络理论上可以拟合任意复杂函数,且特征表达能力强,因此可以尝试用深度神经网络去拟合FM中的二阶向量内积部分。于是就有了NFM。

二:NFM模型

1,NFM模型

FM公式:
在这里插入图片描述
NFM公式:
在这里插入图片描述
上面两个公式可以看出,FM公式的二阶向量求内积模块,可以由深度神经网络来拟合成一个函数f(X),在f(x)是NFM的核心,用来学习二阶组合特征和高阶的组合特征模式。

2,模型结构

在这里插入图片描述
2.1 Embedding Layer
和其他的DNN模型处理稀疏输入一样,Embedding将输入转换到低维度的稠密的嵌入空间中进行处理。作者稍微不同的处理是,使用原始的特征值乘以Embedding vector,使得模型也可以处理real valued feature。
2.2 Bi-Interaction Layer
Bi是Bi-linear的缩写,这一层其实是一个pooling层操作,它把很多个向量转换成一个向量,形式化如下:
在这里插入图片描述
fBI的输入是整个的嵌入向量,xi xj是特征取值,vi vj是特征对应的嵌入向量。中间的操作表示对应位置相乘。所以原始的嵌入向量任意两个都进行组合,对应位置相乘结果得到一个新向量;然后把这些新向量相加,就得到了Bi-Interaction的输出。这个输出只有一个向量。
需要说明的是:Bi-Interaction并没有引入额外的参数,而且它的计算复杂度也是线性的,和max/min pooling以及原来的拼接操作复杂度都是相同的。因为上式可以参考FM的优化方法,化简如下(想想一个矩阵):
在这里插入图片描述

它的计算复杂度是O(NK)。其中k是嵌入向量的维度,N是输入x中非零特征的个数。这个公式大家要搞懂是怎么回事哦,代码里面就是按照这个来写的。
总结,Bi-Interaction Layer实现了对二阶组合特征的建模,但是又没有引入额外的开销,包括参数数量和计算复杂度。
2.3 Hidden Layer
这个跟其他的模型基本一样,堆积隐藏层以期待来学习高阶组合特征。模型结构可以参考Wide&Deep论文的结论,一般选用constant的效果要好一些。

2.4 Prediction Layer

最后一层隐藏层zL到输出层最后预测结果形式化如下:
在这里插入图片描述
其中h是中间的网络参数。考虑到前面的各层隐藏层权重矩阵,f(x)形式化如下:
在这里插入图片描述

这里的参数为
在这里插入图片描述
,相比于FM其实多出的参数就是隐藏层的参数,所以说FM也可以看做是一个神经网络架构,就是去掉隐藏层的NFM。我们把去掉隐藏层的NFM称为NFM-0,形式化如下:
在这里插入图片描述
如果h为全1向量,那么此时NFM就是FM。
这是第一次把FM看做是神经网络来处理,这样的观点对于优化FM提供了一些新的思路。同时,像NN中常用的技巧也可以应用到这里面来,比如Dropout,实验发现在正则化FM的时候,使用Dropout比传统的L2正则化还要有效。

三: NFM vs Wide&Deep、DeepCross

最重要的区别就在于Bi-Interaction Layer。Wide&Deep和DeepCross都是用拼接操作(concatenation)替换了Bi-Interaction。
Concatenation操作的最大缺点就是它并没有考虑任何的特征组合信息,所以就全部依赖后面的MLP去学习特征组合,但是很不幸,MLP的学习优化非常困难。
使用Bi-Interaction考虑到了二阶特征组合,使得输入的表示包含更多的信息,减轻了后面MLP部分的学习压力,所以可以用更简单的模型,取得更好的成绩。

四:训练复杂度

上面提到过,NFM相比于FM,复杂度增加在MLP部分。所以NFM的复杂度和Wide&Deep、DeepCross是相同的,形式化如如下:

在这里插入图片描述

五:NFM训练

1 目标函数
NFM可以用于分类、回归、ranking问题,对应着不同的目标函数。

回归。square loss

分类。Hinge Loss 或 log loss

ranking。Contrastive max-margin loss
论文中以回归问题为例,使用square loss,形式化如下。这里并没有正则化项,因为作者发现在NFM中使用Dropout能够得到更好的效果。
在这里插入图片描述
2,参数估计
使用mini-batch Adagrad来进行参数估计,Adagrad是SGD的变体,特点是每个参数都有自己的学习速率。然后让参数沿着目标函数负梯度的方向进行更新,是下降最快的方向,形式化如下:
在这里插入图片描述
这里唯一需要指出的是Bi-Interaction在求梯度时是怎么做的:

在这里插入图片描述
所以,NFM的训练依旧可以是端到端的训练,只需要把Bi-Interaction插入到网络中即可。

3 Dropout
Dropout在训练过程中随机丢掉一些神经元,那么再一次参数更新中也就只会更新部分参数。可以理解成是相当于很多个小的NN取平均值。增加了模型的抗过拟合能力。在NFM中,Bi-Interaction的输出后就增加了Dropout操作,随机的丢弃了一部分的输出。随后的MLP同样应用了Dropout。
需要注意的是,在测试阶段,Dropout是不使用的,所有的神经元都会激活。

4 Batch Normalization
DNN的训练面临很多问题。其中一个就是协方差偏移(covariance shift),意思就是:由于参数的更新,隐藏层的输入分布不断的在变化,那么模型参数就需要去学习这些变化,这减慢了模型的收敛速度。
Batch Normalization就是为了解决这个问题的,形式化如下:
在这里插入图片描述
对于隐藏层的输入,BN在mini-batch数据上,把输入转换成均值为0,方差为1的高斯分布。其中的gamma、beta是两个超参数,为了扩大模型的表达能力,如果模型发现不应用BN操作更好,那么就可以通过学习这两个参数来消除BN的影响。NFM中Bi-Interaction Layer的输出就是MLP的第一个输出,包括后面所有隐藏层的输入都需要进行Batch Normalization。
注意,在测试预测的时候,BN操作同样有效,这时的均值和方差在整个测试集上来进行计算。

六: 实验结果

FM相当于是去掉DNN的NFM,论文中给出的数据是只用了一个隐藏层的NFM,相比于FM性能提升了7.3%;NFM只用了一个隐藏层,相比于3个隐藏层的Wide&Deep,和10个隐藏层的DeepCross,NFM用更简单的模型,更少的参数得到了性能的提升。

论文中对比了FM、Wide&Deep模型,效果不用说肯定是NFM最好,这里就不贴图了,感兴趣的小伙伴可以去原论文中查看。此处,只给出一些重要的结论:

Dropout在NFM中可以有效的抑制过拟合

Batch Normalization在NFM中可以加快训练速度

NFM使用一个隐藏层得到了最好的效果

如果用FM来pre-train嵌入层,NFM会收敛的非常快,但是NFM最终的效果并没有变好。说明NFM对参数有很好的鲁棒性。

模型性能基本上随着Factor的增加而提升。Factor指Embedding向量的维度。
总结
NFM主要的特点如下:

NFM核心就是在NN中引入了Bilinear Interaction(Bi-Interaction) pooling操作。基于此,NN可以在low level就学习到包含更多信息的组合特征。

通过deepen FM来学校高阶的非线性的组合特征

所以,依旧是FM+DNN的组合套路,不同之处在于如何处理Embedding向量,这也是各个模型重点关注的地方。现在来看,如何用DNN来处理高维稀疏的数据并没有一个统一普适的方法,业内依旧在摸索中。
完整代码参考Github: https://github.com/gutouyu/ML_CIA

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值