因子分解机(Factorization Machine, FM)是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法。目前,被广泛的应用于广告预估模型中,相比LR而言,效果强了不少。我们可以认为,这个模型结合了SVM的优点与分解模型的优点。与SVM类似的是,FM是一个广泛的预测器,可以兼容任意实值的特征向量。而与FM不同的是,FM对于所有变量之间的联系使用了分解的参量去建模。
关于FM, peghoty的博文比较清晰,大家可以点击链接先阅读一下,并与本文章进行对比。
本质上是SVM模型的拓展,主要考虑到多维特征之间的交叉关系,其中参数的训练使用的是矩阵分解的方法。
参数模型的表示如下:我们的预测任务是估计一个函数 y : R n → T y : \mathbb{R}^{n} \rightarrow T y:Rn→T表示从实值向量 x ∈ R n \mathbf{x} \in \mathbb{R}^{n} x∈Rn到目标域 T T T中,(比如对回归问题 T = R T=\mathbb{R} T=R,分类问题 T = { + , − } T=\{+,-\} T={+,−})。在监督模型中,我们假设存在一个训练数据集 D = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , … } D=\left\{\left(\mathbf{x}^{(1)}, y^{(1)}\right),\left(\mathbf{x}^{(2)}, y^{(2)}\right), \ldots\right\} D={(x(1),y(1)),(x(2),y(2)),…}。另外,也调查了推荐任务的函数 y y y,以及 T = R T = \mathbb{R} T=R可以被用来表示向量 x \mathbf x x。分数函数可以被用来训练成对训练集,这里特征元组 ( x ( A ) , x ( B ) ) ∈ D \left(\mathbf{x}^{(A)}, \mathbf{x}^{(B)}\right) \in D (x(A),x(B))∈D表示 x ( A ) \mathbf{x}^{(A)} x(A)应该比 x ( B ) \mathbf{x}^{(B)} x(B)排名更高。
二阶FM的公式(2-order, 2-way FM):
y ^ F M ( x ) : = ⟨ w , x ⟩ + ∑ j ′ > j ⟨ p ‾ j , p ‾ j ′ ⟩ x j x j \hat { y } _ { \mathrm { FM } } ( \boldsymbol { x } ) : = \langle \boldsymbol { w } , \boldsymbol { x } \rangle + \sum _ { j ^ { \prime } > j } \left\langle \overline { \boldsymbol { p } } _ { j } , \overline { \boldsymbol { p } } _ { j ^ { \prime } } \right\rangle x _ { j } x _ { j } y^FM(x):=⟨w,x⟩+j′>j∑⟨pj,pj′⟩xjxj
或者更为普遍的写法:
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
其中,各个参数的size为:
w 0 ∈ R , w ∈ R n , V ∈ R n × k w_{0} \in \mathbb{R}, \quad \mathbf{w} \in \mathbb{R}^{n}, \quad \mathbf{V} \in \mathbb{R}^{n \times k} w0∈R,w∈Rn,V∈Rn×k
内积定义如下:
⟨ v i , v j ⟩ : = ∑ f = 1 k v i , f ⋅ v j , f \left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle :=\sum_{f=1}^{k} v_{i, f} \cdot v_{j, f} ⟨vi,vj⟩:=f=1∑kvi,f⋅vj,f
其中 k ∈ N 0 + k \in \mathbb{N}_{0}^{+} k∈N0+表示的是决定分解机维度的超参。 n n n表示的是模型参数的维度。2-way的FM捕捉了所有的单独的特征以及变量之间的特征,各参数的意义表示如下:
高阶FM的公式:
y ^ H O F M ( x ) : = ⟨ w , x ⟩ + ∑ j ′ > j ⟨ p ‾ j ( 2 ) , p ‾ j ′ ( 2 ) ⟩ x j x j ′ + ⋯ + ∑ j m > ⋯ > j 1 ⟨ p ‾ j 1 ( m ) , … , p ‾ j m ( m ) ⟩ x j 1 x j 2 … x j m \hat { y } _ { \mathrm { HOFM } } ( \boldsymbol { x } ) : = \langle \boldsymbol { w } , \boldsymbol { x } \rangle + \sum _ { j ^ { \prime } > j } \left\langle \overline { \boldsymbol { p } } _ { j } ^ { ( 2 ) } , \overline { \boldsymbol { p } } _ { j ^ { \prime } } ^ { ( 2 ) } \right\rangle x _ { j } x _ { j ^ { \prime } } + \cdots + \sum _ { j _ { m } > \cdots > j _ { 1 } } \left\langle \overline { \boldsymbol { p } } _ { j _ { 1 } } ^ { ( m ) } , \ldots , \overline { \boldsymbol { p } } _ { j _ { m } } ^ { ( m ) } \right\rangle x _ { j _ { 1 } } x _ { j _ { 2 } } \ldots x _ { j _ { m } } y^HOFM(x):=⟨w,x⟩+j′>j∑⟨pj(2),pj′(2)⟩xjxj′+⋯+jm>⋯>j1∑⟨pj1(m),…,pjm(m)⟩xj1xj2…xjm
与二阶FM类似,但是其考虑了更多特征之间的关联性质。
首先,对于稀疏数据的计算,通常没有足够的数据来直接独立地估计变量之间的关联性。FM可以评估,则是因为FM通过分解的方式打破了数据参数的独立性。
具体可以参见图1:
在FM中,每个评分记录被放在一个矩阵的一行中,从列数看特征矩阵 x \mathbf x x的前面 u u u列即为User矩阵,每个User对应一列,接下来的 i i i列即为item特征矩阵,之后数列是多余的非显式的特征关系。后面一列表示时间关系,最后 i i i列则表示同一个user在上一条记录中的结果,用于表示用户的历史行为。
例子,可以考虑用户A以及电影ST之间的关系。首先,二者没有直接的联系,也就是 w A , S T = 0 w_{A, \mathrm{ST}}=0 wA,ST=0,通过分解联系的变量 ⟨ v A , v S T ⟩ \left\langle\mathbf{v}_{A}, \mathbf{v}_{\mathrm{ST}}\right\rangle ⟨vA,vST⟩我们能够估计在这种情况下的联系。因此,对于稀疏数据而言,FM可以挖掘出更深层次的信息。
第二,假设 n , k n, k n,k如前述定义,那么计算前驱过程的时间复杂度为 O ( k n 2 ) O\left(k n^{2}\right) O(kn2)。但是通过重组计算公式能够得到线性的时间复杂度 O ( k n ) O(k n) 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 ∑ 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}\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} \sum_{f=1}^{k}\left(\left(\sum_{i=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}\right) \\&=\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⎠⎞=21f=1∑k((i=1∑nvi,fxi)(j=1∑nvj,fxj)−i=1∑nvi,f2xi2)=21f=1∑k⎝⎛(i=1∑nvi,fxi)2−i=1∑nvi,f2xi2⎠⎞
可以看到我们只需要计算 v i , f v_{i,f} vi,f以及 x i x_i xi相关的结果。另外,由上式可以看到,在稀疏的情况下,我们只需要计算非0的结果。假设 x \mathbf x x中非0的数量为 m ( x ) m(\mathbf{x}) m(x),时间复杂度为 O ( k m ‾ D ) O\left(k \overline{m}_{D}\right) O(kmD)。另外,FM也具有多线性(multi-linearity)的性质,对任意参数 θ \theta θ,FM的预测模型如下:
y ^ ( x ) = g θ ( x ) + θ h θ ( x ) ∀ θ ∈ Θ \hat{y}(\mathbf{x})=g_{\theta}(\mathbf{x})+\theta h_{\theta}(\mathbf{x}) \quad \forall \theta \in \Theta y^(x)=gθ(x)+θhθ(x)∀θ∈Θ
可以轻易求得梯度:
h θ ( x ) = ∂ y ^ ( x ) ∂ θ = { 1 , if θ is w 0 x l , if θ is w l x l ∑ j ≠ l v j , f x j , if θ is v l , f h_{\theta}(\mathbf{x})=\frac{\partial \hat{y}(\mathbf{x})}{\partial \theta}=\left\{\begin{array}{ll}{1,} & {\text { if } \theta \text { is } w_{0}} \\ {x_{l},} & {\text { if } \theta \text { is } w_{l}} \\ {x_{l} \sum_{j \neq l} v_{j, f} x_{j},} & {\text { if } \theta \text { is } v_{l, f}}\end{array}\right. hθ(x)=∂θ∂y^(x)=⎩⎨⎧1,xl,xl∑j̸=lvj,fxj, if θ is w0 if θ is wl if θ is vl,f
关于第三个优点,分别考虑FM与传统的线性分类器SVM与常见的分解方法MF, SVD++, PITF( factorizing pairwise interactions)以及FPMC( Factorized Personalized Markov Chains)等方法进行对比。具体的对比我会再写一篇文章进行详细分析。
对于FM而言,其可以被应用于很多预测任务,包括:
具体的优化方法包括SGD, ALS以及MCMC。
对于特定的观测集 S S S,我们得到目标函数为:
OPT ( S ) : = argmin Θ ∑ ( x , y ) ∈ S l ( y ^ ( x ∣ Θ ) , y ) \operatorname{OPT}(S) :=\underset{\Theta}{\operatorname{argmin}} \sum_{(\mathbf{x}, y) \in S} l(\hat{y}(\mathbf{x} | \Theta), y) OPT(S):=Θargmin(x,y)∈S∑l(y^(x∣Θ),y)
loss function:
对Stochastic的目标函数分布:
其概率图模型可表示如下:
其中 μ , λ \mu, \lambda μ,λ等均为超参。
梯度计算公式如下:
∂ ∂ θ l L S ( y ^ ( x ∣ Θ ) , y ) = ∂ ∂ θ ( y ^ ( x ∣ Θ ) − y ) 2 = 2 ( y ^ ( x ∣ Θ ) − y ) ∂ ∂ θ y ^ ( x ∣ Θ ) \frac{\partial}{\partial \theta} l^{\mathrm{LS}}(\hat{y}(\mathbf{x} | \Theta), y)=\frac{\partial}{\partial \theta}(\hat{y}(\mathbf{x} | \Theta)-y)^{2}=2(\hat{y}(\mathbf{x} | \Theta)-y) \frac{\partial}{\partial \theta} \hat{y}(\mathbf{x} | \Theta) ∂θ∂lLS(y^(x∣Θ),y)=∂θ∂(y^(x∣Θ)−y)2=2(y^(x∣Θ)−y)∂θ∂y^(x∣Θ)
∂ ∂ θ l C ( y ^ ( x ∣ Θ ) , y ) = ∂ ∂ θ − ln σ ( y ^ ( x ∣ Θ ) y ) = ( σ ( y ^ ( x ∣ Θ ) y ) − 1 ) y ∂ ∂ θ y ^ ( x ∣ Θ ) \frac{\partial}{\partial \theta} l^{\mathrm{C}}(\hat{y}(\mathbf{x} | \Theta), y)=\frac{\partial}{\partial \theta}-\ln \sigma(\hat{y}(\mathbf{x} | \Theta) y)=(\sigma(\hat{y}(\mathbf{x} | \Theta) y)-1) y \frac{\partial}{\partial \theta} \hat{y}(\mathbf{x} | \Theta) ∂θ∂lC(y^(x∣Θ),y)=∂θ∂−lnσ(y^(x∣Θ)y)=(σ(y^(x∣Θ)y)−1)y∂θ∂y^(x∣Θ)
不多说,直接上算法:
比较容易理解,缺点是必须确定学习率 η \eta η。
ALS即为Alternating Least-Squares,也是Coordinate Descent,是对SGD方法的改进。具体是将参数 Θ \Theta Θ拆分成若干个部分,公式为:
θ ∗ = argmin θ ( ∑ ( x , y ) ∈ S ( y ^ ( x ∣ Θ ) − y ) 2 + ∑ θ ∈ Θ λ θ θ 2 ) = argmin θ ( ∑ ( x , y ) ∈ S ( g θ ( x ∣ Θ \ { θ } ) + θ h θ ( x ∣ Θ \ { θ } ) − y ) 2 + ∑ θ ∈ Θ λ θ θ 2 ) = ∑ i = 1 n h θ 2 ( x i ∣ Θ \ { θ } ) h θ ( x i ∣ Θ \ { θ } ) ∑ i = 1 n h θ ( x i ) 2 + λ θ = θ ∑ i = 1 n h θ 2 ( x i ∣ Θ \ { θ } ) h θ ( x i ) e i ∑ i = 1 n h θ ( x i ) 2 + λ θ \begin{aligned} \theta^{*} &=\underset{\theta}{\operatorname{argmin}}\left(\sum_{(\mathbf{x}, y) \in S}(\hat{y}(\mathbf{x} | \Theta)-y)^{2}+\sum_{\theta \in \Theta} \lambda_{\theta} \theta^{2}\right) \\ &=\underset{\theta}{\operatorname{argmin}}\left(\sum_{(\mathbf{x}, y) \in S}\left(g_{\theta}(\mathbf{x} | \Theta \backslash\{\theta\})+\theta h_{\theta}(\mathbf{x} | \Theta \backslash\{\theta\})-y\right)^{2}+\sum_{\theta \in \Theta} \lambda_{\theta} \theta^{2}\right) \\ &=\frac{\sum_{i=1}^{n} h_{\theta}^{2}\left(\mathbf{x}_{i} | \Theta \backslash\{\theta\}\right) h_{\theta}\left(\mathbf{x}_{i} | \Theta \backslash\{\theta\}\right)}{\sum_{i=1}^{n} h_{\theta}\left(\mathbf{x}_{i}\right)^{2}+\lambda_{\theta}} \\ &=\frac{\theta \sum_{i=1}^{n} h_{\theta}^{2}\left(\mathbf{x}_{i} | \Theta \backslash\{\theta\}\right) h_{\theta}\left(\mathbf{x}_{i}\right) e_{i}}{\sum_{i=1}^{n} h_{\theta}\left(\mathbf{x}_{i}\right)^{2}+\lambda_{\theta}} \end{aligned} θ∗=θargmin⎝⎛(x,y)∈S∑(y^(x∣Θ)−y)2+θ∈Θ∑λθθ2⎠⎞=θargmin⎝⎛(x,y)∈S∑(gθ(x∣Θ\{θ})+θhθ(x∣Θ\{θ})−y)2+θ∈Θ∑λθθ2⎠⎞=∑i=1nhθ(xi)2+λθ∑i=1nhθ2(xi∣Θ\{θ})hθ(xi∣Θ\{θ})=∑i=1nhθ(xi)2+λθθ∑i=1nhθ2(xi∣Θ\{θ})hθ(xi)ei
其中 e i : = y i − y ^ ( x i ∣ Θ ) e_{i} :=y_{i}-\hat{y}\left(\mathbf{x}_{i} | \Theta\right) ei:=yi−y^(xi∣Θ),为残差项。算法如下:
对于更加详细的ALS算法,可以表现为下图:
其中,ALS的主要改进为不需要学习率,但是仍然需要确定regularization的超参。
使用概率图推断以及最大后验估计(MAP)的方法。概率图如下:
其实就是针对原方法对各个超参进行MCMC采样操作。具体采用Gibbs采样器。通过确定各个超参的先验概率,使用贝叶斯推断方法,以及对各个参数的后验概率求导,即可对整个模型进行优化。参数集 Θ \Theta Θ为:
Θ 0 : = { α 0 , β 0 , α λ , β λ , μ 0 , γ 0 } \Theta_{0} :=\left\{\alpha_{0}, \beta_{0}, \alpha_{\lambda}, \beta_{\lambda}, \mu_{0}, \gamma_{0}\right\} Θ0:={α0,β0,αλ,βλ,μ0,γ0}
后续将继续介绍FM与深度学习相结合的应用,以及解决高阶FM的方法。
[1] Rendle S. Factorization machines[C]//2010 IEEE International Conference on Data Mining. IEEE, 2010: 995-1000.
[2] Rendle S. Factorization machines with libfm[J]. ACM Transactions on Intelligent Systems and Technology (TIST), 2012, 3(3): 57.
[3] Blondel M, Fujino A, Ueda N, et al. Higher-order factorization machines[C]//Advances in Neural Information Processing Systems. 2016: 3351-3359.