文章目录
因子分解机
因子分解机(Factorization Machine,FM),又称分解机,是由Steffen Rendle最早于2010年在ICDM会议Factorization Machines论文中提出,旨在解决大规模稀疏数据下的特征组合问题。传统机器学习方法,假设各特征之间相互独立,没有考虑特征间存在相互作用的情况,主要关注如何对特征赋予权重的问题。
FM 研究背景
在实际应用中,Categorical类型特征经过One-Hot编码之后,大部分样本数据是比较稀疏的。以广告CTR/CVR为例,用户的性别、职业、教育水平、用户偏好、商品品类等,经过One-Hot编码转换后都会导致样本数据的稀疏性。比如商品品类这种类型特征,假设商品末级品类有550个,采用One-Hot编码生成550个数值特征,但每个样本的550个特征中,有且仅有一个数值为非零,由此可见,数据的稀疏性在实际应用中不可避免。而One-Hot编码的另一特点是会导致特征空间剧增。
另外,通过观察大量样本数据,某些特征经过关联后,与label之间的相关性会得到提高。如:“USA”与“Thanksgiving”、“China”与“Chinese New Year”这样的关联特征,对用户的点击有着正向的影响。换句话说,来自“China”的用户很可能会在“Chinese New Year”有大量的浏览、购买行为,而在“Thanksgiving”却不会有特别的消费行为。这种关联特征与label的正向相关性在实际问题中是普遍存在的,如“化妆品”与“女性”,“球类商品”与“男性”,“电影票”的商品与“电影”的品类偏好等。因此引入特征之间的组合是非常有意义的。
如何刻画特征之间的关联,最直接的方法是构造组合特征,特征之间的关联信息在浅层学习模型(LR、SVM)是做不到的,目前工业界主要有两种手段得到组合特征:
- 人工特征工程(数据分析 + 人工构造)
- 通过模型做组合特征的学习(深度学习方法、FM/FFM/DeepFM方法)
多项式模型是包含特征组合的最直观的模型,用
表示特征
和
的组合,即
和
都非零时,组合特征
才有意义。以二阶组合特征为例,二阶多项式模型表达式如下:
由上式可知,二阶组合特征的参数一共有
个,任意两个参数都是相互独立的。然而,实际应用场景中数据稀疏性是普遍存在的,二次项系数的训练是非常困难的。其原因在于回归模型的参数
的学习结果是从训练样本中计算充分统计量(凡是符合指数族分布的模型都具有此性质),而在这里交叉项的每一个参数
的学习过程需要大量的
和
同时非零的训练样本数据。而实际场景中样本的稀疏性导致能够满足“
和
同时非零”的样本数会更少,训练样本不充分,学到的参数
就不是充分统计量的结果,
不准确严重影响模型预测的效果和稳定性。
那么,如何解决二次项参数的训练问题呢?
FM 原理及推导
受矩阵分解(Matrix Factorization,MF)的启发,参考上一篇SVD系列算法浅析,在Model-based的协同过滤中,一个rating矩阵被分解为user矩阵和item矩阵,每个user和item都可以采用一个隐向量表示。如下图所示,将每个user表示成一个二维向量,同时把每个item表示成一个二维向量,两个向量的点积就是矩阵中user对item的评分。
类似的,所有二次项参数
可以组成一个对称矩阵
,那么矩阵可以分解为
,
的第
列就是第
维特征的隐向量。换言之,每个参数表示为
,这就是FM模型的核心思想。因此FM的二阶模型表达式为:
其中,
是第
维特征的隐向量,
代表向量点积运算,计算公式为:
是隐向量的维度,且
,包含
个描述特征的因子。
模型分析如下:
- 线性模型 + 交叉项:前两项是线性回归模型的表达式,最后一项是二阶特征交叉项(组合特征项),表示模型将两个互异的特征分量之间的关联信息考虑进来。用交叉项表示组合特征,从而建立特征与结果之间的非线性关系。
- 交叉项系数 -> 隐向量内积:由于FM模型是在线性回归基础上加入特征交叉项,模型求解时不直接求特征交叉项的系数 (因为对应的组合特征数据稀疏,参数学习不充分),故而采用隐向量的内积 表示 。具体的求解过程是FM对每个特征分量 引入隐向量 ,利用 内积对交叉项系数进行估计。因此二次项的参数数量减少为 个,远少于多项式模型的参数数量。
此外,参数因子化表示后,使得
和
的参数不再相互独立,因此可以在样本系数相对合理的情况下估计FM模型交叉项的参数。具体来说:
和
之间有共同项
,也就是说,所有包含
的非零组合特征(存在某个
,使得
)的样本都可以用来学习隐向量
,这在很大程度上避免了数据稀疏行造成参数估计不准确的影响。而在多项式模型中,
和
是相互独立的。
直观上看,FM模型的复杂度是
,通过以下变换可以将复杂度优化到
,详细推导如下:
张俊林老师在推荐系统召回四模型之:全能的FM模型给出了Step-by-Step的推导,在此附上我个人的理解,把隐向量
可以看做实数,便于理解矩阵的转换,因为向量点积的结果就是一个实数。这样第一步就很容易理解,由于对称矩阵的性质,将求上三角矩阵转换为全矩阵减去对角线上的元素。第二步很简单,向量点积的展开。第三步可理解为提取公因式,第四步就是一个简单的变量替换。
如果采用随机梯度下降SGD来求模型参数,那么各个参数的梯度如下:
由于
只和
有关,在参数迭代过程中,只需要计算第一次所有
的
,就能够方便地得到所有
,显然计算所有
的
的复杂度是
;已知
时,计算每个参数梯度的复杂度是
;得到梯度后,更新每个参数的复杂度是
;模型一共有
个,因此FM参数训练的时间复杂度是
。
公式(2)是一个通用的拟合方程,可以用不同的损失函数用于解决回归、二分类问题,比如采用MSE损失函数来求解回归问题,也可以用Hinge、Cross-Entropy损失来求解分类问题,当然进行二分类时,FM的输出需要经过Sigmoid变换,这于Logistic回归是一样的。
FM 模型优点
FM算法可以在线性时间内完成模型训练,以及对新样本做出预测,是一个非常高效的模型。总结来说,FM模型对稀疏数据有更好的学习能力,通过交互项可以学习特征之间的关联关系,并且保证了学习效率和预估能力。
FM降低了交叉项参数学习不充分的影响
通过将每一维特征用 维隐向量表示,交叉项的参数 用对应特征隐向量的内积表示,降低了因样本数据稀疏,导致交叉项参数学习不充分的影响。如下表:
共现交叉特征 | 样本数 | 备注 |
---|---|---|
<女性,汽车> | 500 | 同时出现<女性,汽车>的样本数 |
<女性,化妆品> | 1000 | 同时出现<女性,化妆品>的样本数 |
<男性,汽车> | 1500 | 同时出现<男性,汽车>的样本数 |
<男性,化妆品> | 0 | 样本中无此特征组合项 |
<女性,汽车>的含义是女性看汽车广告。可以看到,但特征对应的样本数远大于组合特征对应的样本数。训练时,但特征参数相比交叉项特征参数会学习地更充分。因此,可以说FM降低了因数据稀疏,导致交叉项参数学习不充分的影响。
FM提升了模型预估能力
依然看上面的示例,样本中没有没有<男性,化妆品>交叉特征,即没有男性看化妆品广告的数据。如果用多项式模型来建模,对应的交叉项参数 是学不出来的,因为数据中没有对应的共现交叉特征。由于FM学习的参数就是单特征的隐向量,那么男性看化妆品广告的预估结果可以得到。这样,即便训练集中没有出现男性看化妆品广告的样本,FM模型仍然可以用来预估,提升了预估的能力。
FM提升了参数学习效率
显而易见,模型训练复杂度由 降到 ,其中 为训练样本数。对于训练样本和特征数而言,都是线性复杂度。此外,FM模型是在多项式模型的基础上对参数的计算做了调整,因此也有人称FM模型为多项式的广义线性模型。
FM 应用场景
FM可用于各类预测任务中,包括:
- 回归问题Regression
- 二分类问题Binary Classification,可以通过hinge loss或者logit loss来训练二元分类问题。
- 排序问题Ranking,对于排序学习问题(如pairwise),我们可以利用排序算法相关的loss函数来训练FM模型,利用FM模型来做排序学习。
FM vs 其他模型
FM vs MF
- FM是一种比较灵活的模型,通过合适的特征变换,FM可以模拟二阶多项式核的SVM模型、MF模型、SVD++模型等。论文中FM是“”general predictor”,而SVD++、PITF、FPMC等都是“specialized models”。
- 相比MF中把rating评分写为 ,这其实是只有两类特征user和item的FM模型,即MF只是FM的特例。换言之,MF只能局限于这两类特征,而FM可以加任意多的特征,比如user的历史购买平均值、item的历史购买平均值等等。在扩展性上,FM远胜MF。
FM vs SVM
- 相比二阶多项式核的SVM来说,FM在样本稀疏情况下是有优势的。而且FM的训练和预测复杂度都是线性的,而二阶多项式核SVM需要计算核矩阵,是 级别的复杂度。
- 多项式SVM交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,这样对于测试集上的case而言这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。
- FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行
- FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量。
Reference
- https://zhuanlan.zhihu.com/p/58160982
- 机器学习算法系列(26):因子分解机(FM)与场感知分解机(FFM)
- https://zhuanlan.zhihu.com/p/81069538
- https://www.jianshu.com/p/78628d1cc621