标签:sig 转换 导致 因子 多个 思路 角度 网络 回归
FM算法可以在线性时间内完成模型训练, 是一个非常高效的模型。FM最大特点和优势:FM模型对稀疏数据有更好的学习能力,通过交互项可以学习特征之间的关联关系,并且保证了学习效率和预估能力。
One-Hot编码的特点: 大部分样本的特征比较稀疏; 特征空间大。
通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关性就会提高。如:“USA”与“Thanksgiving”、“China”与“Chinese New Year”这样的关联特征,对用户的点击有着正向的影响。
多项式模型是包含特征组合的最直观的模型。考虑到计算效率, 我们只讨论二阶多项式模型。
\[
y(x)=w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^nw_{ij}x_ix_j
\]
从这个公式可以看出,组合特征的参数一共有\(n(n?1)\over 2\)个,任意两个参数都是独立的。当组合特征的样本数不充足时, 学习到的参数将不准确, 从而会严重影响模型预测的效果(performance)和稳定性。
那么,如何解决二次项参数的训练问题呢?矩阵分解提供了一种解决思路。在Model-based的协同过滤中,一个rating矩阵可以分解为user矩阵和item矩阵,每个user和item都可以采用一个隐向量表示。矩阵W就可以分解为 \(W=V^TV\),V 的第j列便是第 j 维特征的隐向量。每个参数 \(w_{ij}=?v_i,v_j?\),这就是FM模型的核心思想。因此,FM的模型方程为
\[ y(x)=w_0+\sum _{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^n?vi,vj?x_ix_j \?v_i,v_j?=\sum_{f=1}^kv_{i,f}·v_{j,f} \]
隐向量的长度为k(k<<n),包含k个描述特征的因子。
上边这个公式是一个通用的拟合方程,可以采用不同的损失函数用于解决回归、二元分类等问题,比如可以采用MSE(Mean Square Error)损失函数来求解回归问题,也可以采用Hinge、Cross-Entropy损失来求解分类问题。当然,在进行二元分类时,FM的输出需要经过Sigmoid变换,这与Logistic回归是一样的。
当前的FM公式的复杂度是\(\mathcal O(kn^2)\),但是,通过下面的等价转换,可以将FM的二次项化简,其复杂度可以优化到\(\mathcal O(kn)\),即:
\[
\sum_{i=1}^n\sum_{j=i+1}^n?v_i,v_j?x_i,x_j=\frac{1}{2}\sum_{f=1}^k[(\sum_{i=1}^nv_{i,f}x_i)^2-\sum_{i=1}^nv_{i,f}^2x_i^2]
\]
详细推导:
\[ \begin{align} &\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_ix_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}^nv_{i,f}^2x_i^2] \=&\frac{1}{2}\sum_{f=1}^k[(\sum_{i=1}^nv_{i,f}x_i)^2- \sum_{i=1}^nv_{i,f}^2x_i^2] \end{align} \]
FM模型的核心作用可以概括为以下三个:
与其他模型相比,它的优势如下:
FM的缺点: 由于需要两两组合特征, 这样任意两个交叉特征之间都有了直接或者间接的关联, 因此任意两组特征交叉组合的隐向量都是相关的, 这实际上限制了模型的复杂度. 但是如果使得任意一对特征组合都是完全独立的, 这与通过核函数计算特征交叉类似, 有着极高的复杂性和自由度, 模型计算十分复杂. FFM正好介于这两者之间.
FFM引入特征组(field)的概念来优化此问题. FFM把相同性质的特征归于同一个field, 按照级别分别计算当前特征与其它field的特征组合时的特征向量, 这样特征组合的数量将大大减少.
假设样本的 n 个特征属于 f 个field,那么FFM的二次项有 nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。FM可以看作FFM的特例,是把所有特征都归属到一个field时的FFM模型。FFM模型方程如下:
\[ y(x)=w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^n?v_{i,fj},v_{j,f_i}?x_ix_j \\]
如果隐向量长度为k, 那么FFM的二次项参数就有nfk个,远多余FM的nk个.
由于FFM的任意两组交叉特征的隐向量都是独立的, 可以取得更好的组合效果, 这也使得FFM二次项并不能够化简,其复杂度为\(\mathcal O(kn^2)\)。
权重求解:
libFFM的实现中采用的是AdaGrad随机梯度下降方法. 并且在FFM公式中省略了常数项和一次项,模型方程如下:
\[
?(w,x)=\sum_{j1,j2∈C_2}?w_{j_1,f_2},w_{j_2,f_1}?x_{j_1}x_{j_2}
\]
其中,C2是非零特征的二元组合,j1是特征,属于field f1,\(w_{j_1,f_2}\)是特征 j1对field f2 的隐向量。此FFM模型采用logistic loss作为损失函数,和L2惩罚项,因此只能用于二元分类问题。
\[ \underset{w}{\min}\sum_{i=1}^n\log(1+\exp{?y_i?(w,x_i)})+\frac{λ}{2}‖w‖^2 \]
标签:sig 转换 导致 因子 多个 思路 角度 网络 回归
原文地址:https://www.cnblogs.com/makefile/p/ffm.html