因子分解机 FM
因子分解机(Factorization Machine, FM)是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法。目前,被广泛的应用于广告预估模型中,相比LR而言,效果优化很多。因子分解机是一种有效使用二阶特征交互的流行解决方案,本文主要介绍 FM算法原理,模型构建、以及用SGD、ALS求解。
1 背景
1.1 LR模型方程
对于监督学习,机器学习模型的预测是一个估计函数 y ^ \hat{y} y^(映射 F F F)
y ^ = F : X → y (1) \hat{y}=F:\pmb{X}\to y\tag{1} y^=F:XXX→y(1)
其中 X \pmb{X} XXX属于 n n n维特征向量,即 X ∈ R n \pmb{X} \in\mathbb{R}^{n} XXX∈Rn, y y y属于目标值,回归问题中 y ∈ R y\in \mathbb{R} y∈R,二分类问题中 y ∈ { − 1 , + 1 } y\in\{ -1,+1 \} y∈{−1,+1}
我们首先回顾一般的线性回归方程LR
,对于输入任意一个 n n n维特征向量 X = ( x 1 , x 2 , ⋯ , x n ) \pmb{X} = (x_{1}, x_{2}, \cdots, x_{n}) XXX=(x1,x2,⋯,xn),建模估计函数 y ^ ( X ) \hat{y}(\pmb{X}) y^(XXX)为
y ^ ( X ) = w 0 + ∑ i = 1 n w i x i (2) \hat y(\pmb{X}) = w_0 + \sum_{i=1}^{n}w_ix_i\tag{2} y^(XXX)=w0+i=1∑nwixi(2)
LR模型的参数为: w 0 ∈ R w_{0} \in \mathbb{R} w0∈R, w ∈ R n = ( w 1 , w 2 , ⋯ , w n ) w \in \mathbb{R^{n}} = (w_{1}, w_{2}, \cdots, w_{n}) w∈Rn=(w1,w2,⋯,wn)
从LR模型方程中我们可以看到:
(1)各个特征分量 x i 和 x j ( i ≠ j ) x_{i}和x_{j}(i \neq j) xi和xj(i=j)彼此之间是独立的
(2) y ^ ( X ) \hat{y}(\pmb{X}) y^(XXX)将单个特征分量线性的组合起来,却忽略了特征分量彼此之间的相互组合关系
对于特征的组合关系,我们定义:
(1)一阶特征:即单个特征,不产生新特征,如 x 1 x_{1} x1
(2)二阶特征:即两个特征组合产生的新特征,如 x 1 x 2 x_{1}x_{2} x1x2
(3)高阶特征:即两个以上的特征组合产生的新特征,如 x 1 x 2 x 3 x_{1}x_{2}x_{3} x1x2x3
综上可知,LR
模型只考虑了一阶特征的线性组合关系。
1.2 多项式模型方程
为了克服模型欠缺二阶特征组合因素,我们将LR
模型改写为二阶多项式模型
y ^ ( X ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n w i j x i x j (3) \hat{y}(\pmb{X})=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^nw_{ij}x_ix_j\tag{3} y^(XXX)=w0+i=1∑nwixi+i=1∑n−1j=i+1∑nwijxixj(3)
其中 x i x j x_ix_j xixj表示两个互异特征组合的二阶特征, w i j w_{ij} wij表示二阶特征的交叉项系数
至此,该模型似乎已经加入了特征组合的因素,接下来只要学习参数即可
但是,上述二阶多项式模型却有一个致命的缺陷:
数据稀疏性普遍存在的实际应用场景中,二阶特征系数 w i j w_{ij} wij的训练是很困难的
造成学习困难的原因是:
(1) w i j w_{ij} wij的学习需要大量特征分量 x i x_{i} xi和 x j x_{j} xj都非零的样本
(2)样本本身是稀疏的,同时满足 x i x j ≠ 0 x_{i}x_{j} \neq 0 xixj=0的样本非常稀少
综上,多项式模型虽然加入了二阶特征组合,却受到数据稀疏的影响。
2 FM算法原理
2.1 FM模型方程
为了克服模型无法在稀疏数据场景下学习二阶特征系数 w i j w_{ij} wij,我们需要将 w i j w_{ij} wij表示为另外一种形式
为此,针对样本 X \pmb{X} XXX的第i维特征分量 x i x_{i} xi,引入辅助隐向量 v i \pmb{v}_{i} vvvi
v i = ( v i 1 , v i 2 , ⋯ , v i k ) T ∈ R k (4) \pmb{v}_i=(v_{i1}, v_{i2}, \cdots, v_{ik})^T\in\mathbb{R}^k\tag{4} vvvi=(vi1,vi2,⋯,vik)T∈Rk(4)
其中 k k k为超参数,表示特征分量 x i x_{i} xi对应一个 k k k维隐向量 v i \pmb{v}_{i} vvvi,则将 w i j w_{ij} wij表示为:
w ^ i j = v i T v j = < v i , v j > = ∑ f = 1 k v i f v j f (5) \hat{w}_{ij}=\pmb{v}_i^T\pmb{v}_j=<\pmb{v}_i, \pmb{v}_j>=\sum_{f=1}^{k}v_{if}v{jf}\tag{5} w^ij=vvviTvvvj=<vvvi,vvvj>=f=1∑kvifvjf(5)
上式引入隐向量的含义为:二阶特征系数 w i j w_{ij} wij等价于:特征分量 x i x_{i} xi和 x j x_{j} xj对应的隐向量 v i \pmb{v}_{i} vvvi和 v j \pmb{v}_{j} vvvj的内积 < v i , v j > <\pmb{v}_{i}, \pmb{v}_{j}> <vvvi,vvvj>,这就是FM
模型的核心思想。
则我们将二阶多项式模型改写为FM
模型:
y ^ ( X ) = 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 (6) \hat{y}(\pmb{X})=w_{0}+\sum_{i=1}^{n}{w_{i}x_{i}}+\sum_{i=1}^{n-1}{\sum_{j=i+1}^{n}{<\pmb{v}_{i},\pmb{v}_{j}>x_{i}x_{j}}} \tag{6} y^(XXX)=w0+i=1∑nwixi+i=1∑n−1j=i+1∑n<vvvi,vvvj>xixj(6)
从FM模型方程可知,FM模型的参数为: w 0 ∈ R , w ∈ R n , V ∈ R n × k w_0\in\mathbb{R}, \pmb{w}\in\mathbb{R}^n, \pmb{V}\in\mathbb{R}^{n\times k} w0∈R,www∈Rn,VVV∈Rn×k
各个参数的含义为:
(1) w 0 ∈ R w_0\in\mathbb{R} w0∈R表示FM模型的偏置
(2) w ∈ R n \pmb{w}\in\mathbb{R}^n www∈Rn表示FM模型对一阶特征的建模
(3) V ∈ R n × k \pmb{V}\in\mathbb{R}^{n\times k} VVV∈Rn×k表示FM模型对二阶特征的建模
参数的个数为 1 + n + n k 1+n+nk 1+n+nk;模型的复杂度为: O ( n 2 k ) O(n^2k) O(n2k)
对比(3)式和(6)式可知,交叉项 x i x j x_ix_j xixj的系数,前者用的是 w i j w_{ij} wij,后者用的是 w ^ i j \hat{w}_{ij} w^ij,为了弄清二者之间的关系,引入几个矩阵。
(1)每个特征 x i x_{i} xi对应的隐向量 v i \pmb{v}_{i} vvvi组成的矩阵 V \pmb{V} VVV:
V = [ v 1 T v 2 T ⋮ v n T ] = [ v 11 v 12 ⋯ v 1 k v 21 v 22 ⋯ v 2 k ⋮ ⋮ ⋮ ⋮ v n 1 v n 2 ⋯ v n k ] n × k (7) \pmb{V}=\begin{bmatrix}\pmb{v}_1^T \\ \pmb{v}_2^T \\ \vdots \\\pmb{v}_n^T\end{bmatrix} = \begin{bmatrix} v_{11} & v_{12} & \cdots & v_{1k}\\ v_{21} & v_{22} & \cdots & v_{2k}\\ \vdots & \vdots & \vdots & \vdots\\ v_{n1} & v_{n2} & \cdots & v_{nk}\end{bmatrix}_{n\times k} \tag{7} VVV=⎣⎢⎢⎢⎡vvv1Tvvv2T⋮vvvnT⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡v11v21⋮vn1v12v22⋮vn2⋯⋯⋮⋯v1kv2k⋮vnk⎦⎥⎥⎥⎤n×k(7)
(2)多项式模型的二阶特征系数 w i j w_{ij} wij组成的交互方阵 W \pmb{W} WWW
W = [ w 11 w 12 ⋯ w 1 n w 21 w 22 ⋯ w 2 n ⋮ ⋮ ⋮ ⋮ w n 1 w n 2 ⋯ w n n ] n × n (8) \pmb{W}= \begin{bmatrix} w_{11} & w_{12} & \cdots & w_{1n}\\ w_{21} & w_{22} & \cdots & w_{2n}\\ \vdots & \vdots & \vdots & \vdots\\ w_{n1} & w_{n2} & \cdots & w_{nn}\end{bmatrix}_{n\times n} \tag{8} WWW=⎣⎢⎢⎢⎡w11w21⋮wn1w12w22⋮wn2⋯⋯⋮⋯w1nw2n⋮wnn⎦⎥⎥⎥⎤n×n(8)
(3) FM
模型的二阶特征系数 < v i , v j > <\pmb{v}_{i}, \pmb{v}_{j}> <vvvi,vvvj>组成的方阵 W ^ \hat{\pmb{W}} WWW^
W ^ = V × V T = [ v 1 T v 2 T ⋮ v n T ] × [ v 1 v 2 ⋯ v n ] = [ v 1 T v 1 v 1 T v 2 ⋯ v 1 T v n v 2 T v 1 v 2 T v 2 ⋯ v 2 T v n ⋮ ⋮ ⋮ ⋮ v n T v 1 v n T v 2 ⋯ v n T v n ] n × n = [ v 1 T v 1 w ^ 12 ⋯ w ^ 1 n w ^ 21 v 2 T v 2 ⋯ w ^ 2 n ⋮ ⋮ ⋮ ⋮ w ^ n 1 w ^ n 2 ⋯ v n T v n ] n × n (9) \begin{aligned} \hat{\pmb{W}}&=\pmb{V}\times\pmb{V}^T=\begin{bmatrix}\pmb{v}_1^T \\ \pmb{v}_2^T \\ \vdots \\\pmb{v}_n^T\end{bmatrix}\times\begin{bmatrix}\pmb{v}_1 & \pmb{v}_2 & \cdots & \pmb{v}_n\end{bmatrix}\\&= \begin{bmatrix}\pmb{v}_1^T\pmb{v}_1 & \pmb{v}_1^T\pmb{v}_2 & \cdots & \pmb{v}_1^T\pmb{v}_n \\ \pmb{v}_2^T\pmb{v}_1 & \pmb{v}_2^T\pmb{v}_2 & \cdots & \pmb{v}_2^T\pmb{v}_n \\ \vdots & \vdots & \vdots & \vdots\\ \pmb{v}_n^T\pmb{v}_1 & \pmb{v}_n^T\pmb{v}_2 & \cdots & \pmb{v}_n^T\pmb{v}_n \end{bmatrix}_{n\times n} \\&=\begin{bmatrix}\pmb{v}_1^T\pmb{v}_1 & \hat{\pmb{w}}_{12} & \cdots & \hat{\pmb{w}}_{1n} \\ \hat{\pmb{w}}_{21} & \pmb{v}_2^T\pmb{v}_2 & \cdots & \hat{\pmb{w}}_{2n}\\ \vdots & \vdots & \vdots & \vdots\\ \hat{\pmb{w}}_{n1} & \hat{\pmb{w}}_{n2} & \cdots & \pmb{v}_n^T\pmb{v}_n \end{bmatrix}_{n\times n}\end{aligned}\tag{9} WWW^=VVV×VVVT=⎣⎢⎢⎢⎡vvv1Tvvv2T⋮vvvnT⎦⎥⎥⎥⎤×[vvv1vvv2⋯vvvn]=⎣⎢⎢⎢⎡vvv1Tvvv1vvv2Tvvv1⋮vvvnTvvv1vvv1Tvvv2vvv2Tvvv2⋮vvvnTvvv2⋯⋯⋮⋯vvv1Tvvvnvvv2Tvvvn⋮vvvnTvvvn⎦⎥⎥⎥⎤n×n=⎣⎢⎢⎢⎡vvv1Tvvv1www^21⋮www^n1www^12vvv2Tvvv2⋮www^n2⋯⋯⋮⋯www^1nwww^2n⋮vvvnTvvvn⎦⎥⎥⎥⎤n×n(9)
从上面三个矩阵,我们可以看到:
(1)方阵 W \pmb{W} WWW的非对角线上三角的元素,即为多项式模型的二阶特征系数: w i j w_{ij} wij
(2)方阵 W ^ \hat{\pmb{W}} WWW^的非对角线上三角的元素,即为FM
模型的二阶特征系数: < v i , v j > <v_{i}, v_{j}> <vi,vj>
由于 W ^ = V V T \hat{\pmb{W}}=\pmb{V}\pmb{V}^T WWW^=VVVVVVT,即隐向量矩阵的相乘结果,这是一种矩阵分解的方法
引用线性代数中的结论:当 k k k足够大时,对于任意对称正定的实矩阵 W ^ ∈ R n × n \hat{\pmb{W}}\in\mathbb{R}^{n\times n} WWW^∈Rn×n,均存在实矩阵 V ∈ R n × k \pmb{V}\in\mathbb{R}^{n\times k} VVV∈Rn×k,使得 W ^ = V × V T \hat{\pmb{W}}=\pmb{V}\times\pmb{V}^T WWW^=VVV×VVVT
所以FM
模型需要保证的正定性。由于FM
只关心互异特征之间的关系( i > j i>j i>j),因此 W ^ \hat{\pmb{W}} WWW^的对角线元素可以任意取值,只需将它们取足够大(保证行元素严格对角占优),就可以保证 W ^ \hat{\pmb{W}} WWW^的正定性。
2.2 模型化简
从上述FM
模型方程看,模型的复杂度的确是: O ( n 2 k ) O(n^2k) O(n2k),但我们通过一些技巧可以化简模型的二阶系数项,如下:
∑ 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 ) (10) \begin{aligned} &\sum_{i=1}^{n}{\sum_{j=i+1}^{n}{<v_{i},v_{j}>x_{i}x_{j}}} \\ &=\frac{1}{2}\sum_{i=1}^{n}{\sum_{j=1}^{n}{<v_{i},v_{j}>x_{i}x_{j}}}-\frac{1}{2}\sum_{i=1}^{n}{<v_{i},v_{i}>x_{i}x_{i}} \\ &=\frac{1}{2}(\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}}}) \\ &=\frac{1}{2}\sum_{f=1}^{k}{((\sum_{i=1}^{n}{v_{i,f}x_{i}})(\sum_{j=1}^{n}{v_{j,f}x_{j}})-\sum_{i=1}^{n}{v_{i,f}^2x_{i}^2})} \\ &=\frac{1}{2}\sum_{f=1}^{k}{((\sum_{i=1}^{n}{v_{i,f}x_{i}})^2-\sum_{i=1}^{n}{v_{i,f}^2x_{i}^2})} \end{aligned} \tag{10} i=1∑nj=i+1∑n<vi,vj>xixj=21i=1∑nj=1∑n<vi,vj>xixj−21i=1∑n<vi,vi>xixi=21(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)(10)
对上述化简过程做一些解释:
- 第1个等号:对称方阵 W ^ \hat{\pmb{W}} WWW^的所有元素之和减去主对角线元素之和
- 第2个等号: < v i , v j > <v_{i}, v_{j}> <vi,vj>向量内积展开成累加形式
- 第3个等号:提出公共部分 ∑ f = 1 k \sum_{f=1}^{k} ∑f=1k
- 第4个等号:表示为“和平方”减去“平方和”
将式子(10)的化简结果代入式子(6),可以得到:
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 } (11) \begin{aligned} \hat{y}(\pmb{X}) = w_0+\sum_{i=1}^nw_ix_i+\frac{1}{2}*\sum_{f=1}^{k}\left\{\left(\sum_{i=1}^{n}v_{if}x_i\right)^{2}-\sum_{i=1}^{n}v_{if}^{2}x_{i}^2\right\} \end{aligned} \tag{11} y^(XXX)=w0+i=1∑nwixi+21∗f=1∑k⎩⎨⎧(i=1∑nvifxi)2−i=1∑nvif2xi2⎭⎬⎫(11)
可以看到通过数学上的化简,参数个数为: 1 + n + k n 1+n+kn 1+n+kn,模型的复杂度为: O ( k n ) O(kn) O(kn),FM
模型的复杂度降低到了线性级别
3 模型建立
3.1 损失函数
利用FM
模型方程,可以进行各种机器学习预测的任务,包括:
- Regression: y ^ ( x ) \hat{y}(x) y^(x)可以直接用作预测,并且最小平方误差来优化。
- Binary classification: y ^ ( x ) \hat{y}(x) y^(x)作为目标函数并且使用
hinge loss
或者logit loss
来优化。 - Ranking:向量 x \pmb{x} xxx通过 y ^ ( x ) \hat{y}(x) y^(x)的分数排序,并且通过pairwise的分类损失来优化成对的样本 ( x ( a ) , x ( b ) ) (x^{(a)}, x^{(b)}) (x(a),x(b))
对以上的任务中,正则化项参数一般加入目标函数中以防止过拟合。
对于回归问题,损失函数可以取最小平方误差函数
l o s s ( y ^ , y ) = 1 2 ( y ^ − y ) 2 (12) loss(\hat{y},y)=\frac{1}{2}(\hat{y}-y)^2\tag{12} loss(y^,y)=21(y^−y)2(12)
对于分类问题,损失函数可以取logit
逻辑函数
l o s s ( y ^ , y ) = l o g ( 1 + e − y ^ y ) (13) loss(\hat{y},y)=log(1+e^{-\hat{y}y})\tag{13} loss(y^,y)=log(1+e−y^y)(13)
3.2 目标函数
通过损失函数构造出目标函数为
o b j = ∑ i = 1 N l o s s ( y ^ i , y i ) (14) obj=\sum_{i=1}^{N}loss(\hat{y}_i,y_i)\tag{14} obj=i=1∑Nloss(y^i,yi)(14)
其中包含具体的损失函数loss
和估计函数 y ^ ( X ) \hat{y}(X) y^(X)。这里 y ^ \hat{y} y^即FM
模型方程,损失函数loss
可以带入具体的可导函数(如logit
函数)即可。
最优化目标函数,即最优化模型方程的参数,即转化为下面最优化问题
θ ∗ = a r g m i n ∑ i = 1 N l o s s ( y ^ i , y i ) (15) \theta^*=argmin \sum_{i=1}^{N}loss(\hat{y}_i,y_i)\tag{15} θ∗=argmini=1∑Nloss(y^i,yi)(15)
目标函数对模型参数的偏导数通式为:
∂ ∂ θ l o s s ( y ^ i , y i ) = ∂ l o s s ( y ^ i , y i ) ∂ y ^ i ∂ y ^ i ∂ θ (16) \frac{\partial}{\partial \theta}loss(\hat{y}_i,y_i)=\frac{\partial loss(\hat{y}_i,y_i)}{\partial \hat{y}_i}\frac{\partial \hat{y}_i}{\partial \theta}\tag{16} ∂θ∂loss(y^i,yi)=∂y^i∂loss(y^i,yi)∂θ∂y^i(16)
对于 R 2 R^2 R2和或logit
作为损失函数而言,loss
对模型估计函数 y ^ ( X ) \hat{y}(X) y^(X)的偏导数为:
∂ l o s s ( y ^ i , y i ) ∂ y ^ i = { y ^ i − y i l o s s = 1 2 ( y ^ i − y i ) 2 − y i 1 + e y ^ i y i l o s s = l o g ( 1 + e − y ^ i y i ) (17) \frac{\partial loss(\hat{y}_i,y_i)}{\partial \hat{y}_i}=\begin{cases}\hat{y}_i-y_i\qquad & loss=\frac{1}{2}(\hat{y}_i-y_i)^2 \\ \frac{-y_i}{1+e^{\hat{y}_iy_i}}\qquad & loss=log(1+e^{-\hat{y}_iy_i})\end{cases}\tag{17} ∂y^i∂loss(y^i,yi)={y^i−yi1+ey^iyi−yiloss=21(y^i−yi)2loss=log(1+e−y^iyi)(17)
对于FM
模型而言,优化的参数为: θ ∗ = { w 0 , w , V } \theta^{*} = \{w_{0}, \pmb{w}, \pmb{V}\} θ∗={w0,www,VVV},则FM
模型方程对各个参数 θ ∗ \theta^{*} θ∗的偏导数为:
∂ y ^ i ∂ θ = { 1 , if θ is w 0 ; x i , if θ is w i ; x i ∑ j = 1 n ( v j f x j ) − x i 2 v i f , if θ is v i f . (18) \frac{\partial{\hat{y}_i}}{\partial{\theta}} = \begin{cases} 1, & \text{if } \theta \text{ is } w_0; \\ x_i, & \text{if } \theta \text{ is } w_i; \\ x_i\sum_{j=1}^{n}(v_{jf}x_j)-x_{i}^2v_{if}, & \text{if } \theta \text{ is } v_{if}. \end{cases}\tag{18} ∂θ∂y^i=⎩⎪⎨⎪⎧1,xi,xi∑j=1n(vjfxj)−xi2vif,if θ is w0;if θ is wi;if θ is vif.(18)
FM
进行推断的时间复杂度为 O ( k n ) O(kn) O(kn)。分析训练的复杂度,依据参数的梯度表达式, ∑ j = 1 n ( v j f x j ) \sum_{j=1}^{n}(v_{jf}x_j) ∑j=1n(vjfxj)与 i i i无关,在参数更新时可以首先将所有的 ∑ j = 1 n ( v j f x j ) \sum_{j=1}^{n}(v_{jf}x_j) ∑j=1n(vjfxj)计算出来,复杂度为 O ( k n ) O(kn) O(kn),后续更新所有参数的时间复杂度均为 O ( 1 ) O(1) O(1),参数量为 1 + n + k n 1+n+kn 1+n+kn,所以最终训练的时间复杂度同样为 O ( k n ) O(kn) O(kn),其中 n n n为特征数, k k k为隐向量维数。
于是对于FM
模型的优化问题,我们可以采用SGD
优化目标函数
4 模型求解
4.1 优化算法
这部分内容借鉴自作者: peghoty的学习算法:https://blog.csdn.net/itplus/article/details/40536025
5 总结
FM
模型的主要优势为:
FM
模型对特征的一阶组合和二阶组合都进行了建模,在高度稀疏的情况下特征之间的交叉仍然能够估计,而且可以泛化到未被观察的交叉;FM
模型通过MF
思想,基于K
维的Latent Factor Vector
,处理因为数据稀疏带来的学习不足问题;FM
模型的训练和预测的时间复杂度是线性的;FM
模型可以用于DNN
的embedding
。
详细的Python
代码实现,可以参考:FM(Factorization Machine)算法(推导与实现):https://blog.csdn.net/qq_24819773/article/details/86308868
补充:
对称矩阵上三角求和,设矩阵为 M \pmb{M} MMM:
M = ( m 11 m 12 ⋯ m 1 n m 21 m 22 ⋯ m 1 n ⋮ ⋮ ⋱ ⋮ m n 1 m n 2 ⋯ m n n ) n ∗ n (19) M=\left( \begin{matrix} m_{11} & m_{12} & \cdots & m_{1n} \\ m_{21} & m_{22} & \cdots & m_{1n} \\ \vdots & \vdots & \ddots & \vdots \\ m_{n1} & m_{n2} & \cdots & m_{nn} \\ \end{matrix} \right)_{n*n}\tag{19} M=⎝⎜⎜⎜⎛m11m21⋮mn1m12m22⋮mn2⋯⋯⋱⋯m1nm1n⋮mnn⎠⎟⎟⎟⎞n∗n(19)
其中, m i j = m j i m_{ij}=m_{ji} mij=mji
令上三角元素和为 A \pmb{A} AAA,即 ∑ i = 1 n − 1 ∑ j = i + 1 n m i j = A \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}m_{ij}=A ∑i=1n−1∑j=i+1nmij=A,那么, M \pmb{M} MMM的所有元素之和等于 2 ∗ A + t r ( M ) 2*\pmb{A}+tr(\pmb{M}) 2∗AAA+tr(MMM), t r ( M ) tr(\pmb{M}) tr(MMM)为矩阵的迹。
∑ i = 1 n ∑ j = 1 n m i j = 2 ∗ ∑ i = 1 n − 1 ∑ j = i + 1 n m i j + ∑ i = 1 n m i i (20) \sum_{i=1}^n\sum_{j=1}^nm_{ij}=2*\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}m_{ij} + \sum_{i=1}^{n}m_{ii}\tag{20} i=1∑nj=1∑nmij=2∗i=1∑n−1j=i+1∑nmij+i=1∑nmii(20)
于是,可以得到:
A = ∑ i = 1 n − 1 ∑ j = i + 1 n m i j = 1 2 ∗ { ∑ i = 1 n ∑ j = 1 n m i j − ∑ i = 1 n m i i } (21) A=\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}m_{ij}=\frac{1}{2}*\left\{\sum_{i=1}^n\sum_{j=1}^nm_{ij}-\sum_{i=1}^{n}m_{ii}\right\}\tag{21} A=i=1∑n−1j=i+1∑nmij=21∗{i=1∑nj=1∑nmij−i=1∑nmii}(21)
当参数为 v i f v_{if} vif时,只需要关注模型高阶项,当计算参数 v i f v_{if} vif的梯度时,其余无关参数可看做常数。
∂ y ^ i ∂ v i f = ∂ 1 2 { ( ∑ i = 1 n v i f x i ) 2 − ∑ i = 1 n v i f 2 x i 2 } / ∂ v i f = 1 2 ∗ { ∂ { ∑ i = 1 n v i f x i } 2 ∂ v i f − ∂ { ∑ i = 1 n v i f 2 x i 2 } ∂ v i f } (22) \begin{aligned} \frac{\partial{\hat{y}_i}}{\partial{v_{if}}} ={} & \partial{\frac{1}{2}\left\{\left(\sum_{i=1}^{n}v_{if}x_i\right)^{2}-\sum_{i=1}^{n}v_{if}^{2}x_{i}^2\right\}}/\partial{v_{if}} \\ ={} & \frac{1}{2}* \left\{ \frac{ \partial{ \left\{ \sum_{i=1}^{n}v_{if}x_i \right\}^2 } }{\partial{v_{if}}} - \frac{ \partial{ \left\{ \sum_{i=1}^{n}v_{if}^{2}x_{i}^2 \right\} } }{\partial{v_{if}}} \right\} \\ \end{aligned} \tag{22} ∂vif∂y^i==∂21⎩⎨⎧(i=1∑nvifxi)2−i=1∑nvif2xi2⎭⎬⎫/∂vif21∗⎩⎨⎧∂vif∂{∑i=1nvifxi}2−∂vif∂{∑i=1nvif2xi2}⎭⎬⎫(22)
其中,
∂ { ∑ i = 1 n v i f 2 x i 2 } ∂ v i f = 2 x i 2 v i f (23) \frac{ \partial{ \left\{ \sum_{i=1}^{n}v_{if}^{2}x_{i}^2 \right\} } }{\partial{v_{if}}} = 2x_{i}^2v_{if} \tag{23} ∂vif∂{∑i=1nvif2xi2}=2xi2vif(23)
令 λ = ∑ i = 1 n v i f x i \lambda=\sum_{i=1}^{n}v_{if}x_i λ=∑i=1nvifxi,则:
∂ { ∑ i = 1 n v i f x i } 2 ∂ v i f = ∂ λ 2 ∂ v i f = ∂ λ 2 ∂ λ ∂ λ ∂ v i f = 2 λ ∗ ∂ ∑ i = 1 n v i f x i ∂ v i f = 2 λ ∗ x i = 2 ∗ x i ∗ ∑ j = 1 n ( v j f x j ) (24) \begin{aligned} \frac{ \partial{ \left\{ \sum_{i=1}^{n}v_{if}x_i \right\}^2 } }{\partial{v_{if}}} ={} & \frac{\partial{\lambda^2}}{\partial{v_{if}}} \\ ={} & \frac{\partial{\lambda^2}}{\partial{\lambda}} \frac{\partial{\lambda}}{\partial{v_{if}}} \\ ={} & 2\lambda*\frac{\partial{\sum_{i=1}^{n}v_{if}x_i}}{\partial{v_{if}}} \\ ={} & 2\lambda*x_i \\ ={} & 2*x_i*\sum_{j=1}^{n}(v_{jf}x_j) \\ \end{aligned} \tag{24} ∂vif∂{∑i=1nvifxi}2=====∂vif∂λ2∂λ∂λ2∂vif∂λ2λ∗∂vif∂∑i=1nvifxi2λ∗xi2∗xi∗j=1∑n(vjfxj)(24)
结合公式(22~24),可得:
∂ y ^ i ∂ v i f = x i ∑ j = 1 n ( v j f x j ) − x i 2 v i f (25) \frac{\partial{\hat{y}_i}}{\partial{v_{if}}} = x_i\sum_{j=1}^{n}(v_{jf}x_j)-x_{i}^2v_{if} \tag{25} ∂vif∂y^i=xij=1∑n(vjfxj)−xi2vif(25)
参考
- Factorization Machines:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
- FM模型的算法思想:https://www.jianshu.com/p/8d792422e582
- Factorization Machines 学习笔记:https://blog.csdn.net/itplus/article/details/40534885?spm=1001.2014.3001.5501
- 因子分解机(Factorization Machine)详解:https://blog.csdn.net/lijingru1/article/details/88623136
- FM理论与实践:https://zhuanlan.zhihu.com/p/89639306

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)