参数因子化使得组合特征\(x_hx_i\)和\(x_ix_j\)不再相互独立,\(x_hx_i\)和\(x_ix_j\)的系数分别为\(<v_h,v_i>\)和\(<v_i,v_j>\),它们有共同项\(v_i\)。通常,由于数据稀疏,特征分量\(x_i\)很多样本值是0,组合参数很难学习到,但是可以通过特征i与所有其它特征的组合,学习到特征i对应的隐向量\(v_i\),因此所有包含特征\(x_i\)的非零组合特征的样本都可以用来学习隐向量\(v_i\),这很大程度上避免了数据稀疏性造成的影响,而在支持向量机的多项式模型中,\(w_{hi}\)和\(w_{ij}\)就是相互独立学习的。
上述因子分子机公式是一个通用的拟合方程,可以采用不同的损失函数解决分类、回归问题,如采用均方差损失函数,就可以使用该拟合方程求解回归问题。
因子分解机化简
因子分解机的计算复杂度,考虑计算量最大的二次项:
\[
\sum_{i=1}^n\sum_{j=i+1}^n<v_i,v_j>x_ix_j
\]
计算复杂度为\(O(kn^2)\)。
可以先把标量\(x_i\)和对应的隐向量\(v_i\)相乘,并存储下来,即:
\[
u_i=x_iv_i
\]
则上式变为:
\[
\sum_{i=1}^n\sum_{j=i+1}^n<v_i,v_j>x_ix_j=\sum_{i=1}^{n}\sum_{j=i+1}^{n}<u_i,u_j>=\sum_{f=1}^k(\sum_{i=1}^n\sum_{j=i+1}^nu_{i,f}u_{j,f})
\]
考虑到:
\[
(a+b+c)^2=a^2+b^2+c^2+2ab+2ac+2bc
\]
左侧只需要1次乘法,右侧需要6次乘法。因此将二次项凑成和的平方可以节约计算。
因此二次项可变为:
\[ {equation}
\begin{split}
\sum_{f=1}^k(\sum_{i=1}^n\sum_{j=i+1}^nu_{i,f}u_{j,f})&=\frac{1}{2}\sum_{f=1}^{k}(\sum_{i=1}^n\sum_{j=1}^nu_{i,f}u_{j,f}-\sum_{i=1}^nu_{i,f}^2)\\
&=\frac{1}{2}\sum_{f=1}^k((\sum_{i=1}^nu_{i,f}^2)-\sum_{i=1}^nu_{i,f}^2)
\end{split}
\] {equation}
完整的变换:
\[ {equation}
\begin{split}
\sum_{i=1}^n\sum_{j=i+1}^n<v_i,v_j>x_ix_j
&=\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}<v_i,v_j>x_ix_j-\frac{1}{2}\sum_{i=1}^{n}<v_i,v_i>x_ix_i\\
&=\frac{1}{2}(\sum_{i=1}^n\sum_{j=1}^n\sum_{f=1}^kv_{i,f}v_{j,f}x_{i}x_j-\sum_{i=1}^n\sum_{f=1}^kv_{i,f}v_{i,f}x_ix_i)\\
&=\frac{1}{2}\sum_{f=1}^k((\sum_{i=1}^nv_{i,f}x_i)(\sum_{j=1}^nv_{j,f}x_j)-\sum_{i=1}^{n}v_{i,f}^2x_i^2) \qquad \sum_{i=1}^nv_{i,f}x_i和\sum_{j=1}^nv_{j,f}x_j地位等价\\
&=\frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}v_{i,f})^2-\sum_{i=1}^{n}v_{i,f}^2x_i^2)
\end{split}
\] {equation}
因子分解机的复杂度被优化到\(O(kn)\)。
场感知因子分解机(Field Factorization Machine, FFM)
因子分解机任意两组特征交叉的隐向量都是相关的,这实际上限制了模型的复杂度。但如果任意两组特征组合是完全独立的,这与支持向量机核函数来计算特征交叉类似,有着极高的复杂性和自由度,模型计算过于复杂。场感知因子分解机是两者的折中。
场感知因子分解机把具有相同性质的特征都归于同一个“场”,按照场级别分别计算当前特征与其它场里特征组合时的特征向量。即认为不同场的特征是相互独立的,同一场内的特征是不独立的。
在场感知因子分解机中,每一维的特征\(x_ix_j\),针对其它特征的每一种场\(f_if_j\)组合,都会学习一个隐变量\(v_{i,f_j}v_{j,f_i}\),每个特征属于某个特定的场。每个特征将映射出多个隐向量,每个隐向量对应一个场,这也就是说,一个特征在不同场中对应的隐向量是不同的。当两个特征组合时,它们分别使用这两个特征对应场的隐向量做内积。场感知因子分解机的模型方程为:
\[
\phi _{FFM}(w,x)=\sum_{i=1}^{n}\sum_{j=i+1}^n<v_{i,f_j},v_{j,f_i}>x_i,x_j
\]
其中,\(v_{j,f_i}\)是第j个特征所属的场。若隐向量长度为k,则场感知因子分解机的二次参数有nfk个,远多于因子分解机的nk个。场感知因子分解机对每个样本的预测的时间复杂度为\(O(kn^2)\),但场感知因子分解机的k值一般远小于因子分解机的k值。
在因子分解机中,每一维特征的隐向量只有一个,因此因子分解机可以看作是场感知因子分解机的特例,即因子分解机是把所有特征都归属到一个场时的场感知因子分解机。
场感知因子分解机的应用