xDeepFM的深入浅出

      在FM中,采用了一阶和二阶的特征组合,相比与只使用一阶线性组合效果要好很多。但是特征组合的能力还是有限的。即特征之间组合的力度,挖掘特征之间的关联性还是较差的。在图像处理的一些方法中,模型的深度都比较深经过了很多层的非线性变换,主要的目的是为了让模型充分的学习数据的分布以及更加抽象的表示,也就是希望利用高阶的特征。在模型的深层部分得到的特征就是数据的高阶表示,因此DeepFM就是在FM的基础上加上深度模型。让模型进行更多的非线性变换,得到更高阶的特征组合。

推荐系统中常用的模型是Logistic Regression。但是其没有考虑特征之间的相互关系,如果要使得模型学到这种相互关系的能力,则必须手动制作相应的相关特征,工作量巨大;为了解决这个问题,使用FM,FFM对组合特征进行学习;然而FM,FFM只考虑了低阶特征的组合,并未考虑高阶特征的组合,所以一种合理的思路就是使用Deep+FFM的组合模型,即为接下来要介绍额DeepFM模型。

推荐系统中的CTR预估是预测用户点击推荐物品的概率。大部分推荐系统的目标是最大化点击次数,因此要推荐给用户的物品的排序策略,直接按预估的CTR大小排序即可;但在其他场景如在线广告,目标是最大化收益,因此排序策略调整为按所有候选item的CTR*bid,bid是item被user点击后系统的收益。两种场景的关键都是要准确预估CTR。

FM考虑了低阶特征的组合问题,但是无法解决高阶特征的挖掘问题,所以才引入了DeepFM。DeepFM是一个集成了FM和DNN的神经网络框架,思路和google的Wide&Deep有相似的地方,Wide&Deep包括wide和deep两部分,其中wide部分是高维线性模型,DeepFM的wide部分则是FM模型;二者的deep部分都是dnn层。 DNN隐藏层的激活函数用ReLu和Tanh,Sigmoid函数做CTR预估的输出函数。

CTR模型的核心是特征组合,单个特征乘以权重,特征间的关系没有被考虑,这就是LR最大的一个缺点。线性模型有这个问题,它不能够捕获特征组合,所以要改造一下这个公式,把特征组合揉进来。

特征组合要怎么组合?任意两个特征的组合,可以把一个特征组合当作一个新特征,但既然它是新特征,它也要学个权重,

FM的模型方程为:

这样,我们就能把组合特征显式地、简单的揉进了这个公式,所以它的好处是:现在能够捕获两两特征组合。其实这么做,它也有问题,刚才我们这么改过来的模型本质是SVM,它的问题是特征组合的泛化能力弱,于是我们可以进一步对它进行如下修改。

就是LR模型,后面的也是体现了任意两个特征组合,和刚才公式唯一的区别在:原先的wi,j,换成了vi和vj的点积。vi和vj又是什么含义呢?vi的意思是:对于xi这个特征来说它会学到一个embedding向量特征组合权重是通过两个单特征各自的embedding的内积呈现的,因为它内积完就是个数值,可以代表它的权重,这其实就是FM模型

SVM泛化能力弱,FM的泛化能力强。

在FM之后,我们再改进一个新版本,就是FFM模型。我先定性地说下这个模型:它的效果比FM好,但是问题在于,参数量太大。

首先, FFM模型的特性是什么?

举例来说,有三个特征fields,这是一个在线投广告的应用场景,比如说我要往ESPN这个网站投广告,第一个特征Publisher是要投放广告的网站是谁,第二个特征是这个广告主(Advertisor)是谁,本例中假设是Nike;第三个特征,阅读者(Gender)是谁,阅读者的性别是男性(male);那么他会不会点击?这个例子中是会点击;那么我们在这个例子上再想,FFM在做什么事?

首先这个公式做了任意两个特征组合,它的特性是要把任意一个特征学成embedding,这就是刚才讲的FM的做法,那么FFM是怎么做的呢?

FFM是FM的一个特例,它更细致地刻画了这个特征。首先它做了任意两个特征组合,但是区别在于,怎么刻划这个特征?FM只有一个向量,但FFM现在有两个向量,也就意味着同一个特征,要和不同的fields进行组合的时候,会用不同的embedding去组合,它的参数量更多。对于一个特征来说,原先是一个vector,现在会拓成F个vector,F是特征fields的个数,只要有跟其它特征的任意组合,就有一个vector来代表,这就是FFM的基本思想。

对于FFM的某个特征来说,会构造F个vector,来和任意其他的fields组合的时候,各自用各自的。它有什么特点呢?首先,FFM相对FM来说,参数量扩大了F倍,效果比FM好,但是要真的想把它用到现实场景中是有问题的,而问题同样在于参数量太大。参数量太大导致做起来特别耗内存,特别慢,所以我们的改进目标是把FFM模型的参数量降下来,并且效果又能达到FFM的效果。于是我们改了一个新模型,我把它叫“双线性FFM模型”

所有的深度学习,做CTR的模型时都会有DNN的部分,没有例外。什么含义呢?特征输进去,然后把它转换成embedding,上面套两个隐层进行预测,这是所有模型公有的一部分。

我把现在这个深度CTR模型会分成了两大类。从结构来说,第一类我把它叫并行结构,它有DNN结构外的另外一个组件,我管它叫FM Function,它捕捉特征的两两组合,两者关系看上去是个并行的,所以我把它叫并行结构。

除了并行还能怎么修改这个结构?可以把它搞成串行的,前面一样是onehot到embedding特征编码,然后用FM Function做二阶特征组合,上面套两个隐层做多阶特征捕获,这是串行结构。典型的模型包括:PNN、NFM、AFM都属于这种结构。

如果再归纳一下,你会发现深度排序模型,现在有朝两个研究路线走的趋势。这两条演进路线怎么走的呢?

第一条路线,提出新型的FM Function,就是怎么能够设计一个新的FM Function结构,来更有效地捕获二阶特征组合,比如说典型的模型包括Wide&Deep,DeepFM,NeuralFFM等,就是用来做这个的。

第二条演进路线,就是显式地对二阶、三阶、四阶···K阶组合进行建模。目前的研究结论是这样的:对CTR捕获二、三、四阶都有正向收益,再捕获五阶以上就没什么用了。典型的代表模型是DeepCross、xDeepFM。

针对这两条演进路线,我会各自介绍两到三个代表系统。

第一个代表系统:Wide&Deep,这个系统我相信大家都听说过。

Wide&Deep的结构是什么呢?实际上就是我画的并行结构,右边就是DNN部分,左边的FM Function用的是线性回归。我个人认为,Wide&Deep是相对原始的模型,LR有的问题它也有,特征组合需要人去设计,Wide&Deep也有这样的问题。

我们可以改进一下。DeepFM模型,它相对Wide&Deep做出了什么改进呢?很简单,其实就是把FM Function的LR换成了FM,就能自动做特征组合了,这就是DeepFM。如果想部署深度模型,我建议可以考虑这个模型,这是目前效果最好的基准模型之一。而且我认为DeepFM是个目前技术发展阶段,完备的深度CTR模型。所谓完备,是指的里面的任意一个构件都有用,都不能少,但是如果再加新东西,感觉意义又没那么大,或者太复杂了工程化有难度。完备是从这个角度说的。

第二条路线的两个代表是:Deep& Cross和xDeepFM。Deep&Cross用来做什么?显式地做高阶特征组合。就是说设计几层神经网络结构,每一层代表其不同阶的组合,最下面是二阶组合,再套一层,三阶组合,四阶组合,一层一层往上套,这就叫显式地捕获高阶特征组合,Deep&Cross是最开始做这个的。

xDeepFM是微软2018年发的一篇新论文,它是用来把二阶、三阶、四阶组合一层一层做出来,但无非它用的是类CNN的方式来做这个事的。这是第二个路线的两个代表。尽管这个符合模型发展趋势,我个人认为这种模型太复杂,真正部署上线成本比较高,不是优选方案。

猜你喜欢

转载自blog.csdn.net/Peter_Changyb/article/details/108265073