FM模型理论和实践

1、FM背景

在计算广告和推荐系统中,CTR预估(click-through rate)是非常重要的一个环节,判断一个商品的是否进行推荐需要根据CTR预估的点击率来进行。在进行CTR预估时,除了单特征外,往往要对特征进行组合。对于特征组合来说,业界现在通用的做法主要有两大类:FM系列(FM,FFM,DeepFM,DeepFFM,wide&deep,xDeepFM)与Tree系列(如GBDT+LR、XGBoost、LightGBM)。今天,我们就来讲讲FM算法。


2、one-hot编码带来的问题

FM(Factorization Machine)分解机 主要是为了解决数据稀疏的情况下,特征怎样组合的问题。已一个广告分类的问题为例,根据用户与广告位的一些特征,来预测用户是否会点击广告。数据如下:(本例来自美团技术团队分享的paper)

clicked是分类值,表明用户有没有点击该广告。1表示点击,0表示未点击。而country,day,ad_type则是对应的特征。对于这种categorical特征,一般都是进行one-hot编码处理。

将上面的数据进行one-hot编码以后,就变成了下面这样 :

因为是categorical特征,所以经过one-hot编码以后,(1)不可避免的样本的数据就变得很稀疏。举个非常简单的例子,假设淘宝或者京东上的item为100万,如果对item这个维度进行one-hot编码,光这一个维度数据的稀疏度就是百万分之一。由此可见,数据的稀疏性,是我们在实际应用场景中面临的一个非常常见的挑战与问题。(2)one-hot编码带来的另一个问题是特征空间变大。同样以上面淘宝上的item为例,将item进行one-hot编码以后,样本空间有一个categorical变为了百万维的数值特征,特征空间一下子暴增一百万。所以大厂动不动上亿维度,就是这么来的。


3、对特征进行组合

普通的线性模型,我们都是将各个特征独立考虑的,并没有考虑到特征与特征之间的相互关系。但实际上,大量的特征之间是有关联的。最简单的以电商为例,一般女性用户看化妆品服装之类的广告比较多,而男性更青睐各种球类装备。那很明显,女性这个特征与化妆品类服装类商品有很大的关联性,男性这个特征与球类装备的关联性更为密切。如果我们能将这些有关联的特征找出来显然是很有意义的。一般的线性模型为:

公式1

从上面的式子很容易看出,一般的线性模型压根没有考虑特征间的关联。为了表述特征间的相关性,我们采用多项式模型。在多项式模型中,特征xi与xj的组合用xixj表示。为了简单起见,我们讨论二阶多项式模型。具体的模型表达式如下:

公式2

上式中,n表示样本的特征数量,xi表示第i个特征。与线性模型相比,FM的模型就多了后面特征组合的部分。

3.1、为什么特征组合之后模型效果更好?

以二维空间为例,线性模型的分界线是直线,仅适用于能被直线分开的两类样本。如果两类样本的真实分界线是一个圆(w_{0}+w_{1}x_{1}^{2}+w_{2}x_{2}^{2}=0),或者一条双曲线(x*y+a=0),在原来的二维空间中,我们能否找到一条直线分开两类样本?答案明显是不能的。但如果我们非要用直线区分样本呢?那就做空间变换吧。对于上面分界线是圆的情况,将原来的(x1,x2)映射到(x_{1}^{2},x_{2}^{2});对于双曲线的情况,将原来的(x1,x2)映射到(x_{1}x_{2}),是不是在新的空间中,又可以用一条直线把两类分来啦。所以提到特征组合,实际上做的就是空间变换更准确说是把原有的特征空间映射到了一个更加高维的特征空间中。在一个真实问题中,我们并不知道分界线到底是圆还是双曲线还是别的什么,所以对于上面的例子,我们一般会尝试把原来的(x1,x2)映射到(x1,x2,x1^2,x2^2,x1x2),正所谓扩大搜索范围。特征组合增强了特征的表达能力,基本等价于说高维空间比低维空间更有表达力。

下面举个通俗易懂的例子,假设二维平面中有两类样本,他们的分布如下图,显然可以用线性模型1+2*x_{1}+4*x_{2}=0将样本分开。可是如果正负样本的分布式图二的状况呐,显然很难找到一条直线将他们分开,但是如果在原线性模型的基础上加上x1、x2两个特征的组合特征4*x_{1}x_{2}, 就可以轻松将他们分开了。最直观的就是4*x_{1}x_{2} 引入了非线性,非线性体现在

x_{2}=- \frac{1+2*x_{1}}{4+4*x_{2}}  .

       也就是上文提到的“把原有的特征空间映射到了一个更加高维的特征空间中”,用x1、x2 无论怎么线性组合都无法将图二的样本分开,但是如果在原来两维的基础上再加一维x1x2,将样本映射到三维(x1, x2, x1x2)空间中就能将样本分开。有同学可能会问“x1x2” 不是可以用x1,x2表示吗? 是的,但是不能线性表示,x1,x2能表示所有的该二维空间上的向量 w_{1}*x_{1}+w_{2}*x_{2}, 但是他们不能线性表示x1x2,因为x1x2不在该二维空间中,就像三维空间坐标轴(x,y,z)的关系,x,y只能线性表示X-Y平面的向量,不能表示该平面外的向量。说到底特征组合的本质就是构造新特征(该新特征无法用原有特征线性表示),从更多的特征维度对样本进行分析从而完成分类或回归。

     通过空间变换进行样本分割最简单的例子就是x^2+y^2-1=0, 圆内x^2+y^2-1<0, 圆外>0, 在二维空间内无法线性可分,如果映射到(x,y,x^2+y^2) 三维空间中,利用 z是否>1 就可以分割。

4、FM求解

从公式(1)可以看出,组合特征的参数一共有 n(n−1)/2 个,任意两个参数都是独立的。然而,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数wij的训练需要大量xi和xj 都非零的样本;由于样本数据本来就比较稀疏,满足“xi和xj都非零”的样本将会非常少。训练样本的不足,很容易导致参数wij不准确,最终将严重影响模型的性能。那么,如何解决二次项参数的训练问题呢?矩阵分解提供了一种解决思路。FM与 svd 有啥区别呐???

公式2
注意 i 是[1,n-1]

在model-based的协同过滤中,一个rating矩阵可以分解为user矩阵和item矩阵, 协同过滤的这种处理方法与FM有啥区别??

上式中,n 是样本的总特征数,既包含user特征也包含item特征,比如电影推荐中用户的年龄、性别等,电影的电影名、导演、演员等。

其中二次项参数wij可以认为是一个特征对另一个特征的相关度,wij=wji,所以wij可以组成一个对称阵 W(为了方便说明FM的由来,对角元素可以设置为正实数),那么这个特征矩阵就可以分解为 W=VV^{T},V的第j行便是第j维特征的隐向量。换句话说,每个参数wij=〈vi,vj〉,这就是FM模型的核心思想。 Ref: 深入FFM原理与实践

为了求出ωij,我们对每一个特征分量xi引入辅助向量Vi=(vi1,vi2,⋯,vik)。然后,利用vivj^T对ωij进行求解。

那么ωij组成的矩阵可以表示为:W_{n*n}=V_{n*k}*V_{n*k}^{T} ,n是用户特征数+item特征数,k是隐向量的维度,矩阵V_{n*k}的一行就是某一特征的隐向量。 

矩阵V_{n*k}的第j行便是第j维特征的隐向量,假设电影评分经过训练后得到的矩阵V_{n*k} 如下图,性别男对应的隐向量维(5,-3)与复联对应的隐向量(5,-1)相似度较高,那么W13=25+3=28,表示的含义是性别男和复联的相关度较高。

具体训练计算过程如下:

那么,如何求解vi和vj呢?主要采用了公式: (a+b+c)^2-(a^2+b^2+c^2)=2ab+2ac+2bc 

公式4

经过这样的分解之后,我们就可以通过随机梯度下降SGD求解出W_{i} 和 V_{j,f},得到训练好的模型。

公式3 注意 i 是 [1,n-1]

从公式3直观上看,FM的复杂度是 O(kn^2)=[n*(n-1)/2]*k。但是,通过公式(4)的等式,FM的二次项可以化简,其复杂度可以优化到 O(kn)。由此可见,FM可以在线性时间对新样本作出预测。

在预测任务中,我们只需要取出预测样本特征值为1的特征xi、xj,就可以计算出y(x),再经过sigmoid得到最终结果是点击(1)/不点击(0)。可以结合FM实现最简单电影推荐的项目,来更深入理解。

 

5、FM与其他模型的对比

FM是一种比较灵活的模型,通过合适的特征变换方式,FM可以模拟二阶多项式核的SVM模型、MF模型、SVD++模型等[7]

相比SVM的二阶多项式核而言,FM在样本稀疏的情况下是有优势的;而且,FM的训练/预测复杂度是线性的,而二项多项式核SVM需要计算核矩阵,核矩阵复杂度就是N平方。

相比MF而言,我们把MF中每一项的rating分改写为 rui∼βu+γi+xTuyirui∼βu+γi+xuTyi,从公式(2)(2)中可以看出,这相当于只有两类特征 uu 和 ii 的FM模型。对于FM而言,我们可以加任意多的特征,比如user的历史购买平均值,item的历史购买平均值等,但是MF只能局限在两类特征。SVD++与MF类似,在特征的扩展性上都不如FM,在此不再赘述。Ref:https://tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html

 

在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合;非线性SVM可以对特征进行kernel映射,但是在特征高度稀疏的情况下,并不能很好地进行学习;现在也有很多分解模型Factorization model如矩阵分解MF、SVD++等,这些模型可以学习到特征之间的交互隐藏关系,但基本上每个模型都只适用于特定的输入和场景。为此,在高度稀疏的数据场景下如推荐系统,FM(Factorization Machine)出现了。Ref:https://www.cnblogs.com/AndyJee/p/7879765.html

 

SVM和FM的主要区别在于:

SVM的二元特征交叉参数是独立的,而FM的二元特征交叉参数是两个k维的向量vi、vj,交叉参数就不是独立的,而是相互影响的。
FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行
FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量。Ref: https://blog.csdn.net/hiwallace/article/details/81333604

6、评分矩阵和特征矩阵的对比

6.1、评分矩阵 

R_{n*m}=U_{n*k}*I_{k*m}  n是用户数,m是item数,k是隐向量维度,U_{xy} 可以看作是user x对电影的隐藏特质y的热衷程度,U的一行可以看成该用户的隐向量,而I_{xy}可以看作是特质 y 在电影 z中的体现程度,矩阵I 的一行可以看成是该item的隐向量 。  为什么svd 会用这种方式呐? 怎么计算的,怎么和 特征矩阵划清关系。。。 

      

6.2、特征矩阵(系数矩阵)

W_{n*n}=V_{n*k}*V_{n*k}^{T} , n是用户特征数+item特征数 经过onehot之后的总特征数,k是隐向量的维度,矩阵V_{n*k}的一行就是某一特征的隐向量。

 

 

参考文章:

1.Factorization Machines: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.393.8529&rep=rep1&type=pdf

2.推荐系统遇上深度学习(一)--FM模型理论和实践: https://www.jianshu.com/p/152ae633fb00

3.https://tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值