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=1∑nwixi+i=1∑nj=i+1∑nwiwjxixj
其中,
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(n−1)/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}<v_i,v_j>x_ix_j
y(x)=w0+i=1∑nwixi+i=1∑nj=i+1∑n<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} W≈VTV,W∈Rn×n,V∈Rk×n
- w i j = < v i , v j > = ∑ f = 1 k v i f v j f w_{ij}=<v_i,v_j>=\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<<n) k(k<<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}<v_i,v_j>x_ix_j &= \frac{1}{2} (\sum_{i=1}^{n}\sum_{j=1}^{n}<v_i,v_j>x_ix_j-\sum_{i=1}^{n}<v_i,v_i>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=1∑nj=i+1∑n<vi,vj>xixj=21(i=1∑nj=1∑n<vi,vj>xixj−i=1∑n<vi,vi>xixi)=21(i=1∑nj=1∑nf=1∑kvifvjfxixj−i=1∑nf=1∑kvifvifxixi)=21(f=1∑k(i=1∑nvifxij=1∑nvjfxj−i=1∑nvif2xi2))=21(f=1∑k((i=1∑nvifxi)2−i=1∑nvif2xi2))
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=1∑nwixi+21(f=1∑k((i=1∑nvifxi)2−i=1∑nvif2xi2))
利用
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}
∂w0∂y∂wi∂y∂vif∂y=1=xi=21∂vif∂(∑f=1k[(∑i=1nvifxi)2−∑i=1nvif2xi2)]=2∂vif∂[(v1fx1+v2fx2+⋯+vifxi+⋯+vnfxn)2−(v1f2xi2+⋯+vif2xi2+⋯+vnf2xn2)]=xij=1∑nvjfxj−vifxi2
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}<v_{i,f_j},v_{j,f_i}>x_ix_j
y(x)=w0+i=1∑nwixi+i=1∑nj=i+1∑n<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}<<k_{FM}
kFFM<<kFM
DeepFM
论文地址:https://arxiv.org/abs/1703.04247
可以参考:【通俗易懂】手把手带你实现DeepFM: https://cloud.tencent.com/developer/article/1450677
- 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预估理论与实战