推荐系统之DeepFM

今天开始了推荐系统的第三个模型DeepFM的学习,这是华为诺亚方舟实验室在2017年发表的论文。它将FM和DNN进行了有机结合,既兼顾到了低阶特征的学习,又能够兼顾到高阶泛化的能力。具体的论文地址在此:https://arxiv.org/pdf/1703.04247.pdf

DeepFM的网络结构如下所示:

源自DeepFM论文

从网络结构图来看,DeepFM的结构和Wide&Deep的结构有异曲同工之妙,因为本质它们的结构都可以分为左右两大主要部分,一边是低阶特征的表示(FM或LR),另一边是高阶特征的抽取(DNN)。但是,DeepFM有自己独特之处,用FM代替了简单的Wide部分,它不仅利用了一阶特征表示,同时也利用了二阶特征。其实,DeepFM并非第一个将FM层融入到深度学习网络中去的,在2016年的时候,有FNN和PNN,具体的结构如下:

源自DeepFM论文

FNN是将预训练好的FM层作为模型的输入,在上面叠加多层隐藏层,经过激活函数和最后的sigmoid函数变换,映射到最终的目标值概率上去的。由于FNN是将FM和DNN进行了串行叠加,FNN对于低阶特征的学习程度是不够充分的。

PNN是在FNN的基础上面,增加了一层product层,具体的是将embedding做相关的inner product/outer product来增加低阶特征的表达,同时,也省去了FNN需要预训练FM层的问题。然而,PNN也和FNN有类似网络结构的同样问题,对于低阶特征的表达不够充分。

DeepFM将FM层和DNN做了并行的网络结构设计,使得其能够更好地利用FM对低阶特征的抽取,以及DNN的深层特征的提取。具体地,该网络结构有两大部分:

FM部分:就是Factorization Machine,它利用了特征的一阶特征(➕),和二阶特征(✖️),能够帮助较高效地提取交叉特征。当数据集中的交叉特征出现地较为稀疏时,FM的优势体现出来了,它将特征用隐变量表示,因此,无论两个特征的具体取值是否存在在数据集合中,它都可以用它们的内积来表示两个特征的交叉效应。

DNN部分:和Wide&Deep的Deep部分类似,就是将Sparse特征分域提取为Dense Embedding,来达到降维和特征有效表达的目的。同时,在上层构建全链接的隐藏层,使得特征可以得到高阶的提取。最终和FM层的输出进行结合,经过sigmoid函数,得到最终的目标值映射。需要注意的是,Sparse特征的黄色点表示特征one-hot表达时为1的具体位置,而灰色点表示one-hot表达时为0的其余位置。

针对四方面特性(高阶特征提取、低阶特征提取、是否需要模型预训练,和是否需要特征工程),原文论文对各个模型进行了总结,值得一看。从综合的比较上看,DeepFM是较为优秀的。(高阶特征提取、低阶特征提取、是否无需模型预训练,和是否无需特征工程)
FNN             T、F、F、F
PNN             T、F、T、F
Wide&Deep  T、T、T、F
DeepFM       T、T、T、T

具体代码:
仔细看,发现get_dnn_logits和get_linear_logits部分和wide&deep本质是一样的,区别在于增加了get_fm_logits的二阶特征表达。

datawhale学习资料
datawhale学习资料
datawhale学习资料
datawhale学习资料

如果对于FM采用随机梯度下降SGD训练模型参数,请写出模型各个参数的梯度和FM参数训练的复杂度?

参考资料:
1. DeepFM论文
2. datawhale学习资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容