【推荐系统】FM,FFM和DeepFM

FM (Factorization Machines)

假设有 n n n个特征:

多项式模型
y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n w i w j x i x j y(x)=w_0+\sum_{i=1}^{n}w_ix_i + \sum_{i=1}^{n}\sum_{j=i+1}^{n}w_iw_jx_ix_j y(x)=w0+i=1nwixi+i=1nj=i+1nwiwjxixj
其中, n n n 代表样本的特征数量, x i x_i xi 是第 i i i个特征的值, w 0 , w i , w j w_0,w_i,w_j w0,wi,wj 是模型参数。

  • 组合特征的参数一共有 n ( n − 1 ) / 2 n(n−1)/2 n(n1)/2 个,任意两个参数都是独立的
  • 在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的
    • 其原因是,每个参数 w i j w_{ij} wij 的训练需要大量 x i x_i xi x j x_j xj 都非0的样本;由于样本数据本来就比较稀疏,满足 x i x_i xi x j x_j xj 都非0 的样本将会非常少。训练样本的不足,很容易导致参数 w i j w_{ij} wij 不准确,最终将严重影响模型的性能。

FM model
y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j y(x)=w_0+\sum_{i=1}^{n}w_ix_i + \sum_{i=1}^{n}\sum_{j=i+1}^{n}x_ix_j y(x)=w0+i=1nwixi+i=1nj=i+1n<vi,vj>xixj

  • 所有二次项系数组成一个对称阵 W W W
  • 利用矩阵分解:
    • W ≈ V T V , W ∈ R n × n , V ∈ R k × n W \approx V^TV,W\in R^{n\times n} ,V\in R^{k \times n} WVTV,WRn×n,VRk×n
    • w i j = < v i , v j > = ∑ f = 1 k v i f v j f w_{ij}==\sum_{f=1}^{k}v_{if}v_{jf} wij=<vi,vj>=f=1kvifvjf
    • v i v_i vi 是第 i i i 维特征的隐向量, ⟨ ⋅ , ⋅ ⟩ ⟨⋅,⋅⟩ , 代表向量点积,隐向量的长度为 k ( k < < n ) k(k<kk<<n),包含 k k k 个描述特征的因子
    • 二次项的参数数量减少为 k n kn kn个,远少于多项式模型的参数数量
    • 参数因子化使得 x h x i x_hx_i xhxi 的参数和 x i x j x_ix_j xixj 的参数不再是相互独立的,因此我们可以在样本稀疏的情况下相对合理地估计 F M FM FM 的二次项参数。
      • x h x i x_hx_i xhxi x i x j x_ix_j xixj的系数分别为 ⟨ v h , v i ⟩ ⟨v_h,v_i⟩ vh,vi ⟨ v i , v j ⟩ ⟨v_i,v_j⟩ vi,vj,它们之间有共同项 v i v_i vi。也就是说,所有包含 “ x i x_i xi 的非零组合特征”(存在某个 j ≠ i j≠i j=i,使得 x i x j ≠ 0 x_ix_j≠0 xixj=0)的样本都可以用来学习隐向量 v i v_i vi,这很大程度上避免了数据稀疏性造成的影响
      • 而在多项式模型中, w h i w_{hi} whi w i j w_{ij} wij 是相互独立的

直观上看FM的算法复杂度是 O ( k n 2 ) O(kn^2) O(kn2),但是通过公式转换,可以将复杂度优化到 O ( k n ) O(kn) O(kn),具体如下:
a b + b c + a c = 1 2 ( ( a + b + c ) 2 − ( a 2 + b 2 + c 2 ) ) ab+bc+ac=\frac{1}{2}((a+b+c)^2-(a^2+b^2+c^2)) ab+bc+ac=21((a+b+c)2(a2+b2+c2))
∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j = 1 2 ( ∑ i = 1 n ∑ j = 1 n < v i , v j > x i x j − ∑ i = 1 n < v i , v i > x i x i ) = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k v i f v j f x i x j − ∑ i = 1 n ∑ f = 1 k v i f v i f x i x i ) = 1 2 ( ∑ f = 1 k ( ∑ i = 1 n v i f x i ∑ j = 1 n v j f x j − ∑ i = 1 n v i f 2 x i 2 ) ) = 1 2 ( ∑ f = 1 k ( ( ∑ i = 1 n v i f x i ) 2 − ∑ i = 1 n v i f 2 x i 2 ) ) \begin{aligned} \sum_{i=1}^{n}\sum_{j=i+1}^{n}x_ix_j &= \frac{1}{2} (\sum_{i=1}^{n}\sum_{j=1}^{n}x_ix_j-\sum_{i=1}^{n}x_ix_i) \\ &= \frac{1}{2}(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{f=1}^{k}v_{if}v_{jf}x_ix_j-\sum_{i=1}^{n}\sum_{f=1}^{k}v_{if}v_{if}x_ix_i)\\ &=\frac{1}{2}(\sum_{f=1}^{k}(\sum_{i=1}^{n}v_{if}x_i\sum_{j=1}^{n}v_{jf}x_j-\sum_{i=1}^{n}v_{if}^2x_i^2))\\ &=\frac{1}{2}(\sum_{f=1}^{k}((\sum_{i=1}^{n}v_{if}x_i)^2-\sum_{i=1}^{n}v_{if}^2x_i^2)) \end{aligned} i=1nj=i+1n<vi,vj>xixj=21(i=1nj=1n<vi,vj>xixji=1n<vi,vi>xixi)=21(i=1nj=1nf=1kvifvjfxixji=1nf=1kvifvifxixi)=21(f=1k(i=1nvifxij=1nvjfxji=1nvif2xi2))=21(f=1k((i=1nvifxi)2i=1nvif2xi2))
FM模型可以表达为:
y ( x ) = w 0 + ∑ i = 1 n w i x i + 1 2 ( ∑ f = 1 k ( ( ∑ i = 1 n v i f x i ) 2 − ∑ i = 1 n v i f 2 x i 2 ) ) y(x)=w_0+\sum_{i=1}^{n}w_ix_i + \frac{1}{2}(\sum_{f=1}^{k}((\sum_{i=1}^{n}v_{if}x_i)^2-\sum_{i=1}^{n}v_{if}^2x_i^2)) y(x)=w0+i=1nwixi+21(f=1k((i=1nvifxi)2i=1nvif2xi2))
利用 S G D SGD SGD:
∂ y ∂ w 0 = 1 ∂ y ∂ w i = x i ∂ y ∂ v i f = 1 2 ∂ ( ∑ f = 1 k [ ( ∑ i = 1 n v i f x i ) 2 − ∑ i = 1 n v i f 2 x i 2 ) ] ∂ v i f = ∂ [ ( v 1 f x 1 + v 2 f x 2 + ⋯ + v i f x i + ⋯ + v n f x n ) 2 − ( v 1 f 2 x i 2 + ⋯ + v i f 2 x i 2 + ⋯ + v n f 2 x n 2 ) ] 2 ∂ v i f = x i ∑ j = 1 n v j f x j − v i f x i 2 \begin{aligned} \frac{\partial{y}}{\partial{w_0}}&=1\\ \frac{\partial{y}}{\partial{w_i}}&=x_i \\ \frac{\partial{y}}{\partial{v_{if}}}&=\frac{1}{2} \frac{\partial{(\sum_{f=1}^{k}[(\sum_{i=1}^{n}v_{if}x_i)^2-\sum_{i=1}^{n}v_{if}^2x_i^2)]}}{\partial{v_{if}}} \\ &=\frac{\partial{[ (v_{1f}x_1+v_{2f}x_2+\cdots+v_{if}x_i+\cdots+v_{nf}x_n)^2-(v_{1f}^2x_i^2+\cdots+v_{if}^2x_i^2+\cdots+v_{nf}^2x_n^2)]}}{2\partial{v_{if}}} \\ &=x_i\sum_{j=1}^{n}v_{jf}x_j-v_{if}x_i^2 \end{aligned} w0ywiyvify=1=xi=21vif(f=1k[(i=1nvifxi)2i=1nvif2xi2)]=2vif[(v1fx1+v2fx2++vifxi++vnfxn)2(v1f2xi2++vif2xi2++vnf2xn2)]=xij=1nvjfxjvifxi2

FFM (Field-aware Factorization Machines)

  • 通过引入 field 的概念, FFM 把相同性质的特征归于同一个 field。
    • 在FFM中,每一维特征 x i x_i xi,针对其它特征的每一种 field f j f_j fj,都会学习一个隐向量 v i , f j v_{i,f_j} vi,fj
    • 因此,隐向量不仅与特征 x i x_i xi 相关,也与 field 相关,这也是FFM中“Field-aware”的由来
    • 设样本一共有 n n n 个特征, f f f 个 field,那么每个特征有 f f f 个隐向量,FFM的二次项有 n × f n\times f n×f 个隐向量
    • 而在FM模型中,每一维特征的隐向量只有一个。FM 可以看作 FFM 的特例,是把所有特征都归属到一个 field 时的 FFM 模型。

FFM的模型方程如下:
y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , f j , v j , f i > x i x j y(x)=w_0+\sum_{i=1}^{n}w_ix_i + \sum_{i=1}^{n}\sum_{j=i+1}^{n}x_ix_j y(x)=w0+i=1nwixi+i=1nj=i+1n<vi,fj,vj,fi>xixj

  • 其中, f j f_j fj x j x_j xj 特征所属的 field
  • 如果隐向量的长度为 k k k,那么FFM的二次参数有 n × f × k n\times f \times k n×f×k 个,远多于FM模型的 n × k n\times k n×k
  • 此外,由于隐向量与field相关,FFM二次项并不能够化简,时间复杂度是 O ( k n 2 ) O(kn^2) O(kn2)
  • 需要注意的是由于FFM中的latent vector只需要学习特定的field,所以通常: k F F M < < k F M k_{FFM}<kFFM<<kFM
    【推荐系统】FM,FFM和DeepFM_第1张图片

DeepFM

论文地址:https://arxiv.org/abs/1703.04247
可以参考:【通俗易懂】手把手带你实现DeepFM: https://cloud.tencent.com/developer/article/1450677

【推荐系统】FM,FFM和DeepFM_第2张图片

  • FM 的线性部分可以用embedding_size=1实现
  • 二阶部分的embedding相当于latent vector, 并且这部分DNN和FM共享

参考资料

FM和FFM:
美团技术点评:深入FFM原理与实践
简书/推荐算法:FM算法原理与实践
CTR预估算法之FM, FFM, DeepFM及实践
机器学习算法系列(26):因子分解机(FM)与场感知分解机(FFM)

DeepFM: https://github.com/ChenglongChen/tensorflow-DeepFM
DeepFM模型CTR预估理论与实战

你可能感兴趣的:(推荐系统)