FM/FFM

FM

FM算法的提出旨在解决稀疏数据下的特征组合问题。
y=w0+i=1nwixi+i=1n1j=i+1nwijxixj(w0,wi,wijR)y=w_0+\sum\limits_{i=1}^n w_i x_i+\sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^n w_{ij}x_i x_j,(w_0, w_i, w_{ij}\in R)
分解wij=<vi,vj>=k=1Kvikvjk\displaystyle w_{ij}=<v_i,v_j>=\sum\limits_{k=1}^{K}v_{ik}v_{jk}
i=1n1j=i+1nwijxixj=12(i=1nj=1nwijxixji=1nwiixi2)=12(i=1nj=1nk=1Kvikvjkxixji=1nk=1Kvik2xi2)\displaystyle\sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^n w_{ij}x_i x_j=\frac{1}{2}\Big(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^n w_{ij}x_i x_j-\sum\limits_{i=1}^n w_{ii}x^2_i\Big)=\frac{1}{2}\Big(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^n \sum\limits_{k=1}^{K}v_{ik}v_{jk}x_i x_j-\sum\limits_{i=1}^n \sum\limits_{k=1}^{K}v^2_{ik}x^2_i\Big)
=12k=1K((i=1nvikxi)(j=1nvjkxj)i=1n(vikxi)2)=12k=1K((i=1nvikxi)2i=1n(vikxi)2)\displaystyle=\frac{1}{2}\sum\limits_{k=1}^{K}\Big((\sum\limits_{i=1}^{n} v_{ik}x_i) (\sum\limits_{j=1}^n v_{jk}x_j)-\sum\limits_{i=1}^n (v_{ik}x_i)^2\Big)=\frac{1}{2}\sum\limits_{k=1}^{K}\Big((\sum\limits_{i=1}^{n} v_{ik}x_i)^2-\sum\limits_{i=1}^n (v_{ik}x_i)^2\Big)
其中vi=(vi1,vi2, ,viK)v_i=(v_{i1},v_{i2},\cdots,v_{iK})是第ii维特征的隐向量。【1】隐向量的长度为kk<<nk(k<<n),包含kk个描述特征的因子。由上可见,二次项的参数数量减少为knkn个,远少于多项式模型的参数数量。即通过矩阵分解,二次项可以化简,复杂度可以从O(kn2)O(kn^2)优化到O(kn)O(kn)。【2】参数因子化使得xhxix_h x_i的参数和xixjx_i x_j的参数不再是相互独立的,因此可以在样本稀疏的情况下相对合理地估计FM的二次项参数。具体来说,xhxix_h x_ixixjx_i x_j的系数分别为<vh,vi><v_h,v_i><vi,vj><v_i,v_j>,它们之间有共同项viv_i。也就是说,所有包含“xix_i的非零组合特征”(存在某个jij\neq i,使得xixj0x_i x_j\neq 0)的样本都可以用来学习隐向量viv_i,这很大程度上避免了数据稀疏性造成的影响。而在多项式模型中,whiw_{hi}wijw_{ij}是相互独立的。【3】以上包含二阶项的拟合函数,可以采用不同的损失函数用于解决回归、二分类等问题,比如可以采用MSE(Mean Square Error)损失函数来求解回归问题,也可以采用Hinge/Cross-Entropy损失来求解分类问题。当然,在进行二元分类时,FM的输出需要经过sigmoid变换,这与Logistic回归是一样的。

回归问题(MSE)

记样本的真实的标签为y^\hat{y},FM模型预测的标签为yy,训练集大小为NN,则
loss(y^,y)=12l=1N(y^(l)y(l))2=12l=1N{y^(l)[w0(l)+i=1nwi(l)xi+12k=1K((i=1nvik(l)xi)2i=1n(vik(l)xi)2)]}\displaystyle loss(\hat{y},y)=\frac{1}{2}\sum\limits_{l=1}^{N}(\hat{y}^{(l)} - y^{(l)})^2=\frac{1}{2}\sum\limits_{l=1}^{N}\Big\{\hat{y}^{(l)}-\Big[w^{(l)}_0+\sum\limits_{i=1}^n w^{(l)}_i x_i+\frac{1}{2}\sum\limits_{k=1}^{K}\Big((\sum\limits_{i=1}^{n} v^{(l)}_{ik}x_i)^2-\sum\limits_{i=1}^n (v^{(l)}_{ik}x_i)^2\Big)\Big]\Big\}

loss(y^,y)θ=l=1N(y^(l)y(l))y(l)θ求导:\displaystyle\frac{\partial loss(\hat{y},y)}{\partial\theta}=\sum\limits_{l=1}^{N}(\hat{y}^{(l)} - y^{(l)})\frac{\partial y^{(l)}}{\partial\theta}

SGDy(l)θ={1,θ=w0xi,θ=wixij=1nvj,kxjvi,kxi2,θ=vi,k利用SGD训练模型,各参数梯度:\displaystyle\frac{\partial y^{(l)}}{\partial\theta}=\begin{cases}1, &\theta=w_0 \cr x_i, & \theta=w_i \cr x_i\sum\limits_{j=1}^n v_{j,k}x_j-v_{i,k}x^2_i,& \theta=v_{i,k}\end{cases}

分类问题(logloss)

记样本的真实的标签为y^\hat{y},FM模型预测的标签为yy,训练集大小为NN;当正负样本的标签分别为+1+11-1时,交叉熵损失可以表示为
loss(y^,y)=l=1Nlnσ(y^(l)y(l))=l=1Nln11+ey^(l)y(l)=l=1Nln11+ey^(l)[w0(l)+i=1nwi(l)xi+12k=1K((i=1nvik(l)xi)2i=1n(vik(l)xi)2)]\displaystyle loss(\hat{y},y)=\sum\limits_{l=1}^{N}-ln\sigma(\hat{y}^{(l)}y^{(l)})=\sum\limits_{l=1}^{N}-ln\frac{1}{1+e^{-\hat{y}^{(l)}y^{(l)}}}=\sum\limits_{l=1}^{N}-ln\frac{1}{1+e^{-\hat{y}^{(l)}\Big[w^{(l)}_0+\sum\limits_{i=1}^n w^{(l)}_i x_i+\frac{1}{2}\sum\limits_{k=1}^{K}\Big((\sum\limits_{i=1}^{n} v^{(l)}_{ik}x_i)^2-\sum\limits_{i=1}^n (v^{(l)}_{ik}x_i)^2\Big)\Big]}}

loss(y^,y)θ=l=1N1σ(y^(l)y(l))σ(y^(l)y(l))y(l)y(l)θ求导:\displaystyle\frac{\partial loss(\hat{y},y)}{\partial\theta}=\sum\limits_{l=1}^{N}-\frac{1}{\sigma(\hat{y}^{(l)}y^{(l)})}\cdot\frac{\partial\sigma(\hat{y}^{(l)}y^{(l)})}{\partial y^{(l)}}\cdot\frac{\partial y^{(l)}}{\partial \theta}

同样,SGDy(l)θ={1,θ=w0xi,θ=wixij=1nvj,kxjvi,kxi2,θ=vi,k利用SGD训练模型,各参数梯度:\displaystyle\frac{\partial y^{(l)}}{\partial\theta}=\begin{cases}1, &\theta=w_0 \cr x_i, & \theta=w_i \cr x_i\sum\limits_{j=1}^n v_{j,k}x_j-v_{i,k}x^2_i,& \theta=v_{i,k}\end{cases}

FFM

通过引入field的概念,FFM把相同性质的特征/归于同一个field。FM可以看作FFM的特例,是把所有特征/都归属到一个field时的FFM模型。
FM/FFM
y=w0+i=1nwixi+i=1n1j=i+1n<vi,fj,vj,fi>xixjy=w_0+\sum\limits_{i=1}^n w_i x_i+\sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^n <v_{i,f_j},v_{j,f_i}>x_i x_j
注意,这里ii是特征,属于fieldfif_ivi,fjv_{i,f_j}表示特征fif_i对fieldfjf_j的隐向量。

基于field的FFM和FM的区别:(1)FM特征xixjxkx_i、x_j、x_k交叉时,对应的隐向量vivjvkv_i、v_j、v_k是可以无区别得互相交叉的,即“xixjx_i x_j的系数为vivjv_i v_j”,“xixkx_i x_k的系数为vivkv_i v_k”,很显然:xix_i无论与特征xjx_j、还是特征xkx_k做交叉时,组合系数都是同一个viv_i,并没有区别开。(2)FFM也是对特征进行交叉(5个feature两两交叉C52C^2_5),但是FFM的特征xixjxkx_i、x_j、x_k交叉时,对应的隐向量vivjvkv_i、v_j、v_k不能不考虑field互相交叉;即xix_i与特征xjx_jxix_i与特征xkx_k做交叉时,组合系数不能使用同一个viv_i,应该根据field信息区别为vi,fjv_{i,f_j}vi,fkv_{i,f_k}。只有feature xjx_jxkx_k属于同一field时,有vi,fj=vi,fkv_{i,f_j}=v_{i,f_k}

结合上图表格:(1)feature1-User分别与feature2-Movie和feature5-Price做交叉时,由于feature2-Movies属于field2、feature5-Price属于field4,所以feature1-User和feature2-Movie组合的系数为<v1,2,v2,1><v_{1,2}, v_{2,1}>,feature1-User和feature5-Price组合的系数为<v1,4,v5,1><v_{1,4},v_{5,1}>,即v1,2v_{1,2}v1,4v_{1,4}是不同的两项。(2)feature1-User分别与feature3-Genre和feature4-Genre做交叉时,由于feature3-Genre和feature4-Genre都属于field3,所以feature1-User和feature3-Genre组合的系数为<v1,3,v3,1><v_{1,3}, v_{3,1}>,feature1-User和feature4-Genre组合的系数为<v1,3,v4,1><v_{1,3},v_{4,1}>,即v1,3v_{1,3}v1,3v_{1,3}是相同的项。

FM背景及相关算法对比

(1)FM(factorization machine)是在LR(logistic regression)基础上,加入了特征的二阶组合项;
(2)SVM和FM的主要区别在于,SVM的二元特征交叉参数是独立的,如wijw_{ij},而FM的二元特征交叉参数是两个k维的向量vivjv_i、v_j,即<vivj><v_i,v_j><vjvm><v_j,v_m>是相互影响的。

Q:为什么线性SVM在和多项式SVM在稀疏条件下效果会比较差呢?A:线性SVM只有一维特征,不能挖掘深层次的组合特征在实际预测中并没有很好的表现;而多项式SVM正如前面提到的,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,对测试集上的case而言这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。

参考文献
https://tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html