FM(因子分解机系列)

来源:互联网 发布:疑心暗鬼动作数据下载 编辑:程序博客网 时间:2024/05/18 20:50

FM(Factorization Machine)

引子

机器学习的通常模式为学习输入到输出的变换,比如最常见的线性回归模型,输入为X,输出为Y,通常输入为高维数据,X是一个向量,形式如下:

y=w1x1+w2x2+...+wnxn

线性回归是最简单的线性模型,只能捕捉最简单的一阶线性关系,而且基于各特征独立同分布的假设。

实际中,各特征x1,x2,...xn并不是相互对立的,一般有些特征是相互影响的。此时就需要用多项式回归去建立模型,捕捉这些特征之间的相互影响。

一般为了简单,会只捕捉二阶的关系,即特征间两两相互影响的关系,如下:

y=w0+j=1pwjxj+j=1pi=jpwj,ixjxi

这里每两个特征有一个参数w要学习。

这里仍有问题,对于二项式回归来说,如果有n个特征,那么要学习到两两之间的关系,有n(n1)/2个参数要去学习,对于实际中的复杂任务来说,n的值往往特别大,会造成要学习的参数特别多的问题。
同时,又由于实际数据会有稀疏性问题,有些特征两两同时不为0的情况很少,当一个数据中任何一个特征值为0的时候,那么其他特征与此特征的相互关系将没有办法学习。

FM原理

受到矩阵分解的启发,为了解决上述两个问题,引入了因子分解机。

如果训练的输入数据有n个特征,设i,j两个特征的相互关系用参数wi,j表示,那么有wi,j=wj,i, 这样所有w的参数值会形成一个对称的矩阵,如下:
none w1,2 w1,3 w1,4w1,n
w2,1 none w2,3 w2,4w2,n

wn,1 wn,2 wn,3wn,n1 none

缺失了对角线的矩阵,正因为如此,我们可以通过给对角线任意设定值来保证矩阵为半正定矩阵,自然想到了矩阵分解。

基于矩阵分解的思想,将以上矩阵分解为两个低阶矩阵的乘积,那么在分解过程中,不仅仅减少了数据存储的复杂度,而且多了一个特别神奇的功能,预测功能。

矩阵分解基于一个假设,即矩阵中的值等于学习到的两个隐向量的乘积,即

wi,j=vivj

这里vi,vj为学习到的隐向量。
那么因子分解机的形式为:
y=w0+j=1pwjxj+j=1pi=j+1pxjxif=1kvj,fvi,f

其中,vj,f,vi,f分别为特征i,j对应隐向量的一个隐因子。
通常,由于数据稀疏,本来wi,j是学习不到的,但是我们可以通过i特征与其他特征的数据,j特征与其他特征的数据,分别学习到i,j特征的参数向量vi,vj,这样wi,j通过vivj的乘积便可以预测wi,j的值,神奇地解决了数据稀疏带来的问题。

而且,一般隐向量维度k远远小于特征数量n,那么分解后要学习的参数数量为:nk,对比多项式回归的参数数量n(n1)/2, 从O(n2)减到了kO(n)的级别。

学习方法

通常在学习的时候,要加上正则,至于正则的选择,根据实际情况来。但是正则化系数的选择非常重要。

1.随机梯度下降

关键参数:

  • 学习率(太大无法收敛)
  • 正则系数(分解机高度依赖正则系数的选择,同时有一种自适应选择正则系数的方法,在libfm中有此实现)
  • 初始化值(通常取小值,但不能为0)

2.交替最小二乘法(Alternating least-squares)

每次选择一个参数,固定其他参数进行优化

  • 相较于梯度下降,没有了超参数学习率
  • 仍有正则系数以及初始化值

3.马尔科夫链蒙特卡洛法MCMC

属于贝叶斯推断法,采用吉布斯采样,每次优化一个参数。

理论上是最好的方法,因为它首先对超参数的选择不是特别敏感,其次没有了正则系数,也就减少了正则系数的选择时间。同时,超先验参数的个数要小于正则系数的个数,减少了复杂度。

FFM(Field-aware Factorization Machines)

FFM是在FM的基础上引入了域的概念,是对FM的改进。
针对属于不同域的特征,相互影响因为域的不同而不同,那么一个特征,会学习到多个隐向量,一个隐向量对应一个域,更加准确地描述了特征的组合。

空间复杂度

假设有f个域,n个特征,隐向量长度为k, 那么时间复杂度为O(nfk)

参考文献

[1] Rendle S. Factorization machines with libfm[J]. ACM Transactions on Intelligent Systems and Technology (TIST), 2012, 3(3): 57.

[2] Juan Y, Zhuang Y, Chin W S, et al. Field-aware factorization machines for CTR prediction[C]//Proceedings of the 10th ACM Conference on Recommender Systems. ACM, 2016: 43-50.