
FM(Factorization Machine)主要是为了解决数据稀疏的情况下,特征怎样组合的问题。已一个广告分类的问题为例,根据用户与广告位的一些特征,来预测用户是否会点击广告。数据如下:(本例来自美团技术团队分享的paper)
clicked是分类值,表明用户有没有点击该广告。1表示点击,0表示未点击。而country,day,ad_type则是对应的特征。对于这种categorical特征,一般都是进行one-hot编码处理。
将上面的数据进行one-hot编码以后,就变成了下面这样 :
因为是categorical特征,所以经过one-hot编码以后,不可避免的样本的数据就变得很稀疏。举个非常简单的例子,假设淘宝或者京东上的item为100万,如果对item这个维度进行one-hot编码,光这一个维度数据的稀疏度就是百万分之一。由此可见, 数据的稀疏性 ,是我们在实际应用场景中面临的一个非常常见的挑战与问题。
one-hot编码带来的另一个问题是 特征空间变大 。同样以上面淘宝上的item为例,将item进行one-hot编码以后,样本空间有一个categorical变为了百万维的数值特征,特征空间一下子暴增一百万。所以大厂动不动上亿维度,就是这么来的。
普通的线性模型,我们都是将各个特征独立考虑的,并没有考虑到特征与特征之间的相互关系。但实际上,大量的特征之间是有关联的。最简单的以电商为例,一般女性用户看化妆品服装之类的广告比较多,而男性更青睐各种球类装备。那很明显,女性这个特征与化妆品类服装类商品有很大的关联性,男性这个特征与球类装备的关联性更为密切。如果我们能将这些有关联的特征找出来,显然是很有意义的。
一般的线性模型为:
从上面的式子很容易看出,一般的线性模型压根没有考虑特征间的关联。为了表述特征间的相关性,我们采用多项式模型。在多项式模型中,特征 与 的组合用 表示。为了简单起见,我们讨论二阶多项式模型。具体的模型表达式如下:
为了简单起见,我们只考虑二阶交叉的情况,具体的模型如下:
式中, 表示样本的特征数量, 表示第 个特征,与线性模型相比,FM的模型就多了后面特征组合的部分。
从FM公式可以看出,组合特征的参数一共有 n(n−1)/2个,任意两个参数都是独立的。然而,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数 的训练需要大量 和 都非零的样本;由于样本数据本来就比较稀疏,满足 和 都非零”的样本将会非常少。训练样本的不足,很容易导致参数 不准确,最终将严重影响模型的性能。
那么,如何解决二次项参数的训练问题呢?矩阵分解提供了一种解决思路。在model-based的协同过滤中,一个rating矩阵可以分解为user矩阵和item矩阵,每个user和item都可以采用一个隐向量表示。比如在下图中的例子中,我们把每个user表示成一个二维向量,同时把每个item表示成一个二维向量,两个向量的点积就是矩阵中user对item的打分。
类似地,所有二次项参数 可以组成一个对称阵 (为了方便说明FM的由来,对角元素可以设置为正实数),那么这个矩阵就可以分解为 , 的第 列便是第 维特征的隐向量。换句话说,每个参数 ,这就是FM模型的核心思想。因此,FM的模型方程为(本文不讨论FM的高阶形式)
其中, 是第 维特征的隐向量, 代表向量点积。隐向量的长度为 ,二次项的参数数量减少为 个,远少于多项式模型的参数数量。另外,参数因子化使得 的参数和 的参数不再是相互独立的,因此我们可以在样本稀疏的情况下相对合理地估计FM的二次项参数。具体来说, 和 的系数分别为 和 ,它们之间有共同项 。也就是说,所有包含“ 的非零组合特征”(存在某个 ,使得 )的样本都可以用来学习隐向量 vivi,这很大程度上避免了数据稀疏性造成的影响。而在多项式模型中, 和 是相互独立的。
显而易见,FM的模型公式是一个通用的拟合方程,可以采用不同的损失函数用于解决回归、二元分类等问题,比如可以采用MSE(Mean Square Error)损失函数来求解回归问题,也可以采用Hinge/Cross-Entropy损失来求解分类问题。当然,在进行二元分类时,FM的输出需要经过sigmoid变换,这与Logistic回归是一样的。直观上看,FM的复杂度是 。但是,通过下面的等式,FM的二次项可以化简,其复杂度可以优化到 。由此可见,FM可以在线性时间对新样本作出预测。
我们再来看一下FM的训练复杂度,利用SGD(Stochastic Gradient Descent)训练模型。模型各个参数的梯度如下:
其中, 是隐向量 的第 个元素。由于 只与 有关,而与 无关,在每次迭代过程中,只需计算一次所有 的 ,就能够方便地得到所有 的梯度。显然,计算所有 的 的复杂度是 ;已知 时,计算每个参数梯度的复杂度是 ;得到梯度后,更新每个参数的复杂度是 ;模型参数一共有 个。因此,FM参数训练的复杂度也是 。综上可知,FM可以在线性时间训练和预测,是一种非常高效的模型。
libFM
论文: Factorization Machines
论文: Factorization Machines with Follow-The-Regularized-Leader for CTR prediction in Display Advertising
推荐系统遇上深度学习(一)--FM模型理论和实践
FM(Factorization Machines)的理论与实践
深入FFM原理与实践-美团
推荐好文: 深度学习在CTR预估中的应用
(1)在特征极其稀疏的情况下也能进行参数预估
(2)时间复杂度低,在线性时间复杂度下即可完成模型的训练和预估
(3)FM是一个通用预测器,可用于任何实数值特征向量的场景下,不依赖特定的输入数据
当拥有多个特征时,构建预估模型的最直观想法是将多个特征直接进行线性组合,求解损失函数最小时,特征对应的权重值。具体公式如下:
在我们的直观感受中,特征与特征之间也存在一定的相关性。以购物为例,不同年龄和不同性别的人群可能会拥有不同的购物偏好,因此可以考虑在模型中加入组合特征。以二阶组合特征为例,具体模型公式如下:
使用上述公式在训练时存在一定的缺点,一是训练的时间复杂度为 ,二是只有在 和 不全为0的情况下,组合特征的权重才能训练充分。
为了解决上述问题,FM模型在构建时引入了矩阵分解的思想,组合特征相应权重由一对向量的内积得到而非仅使用单一的权重值。
其中, 和 向量维度为 。
FM模型性能极其良好,在 时间复杂度下即可完成模型的训练和预估。论文中对其二阶组合部分公式做了推导,推导过程如下:
第一步,原始公式计算的是下图右上三角部分的值,所以可将原始公式先扩展为下图矩阵中所有元素的累加和,去除对角线上的元素后,由于 和 计算得到的值相等,将公式直接除以2即可。
第二步,由于下标 与 无关,交换求和符号的位置得到 ,将 提到括号外。
第三步, 这两项仅与下标 相关, 仅与下标 相关,所以可以将其分别拆分并整理得到两个求和项的乘积。
第四步,由于两个求和项只是下标不同,更换下标后,写成同一求和项的平方,得到最终的式子。
从推导完成的式子中可以得出,预估模型的时间复杂度为 ,且每项向量 的计算仅与 相关,不会出现在计算组合特征时,必须被组合的两个特征不全为0才能计算权重的情况,这也是FM模型泛化性能较强的原因。
4、更新参数
FM模型参数更新可以通过随机梯度下降实现,具体公式中的每项梯度如下图所示, 对应梯度可以通过上述推导得到的公式计算得到。
参考资料:
https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
https://zhuanlan.zhihu.com/p/50426292
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)