A survey of FM

这次来回顾一下另一个经典模型,Factorization Machine。

模型形式如下 [ hat{y}(x)=w_0+sum^n_{i=1}w_ix_i+sum^n_{i=1}sum^n_{j=i+1}langle v_i,v_jrangle x_ix_j ] 包括对一阶和二阶特征的考虑,这样做是因为我们可以证明对于足够大的(k) 存在矩阵(Vinmathbb{R}^{ntimes k})[ W=VV^T ] 即二阶的权重可以用矩阵分解的形式得到,并且潜在因子的数量决定了二阶权重的质量。这样做有很多好处,首先,在训练集中未出现的权重项就可以通过出现过的权重进行训练,即(w_{ij}) 未出现过,但(v_i)(v_j) 却是可以用通过别的项训练出来。同时,可以将计算开销降低至(O(kn)) ,证明如下 [ begin{aligned} &sum^n_{i=1}sum^n_{j=i+1}langle v_i,v_jrangle x_ix_j\ =&frac{1}{2}sum^n_{i=1}sum^n_{j=1}langle v_i,v_jrangle x_ix_j-frac{1}{2}sum^n_{i=1}langle v_i,v_irangle x_ix_i\ =&frac{1}{2}(sum^n_{i=1}sum^n_{j=1}sum^k_{f=1}v_{if}v_{jf}x_ix_j-sum^n_{i=1}sum^k_{f=1}v_{if}v_{if}x_ix_i)\ =&frac{1}{2}sum^k_{f=1}(sum^n_{i=1}sum^n_{j=1}v_{if}v_{jf}x_ix_j-sum^n_{i=1}v_{if}v_{if}x_ix_i)\ =&frac{1}{2}sum^k_{f=1}((sum^n_{i=1}v_{if}x_i)(sum^n_{j=1}v_{jf}x_j)-sum^n_{i=1}v_{if}^2x_i^2)\ =&frac{1}{2}sum^k_{f=1}((sum^n_{i=1}v_{if}x_i)^2-sum^n_{i=1}(v_{if}x_i)^2)\ end{aligned} ] 可以看见里面变成和的平方减去平方的和的形式,大大简化了计算开销,求导更新权重也变得简单 [ frac{partial}{partialtheta}hat{y}(x)= begin{cases} 1&theta text{ is }w_0\ x_i& theta text{ is } w_i\ x_isum^n_{j=1}v_{jf}-v_{if}x_i^2&theta text{ is } v_{if} end{cases} ] 同时FM也可以跟SVM一样用kernel的方法进行优化,文章后面作者还跟其他几个常用模型做了比较。

Field-aware Factorization Machines

FFM在FM的基础上提出了域(field)的概念,将不同类别的数据分入不同的field中,然后对每个field的特征作交叉,其实这么做就是为了独立latent factor的影响,论文中给出这样一个例子

80 20 ESPN Nike
10 90 ESPN Gucci
0 1 ESPN Adidas
15 85 Vogue Nike
90 10 Vogue Gucci
10 90 Vogue Adidas
85 15 NBC Nike
0 0 NBC Gucci
90 10 NBC Adidas

预测这样一条数据被点击的概率时

click Publisher(P) Advertiser(A) Gender(G)
p ESPN Nike Male

对于FM模型,交叉项为 [ w_{text{ESPN}}cdot w_{text{Nike}}+w_{text{ESPN}}cdot w_{text{Male}}+w_{text{Nike}}cdot w_{text{Male}} ] 我们可以看出,每个特征的latent factor vector在相互匹配交叉配对的时候都是通用的,即我们训练出Publisher项的(w_{text{ESPN}}) 既可以用在和Advertiser项的交叉中,又可以用在和Gender项的交叉中。而FFM做的就是,Publisher、Advertiser、Gender这三个field彼此两两交叉的时候,不共享同一个latent factor vector,所以就变成这样 [ w_{text{ESPN}}^{text{PA}}cdot w_{text{Nike}}^{text{PA}}+w_{text{ESPN}}^{text{PG}}cdot w_{text{Male}}^{text{PG}}+w_{text{Nike}}^{text{AG}}cdot w_{text{Male}}^{text{AG}} ] 权重的上标表示权重分解所属于的field,(w_{text{ESPN}}^{text{PA}}) 仅表示Publisher filed和Advertiser 大专栏  A survey of FMfiled的交叉,训练出来的ESPN的latent factor vector。

FM与FFM相比,FM是做所有feature的交叉,所以二次项权重矩阵(Winmathbb{R}^{ntimes n}) 的,其中(n) 为特征数,可以视作所有的feature属于一个field,而FFM相当于对(W) 的拆分,然后分别训练(自己目前的理解,不一定对,如果不对请各位看官指出) [ W= begin{bmatrix} w^{PP}& w^{PA} & w^{PG}\ w^{AP}& w^{AA}& w^{AG}\ w^{GP}& w^{GA}& w^{GG} end{bmatrix} ] 其中每部分都是field交叉特征 [ w^{PA}= begin{bmatrix} w_{text{ESPN,Nike}}&w_{text{ESPN,Gucci}}&w_{text{ESPN,Adidas}}\ w_{text{Vogue,ESPN}}&w_{text{Vogue,Gucci}}&w_{text{Vogue,Adidas}}\ w_{text{NBC,Nike}}&w_{text{NBC,Gucci}}&w_{text{NBC,Adidas}}\ end{bmatrix} ] 其中将(w^{PA}) 分解为矩阵相乘形式得到 [ w_{text{ESPN,Nike}}=w_{text{ESPN}}^{text{PA}}cdot w_{text{Nike}}^{text{PA}} ] 此处等号右边的(w) 都是向量,等号左边的(w) 为标量,上面写得正式一点应该是 [ v_{text{ESPN}}^{text{PA}}cdot v_{text{Nike}}^{text{PA}}+v_{text{ESPN}}^{text{PG}}cdot v_{text{Male}}^{text{PG}}+v_{text{Nike}}^{text{AG}}cdot v_{text{Male}}^{text{AG}} =w_{text{ESPN,Nike}}^{text{PA}}+w_{text{ESPN,Male}}^{text{PG}}+w_{text{Nike,Male}}^{text{GA}} ] 讲清楚是什么之后我们再来看怎么算,论文里给出来的是用梯度下降进行迭代计算,计算其中非0值的梯度进行更新。此处我觉得这里依然可以按照FM的方法进行迭代更新,然后每次更新矩阵中的一部分而已。

可是FFM的强大并不在于将latent factor处理为相互的做法,而是提供了一个炒鸡快的多线程实现库libffm。嗯,算得快就是可以这么为所欲为,你快你强大。

Pairwise Interaction Tensor Factorization for Personalized Tag Recommendation

这里补充一下这篇文章,这篇文章是早于FFM提出来的,FFM就是根据这个思想提的,看完FFM再看这篇文章就很清楚了,这篇文章是分了3个field,user、item、tag三个维度做ffm。

Higher-Order Factorization Machines

这篇文章重点在于介绍如何把之前的二阶交叉特征再往高阶去提升,并引入了kernel的方法,引入ANOVA kernel来提升阶数(好像在SVM里见过?),有了高阶特征,如何训练就成了问题,作者在文中给出了多种训练方式,包括梯度下降、坐标上升等等。

Factorization Machines with libFM

这篇文章是对libFM的一个介绍,主要libFM中对于FM的三种计算方法:SGD、ALS和MCMC。其中SGD是原文中最普遍的一种迭代算法,ALS则相对麻烦一点,不断迭代的方式得到收敛解,而MCMC则是求解FM的图模型

1
1

由于我还没怎么入门图模型,就不在这多解释了,不过FM的图模型相对简单很多,看着公式就可以理解。MCMC也在之前博客中讲过了,大家可以去看。

Gradient Boosting Factorization Machines

这篇文章是GBM+FM的组合,说实话前两天我也在想,GBM这么好用,为什么没人把GBM和FM结合或者是MF结合,肯定会有一定提升的,然后今天就读到这篇文章了。这篇文章主要的idea就是对于FFM,并不是所有的field都是有用的feature,所以如选择好的交互特征就需要我们研究,这篇文章就是从这个问题出发的。主要的迭代式为 [ hat{y}_s(x)=hat{y}_{s-1}(x)+sum_{iinmathcal{C}_p}sum_{jinmathcal{C}_q}mathbb{I}[i,jin x]langle V_p^i,V_q^jrangle ] 其中的(mathcal{C}_p)(mathcal{C}_q) 为选取的交叉特征,其中如何选取好的特征则是我们模型的重点,文中采取的算法是选择尽可能使目标函数降低最快的特征,这点跟xgboost就非常相似,有兴趣的各位可以查阅一下(其实基本上完全相同的做法。。。),这里给出算法流程

2
2

Neural Factorization Machines for Sparse Predictive Analytics

这篇文章也是融合FM与DL方法的一篇文章,根据FM提出一种神似的叫Bi-Interaction Pooling的结构,用以刻画二阶特征,带入网络计算,网络结构如图所示

3
3

而这个Bi-Interaction Pooling层的计算方式为 [ f_{text{BI}}(mathcal{V}_x)=sum^n_{i=1}sum^n_{j=i+1}x_iv_iodot x_jv_j ] 与FM相似,可以改写为 [ f_{text{BI}}(mathcal{V}_x)=frac{1}{2}[(sum^n_{i=1}x_iv_i)^2-sum^n_{i=1}(x_iv_i)^2] ] 这个想法也还是挺好的,把FM当成pooling层来提取特征,感觉再深入一点应该效果会更好。

猜你喜欢

转载自www.cnblogs.com/liuzhongrong/p/12289526.html
FM