论文链接:
https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
主要内容
Factorization Machines (FM)结合了Support Vector Machines (SVM) 和factorization models(分解模型)的优点,解决了数据稀疏的情况下,特征怎样组合的问题
FM至少有以下三个优点:
1.稀疏性系统中仍然能够得到合理的参数估计
2.在线性复杂度内计算FM模型,且不需要转化为对偶问题,也不需要存除部分原始数据(SVM中的支持向量)
3.FM是通用的分解模型,不仅适用于特定问题
具体流程与推导
一般的线性模型没有考虑特征之间的关联。为了表述特征间的相关性,我们采用多项式模型。在多项式模型中,特征
x
i
x_i
xi与
x
j
x_j
xj的组合用
x
i
x
j
x_ix_j
xixj表示。为了简单起见,我们讨论二阶多项式模型。
y
^
(
x
)
:
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
w
i
j
x
i
x
j
\hat{y}(\mathbf{x}):=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{i j} x_{i} x_{j}
y^(x):=w0+i=1∑nwixi+i=1∑nj=i+1∑nwijxixj
特征组合部分的参数有
n
(
n
−
1
)
2
\frac{n(n−1)}{2}
2n(n−1)个。如果特征非常稀疏且维度很高的话,时间复杂度将大大增加。
为了降低时间复杂度,对每一个特征,引入辅助向量lantent vector
V
i
=
[
v
i
1
,
v
i
2
,
…
,
v
i
k
]
T
V_{i}=\left[v_{i 1}, v_{i 2}, \ldots, v_{i k}\right]^{T}
Vi=[vi1,vi2,…,vik]T
模型修改如下:
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
\hat{y}(\mathbf{x}) :=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j}
y^(x):=w0+i=1∑nwixi+i=1∑nj=i+1∑n⟨vi,vj⟩xixj
FM模型的表达式就是上式。k是超参数,即lantent vector的维度,一般取较小值。上式直接计算的话,时间复杂度是
O
(
k
n
2
)
O(kn^2)
O(kn2), 通过如下方式化简复杂度可以降为
O
(
k
n
)
O(kn)
O(kn)。
∑ 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 − 1 2 ∑ 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 ( ∑ i = 1 n ∑ j = 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}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j} \\=& \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j}-\frac{1}{2} \sum_{i=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{i}\right\rangle x_{i} x_{i} \\=& \frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{j}-\sum_{i=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{i, f} x_{i} x_{i}\right) \\=& \frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} v_{i, f} x_{i}\right)\left(\sum_{j=1}^{n} v_{j, f} x_{j}\right)-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2} ) \\=& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)^{2}-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \end{aligned} ====i=1∑nj=i+1∑n⟨vi,vj⟩xixj21i=1∑nj=1∑n⟨vi,vj⟩xixj−21i=1∑n⟨vi,vi⟩xixi21⎝⎛i=1∑nj=1∑nf=1∑kvi,fvj,fxixj−i=1∑nf=1∑kvi,fvi,fxixi⎠⎞21(i=1∑nj=1∑nvi,fxi)(j=1∑nvj,fxj)−i=1∑nvi,f2xi2)21f=1∑k⎝⎛(i=1∑nvi,fxi)2−i=1∑nvi,f2xi2⎠⎞
由于 x \mathbf{x} x的稀疏性,只需要计算 x \mathbf{x} x中非零元素,这个值为 O ( k m ‾ D ) O(k \overline{m}_{D}) O(kmD), m ‾ D \overline{m}_D mD为训练即中 x \mathbf{x} x平均非零元素个数,一般为2左右
具体代码详见:
https://github.com/DrWelles/CTR_Prediction
更高维度的相关性扩展如下:
y
^
(
x
)
:
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
l
=
2
d
∑
i
1
=
1
n
…
∑
i
l
=
i
l
−
1
+
1
n
(
∏
j
=
1
l
x
i
j
)
(
∑
f
=
1
k
l
∏
j
=
1
l
v
i
j
,
f
(
l
)
)
\begin{aligned} \hat{y} &(x) :=w_{0}+\sum_{i=1}^{n} w_{i} x_{i} \\ &+\sum_{l=2}^{d} \sum_{i_{1}=1}^{n} \ldots \sum_{i_{l}=i_{l-1}+1}^{n}\left(\prod_{j=1}^{l} x_{i_{j}}\right)\left(\sum_{f=1}^{k_{l}} \prod_{j=1}^{l} v_{i_{j}, f}^{(l)}\right) \end{aligned}
y^(x):=w0+i=1∑nwixi+l=2∑di1=1∑n…il=il−1+1∑n(j=1∏lxij)⎝⎛f=1∑klj=1∏lvij,f(l)⎠⎞
复杂度为
O
(
k
d
n
d
)
O(k_{d} n^{d})
O(kdnd)
相对于SVM
1)支持向量机的密集参数化,其在稀疏环境中不能提供较好的参数估计。 即使在稀疏度下,也可以很好地估计FM的参数。
2)FM可以在主问题中直接学习。 非线性SVM通常在对偶问题中学习。
3)FMs的模型方程独立于训练数据。 使用SVM进行预测取决于训练数据的部分(支持向量)。
相对于其他分解模型
以上省略若干字,详见原文
1)PARAFAC、MF这样的标准分解模型不是像FM那样的通用预测模型。 相反,它们要求特征向量以m个部分划分,并且在每个部分为one-hot编码。
2)针对单个任务设计的专门因子分解模型有很多提议。 论文证明,FM可以通过特征提取模拟许多最成功的分解模型(包括MF,PARAFAC,SVD ++,PITF,FPMC),这使得FM在实践中很容易应用。