很久很久没有更新这个博客了,最近想发点东西,先发点以前写的吧
简介
因子分解机(Factorization Machine, FM)是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法。 对于因子分解机FM来说,最大的特点是对于稀疏的数据具有很好的学习能力。
模型
y ^ : = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j \hat{y} := w_{0} + \sum_{i=1}^{n}w_{i}x_{i} + \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\langle v_{i}, v_{j} \rangle x_{i}x_{j} y^:=w0+∑i=1nwixi+∑i=1n−1∑j=i+1n⟨vi,vj⟩xixj
其中,参数
w
0
∈
R
,
W
∈
R
n
,
V
∈
R
n
×
k
.
⟨
v
i
,
v
j
⟩
w_{0}\in \mathbb{R}, W\in\mathbb{R}^{n}, V\in\mathbb{R}^{n\times k}. \langle v_{i}, v_{j} \rangle
w0∈R,W∈Rn,V∈Rn×k.⟨vi,vj⟩ 表示的是两个长度为k额向量的> 点积:
⟨
v
i
,
v
j
⟩
:
=
∑
f
=
1
k
ν
i
,
f
⋅
ν
j
,
f
\langle v_{i}, v_{j} \rangle := \sum_{f=1}^{k}\nu_{i,f}\cdot\nu_{j,f}
⟨vi,vj⟩:=∑f=1kνi,f⋅νj,f
其中,
v
i
v_{i}
vi 表示的是系数矩阵 V 的第 i 维向量,且
v
i
=
(
ν
i
,
1
,
ν
i
,
2
,
⋯
 
,
ν
i
,
k
)
,
k
∈
N
+
v_{i} = (\nu_{i,1},\nu_{i,2},\cdots,\nu_{i,k}), k\in\mathbb{N}^{+}
vi=(νi,1,νi,2,⋯,νi,k),k∈N+ 称为超参数>。在因子分解机FM模型中,前面两部分是传统的线性模型,最后一部分将两个互异特征分量之间的相互关系考虑进来。
因子分解机FM也可以推广到高阶的形式,即将更多互异特征分量之间的相互关系考虑进来。
算法
Regression
在回归问题中,使用
y
^
\hat{y}
y^ 作为预测结果,使用最小均方误差(the least square error)作为优化的标准:
l
o
s
s
R
(
y
^
,
y
)
=
1
2
∑
i
=
1
m
(
y
^
(
i
)
−
y
(
i
)
)
2
loss^{R}(\hat{y}, y) = \frac{1}{2}\sum_{i=1}^{m}(\hat{y}^{(i)} - y^{(i)})^{2}
lossR(y^,y)=21∑i=1m(y^(i)−y(i))2
Binary Classification
与Logistic类似,使用logit loss作为优化标准:
l
o
s
s
C
(
y
^
,
y
)
=
∑
i
=
1
m
−
l
n
σ
(
y
^
(
i
)
y
(
i
)
)
loss^{C}(\hat{y}, y) = \sum_{i=1}^{m}-ln\sigma(\hat{y}^{(i)}y^{(i)})
lossC(y^,y)=∑i=1m−lnσ(y^(i)y(i))
其中,
σ
\sigma
σ 表示的是阶跃函数Sigmoid.
求解
对k值的限定,对FM的表达能力有一定的影响。
对模型最后一项可做如下替换:
∑
i
=
1
n
−
1
∑
j
=
i
+
1
n
⟨
v
i
,
v
j
⟩
x
i
x
j
\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\langle v_{i},v_{j} \rangle x_{i}x_{j}
∑i=1n−1∑j=i+1n⟨vi,vj⟩xixj
= 1 2 ∑ i = 1 n ∑ j = 1 n ⟨ v i , v j ⟩ x i x j − 1 2 ∑ i = 1 n ⟨ v i , v j ⟩ x i x j = \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\langle v_{i},v_{j} \rangle x_{i}x_{j} - \frac{1}{2}\sum_{i=1}^{n}\langle v_{i},v_{j}\rangle x_{i}x_{j} =21∑i=1n∑j=1n⟨vi,vj⟩xixj−21∑i=1n⟨vi,vj⟩xixj
= 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k ν i , f ν j , f x i x j − ∑ i = 1 n ∑ f = 1 k ν i , f ν i , f x i x i ) = \frac{1}{2}(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{f=1}^{k}\nu_{i,f}\nu_{j,f}x_{i}x_{j} - \sum_{i=1}^{n}\sum_{f=1}^{k}\nu_{i,f}\nu_{i,f}x_{i}x_{i}) =21(∑i=1n∑j=1n∑f=1kνi,fνj,fxixj−∑i=1n∑f=1kνi,fνi,fxixi)
= 1 2 ∑ f = 1 k ( ( ∑ i = 1 n ν i , f x i ) ( ∑ j = 1 n ν j , f x j ) − ∑ i = 1 n ν i , f 2 x i 2 ) = \frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}\nu_{i,f}x_{i})(\sum_{j=1}^{n}\nu_{j,f}x_{j}) - \sum_{i=1}^{n}\nu_{i,f}^{2}x_{i}^{2}) =21∑f=1k((∑i=1nνi,fxi)(∑j=1nνj,fxj)−∑i=1nνi,f2xi2)
=
1
2
∑
f
=
1
k
(
(
∑
i
=
1
n
ν
i
,
f
x
i
)
2
−
∑
i
=
1
n
ν
i
,
f
2
x
i
2
)
= \frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}\nu_{i,f}x_{i})^{2} - \sum_{i=1}^{n}\nu_{i,f}^{2}x_{i}^{2})
=21∑f=1k((∑i=1nνi,fxi)2−∑i=1nνi,f2xi2)
使用SGD求解
对于回归问题
∂ l o s s R ( y ^ , y ) ∂ θ = 2 ( y ^ − y ) ∂ y ^ ∂ θ \frac{\partial loss^{R}(\hat{y},y)}{\partial\theta} = 2(\hat{y} - y)\frac{\partial\hat{y}}{\partial\theta} ∂θ∂lossR(y^,y)=2(y^−y)∂θ∂y^
对于二分类问题
∂ l o s s C ( y ^ , y ) ∂ θ = − 1 σ ( y ^ y ) σ ( y ^ y ) ⋅ [ 1 − σ ( y ^ y ) ] ⋅ y ⋅ ∂ y ^ ∂ θ \frac{\partial loss^{C}(\hat{y}, y)}{\partial\theta} = -\frac{1}{\sigma(\hat{y}y)}\sigma(\hat{y}y)\cdot[1 - \sigma(\hat{y}y)]\cdot y \cdot \frac{\partial\hat{y}}{\partial\theta} ∂θ∂lossC(y^,y)=−σ(y^y)1σ(y^y)⋅[1−σ(y^y)]⋅y⋅∂θ∂y^
= [ σ ( y ^ y ) − 1 ] ⋅ y ⋅ ∂ y ^ ∂ θ = [\sigma(\hat{y}y) -1]\cdot y \cdot \frac{\partial\hat{y}}{\partial\theta} =[σ(y^y)−1]⋅y⋅∂θ∂y^
而
∂ y ^ ∂ θ = { 1 i f θ = w 0 x i i f θ = w i x i ∑ j = 1 n ν j , f x j − ν i , f x i 2 i f θ = ν i , f \frac{\partial\hat{y}}{\partial\theta} = \begin{cases} 1& if \theta = w_{0}\\ x_{i}& if \theta = w_{i}\\ x_{i}\sum_{j=1}^{n}\nu_{j,f}x_{j} - \nu_{i,f}x_{i}^{2}& if \theta = \nu_{i,f} \end{cases} ∂θ∂y^=⎩⎪⎨⎪⎧1xixi∑j=1nνj,fxj−νi,fxi2ifθ=w0ifθ=wiifθ=νi,f