FM,FMM,deepFFM模型总结,深度排序模型

微博团队张俊林

https://zhuanlan.zhihu.com/p/67795161

如果你是 liblinear、libfm、libffm 的用户,那么现在 xLearn 将会是你更好的选

https://xlearn-doc-cn.readthedocs.io/en/latest/index.html

preview

一般我们做LR,会在上面求和基础上,套一个sigmoid函数,也就是上图中黄色的曲线,因为线性模型取值范围已经不可控,可以无限大,所以不好用。通过S形函数把它压到0和1之间,我就可以判断,是正面的结果还是负面的结果,LR就是这样的过程。

那么线性模型有什么优点和缺点呢?首先它简单,所以好理解,上线快,速度快,这是它典型的优点。尽管我们到了深度学习时代了,但事实上,很多公司还在用LR,因为它确实很好用。但它也有问题,我刚才讲了一句话:CTR模型的核心是特征组合,但是你从上图的公式里看不到任何特征组合的迹象:单个特征乘以权重,特征间的关系没有被考虑,这就是LR最大的一个缺点。线性模型有这个问题,它不能够捕获特征组合,所以要改造一下这个公式,把特征组合揉进来。

特征组合要怎么组合?任意两个特征的组合,可以把一个特征组合当作一个新特征,但既然它是新特征,它也要学个权重,下图公式中标红的wi,j就是这个特征组合的权重。

preview

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

preview

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

preview

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的方式来做这个事的。这是第二个路线的两个代表。尽管这个符合模型发展趋势,我个人认为这种模型太复杂,真正部署上线成本比较高,不是优选方案。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值