DeepFM
DeepFM
- 在前面一篇文章中提到,目前遇到特征组合的问题,主流做法主要会分成两类:FM系列、DNN系列。
- 关于DNN相关内容,是深度学习基础知识,本处不展开介绍,直接使用。本文主要介绍FM+DNN的结合体:DeepFM相关内容。
- 文章依旧主要从三方面展开对FM算法介绍
- When – 什么时候需要考虑DeepFM算法
- What – 究竟什么是DeepFM算法
- How – DeepFM怎么使用
1. When
什么时候需要考虑DeepFM
基于CTR预估的推荐系统,究其根本,其实是学习到用户点击行为背后隐含的特征组合。在各种各样的推荐场景中,低阶特征组合或者高阶的特征组合都会对最终用户的行为产生影响。
之前介绍的FM通过对每一维特征的隐变量内积提取特征组合,最终结果还算不错。
虽然理论上FM可以对高阶特征组合进行建模,可是因为计算复杂度的原因一般到二阶的特征组合就结束。
那么高阶特征该怎么办呢,此时你应该会和很多大牛的想法一样,通过多层的神经网络去解决。
1.1 DNN的局限性
以下图片内容参考自张俊林教授在AI大会上的分享
我们知道,对于离散特征的处理,一般都是把特征转换为one-hot编码形式,不过把one-hot编码类型的特征输入到DNN中,会导致网络参数过多:
就如上图,从输入层到隐藏层,将会产生50亿的参数。
解决上面这个问题的方法是:把特征分为不同的field,从one-hot变成dense vector:
然后再添加两层全连接层,让其和dense vector进行组合,此时高阶特征的组合就搞定了
不过上面方式把低阶和高阶特征组合隐含的体现在隐藏层中,如果我们希望把低阶特征组合单独建模,然后融合高阶特征组合。又该怎么做呢?
1.2 模型融合方式
此时,我们能想到的就是把
DNN与FM进行一个合理的融合:
二者的融合总的来说有两种形式,一是串行结构,二是并行结构。
融合方式一:并行结构
融合方式二:串行结构
而我们今天要讲到的DeepFM,就是并行结构中的一种典型代表。
2. What
究竟什么是DeepFM算法
2.1 简单介绍
DeepFM是2017年华为诺亚方舟实验室发表的一篇论文。
论文链接:https://arxiv.org/pdf/1703.04247.pdf
DeepFM整体结构:
根据上图,我们把图像分成左半部分和右半部分,其实**这也就是DeepFM包含的两部分:DNN部分和FM部分,其中DNN部分负责高阶特征的提取,FM部分负责低阶特征的提取。**这两部分共享同样的输入。
2.2 模型细节
接下来,我们从下往上,分别看一下组成DeepFM的各个部分。
a) 架构间参数的传递
架构间参数的传递,有几处需要注意,尤其是上面标记红色圈中部分。
- 其中1中,是针对不同特征做的embedding【FM的二阶两两交互计算部分和 deep部分是共享这个embedding结果的】
- 2是FM的一阶计算部分【使用权重直接对原始特征做的一阶计算】
- 3是对应FM的二阶计算阶段,对经过权重embedding的结果做二阶交叉计算
- 4是deep部分的全连接计算部分,使用神经网络进行计算
b) FM计算的过程
FM的计算公式,我们在之前文章中讲过,此处拿来直接使用:
上公式中,第一项和第二项公式对应上面标圈部分1的内容,即:
公式中第三项公式对应上面标圈部分2的内容,即:
c) DNN部分
DNN是一个前馈神经网络。与图像或者语音这类输入不同,图像语音的输入一般是连续而且密集的,然而用于CTR的输入一般是极其稀疏的。因此需要重新设计网络结构。具体实现中为,在第一层隐含层之前,引入一个嵌入层来完成将输入向量压缩到低维稠密向量。
嵌入层(embedding layer)的结构如上图所示。当前网络结构有两个特性:
- 1)尽管不同field的输入长度不同,但是embedding之后向量的长度均为K。
- 2)在FM里得到的隐变量现在作为了嵌入层网络的权重。
d) DeepFM预测结果输出
最后,上DeepFM中FM和DNN预测结果的输出方式:
3.How
DeepFM怎么使用
推荐百度官方基于paddlepaddle实现框架:
Ps:参考readme运行一遍就搞定。
参考资料:
资料一:https://arxiv.org/pdf/1703.04247.pdf
资料二:https://zhuanlan.zhihu.com/p/67795161
资料三:http://wiki.baidu.com/pages/viewpage.action?pageId=765563246
资料四:https://github.com/PaddlePaddle/models/tree/develop/PaddleRec/ctr/deepfm_dygraph