深度分解机(deepFM)

论文链接:DeepFM: A Factorization-Machine based Neural Network for CTR Prediction

1、问题阐述

在推荐系统的CTR预估中,学习用户行为背后复杂的特征交互关系非常重要,例如人们通常在吃饭的时间点下载外卖app比较多,这说明时间和item类别之间是有一定联系的,如果我们在吃饭的时间推荐饿了么,肯定比在其它时间段要更加符合用户的需求。(当然影响用户点击行为的因素非常多,这里只是简单举了一个例子,并不是说所有的用户在吃饭的时间都会想点击外卖app,只是一种统计倾向而已)类似,还有很多其它的特征组合关系,有些特征组合关系是我们拍脑门可以想出来的,上面的时间和item类别,年龄和item类别,性别和item类别。。。但是也有那么一些是我们想不出来的(想不出来意味着不大符合我们平时的认知),例如传统的“啤酒和尿布”关系是隐藏在数据里的。(详细介绍可以参见这篇博文)不大容易被我们人为设计出来作为组合特征。这就需要用到机器学习啦,我们当然希望机器可以帮我们自动学到很多特征。毕竟当原始特征很多的时候,人为设计特征是一件费时也有可能不讨好的事情。

2、FM模型

FM是分解机模型,它将原始特征做embedding后,对两两特征进行组合,得到更高级的特征,模型如下:

深度分解机(deepFM)_第1张图片

其中Field i表示某个特征,共有m个特征,对每个特征进行embedding,之后做两两内积得到FM层,除此之外,FM层还包括单个原始特征。这样看来FM层是包含了两两组合以及单个特征,FM层之后是sigmoid层。

3、DeepFM模型

针对FM模型仅仅可以提取到低级特征组合(最多两层),结合DNN的优势,可以提取到更加高级的特征,这样就不需要人为设计特征了。让我们先看看它的架构吧。

深度分解机(deepFM)_第2张图片

上面是DNN的架构,FM的架构上面已经介绍了哈,DNN的输入和FM的输入是一样的,而且DNN的embedding是上面FM的embedding,只不过DNN之后并不是只有2个特征相连,而是所有特征相连去学习更高级的特征组合。也不是特征之间做内积的形式去组合。(感觉FM其实也可以去学习高级特征组合,但是有一点就是比如要学习三个特征组合的形式,按照FM的思路,是需要把所有的三个特征组合表示出来,等等吧,这样会有很多参数,而DNN这种方式网络可以通过权重学习,得到三个,四个甚至更多的特征组合,这也是DNN的优势所在吧)

最后的模型预测为:

4、模型比较

FNN模型是用FM模型预先训练好的embedding做初始输入,之后接dnn,这样做的缺点之一就是embedding受FM模型的影响比较大,而且这样只是提取了高级特征。另外因为需要预先训练FM模型,所以会增加训练复杂度。

PNN模型是在embedding层和隐藏层之间使用了内积(或者外积,或者2者混合)提取了组合特征,之后和原始的embedding层concat组成隐藏层,之后dnn提取高级特征。而且因为内积的输出和后面隐藏层的所有单元都连接,所以参数会很多。deepFM的FM部分的内积后面只接了一个单元。

谷歌的wide&deep模型,wide&deep模型的wide部分的输入特征是需要人为设计的,例如在app推荐的任务中,可能需要设计一些组合特征。deepFM模型直接把原始特征作为输入,用deep模型和FM自动提取特征,不需要做特征工程。

一个主要的扩展就是将谷歌的wide&deep模型的wide部分用FM代替,后面实验会说明这样效果没有deepFM好。论文中的解释是deepFM模型特征的embedding是共享的,这样学到的embedding会更好一些。也就是说它做扩展实验的时候并没有设成共享的?我个人觉得还有一个原因就是wide部分的交叉特征如果是用FM的话,一般交叉特征出现的频率很低,学到的交叉特征的embedding并不好。

深度分解机(deepFM)_第3张图片
深度分解机(deepFM)_第4张图片

5、实验

数据集:Criteo数据集  4500万用户点击记录

                公司的数据集   10亿用户点击记录

评价方式:AUC 和logloss

结果:

深度分解机(deepFM)_第5张图片

6、总结

总体来讲,个人感觉最大的优势就是不需要人为设计特征,可以自动捕获到高级和低级特征组合,也不需要提前预训练。

你可能感兴趣的:(深度分解机(deepFM))