深度推荐模型-NFM

一、动机

传统的FM模型仅局限于线性表达和二阶交互,无法胜任生活中各种具有复杂结构和规律性的真实数据,针对这点不足,作者提出了一种将FM融合进DNN的策略,通过引进一个特征交叉池化层的结构,使得FM与DNN完美衔接,这样组合了FM的建模低阶特征交互能力和DNN学习高阶特征交互和非线性的能力,形成了NFM模型。
深度推荐模型-NFM_第1张图片
作者在这里的改进思路是用一个表达能力更强的函数来替代原FM中二阶隐向量内积的部分,表达能力更强的函数,使用神经网络来充当,是一个考虑了交叉,高层使用的DNN网络,最终形成NFM网络。
深度推荐模型-NFM_第2张图片

二、模型结构与原理

2.1 Bi-Interaction Pooling Layer

在Embedding层和神经网络之间加入了特征交叉池化层是本网络的核心创新,通过这个结构实现FM与DNN的无缝连接组成了一个大的网络,且能够正常的反向传播,在特征交叉池化层的操作:
公式
中间的符号表示两个向量的元素积操作,即两个向量对应维度相乘得到的元素积向量(注意不是点乘)是元素积,最后会得到一个k维向量。
Bi-Interaction层不需要额外的模型学习参数,它在一个线性的时间内完成计算,和FM一致,为了显示时间复杂度,上式可以转换为:
在这里插入图片描述
代码部分为:
深度推荐模型-NFM_第3张图片

2.2 隐藏层

这一层就是全连接的神经网络,能够学习高阶交互特征,全连接层的定义如下:
深度推荐模型-NFM_第4张图片
L是全连接层的数量,Wl是权重矩阵,bl是偏置向量,σl是第l层的激活函数

整个模型的前向传播过程如下:
前向传播
NFM相比于之前的DNN,模型结构更浅,更简单,但是性能更好,训练和调参更容易,集合FM二阶交叉线性和DNN高阶交叉非线性的优势,非常适合处理稀疏数据的场景任务。
模型构建的代码如下:
深度推荐模型-NFM_第5张图片
整个模型的参数情况:
模型参数
跑了一个demo的结果:
深度推荐模型-NFM_第6张图片

思考

NFM中的特征交叉与FM中的特征交叉有何异同?
Embedding空间特征的二阶交互:FM内积的话会得到一个数,NFM在这个地方不是两个隐向量的内积,而是元素积,这一个交叉完了之后k个维度不求和,最后会得到一个向量。
在进行两两Embedding元素积之后,对交叉特征向量取和, 得到该层的输出向量, 很显然, 输出是一个k维的向量,FM到这就结束了,而NFM加入特征池化层之后,把二阶交互信息合并,且上面接了一个DNN网络,增强了FM的表达能力。如果不加DNN,NFM就退化成了FM,关键在于这个层组合二阶交叉信息,然后又给DNN进行高阶交叉学习。

参考:
1.https://github.com/datawhalechina/team-learning-rs/blob/master/DeepRecommendationModel/NFM.md
2.https://blog.csdn.net/wuzhongqiang/article/details/109532267?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161442951716780255224635%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161442951716780255224635&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v1~rank_blog_v1-1-109532267.pc_v1_rank_blog_v1&utm_term=NFM

你可能感兴趣的:(深度学习,人工智能,python,推荐系统)