很久很久没有更新这个博客了,最近想发点东西,先发点以前写的吧
简介
因子分解机(Factorization Machine, FM)是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法。 对于因子分解机FM来说,最大的特点是对于稀疏的数据具有很好的学习能力。
模型
y^:=w0+∑i=1nwixi+∑i=1n−1∑j=i+1n⟨vi,vj⟩xixj\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
其中,参数 w0∈R,W∈Rn,V∈Rn×k.⟨vi,vj⟩w_{0}\in \mathbb{R}, W\in\mathbb{R}^{n}, V\in\mathbb{R}^{n\times k}. \langle v_{i}, v_{j} \ranglew0∈R,W∈Rn,V∈Rn×k.⟨vi,vj⟩ 表示的是两个长度为k额向量的> 点积:
⟨vi,vj⟩:=∑f=1kν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
其中,viv_{i}vi 表示的是系数矩阵 V 的第 i 维向量,且 vi=(ν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)作为优化的标准:
lossR(y^,y)=12∑i=1m(y^(i)−y(i))2loss^{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作为优化标准:
lossC(y^,y)=∑i=1m−lnσ(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=1n−1∑j=i+1n⟨vi,vj⟩xixj\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
=12∑i=1n∑j=1n⟨vi,vj⟩xixj−12∑i=1n⟨vi,vj⟩xixj= \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
=12(∑i=1n∑j=1n∑f=1kνi,fνj,fxixj−∑i=1n∑f=1kνi,fνi,fxixi)= \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)
=12∑f=1k((∑i=1nνi,fxi)(∑j=1nνj,fxj)−∑i=1nνi,f2xi2)= \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)
=12∑f=1k((∑i=1nνi,fxi)2−∑i=1nνi,f2xi2)= \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求解

对于回归问题
∂lossR(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^
对于二分类问题
∂lossC(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^∂θ={1ifθ=w0xiifθ=wixi∑j=1nνj,fxj−νi,fxi2ifθ=ν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
本文深入探讨了因子分解机(FM)模型,一种由Steffen Rendle提出的基于矩阵分解的机器学习算法,尤其适用于稀疏数据集的学习。文章详细介绍了FM模型的构成,包括其线性部分和考虑特征交互的高阶部分,并讨论了其在回归和二元分类问题中的应用及求解方法。
451

被折叠的 条评论
为什么被折叠?



