主线1.1FM算法原理详解


本文参考自:https://www.cnblogs.com/wkang/p/9588360.html,结合自身的理解和思考进行了改动与补充

一、FM算法原理

1、什么是FM

FM全称为Factor Machine,中文翻译为因子分解机。

2、为什么引入FM(FM优势)

为什么引入FM,也可以说是FM的优势所在
FM有两大优势:特征组合和降维打击
FM表达式为:
在这里插入图片描述

首先是特征组合,通过对两两特征组合,引入交叉项特征(即表达式中最后一项),使得稀疏数据下学习不充分的问题得以解决。比如原本的多项式回归的参数w12w12的学习只能依赖于特征x1x1和x2x2;而对参数⟨v1,v2⟩⟨v1,v2⟩而言就完全不一样了,它由v1v1和v2v2组成。而对于每个向量可以通过多个交叉组合特征学习得到,比如可以由x1x2,x1x3,…x1x2,x1x3,…学习获得,这样可供学习的非零样本就大大增加了。

其次是高维灾难,通过引入隐向量(对参数矩阵进行矩阵分解)隐向量的点积可以表示原本两个毫无相关的参数之间的关系使参数的数量大幅度缩减,从n×(n−1)/2降低到nk,完成对特征的参数估计。

这两个优势如此受欢迎是因为:
1、特征组合是许多机器学习建模过程中遇到的问题,如果对特征直接建模,很有可能会忽略掉特征与特征之间的关联信息,因此,可以通过构建新的交叉特征这一特征组合方式提高模型的效果。
2、高维的稀疏矩阵是实际工程中常见的问题,并直接会导致计算量过大,特征权值更新缓慢。试想一个10000100的表,每一列都有8种元素,经过one-hot独热编码之后,会产生一个10000800的表。因此表中每行元素只有100个值为1,700个值为0。

3、交叉项分解推导

1、交叉项分解
FM表达式的求解核心在于对交叉项的求解。下是网上见到最多的求解交叉项的展开式
在这里插入图片描述
第一步是咋实现的可以参考下图(来自于https://www.jianshu.com/p/152ae633fb00)
在这里插入图片描述

再附上我以前学完随机过程后手推的图片
在这里插入图片描述/

2、举个例子演示一遍:
(例子来源于参考网站)
设有3个变量(特征)x1,x2,x3,每个特征的隐变量分别为v1=(1,2,3)、v2=(4,5,6)、v3=(1,2,1)即:
在这里插入图片描述
设交叉项所组成的权矩阵W为对称矩阵,之所以设为对称矩阵是因为对称矩阵可以用向量乘以向量的转置代替的性质。

那么W=VVT ,即
在这里插入图片描述
所以:
在这里插入图片描述
这里面的交叉项为x1x2,x1x3,x2x1,x2x3,x3x1,x3x2。去重后,交叉项即:x1x2,x1x3,x2x3。这也是工事中出现1/2的原因。

再将其进行分解可得:
在这里插入图片描述
这是一个三维的例子,将其推广到n维即可得到1中的分解公式
在这里插入图片描述

4、权值求解(迭代更新)

使用方法:梯度下降法——通过求损失函数对特征(输入项)的导数计算出梯度,从而更新权值。
前提:设m为样本个数,θ为权值

1、回归问题
回归问题的损失函数一般是均方误差(MSE),即:
在这里插入图片描述
导数为:
在这里插入图片描述

2、分类问题
二分类问题,损失函数一般是logit loss,即
在这里插入图片描述
表示的是阶跃函数Sigmoid(常用作激活函数)
在这里插入图片描述
导数为:
在这里插入图片描述

3、常数项、一次项、交叉项各自的导数
在这里插入图片描述

4、时间复杂度:
vj,f vj,f 是隐向量 vjvj 的第 f 个元素。由于交叉项部分∑nj=1vj,fxj∑j=1nvj,fxj只与 f 有关,而与 i 无关,在每次迭代过程中,只需计算一次所有 f 的∑nj=1vj,fxj∑j=1nvj,fxj就能够方便地得到所有 vi,fvi,f 的梯度。因此,FM参数训练的复杂度是 O(kn)。
FM可以在线性时间训练和预测,是一种非常高效的模型。

5、隐向量
在实际的CTR场景中,数据都是很稀疏的category特征,通常表示成离散的one-hot形式,这种编码方式,使得one-hot vector非常长,而且很稀疏,同时特征总量也骤然增加,达到千万级甚至亿级别都是有可能的,而实际上的category特征数目可能只有几百维。
FM学到的隐向量可以看做是特征的一种embedding表示,把离散特征转化为Dense Feature,这种Dense Feature还可以后续和DNN来结合,作为DNN的输入,事实上用于DNN的CTR也是这个思路来做的。

5、简单总结

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值