八、NFM
FM
是一个有效捕捉二阶特征交互的方案,但是它仅能以线性的方式交互,无法学得真实世界数据的非线性关系,因此模型的表达能力较弱。而
DNN
(如Wide&Deep、DeepCrossing
)虽然可以学习非线性特征交互,但是深度网络难以训练。论文
《NeuralFactorizationMachinesforSparsePredictiveAnalytics》
提出了Neural Factorization Machine:NFM
模型,该模型结合了FM
建模二阶特征交互中的线性,以及DNN
建模高阶特征交互中的非线性。- 和
FM
相比,FM
可以作为NFM
的一个特例,因此NFM
表达能力比FM
更强。 - 和
Wide&Deep、DeepCrossing
相比,NFM
网络结构更浅,预测能力更强,更容易训练和调整。
- 和
人工特征工程、
FM
、DNN
的缺点:人工特征工程的缺点:
- 成本很高,因为它需要大量的工程设计、大量的领域知识从而设计有效的特征。
- 即使针对某个问题开发出有效特征,该方案无法推广到新的问题或领域。
FM
的缺点:模型使用一阶特征、二阶交叉特征的线性组合,模型简单,表达能力较弱。DNN
的缺点:在信息检索和数据挖掘任务中,大多数数据都是天然稀疏的。尽管DNN
具备从dense
数据中学习pattern
的强大能力,但是目前还不清楚如何配置网络从而使得模型能够从sparse
数据中有效的学习pattern
。另外,
DNN
还存在优化困难。大多数DNN
首先学习embedding
向量,然后将embedding
向量拼接起来送入后续的deep
层来学习特征之间的交互。仅仅拼接embedding
向量并没有包含多少特征交互信息,必须通过接下来的deep
层来学习特征交互。但是
deep
层太深又容易导致优化问题,如:梯度消失、梯度爆炸、过拟合、网络退化degradation
等问题。为说明该问题,我们绘制了
Wide&Deep
以及DeepCrossing
在每个epoch
的train error
和test error
。其中Wide&Deep
采用3层双塔结构,DeepCrossing
采用 10层残差网络。从左图可知:从头训练这两个模型比
FM
模型还要差(测试误差)。Wide&Deep
测试误差相对较高,可能是因为模型退化问题;DeepCrossing
的训练误差最低但是测试误差最高,说明发生了严重的过拟合。从右图可知:当采用
FM
初始化模型的embedding
向量之后(可以视为预训练阶段),两个模型的性能头提升(大约11%
)。对于
Wide&Deep
,模型退化问题得到解决,因为现在它的训练误差要低得多,而且测试误差也比FM
要好。对于
DeepCrossing
,模型仍然遭受严重过拟合,且测试误差比FM
要高。
以上问题表明:
DNN
模型的优化困难。
NFM
模型引入了Bi-Interaction pooling
二阶交叉池化层,然后再二阶交叉池化层上方堆叠非线性全连接层。- 与
FM
方法相比,NFM
可以视为深层的FM
,它在FM
的基础上提升了对高阶特征交叉和非线性特征交叉建模的能力,提升了模型的能力。 - 与传统的
DNN
方法仅将底层embedding
向量拼接再一起或者取均值相比,二阶交叉池化层对交叉信息进行编码,为后续的全连接层提供更有意义的信息。
- 与
NFM
模型首次在神经网络模型中引入Bi-Interaction pooling
操作,并为FM
提供了基于神经网络的解释。
8.1 模型
给定经过
one-hot
编码之后的输入向量 ,其中特征 表示第 个特征不存在。则NFM
的预测结果为:- 类似
FM
,NFM
的第一项为全局偏置,第二项为一阶特征。 - 与
FM
不同,NFM
的第三项 对交叉特征进行建模,它是一个多层前馈神经网络,包含embedding
层、Bi-Interaction
层、Hidden
层、输出层。如下图所示(仅仅包含 )。
- 类似
embedding
层将每个feature
映射到一个dense vector representation
,即特征 映射到向量 。一旦得到
embedding
向量,则输入 就可以表示为:由于输入 的稀疏性, 只需要保存非零的特征。
注意:这里使用输入特征 来调整
embedding
向量,而不是简单的从embedding table
中查找。这样做的好处是可以统一处理实值特征real valued feature
。Bi-Interaction
层对输入的 执行池化操作,将一组embedding
向量(即一个矩阵)转换为一个向量,该操作称作Bi-Interaction pooling
操作:其中: 是逐元素乘法; 是一个 维向量,它在
embedding
空间编码了二阶交叉特征。Bi-Interaction
层有两个优秀的特性:Bi-Interaction
层并没有引入任何额外的模型参数Bi-Interaction
层可以在线性时间内有效计算:其中 表示 。
由于输入 的稀疏性,我们可以在 的时间内计算
Bi-Interaction pooling
,其中 表示输入中非零项的数量。
这些性质意味着
Bi-Interaction
层对二阶交叉特征建模的代价很低。另外,
Bi-Interaction
层也支持求导运算:Hidden
层是一组全连接层,用于捕获高阶特征交叉:其中 为隐层数量, 为激活函数。
输出层用于输出预测得分: 。
最终模型为:
模型的参数为: 。和
FM
相比,NFM
多了 的部分。和浅层、线性的
FM
模型相比,可以认为FM
是NFM
的特例。当NFM
的隐层数量为0、固定 时,NFM
的输出为:这是首次在神经网络框架下解释
FM
模型,这位改进FM
提供了更多思路。尤其是我们可以在FM
上使用各种神经网络技术来提高其学习和泛化能力。如:在Bi-Interaction
层之上使用dropout
。与传统的L2
正则化相比,该方法更有效。和现有的
DNN
模型相比,NFM
结构非常相似,除了NFM
具有Bi-Interaction
层。 如果将Bi-Interaction
层替换为拼接层,则NFM
退化为Wide&Deep
。拼接操作的一个明显不足是:它无法处理特征交互关系。因此
Wide&Deep
仅依赖于后续的更高层来捕获特征交互。而在实践中发现,深层网络难以优化和训练。Bi-Interaction
层在底层就能捕获到二阶特征交互,这使得后续层学习更高阶特征交互时更容易。
Bi-Interaction
层的时间复杂度为 ,因此主要的时间消耗在隐层计算。对于第 层隐层,计算复杂度为 ,其中 表示该层隐向量维度。因此总的时间复杂度为:
这与
Wide&Deep,DeepCrossing
几乎相同。NFM
可以执行不同类型的任务,包括回归、分类、排序ranking
。对于回归任务,损失函数为平方误差:
这里没有添加正则化项,因为论文发现:神经网络的某些正则化技术(如:
dropout
)要比正则化项效果更好。对于分类任务,损失函数为
hinge loss
或者logloss
。对于排序任务,损失函数为
pairwise personalized ranking loss
或者contrastive max-margin loss
。
NFM
并未采用常规的 正则化,而是采用dropout
和Batch Normalization
。为了防止
feature embedding
出现co-adapt
并过拟合 ,NFM
对Bi-Interaction
层的输出执行dropout
。即:在Bi-Interaction
层之后接入一个Dropout
层,随机丢弃 比例的神经元。由于不包含任何隐层的
NFM
就是FM
模型,因此dropout
也可以认为是FM
模型新的正则化方式。- 在测试阶段
dropout
要被移除。 - 理论上,我们也可以在后续的隐层中,每个隐层的输出执行
dropout
。
- 在测试阶段
- 为防止过拟合,
NFM
也对Bi-Interaction
层和后续层的输出执行Batch Normalization
。
8.2 实验
数据集:
Frappe
数据集:给出了不同上下文时用户的app
使用日志记录,一共包含96203
个app
。除了
userID, appID
之外,每条日志还包含8个上下文特征:天气、城市、daytime
(如:早晨、上午、下午) 等。采用
one-hot
编码之后,特征有 5382 维;label = 1
表示用户使用了app
。MovieLens
数据集:GroupLens
发布的最新MovieLens
数据集的完整版,包含17045
个用户在23743
个item
上的49657
类标签。将
userID,movieID,tag
进行one-hot
编码之后,特征有90445
维;label = 1
表示用户给movie
贴了tag
。
由于这两个数据集只包含正类(即:
label = 1
),因此需要通过采样来生成负类,负类数量和正类数量的比例为2:1
。- 对于
Frappe
数据集,对每条记录,随机采样每个用户在上下文中未使用的其它两个app
。 - 对于
MovieLens
数据集,对每个用户每个电影的每个tag
,随机分配给该电影其它两个该用户尚未分配的tag
。
对于每个数据集拆分为训练集(70%)、验证集(20%)、测试集(10%)。
评估标准:验证集或者测试集的均方根误差
RMSE
。注意:由于论文采用回归模型来预测,因此预测结果可能大于
+1
(正类的label
)护着小于-1
(负类的label
)。因此如果预测结果超过+1
则截断为+1
、低于-1
则截断为-1
。模型比较
baseline
:LibFM
:FM
的官方实现。HOFM
:基于tensorflow
实现的高阶FM
。Wide&Deep
:Wide&Deep
模型,其中deep part
包含三层隐层,每层维度分别为1024,512,256
。DeepCross
:DeepCross
模型,其中包含 5层残差网络,每层维度为512,512,256,128,64
。
超参数配置:
优化目标:平方误差。
学习率:所有模型的学习率通过超参数搜索得到,搜索范围
[0.005,0.01,0.02,0.05]
正则化:
线性模型
LibFM,HOFM
使用 正则化,正则化系数搜索范围[1e-6,5e-6,1e-5,...,1e-1]
。神经网络模型
Wide&Deep,DeepCross,NFM
执行dropout
,遗忘比例搜索范围[0,0.1,0.2,...,0.9]
。实验发现
dropout
在Wide&Deep,NFM
中工作良好,但是在DeepCross
工作较差。所有模型都采用早停策略
early stopping
。
优化策略:
libFM
使用常规SGD
优化,其它模型使用mini-batch Adagrad
优化。其中
Frappe
数据集的Batch Size = 128
,MovieLens
数据集的Batch Size = 4096
。Batch Size
的选择要综合考虑训练时间和收敛速度。更大的Batch Size
使得每个epoch
的训练时间更短,但是需要更多的epoch
才能收敛。embedding size
默认为 4 。
8.2.1 Bi-Interaction 层
首先研究
dropout
对于FM
的作用。当NFM
隐层数量为 0 时就退化为FM
模型,记作NFM-0
。下图给出了不同数据集上,
FM
执行 正则化和dropout
正则化的效果。横坐标为不同的遗忘比例 或者 正则化系数。另外LR
的验证集误差作为baseline
。结论:
LR
效果最差,说明特征交叉非常重要。- 和
dropout
都能缓解过拟合,但是dropout
效果更好。这意味着dropout
也能成为linear latent-factor
模型缓解过拟合的方法。
从上图观察到:每个数据集
dropout ratio = 0.3
时效果最好,因此遗忘比率设定为 0.3 。为进一步观察
dropout
效果,论文对NFM-0
绘制每个epoch
的训练误差和验证误差。相比较于没有dropout
(dropout = 0
),采用dropout
后(dropout=0.3
)的训练误差较高但是验证误差更低。这进一步说明了
dropout
能够针对FM
模型有效缓解过拟合。然后研究
BatchNormalization
对于FM
的作用。下图给出NFM-0
的BI Interaction
层的输出执行BN
和不执行BN
时,每个epoch
的训练误差和验证误差。其中dropout = 0.3
,学习率为0.02
。采用了
BN
之后:训练误差更快的收敛,且收敛到更低的水平
验证误差稍微改进,但是改进幅度没有训练误差改进幅度大
学习过程更加不稳定,如:蓝色线的波动更大。这是由于
dropout
和BN
一起使用的原因。由于
dropout
随机丢弃神经元,这导致BN
的输入不断的随机被改变。
8.2.2 隐层
NFM
的隐层在捕获特征的高阶交互方面起着关键作用。首先评估激活函数的影响。模型采用一层隐层,隐层维度和
embedding
维度相同。下图给出了不同激活函数、不同dropout
的效果。其中LibFM,NFM-0
作为baseline
。结论:非线性激活函数的使用至关重要,能大幅度提升模型效果。这说明使用非线性激活函数来学习高阶特征交互是非常有必要的。
然后评估隐层的深度的效果。每个隐层都采用
ReLU
激活函数,维度为embedding
维度相同。结论:堆叠更多的隐层,模型性能不会进一步提高。只有一层隐层的
NFM
效果最好。论文还探索了其它隐层结构:如塔形(隐层维度递减)、残差单元,结果模型的表现仍然没有提高。猜测的原因是:
BI Interaction
层已经编码了丰富的二阶特征交互。在此基础上,简单的非线性函数足以捕获更高阶的特征交互。为证明这一点,论文将
BI Interaction
层替换为拼接层,这导致网络结构和Wide&Deep
相同)。此时通过简单的增加隐层数量来逐步提高性能,但是最好的性能仍然不如NFM-1
。这说明底层使用更有价值的信息能够有效减轻高层的学习负担,结果使得不一定需要较深的网络就能取得很好的效果。
8.2.3 预训练
参数初始化能够极大的影响
DNN
的收敛和性能,因为基于梯度的优化算法只能为DNN
提供局部最优解。如:使用FM
学习的embedding
向量来初始化模型能够显著提升Wide&Deep
和DeepCross
模型的收敛速度和模型性能。下图给出预训练的
NFM-1
和非预训练的NFM-1
在每个epoch
的训练误差和验证误差。- 预训练的
NFM-1
的模型训练很快收敛,仅仅 5个epoch
就能达到随机初始化NFM-1
的40个epoch
(启用BN
)的效果 - 预训练并不能改善
NFM
的验证误差,且随机初始化效果更好。
这证明
NFM
的鲁棒性:对于参数初始化不敏感。相比较于预训练对Wide&Deep/DeepCross
产生的巨大影响,NFM
更容易训练和优化。这主要归功于BI Interaction pooling
操作的有效性。- 预训练的
8.2.4 模型比较
下图给出不同的
embedding size
,不同模型的表现(测试误差)。其中:Wide&Deep,Deepcross
使用FM
预训练。NFM
使用ReLU
激活函数,Bi Interaction
层的dropout = 0.5
,隐层的dropout
通过超参数搜索。
下表给出了所有模型在两个数据集上的效果(测试误差)以及模型大小。
结论:
在这两个数据集上,
NFM
始终以最少的参数(除FM
之外)获得最佳性能,这说明了NFM
针对稀疏数据建模高阶特征交互和非线性特征交互的有效性和合理性。HOFM
相对于FM
略有改善,这说明FM
仅建模二阶特征交互的局限性,以及建模高阶特征交互的有效性。HOFM
和NFM
之间的巨大差异,反映了以非线性方式构建高阶特征交互的价值。因为HOFM
是通过线性建模高阶特征交互,但是效果比NFM
差距较大,参数反而比NFM
翻倍。DeepCross
是这些模型中深度最深的(包含10层),但是相对较差的性能表明:更深的网络并不一定总是更好的。论文认为这是由于优化困难和过拟合。