FM算法
本文先简要总结了FM相关的基本知识,然后转载了FM原理的具体推导。
一、背景
在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合;非线性SVM可以对特征进行kernel映射,但是在特征高度稀疏的情况下,并不能很好地进行学习。
FM(Factorization Machine)主要是为了解决数据稀疏的情况下,特征怎样组合的问题。
对于普通的线性模型:
将各个特征独立考虑,并没有考虑特征与特征之间的关系。
对于多项式模型:
通常情况下只考虑两阶多项式模型,也就是特征两两组合的问题,但对于观察样本中未出现过交互的特征分量,wij=0,即不能对相应的参数进行估计。
二、目标函数
FM的思路为,在多项式模型的基础上,通过矩阵分解的方法,为了求解
,为每一个特征分量xi引入辅助向量
,然后用
对
进行求解。
即
从上式可以看出二项式的参数数量由原来的
个减少为
个,远少于多项式模型的参数数量。
为什么要通过向量v的学习方式而不是简单的wij参数呢?
在稀疏条件下,这样的表示方法打破了特征的独立性,能够更好地挖掘特征之间的相关性。 以电影评分为例,我们要估计用户A和电影ST的关系w(A&ST)以更好地预测y,如果是简单地考虑特征之间的共现情况来估计w(A&ST),从已有的训练样本来看,这两者并没有共现,因此学习出来的w(A&ST)=0。而实际上,A和ST应该是存在某种联系的,从用户角度来看,A和B都看过SW,而B还看过ST,说明A也可能喜欢ST。而通过向量v来表示用户和电影,任意两两之间的交互都会影响v的更新,从前面举的例子就可以看过,A和B看过SW,这样的交互关系就会导致v(ST)的学习更新。即,参数因子化使得 的参数和 的参数不再相互独立,因为有了 特征关联。因此我们可以在样本系数的情况下相对合理地估计FM的二次项参数。
求解
,主要采用公式
来求出交叉项:
FM的复杂度为
,通过上述等式的改写,可将复杂度降为线性的
。因此,FM可以在线性时间对新样本做出预测,复杂度和LR模型一样,且效果提升不少。
前面提到到都是二元交叉,其实可以延伸到多元交叉,目标函数依然可以通过变形在线性时间内完成。
三、训练算法
FM可用于各种预测任务,如回归、分类、排序等。
对于回归问题,损失函数可为最小平方误差。
对于二分类问题,损失函数可为hinge loss(
)或logit loss(
)函数。
对于排序问题,x可能需要转化为pair-wise的形式如
,损失函数可以采用pairwise loss。
可以采用随机梯度下降(SGD)来训练优化FM模型。
同时可加入正则项。
对于任意的FM的所有模型参数
,存在两个与
取值无关的函数,使得成立
因此可以算得y对θ的偏导数,即各参数的梯度如下:
四、FM 对比 其他算法
FM对比SVM
- SVM的二元特征交叉参数是独立的,而FM的二元特征交叉参数是两个k维的向量vi、vj,交叉参数就不是独立的,而是相互影响的。
- FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行
- FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量
为什么线性SVM在和多项式SVM在稀疏条件下效果会比较差呢?
线性svm只有一维特征,不能挖掘深层次的组合特征,在实际预测中并没有很好的表现;而多项式svm正如前面提到的,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,对于测试集上的case而言,这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。
FM 对比 其他分解模型Fac torization Model
这部分不详述,其他分解模型包括Matrix factorization (MF)、SVD++、PITF for Tag Recommendation、Factorized Personalized Markov Chains (FPMC),这些模型都只在特定场景下使用,输入形式也比较单一(比如MF只适用于categorical variables),而FM通过对输入特征进行转换,同样可可以实现以上模型的功能,而且FM的输入可以是任意实数域的数据,因此FM是一个更为泛化和通用的模型。
详细内容参考:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
总结
FM优点:
主要考虑到,FM模型是SVM模型与factorization模型的结合。
- FM模型可以在非常稀疏的数据中进行合理的参数轨迹,而SVM做不到这点。
- FM模型的复杂度是线性的,优化效果很好,而且不需要像SVM一样依赖于支持向量。
- FM是一个通用模型,它可以用于任何特征值为实值的情况。而其他因式分解模型只能用于一些输入数据比较固定的情况。
FFM算法(Field-aware Factorization Machine)
FFM在FM的基础上进一步改进,在模型中引入类别的概念,即field。将同一个field的特征单独进行one-hot,因此在FFM中,每一维特征都会针对其他特征的每个field,分别学习一个隐变量,该隐变量不仅与特征相关,也与field相关。
假设样本的n个特征属于f个field,那么FFM的二次项有nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。FM可以看做FFM的特例,把所有特征都归属到一个field的FFM模型。其模型方程为:
如果隐向量的长度为k,那么FFM的二次参数有nfk个,远多于FM模型的nk个。
DeepFM
FM通过对于每一位特征的隐变量内积来提取特征组合,最后的结果也不错,虽然理论上FM可以对高阶特征组合进行建模,但实际上因为计算复杂度原因,一般都只用到了二阶特征组合。对于高阶特征组合来说,我们很自然想到多层神经网络DNN。
DeepFM目的是同时学习低阶和高阶的特征交叉,主要由FM和DNN两部分组成,底部共享同样的输入。模型可以表示为:
FM部分
原理如上,数学表达为
Deep部分
深度部分是一个前馈神经网络,与图像或语音类的输入不同,CTR的输入一般是极其稀疏的,因此需要重新设计网络结构。在第一层隐藏层之前,引入一个嵌入层来完成输入向量压缩到低位稠密向量:
嵌入层的结构如上图所示,有两个有趣的特性:
1) 尽管不同field的输入长度不同,但是embedding之后向量的长度均为k
2) 在FM中得到的隐变量
现在作为嵌入层网络的权重
嵌入层的输出为
,其中ei是嵌入的第i个filed,m是field的个数,前向过程将嵌入层的输出输入到隐藏层为
其中l是层数,σ是激活函数,W(l)是模型的权重,b(l)是l层的偏置。
因此,DNN得预测模型表达为:
|H|为隐藏层层数。
参考网址:
分解机(Factorization Machines)推荐算法原理(非常好,强烈推荐)
FM系列算法解读(FM+FFM+DeepFM)
Factorization Machine 详解(三)—— FM与高阶特征训练(系列文章)
FM算法(一):算法理论