Factorization Machine 详解(三)—— FM与高阶特征训练
之前的文章回顾:
可以看到,FM主要用于推测推荐系统中不同特征之间的关联,尤其适用于稀疏数据的推荐。然而,Rendle等提出的基础FM模型一般只能推测2-way的特征关系,而对于更高阶的特征关系则缺乏更为有效的训练手段。另外,在传统的FM模型中,目标函数是非凸的,因此很难进行优化,尤其是当涉及高阶特征关系的挖掘时,目标函数的优化更为复杂。
对于高阶特征的训练,目前有以下两个思路:
- 使用更高阶的Kernel函数对目标函数进行建模
- 使用深度神经网络对输入数据进行处理
目前,在第一种解决方案中,我们需要对目标函数进行建模:
y
^
K
(
x
;
λ
,
P
)
:
=
∑
s
=
1
k
λ
s
K
(
p
s
,
x
)
\hat{y}_{\mathcal{K}}(\boldsymbol{x} ; \boldsymbol{\lambda}, \boldsymbol{P}) :=\sum_{s=1}^{k} \lambda_{s} \mathcal{K}\left(\boldsymbol{p}_{s}, \boldsymbol{x}\right)
y^K(x;λ,P):=s=1∑kλsK(ps,x)
总的loss function:
D
K
(
λ
,
P
)
:
=
∑
i
=
1
n
ℓ
(
y
i
,
y
^
K
(
x
i
;
λ
,
P
)
)
D_{\mathcal{K}}(\boldsymbol{\lambda}, \boldsymbol{P}) :=\sum_{i=1}^{n} \ell\left(y_{i}, \hat{y}_{\mathcal{K}}\left(\boldsymbol{x}_{i} ; \boldsymbol{\lambda}, \boldsymbol{P}\right)\right)
DK(λ,P):=i=1∑nℓ(yi,y^K(xi;λ,P))
其中函数
ℓ
\ell
ℓ为凸的loss function。从中我们可以看到,其使用的目标函数是一个Kernel,即为从
P
\boldsymbol P
P映射到输入向量
x
\boldsymbol x
x空间的Kernel。在正式阐述高阶FM的训练方式之前,先说明一下上述参数的具体意义:
- y ^ K \hat y_{\mathcal K} y^K表示的是基于Kernel K \mathcal K K的目标函数。
- λ = [ λ 1 , … , λ k ] T ∈ R k \boldsymbol{\lambda}=\left[\lambda_{1}, \dots, \lambda_{k}\right]^{\mathrm{T}} \in \mathbb{R}^{k} λ=[λ1,…,λk]T∈Rk 是超参,具体意义是决定不同维度Kernel的权重。在FM中 λ s = 1 ( s = 1 , 2 , . . . , k ) \lambda_s = 1(s = 1, 2, ..., k) λs=1(s=1,2,...,k)。
- P = [ p 1 , … , p k ] ∈ R d × k \boldsymbol{P}=\left[\boldsymbol{p}_{1}, \ldots, \boldsymbol{p}_{k}\right] \in \mathbb{R}^{d \times k} P=[p1,…,pk]∈Rd×k表示的是已经分解的向量(矩阵)
- K \mathcal K K表示的是Kernel函数。目前研究的Kernel包括ANOVA Kernel以及同质的多项式Kernel
ANOVA Kernel
2016年,Mathieu Blondel等[1]解决了Polynomial Network(PN) 以及Factorization Machine(FM)之间的关系,并且证明了提出了coordinate descent(CD)算法,以训练三阶的FM。关于ANOVA Kernel,定义如下:
A
m
(
p
,
x
)
:
=
∑
j
m
>
⋯
>
j
1
p
j
1
x
j
1
…
p
j
m
x
j
m
\mathcal{A}^{m}(\boldsymbol{p}, \boldsymbol{x}) :=\sum_{j_{m}>\cdots>j_{1}} p_{j_{1}} x_{j_{1}} \ldots p_{j_{m}} x_{j_{m}}
Am(p,x):=jm>⋯>j1∑pj1xj1…pjmxjm
其中
A
0
(
p
,
x
)
:
=
1
\mathcal{A}^{0}(\boldsymbol{p}, \boldsymbol{x}) :=1
A0(p,x):=1以及
A
1
(
p
,
x
)
:
=
⟨
p
,
x
⟩
\mathcal{A}^{1}(\boldsymbol{p}, \boldsymbol{x}) :=\langle\boldsymbol{p}, \boldsymbol{x}\rangle
A1(p,x):=⟨p,x⟩。可以看到ANOVA Kernel使用的是多种distinct 的特征(也就是没有替代的特征组合)。ANOVA Kernel具有多线性的性质。通过展开ANOVA Kernel的定义式,我们可以使用数学归纳法证明,对于
p
,
x
∈
R
d
\boldsymbol{p}, \boldsymbol{x} \in \mathbb{R}^{d}
p,x∈Rd,以及
j
∈
[
d
]
j \in[d]
j∈[d]和
1
≤
m
≤
d
1 \leq m \leq d
1≤m≤d,有如下的递归多线性(multi-linearity)关系:
A
m
(
p
,
x
)
=
A
m
(
p
¬
j
,
x
¬
j
)
+
p
j
x
j
A
m
−
1
(
p
¬
j
,
x
¬
j
)
\mathcal{A}^{m}(\boldsymbol{p}, \boldsymbol{x})=\mathcal{A}^{m}\left(\boldsymbol{p}_{\neg j}, \boldsymbol{x}_{\neg j}\right)+p_{j} x_{j} \mathcal{A}^{m-1}\left(\boldsymbol{p}_{\neg j}, \boldsymbol{x}_{\neg j}\right)
Am(p,x)=Am(p¬j,x¬j)+pjxjAm−1(p¬j,x¬j)
其中
¬
j
\neg j
¬j表示的是向量中排除掉第
j
j
j个元素的内容,因此当我们对其中第
j
j
j个坐标
p
j
p_j
pj计算导数时,上式是一个线性函数。因此,我们可以理解多线性的含义为对某个特定的方向
j
j
j,都满足既凸又凹的线性关系。那么,根据Rendle的FM定义,我们可以改写FM的目标函数如下:
y
^
F
M
(
x
;
w
,
P
)
=
⟨
w
,
x
⟩
+
y
^
A
2
(
x
;
1
,
P
)
\hat{y}_{F M}(\boldsymbol{x} ; \boldsymbol{w}, \boldsymbol{P})=\langle\boldsymbol{w}, \boldsymbol{x}\rangle+\hat{y}_{\mathcal{A}^{2}}(\boldsymbol{x} ; \mathbf{1}, \boldsymbol{P})
y^FM(x;w,P)=⟨w,x⟩+y^A2(x;1,P)
因此,我们可以使用坐标梯度法(Coordinate Descent, CD)来训练。算法如下:
可以看到,内循环遍历了各个坐标方向,并分别使用梯度下降方法进行训练。这样显著提升了训练的效果。
Homogeneous Polynomial Kernel
以上讨论了目标函数使用ANOVA Kernel的情况。当
K
\mathcal K
K使用同质的多项式Kernel之时,其定义如下:对于
p
=
[
p
1
,
…
,
p
d
]
T
\boldsymbol{p}=\left[p_{1}, \dots, p_{d}\right]^{\mathrm{T}}
p=[p1,…,pd]T以及
x
=
[
x
1
,
…
,
x
d
]
T
\boldsymbol{x}=\left[x_{1}, \dots, x_{d}\right]^{\mathrm{T}}
x=[x1,…,xd]T
H
m
(
p
,
x
)
=
∑
j
1
=
1
d
…
∑
j
m
=
1
d
p
j
1
x
j
1
…
p
j
m
x
j
n
=
⟨
p
,
x
⟩
m
\mathcal{H}^{m}(\boldsymbol{p}, \boldsymbol{x})=\sum_{j_{1}=1}^{d} \ldots \sum_{j_{m}=1}^{d} p_{j_{1}} x_{j_{1}} \ldots p_{j_{m}} x_{j_{n}} = \langle p, x\rangle^{m}
Hm(p,x)=j1=1∑d…jm=1∑dpj1xj1…pjmxjn=⟨p,x⟩m
可以看到,
H
m
\mathcal{H}^{m}
Hm与
A
m
\mathcal{A}^{m}
Am不同的是前者考虑了所有不同特征之间的组合。因此,其并不具有多线性的性质。其预测函数的表达式如下:
y
^
P
N
(
x
;
w
,
λ
,
P
)
=
⟨
w
,
x
⟩
+
y
^
H
2
(
x
;
λ
,
P
)
\hat{y}_{P N}(\boldsymbol{x} ; \boldsymbol{w}, \boldsymbol{\lambda}, \boldsymbol{P})=\langle\boldsymbol{w}, \boldsymbol{x}\rangle+\hat{y}_{\mathcal{H}^{2}}(\boldsymbol{x} ; \boldsymbol{\lambda}, \boldsymbol{P})
y^PN(x;w,λ,P)=⟨w,x⟩+y^H2(x;λ,P)
Lifted Approach
正是因为 H \mathcal H H没有多线性,因此作者提供了一种Lifted的方法。具体而言,Lifted方法包含以下两个部分:
- 首先,将整个Kernel转化为低阶的张量。
- 将低阶张量对称化。具体方法为特征值分解(这种方法在解决Convex FM[2]时被广泛使用)
具体的Tensor转换可以通过引理证明得到,最后ANOVA Kernel和Homogeneous Polynomial Kernel的低阶张量变换结果为:
W
=
∑
s
=
1
k
λ
s
p
s
⊗
m
\mathcal{W}=\sum_{s=1}^{k} \lambda_{s} p_{s}^{\otimes m}
W=s=1∑kλsps⊗m
并且令
λ
=
[
λ
1
,
…
,
λ
k
]
T
\lambda=\left[\lambda_{1}, \ldots, \lambda_{k}\right]^{\mathrm{T}}
λ=[λ1,…,λk]T以及
P
=
[
p
1
,
…
,
p
k
]
T
P=\left[p_{1}, \ldots, p_{k}\right]^{\mathrm{T}}
P=[p1,…,pk]T,得到:
⟨
W
,
x
⊗
m
⟩
=
y
^
H
m
(
x
;
λ
,
P
)
⟨
W
,
x
⊗
m
⟩
>
=
y
^
A
m
(
x
;
λ
,
P
)
\begin{aligned}\left\langle\mathcal{W}, \boldsymbol{x}^{\otimes m}\right\rangle &=\hat{y}_{\mathcal{H}^{m}}(\boldsymbol{x} ; \boldsymbol{\lambda}, \boldsymbol{P}) \\\left\langle\mathcal{W}, \boldsymbol{x}^{\otimes m}\right\rangle_{>} &=\hat{y}_{\mathcal{A}^{m}}(\boldsymbol{x} ; \boldsymbol{\lambda}, \boldsymbol{P}) \end{aligned}
⟨W,x⊗m⟩⟨W,x⊗m⟩>=y^Hm(x;λ,P)=y^Am(x;λ,P)
其loss function为:
L
H
m
(
W
)
:
=
∑
i
=
1
n
ℓ
(
y
i
,
⟨
W
,
x
i
⊗
m
⟩
)
L
A
m
(
W
)
:
=
∑
i
=
1
n
ℓ
(
y
i
,
⟨
W
,
x
i
⊗
m
⟩
>
)
\begin{aligned} L_{\mathcal{H}^{m}}(\mathcal{W}) & :=\sum_{i=1}^{n} \ell\left(y_{i},\left\langle\mathcal{W}, x_{i}^{\otimes m}\right\rangle\right) \\ L_{\mathcal{A}^{m}}(\mathcal{W}) & :=\sum_{i=1}^{n} \ell\left(y_{i},\left\langle\mathcal{W}, x_{i}^{\otimes m}\right\rangle_{>}\right) \end{aligned}
LHm(W)LAm(W):=i=1∑nℓ(yi,⟨W,xi⊗m⟩):=i=1∑nℓ(yi,⟨W,xi⊗m⟩>)
可以看到,其通过张量化的操作将复杂的非凸目标函数问题转化为了凸优化问题。
HOFM
上文的工作从另一个思路总结了FM的解决思路,也为更高阶FM提供了一种真正有用的工具——ANOVA Kernel。正是由于此Kernel所具有的多线性,且具有递归特性,在[3]中,定义了如下目标函数:
y
^
H
O
F
M
(
x
)
=
⟨
w
,
x
⟩
+
∑
s
=
1
k
2
A
2
(
p
s
(
2
)
,
x
)
+
⋯
+
∑
s
=
1
k
m
A
m
(
p
s
(
m
)
,
x
)
\hat{y}_{\mathrm{HOFM}}(\boldsymbol{x})=\langle\boldsymbol{w}, \boldsymbol{x}\rangle+\sum_{s=1}^{k_{2}} \mathcal{A}^{2}\left(\boldsymbol{p}_{s}^{(2)}, \boldsymbol{x}\right)+\cdots+\sum_{s=1}^{k_{m}} \mathcal{A}^{m}\left(\boldsymbol{p}_{s}^{(m)}, \boldsymbol{x}\right)
y^HOFM(x)=⟨w,x⟩+s=1∑k2A2(ps(2),x)+⋯+s=1∑kmAm(ps(m),x)
那么当
m
m
m比较大时,为了估计
A
m
\mathcal A^m
Am,我们可以简写为:
a
j
,
t
:
=
A
t
(
p
1
:
j
,
x
1
:
j
)
a_{j, t} :=\mathcal{A}^{t}\left(p_{1 : j}, x_{1 : j}\right)
aj,t:=At(p1:j,x1:j),那么我们可以定义状态转移方程:
a
j
,
t
=
a
j
−
1
,
t
+
p
j
x
j
a
j
−
1
,
t
−
1
∀
d
≥
j
≥
t
≥
1
a_{j, t}=a_{j-1, t}+p_{j} x_{j} a_{j-1, t-1} \quad \forall d \geq j \geq t \geq 1
aj,t=aj−1,t+pjxjaj−1,t−1∀d≥j≥t≥1
那么我们就可以使用动态规划的方法来解决这个问题。通过SGD优化,我们可以解决高阶的特征训练的问题。利用chain rule, 高阶梯度的计算如下:
a
~
j
,
t
=
∂
a
d
,
m
∂
a
j
+
1
,
t
∂
a
j
+
1
,
t
∂
a
j
,
t
+
∂
a
d
,
m
∂
a
j
+
1
,
t
+
1
∂
a
j
+
1
,
t
+
1
∂
a
j
,
t
=
a
~
j
+
1
,
t
+
p
j
+
1
x
j
+
1
a
~
j
+
1
,
t
+
1
∀
d
−
1
≥
j
≥
t
≥
1
\tilde{a}_{j, t}=\frac{\partial a_{d, m}}{\partial a_{j+1, t}} \frac{\partial a_{j+1, t}}{\partial a_{j, t}}+\frac{\partial a_{d, m}}{\partial a_{j+1, t+1}} \frac{\partial a_{j+1, t+1}}{\partial a_{j, t}}=\tilde{a}_{j+1, t}+p_{j+1} x_{j+1} \tilde{a}_{j+1, t+1} \quad \forall d-1 \geq j \geq t \geq 1
a~j,t=∂aj+1,t∂ad,m∂aj,t∂aj+1,t+∂aj+1,t+1∂ad,m∂aj,t∂aj+1,t+1=a~j+1,t+pj+1xj+1a~j+1,t+1∀d−1≥j≥t≥1
使用下述算法,可以实现最基本的HOFM的训练。
当然,根据[1]的叙述,并考虑到DP table的更新的同步性,可以得到坐标下降算法的递归公式如下:
A
m
(
p
,
x
)
=
1
m
∑
t
=
1
m
(
−
1
)
t
+
1
A
m
−
t
(
p
,
x
)
D
t
(
p
,
x
)
\mathcal{A}^{m}(\boldsymbol{p}, \boldsymbol{x})=\frac{1}{m} \sum_{t=1}^{m}(-1)^{t+1} \mathcal{A}^{m-t}(\boldsymbol{p}, \boldsymbol{x}) \mathcal{D}^{t}(\boldsymbol{p}, \boldsymbol{x})
Am(p,x)=m1t=1∑m(−1)t+1Am−t(p,x)Dt(p,x)
其中
D
t
(
p
,
x
)
:
=
∑
j
=
1
d
(
p
j
x
j
)
t
\mathcal{D}^{t}(\boldsymbol{p}, \boldsymbol{x}) :=\sum_{j=1}^{d}\left(p_{j} x_{j}\right)^{t}
Dt(p,x):=∑j=1d(pjxj)t,可以得到对每个维度的梯度为:
∂
A
m
(
p
,
x
)
∂
p
j
=
1
m
∑
t
=
1
m
(
−
1
)
t
+
1
[
∂
A
m
−
t
(
p
,
x
)
∂
p
j
D
t
(
p
,
x
)
+
A
m
−
t
(
p
,
x
)
∂
D
t
(
p
,
x
)
∂
p
j
]
\frac{\partial \mathcal{A}^{m}(\boldsymbol{p}, \boldsymbol{x})}{\partial p_{j}}=\frac{1}{m} \sum_{t=1}^{m}(-1)^{t+1}\left[\frac{\partial \mathcal{A}^{m-t}(\boldsymbol{p}, \boldsymbol{x})}{\partial p_{j}} \mathcal{D}^{t}(\boldsymbol{p}, \boldsymbol{x})+\mathcal{A}^{m-t}(\boldsymbol{p}, \boldsymbol{x}) \frac{\partial \mathcal{D}^{t}(\boldsymbol{p}, \boldsymbol{x})}{\partial p_{j}}\right]
∂pj∂Am(p,x)=m1t=1∑m(−1)t+1[∂pj∂Am−t(p,x)Dt(p,x)+Am−t(p,x)∂pj∂Dt(p,x)]
这样,考虑到Loss function,可以得到每一步的更新条件为:
p
j
,
s
←
p
j
,
s
−
η
j
,
s
−
1
∂
F
(
P
)
∂
p
j
,
s
p_{j, s} \leftarrow p_{j, s}-\eta_{j, s}^{-1} \frac{\partial F(\boldsymbol{P})}{\partial p_{j, s}}
pj,s←pj,s−ηj,s−1∂pj,s∂F(P)
其中:
η
j
,
s
:
=
μ
n
∑
i
=
1
n
(
∂
A
m
(
p
s
,
x
i
)
∂
p
j
,
s
)
2
+
β
\eta_{j, s} :=\frac{\mu}{n} \sum_{i=1}^{n}\left(\frac{\partial \mathcal{A}^{m}\left(\boldsymbol{p}_{s}, \boldsymbol{x}_{i}\right)}{\partial p_{j, s}}\right)^{2}+\beta
ηj,s:=nμi=1∑n(∂pj,s∂Am(ps,xi))2+β
∂
F
(
P
)
∂
p
j
,
s
=
1
n
∑
i
=
1
n
ℓ
′
(
y
i
,
y
^
i
)
∂
A
m
(
p
s
,
x
i
)
∂
p
j
,
s
+
β
p
j
,
s
\frac{\partial F(\boldsymbol{P})}{\partial p_{j, s}}=\frac{1}{n} \sum_{i=1}^{n} \ell^{\prime}\left(y_{i}, \hat{y}_{i}\right) \frac{\partial \mathcal{A}^{m}\left(\boldsymbol{p}_{s}, \boldsymbol{x}_{i}\right)}{\partial p_{j, s}}+\beta p_{j, s}
∂pj,s∂F(P)=n1i=1∑nℓ′(yi,y^i)∂pj,s∂Am(ps,xi)+βpj,s
高阶FM的实现可以使用tffm,它是基于Tensorflow的。关于HOFM的实现和代码解析将在以后详细说明。
Reference
[1] Blondel M, Ishihata M, Fujino A, et al. Polynomial networks and factorization machines: New insights and efficient training algorithms[J]. arXiv preprint arXiv:1607.08810, 2016.
[2] Blondel M, Fujino A, Ueda N. Convex factorization machines[C]//Joint European Conference on Machine Learning and Knowledge Discovery in Databases. Springer, Cham, 2015: 19-35.
[3] Blondel M, Fujino A, Ueda N, et al. Higher-order factorization machines[C]//Advances in Neural Information Processing Systems. 2016: 3351-3359.