坠入深渊的传统之发展——FM、FFM、GBDT+LR

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了坠入深渊的传统之发展——FM、FFM、GBDT+LR相关的知识,希望对你有一定的参考价值。

参考技术A 如果我们将深度学习之前的算法称之为传统算法,那么毫无疑问,回顾这几十年各类算法的发展,基本都是一个从简到繁的过程,从最开始的弱数学,演变为越来越多的数学工具加入其中。在这一点上,和物理学很像,我们高中时学的物理很少涉及特别复杂的数学运算,但是大学时学的就已经融入各种数学公式了...于是乎,推荐领域在引入深度学习之前的发展路线,大抵也是类似的...

正如上一篇文章说的,逻辑回归作为一个简单好用的模型,优点很多,但是缺点也很明显,它的表达能力不够强,因为它无法进行特征交叉和特征筛选这些高级操作,这样,有时候不仅会造成信息的损失,甚至可能会导致得出错误的结论。一个著名的例子就是“辛普森悖论”。

在对样本集合进行分组研究的时候,在分组比较中占有优势的一方,在总评中有时反而是失势的一方,这种有悖常理的现象,被称之为“辛普森悖论”。

很多人知道P站吧,不是那个黄色网站哈,是那个日本年轻人最想加入的公司pixiv,它的付费会员的图片排序里有三个选项:男性最受欢迎,女性最受欢迎和全站最受欢迎,且看下面两个表中的数据:

表1: 男性用户

表2:女性用户

容易看出,不论是男性用户还是女性用户,对图片B的点击率都高于A,显然,不管是点击哪个按钮,图片B都应该排在图片A的前面。
事实真的如此吗?okay,让我们忽略性别这个维度,来看一下全站的数据:

表3: 全站数据

我的天,图片A的点击率居然比图片B高了,如果按照这个排序,显然会跟之前分组的排序截然不同,这就是著名的“辛普森悖论”。

在上面的例子中,分组实验相当于使用“性别”+“item id”的组合特征计算点击率,而汇总实验则使用“item id”这一单一特征计算点击率。汇总实验对高危特征进行了合并,这造成了大量有效信息的损失,因此无法正确刻画数据模式。

逻辑回归只是简单的对单一特征进行简单的加权,很难自动进行特征交叉生成高维组合特征,因此表达能力较弱,以至于可能得出“辛普森悖论”这样的错误结论,于是改造LR模型可谓是迫在眉睫。

既然LR模型无法自动的进行特征交叉,那咱就手动组合特征呗,然而这个手动组合特征的工作即时对于有颇有经验的运营也颇为棘手,人工的方法无疑是低效的,而且人的经验也具有局限性。就这?显然,对于算法工程师来说这不是个问题,人工组组不来,那就用“暴力”组合的方式来对特征进行组合不就好了嘛!这就是POLY2模型,它的数学形式如下:

从公式容易看出,改模型对所有特征进行了两两交叉,并对所有的特征组合赋予权重 .
POLY2通过暴力组合特征的方式,在一定程度上解决了特征组合的问题,其训练方式与逻辑回归并无区别,便于工程上的兼容,但是它存在两大缺陷:
1.互联网上的类别数据往往采用one-hot编码,因此特征向量十分稀疏,这种无选择的暴力组合无疑特征稀上加稀,导致大部分交叉特征的权重缺乏有效的训练数据进行训练,模型无法收敛。
2.权重参数数量由 增加到 ,极大增加了训练复杂度。

为了解决FM模型的缺陷,2010年,Rendle提出了FM模型,它在POLY2公式的基础上做了点微小的改造,以下是其数学形式:

哈哈,它巧妙的将单一权重 换成了向量内积 ,这简直就和矩阵分解中用隐向量代表user和item的做法异曲同工呀!! 与此同时,FM把POLY2模型 级别的参数个数减少到了 (k为特征维度,n>>k),极大的降低了训练开销。不仅如此,隐向量的引入,对解决数据稀疏问题也很有帮助,比如对于(a,b)这样的组合特征的权重,在POLY2中只有(a,b)同时出现在一个训练样本中时才能得到训练,但是在FM中能在类似(a,c),(b,d) 这样的特征组合中进行学习,这大幅降低了模型对数据稀疏性的要求,甚至就算从未出现过(a,b)这样的样本,它的权重同样因为其他含有a,b的组合被学习到了,这真是太棒了。相比于POLY2,FM虽然丢失了某些特征组合的精度,但是泛化能力得到极大的提高。
在工程方面,FM不失实时性和灵活性,相对于后来用的深度学习模型更加容易部署和线上服务。

FFM在FM的基础上引入了特征域感知的概念,使模型的表达能力变得更强,其数学形式如下:

观察公式,不难发现,它与FM的区别在于隐向量由原来的 变成了 ,而这个 实际上就是特征域的特征。比如说,当 特征和 特征进行交叉时,会将 特征与 的特征域特征 的特征 和 特征与与 的特征域特征 的特征 进行交叉。
噗,这样说起来特别的迷糊....还是举个具体的例子吧......
比如咱是在做游戏的推荐,现在我们有这样一个样本:

每个特征类型作为一个特征域,于是这里有4个特征域:

实际的值呢对应着4中特征:

下面,我们对这四种特征进行两两的FFM交叉就是:

相当于,划分为多少个特征域,相应就有多少个隐向量。在FFM训练过程中,需要学习n个特征在f个域上的k维隐向量,参数个数就是nfk个,因为二次项并不能像FM那样进行简化,因此其复杂度就是 .也就是说,为了引入更多有价值的信息,FFM的计算复杂度从FM的 上升到了 ,因此在实际工程中用到的话,其模型效果和工程投入之间需要权衡。

正如前文所言,FFM的计算复杂度已经相当的高了,如果再增加3个特征的交叉的话复杂度就实在太高了,对于更高维的特征组合无能为力。于是就需要通过其他方式来处理高维特征组合的问题。于是Facebook在2014年提出了GBDT+LR的解决方案。

那么GBDT+LR到底做了些什么呢?简言之,就是利用GBDT自动进行特征的筛选和组合,进而生成新的离散特征向量,再将其作为LR模型的输入来预估CTR。而其中GBDT和LR实际上是独立的两部分,训练也是分开训练的,因此不存在如何将LR的梯度回传到GBDT这类的复杂问题,鉴于上篇文章我们已经介绍过LR了,这里主要介绍一下GBDT是个什么东西。

GBDT的基本结构是决策树组成的树林,学习方式是梯度提升。

利用训练好的GBDT模型,就可以很方便的将新特征转化为向量,具体过程如下图:

上图,我们看GBDT这一部分,列举了n颗子树,每颗子树有一些叶子节点,输入一个训练样本后,它会先后落入各个子树的叶子节点,比如子树1的第1个节点,那它的特征向量就是 ,同理子树2是 ... 最后把所有子树的向量串连起来就得到了样本的特征向量。

思考一下GBDT的结构,不难看出,决策树的深度决定了特征交叉的阶数。如果决策树的深度为4,这通过3次节点分裂,最终的叶子节点实际上是进行三阶特征组合的结果,如此强的特征组合能力显然是FM系列模型所不具备的。但是正如上面提到的,GBDT可以不断生成树从而无限逼近,因此它很容易过拟合,并且这种特征转换方式损失了大量特征的数值信息,因此并不能简单的说GBDT的特征交叉能力强它就比FFM牛逼。在模型的选择和条是上,永远是多种因素共同作用的结果。

搞过深度学习的人,又没有发现...这个用GBDT生成特征向量的方式和Embedding十分像...都是利用一个模型来自动的提取特征...这也印证了推荐系统的逐渐使用深度学习的发展趋势~

传统已经陷入深渊,时代需要寻求新的发展。
下一篇我们开始探讨深度学习的应用了...

ctr——FM,FFM

一. 什么是ctr?

ctr即点击率,在推荐系统中,通常是按照ctr来对召回的内容子集进行排序,然后再结合策略进行内容的分发。

二. ctr预估模型的发展。

ctr预估模型的公式:y = f(x), y的范围为[0,1],表示广告被点击的概率。

1. LR 海量高纬离散特征

LR(logistics regression),是ctr预估模型的最基本的模型,也是工业界最喜爱使用的方案。LR的介绍这里就不细说了,介绍的教程随便一搜一大堆。

此时, 技术图片 ,其中 技术图片

这里,我们定义一下, 技术图片 , 技术图片 。

则: 技术图片

LR的优势在于处理离散化特征,而且模型十分简单,很容易实现分布式计算。关于LR的变种也有许多,比如Google的FTRL,其实这些变种都可以看成:LR+正则化+特定优化方法。

LR的缺点也很明显,特征与特征之间在模型中是独立的,对于一些存在交叉可能性的特征(比如: 衣服类型与性别,这两个特征交叉很有意义),需要进行大量的人工特征工程进行交叉。虽然模型简单了,但是人工的工作却繁重了很多。而且LR需要将特征进行离散化,归一化,在离散化过程中也可能出现边界问题。这里便为GBDT+LR的方案进行了铺垫。

 

2. GBDT

GBDT,即梯度提升决策树,是一种表达能力比较强的非线性模型。具体模型的介绍,也可以google出一堆教程。所以这里就不做详细的推导了。

此时, 技术图片

GBDT的优势在于处理连续值特征,比如用户历史点击率,用户历史浏览次数等连续值特征。而且由于树的分裂算法,它具有一定的组合特征的能力,模型的表达能力要比LR强。GBDT对特征的数值线性变化不敏感,它会按照目标函数,自动选择最优的分裂特征和该特征的最优分裂点,而且根据特征的分裂次数,还可以得到一个特征的重要性排序。所以,使用GBDT减少人工特征工程的工作量和进行特征筛选。

GBDT善于处理连续值特征,但是推荐系统的绝大多数场景中,出现的都是大规模离散化特征,如果我们需要使用GBDT的话,则需要将很多特征统计成连续值特征(或者embedding),这里可能需要耗费比较多的时间。同时,因为GBDT模型特点,它具有很强的记忆行为,不利于挖掘长尾特征,而且GBDT虽然具备一定的组合特征的能力,但是组合的能力十分有限,远不能与dnn相比。

 

3. FM 与 FFM

在LR部分,我们提及到了LR不能自动处理交叉特征。而FM则是在这个基础上进改进。

FM的模型公式为:

技术图片

在逻辑斯特函数里面的公式可以看成两部分,一部分是我们所熟悉的线性回归函数,而第二部分则是二次交叉项。所以FM处理特征间二次交叉的能力。

但是二次项权重 技术图片 需要我们去存储一个二维矩阵的变量,而因为特征是大规模离散的,这个二维矩阵的维度可能很大。而FM的作者利用矩阵分解的原理,将这个权重矩阵进行分解,即 技术图片 。

则FM的公式变为:

技术图片

但是这里,对于特征 技术图片 , 技术图片 与 技术图片 , 技术图片 与 技术图片 ,都是使用 技术图片 去和 技术图片 、 技术图片 做内积。但是对于不同的特征组合,比如天气与地点,天气与性别,关联的程度是不一样的,都使用同样的向量去与不同的特征做内积,会带来明显的信息损失。所以引出了FFM(field FM)。

FFM的模型公式为:

技术图片

这里可能对FM的原理没有阐述得十分清楚。所以推荐一篇美团团队写的文章: 。这篇文章里面具体阐述了FM与FFM。

FM的优点相对于LR在于拥有处理二次交叉特征的能力,而且它是可以实现线性的时间复杂度的(具体看美团的文章),模型训练也十分快。

而FFM则是在FM的基础上,考虑了特征交叉的field的特点,但是也导致它没有办法实现线性的时间复杂度,模型训练要比FM慢一个量级,但是效果会比FM来得更好。

 

4. GBDT+(LR, FM, FFM)

前面提及到了GBDT适合处理连续值特征,而LR,FM,FFM更加适合处理离散化特征。GBDT可以做到一定程度的特征组合,而且GBDT的特征组合是多次组合的,不仅仅是FM与FFM这样的二阶组合而已。同时,GBDT具备一定的特征选择能力(选择最优的特征进行分裂)。

在facebook 2014年的一篇论文中,提及到GBDT+LR的解决方案。即先使用GBDT对一些稠密的特征进行特征选择,得到的叶子节点,再拼接离散化特征放进去LR进行训练。在方案可以看成,利用GBDT替代人工实现连续值特征的离散化,而且同时在一定程度组合了特征,可以改善人工离散化中可能出现的边界问题,也减少了人工的工作量。

而kaggle的ctr预估比赛中,台大的团队参考fb,使用了gbdt+ffm的方案夺冠。

此时GBDT+LR模型的公式为:

技术图片

技术图片

 

5. MLR

MLR是由阿里团队提出的一种非线性模型。它等价于聚类+LR的形式。

我们定义:

技术图片

则MLR的公式为:

技术图片

相当于将X进行聚类,聚成m类,然后每一个聚类单独训练一个LR。

MLR相对于LR拥有更好的非线性表达能力,算是LR的一种拓展。

但是MLR与LR一样,也需要较大的特征工程处理,而且这个模型本身属于非凸模型,需要预训练,可能出现不收敛的情况。

以上是关于坠入深渊的传统之发展——FM、FFM、GBDT+LR的主要内容,如果未能解决你的问题,请参考以下文章

推荐算法之FFM:原理及实现简介

什么是ffm模型?

5年前的今天,一个小小的部署错误,让美股最大交易商坠入深渊

推荐系统概况:传统CTR深度学习CTR GraphEmbedding多任务学习梳理

推荐系统遇上深度学习--GBDT+LR融合方案实战

FM算法及FFM算法