本专栏的文章会在本知乎专栏和Sunny.Xia的csdn博客同步更新,如有雷同,不用怀疑,肯定是未经作者允许就转载的。
最近在学习深度学习,打算边学习边进行一个整理,就开了深度学习的专栏。该专栏相关的文章会在本博客和知乎专栏进行同步更新,第一篇就从DeepFM开始写起吧。
一、FM是什么?
在学习ML的时候,肯定会遇到过逻辑回归。逻辑回归作为一个基础模型,基本可以拿来即用,方便简单。然而其缺陷也很明显,表达能力不强、无法进行特征交叉。后续提出的POLY2模型,对所有特征进行了两两交叉组合。然而其也存在较大的缺陷。对稀疏的数据,模型性能就不是很好;而且由于两两交叉,权重的参数由n直接上升到了n^2,增加了训练数据量。
为了解决POLY2这类模型的缺陷,FM被提了出来。FM(Factorization Machine)模型主要是为了解决在数据稀疏的情况下,特征组合的问题。在广告算法领域,较长用的就是用其进行CTR预估。已知用户特征、广告特征、上下文特征的情况下,去预测用户点击该广告的概率。
(以上内容参考自《深度学习推荐系统》——王喆 著)
FM的模型表达式如下:
![0308f993af9623650ffc7048628c9de4.png](https://i-blog.csdnimg.cn/blog_migrate/fb2049952ee775c31d2851ed581fb141.png)
FM的公式求解,可以参考该链接:DeepFM从推导到实现。讲的很详细,过程就不再赘述。网上大部分DeepFM代码,其FM二阶计算部分,都是根据求解后的公式来实现的。这里先贴一张FM公式推导图,后面分析代码的时候会提到。
![56617b1ae3eda5b2d0d3a5c1fe67c2da.png](https://i-blog.csdnimg.cn/blog_migrate/78134f683febc89f3ee1c551e433a460.png)
二、Wide&Deep
在讲解DeepFM前,我们先了解Wide&Deep。
![90c164e4043e47b78a0bfd76f2525a0f.png](https://i-blog.csdnimg.cn/blog_migrate/3222f6c9e387346822812a6ce395af17.png)
从结构图就可以很明显的看到,wide&deep分为两部分:左边是单输入层的线性模型,即wide部分;右边是由embedding层和多隐层组成的深度模型,即deep部分。最终这两部分一起作为输出层的输入。
三、DeepFM
![6b7d05bd5974fc17f28a5c10f45d4b18.png](https://i-blog.csdnimg.cn/blog_migrate/7f92c65bd87caa03530ce4178b31aab0.jpeg)
DeepFM在Wide&Deep模型的基础上,用FM替代了原来的wide部分,如上图所示。FM与deep部分共享相同的embedding层,其主要对不同特征域的embedding层实现两两交叉。这里不得不说FM部分的巧妙,将embedding向量当做原FM中的特征隐向量,后续会在代码讲解中详细介绍这一部分。
DeepFM部分就不再赘述,详细的可以戳推荐系统遇上深度学习(三)--DeepFM模型理论和实践。下面重点介绍代码部分。
四、实战演练
本文代码地址:https://github.com/ruozhichen/deep_learning (