写在前面
最近看了DeepFM这个模型。把我学习的思路和总结放上来给大家和未来的自己做个参考和借鉴。文章主要希望能串起学习DeepFM的各个环节,梳理整个学习思路。以“我”的角度浅谈一下DeepFM基础知识+看过的一些有用文献+最后附上可实现的pytorch代码,用具体的Kaggle竞赛案例来梳理DeepFM项目的流程。(文章语言尽量通俗易懂,所以背后的逻辑推导尽可能罗列在附带的参考文献里)
DeepFm的学习路线
DeepFM的paper → 网上的解析文章 →源码复现
我一开始是看了一遍原文的paper,缺点是很多概念都比较模糊,比如我看DeepFM的时候根据不知道FM是什么,前面的基础没有,看这些衍生概念就很困惑。优点是我能知道文章想体现一些重点以及一些概念名词,比如说我虽然不知道FM是什么,但是我知道DeepFM是将FM做了一个新的拓展,那我知道了FM这个名词之后,我后面补充基础知识的时候就会有针对性。paper很困惑的点,可以给自己留下一些印象和问题,让你后面再去接触、弄懂这些知识的时候就会有一个似曾相识 → 恍然大悟的感觉。随后的内容是在我看过一遍原文的基础上做的补充。
DeepFM基础知识(来由与作用)
我们大家基本都了解过线性回归方程,也就是
![854a09c4a2087beb0b14214956c5929e.png](https://img-blog.csdnimg.cn/img_convert/854a09c4a2087beb0b14214956c5929e.png)
但是线性回归有一个不好的地方在于它直接估计2阶或者高阶特征变量的时候,难以直接估计出特征前面的权重(也称系数)。那么就衍生出了一个叫做FM的算法来解决这个问题。这里背后的逻辑重点看一下这篇文章,把FM诞生的来由及理论讲述得很是到位:
https://blog.csdn.net/itplus/article/details/40534923blog.csdn.netDeepFM是深度学习版的FM(DeepLearning+FM=DeepFM嘛),直接上图:
![080853a91502655d0cafbcb2b32b885c.png](https://img-blog.csdnimg.cn/img_convert/080853a91502655d0cafbcb2b32b885c.png)
这个图来源于paper原文,看起来比较复杂。那看一下网友的简略图:
![e7b881e1067fb9b58207c9303675ae75.png](https://img-blog.csdnimg.cn/img_convert/e7b881e1067fb9b58207c9303675ae75.png)
这样看就清晰多了:FM和Deep两个结构共同在提取特征,最后再把两者提取的特征做一个结合作为整个模型提取的特征。而这些特征都来源于前面的Dense Feature,这个就是模型的亮点之一 —— 权值共享,这些概念比较迷糊。可以看到就是在FM的直接上融入了一些深度学习的知识(主要是帮助映射至数学空间以及高维空间来更好的提取特征)
那说白了,DeepFM也是在处理类似FM,类似线性回归这一类的问题。但它能处理得更好,因为融入了DeepLearning的知识。那既然如此,我们用DeepFM来处理的数据就可以像是很普通的一个矩阵,每一行有多个x(这里是k个,代表k个特征变量,自变量),对应一个y(代表标签,因变量),有n行,代表n行数据:
![f7981378fe3578444cef87c6bc67745c.png](https://img-blog.csdnimg.cn/img_convert/f7981378fe3578444cef87c6bc67745c.png)
也可以是稍微复杂点的数据,这里举例Ka