FM
线性模型的二阶特征组合
$w_ij$是固定的。
对于n个特征的模型,相比组合之前参数量级增加量级是$n^2$:
n个特征组合后是n(n-1)/2,比如有(n=)1000个特征增加近50万个参数。
怎么能减少参数呢?
概述
因子分解机(Factorization Machine),又称分解机器。
以线性二阶特征组合模型为基础,解决在稀疏数据的条件下特征组合的问题。
假设函数:
其中
上面第一个公式表示一条数据的假设函数。
n:特征个数 ,i:第i个特征 。
$w_i$:第i个特征的权重参数,$x_i$:第i个特征的数据值,$v_i$:第i个特征的embedding向量。
$<v_i,v_j>$:第i,j个特征的embedding向量进行内积,得到一个标量值,只跟特征有关,跟样本无关。也就是具体两个特征组合的权重是固定的,所有特征进行两两组合后的每个组合的权重是固定的。
$x_i x_j$:第i,j个特征对应数据值的乘积,特征要先转换成数字。
第二个公式中:
k表示embedding向量的长度
引入原因:
1、弥补线性模型对稀疏情况下组合特征学习不足的问题(线性模型假设模型之间相互独立,只学习了一阶关系)。
实际情况,特征之间是有关联的。
2、解决二级特征组合问题
两两特征模型,每两个特征有一个参数w要学习。
参数比较多,n维特征就有 n(n-1)/2个参数要学习
稀疏性问题,实际数据两两相乘很多都为0,没办法学习。
原理:
每个特征都有自己对应的大小为k的一维隐向量,通过FM模型的学习得来。
两两特征代表的权重用这两个特征的内积代替。w(i,j) = v(i) v(j) v是k维度。
推导
降低负责度:
但经过一些数学变换,复杂度由$O(n^2)$降为$O(nf)$
代码
几个问题
为什么FM比线性两两组合更好?
线性特征组合的是两两特征,FM是拆解评分值的角度拆分的隐含特征。
两两组合特征有两个问题:一是计算量问题,二是数据稀疏问题。
而FM恰好可以解决这两个问题,计算量呈指数下降,并且有效的解决数据稀疏问题。
FM泛化能力强的原因
与LR中的手工特征组合相比,LR学习的是特征两两组合后单独的权重值,而FM巧妙的把单独权重拆分成两部分,一部分是特征i的embedding表示,一部分是特征j的表示,使用内积相乘来表示两个特征i,j组合后的新权重。
也就是说权重是对应在特征组合上的,还是对应某个特征的,LR选择了前者,FM选择了后者,所以FM更加的整合统一。
LR模型学习的时候如果两两特征组合没有出现过,$W_i,j$就学习不到。
而FM几乎不存在embedding学习不到的情况,只要i特征跟其它特征出现过$V_i$就可以学习到。
综上所属,FM的泛化能力更强。
什么情况下容易过度泛化
矩阵非常稀疏并且high-rank的时候容易过度泛化(是FM和DNN模型的共同缺点):
当query-item矩阵是稀疏并且是high-rank的时候(比如user有特殊的爱好,或item比较小众),很难非常效率的学习出低维度的表示。
这种情况下,大部分的query-item都没有什么关系。但是dense embedding会导致几乎所有的query-item预测值都是非0的,这就导致了推荐过度泛化,会推荐一些不那么相关的物品
时间复杂度O(kn)
FM:通过公式改写时间复杂度由O(kn(2)) 降低到 O(kn)
FFM
FFM将特征按照事先的规则分为多个场(Field),特征xi属于某个特定的场f。
当两个特征xi,xj组合时,用对方对应的场对应的隐向量做内积!
fi,fj分别是特征xi,xj对应的场编号。
FM 与 FFM比较
FM可以对高阶特征组合进行建模,但实际上因为计算复杂度的原因一般都只用到了二阶特征组合。
对于高阶的特征组合来说,我们很自然的想法,通过多层的神经网络即DNN来解决,也就是FFM。
DFM
解决了低阶特征和高阶特征组合的问题。
层结构
输入层-稀疏特征层:
- 给dense embedding层提供输入。
- 给FM层提供低阶特征的输入。
dense embedding嵌入层:
- 实现稀疏向量压缩到低维稠密向量。
- 给FM层提供组合特征输入
- 给DNN层提供全连接输入。
DNN隐层:
- 高阶特征组合隐含地体现在隐藏层。
FM层:
- 负责低阶特征提取
Wide&Deep和DeepFM比较
总结下wide&deep和DeepFM的异同:
1)两者的DNN部分模型结构相同,DNN部分负责二阶以上的高阶特征交叉;
2)wide&deep需要做特征工程,二阶特征交叉需要靠特征工程来实现,通过wide部分发挥作用;
3)DeepFM完全不需要做特征工程,直接输入原始特征即可,二阶特征交叉靠FM来实现,并且FM和DNN共享embedding;
4)从试验结果来看DeepFM效果优于wide&deep。
MF矩阵分解 与 FM因子分解机
MF(Matrix Factorization,矩阵分解):
- 推荐系统领域里的最经典,历史最悠久的协同过滤模型。
- 核心思想是通过两个低维小矩阵(一个代表用户embedding矩阵,一个代表物品embedding矩阵)的乘积计算。
- 原始输入是评分矩阵。
相同和区别:
相同:
- 二者都隐含了embedding思想。
- 矩阵分解模型是因子分解机模型的特例,矩阵分解可以被认为是只有User ID 和Item ID这两个特征。
- MF用的评分信息,评分信息只能用作
- FM继承了MF的特征embedding化表达这个优点
不同:
- 是否可以引入新特征:FM可以用很多特征。MF只有评分信息,没有特征,如果实际项目中没有显示评分数据使用MF不方便(除非根据规则造一个评分数据)
- 隐特征含义不同:FM的每一个特征(用户物品下面会有多个特征)都有embedding。MF的用户有一个embedding,物品有一个embedding。
- 问题的形式不同:MF是给出评分,再进行评分预测的问题。FM可以是点击率预估问题。
- 在推荐系统中的地位不同:MF由于特征引入受限只用来召回,FM即可以召回又可以排序。
LR 与 FM
LR实现特征组合:
LR可以使用“线性模型+人工特征组合引入非线性”的模式引入特征组合。
- 优点:
因为LR模型具有简单方便易解释。
容易上规模等诸多好处。
- 缺点:
人工特征工程,耗时费力费人力资源。
对组合特征建模,泛化能力比较弱,特征相乘为0导致权重为0的情况比较多。
尤其是在大规模稀疏特征存在的场景下,这个毛病尤其突出,比如CTR预估和推荐排序,这些场景的最大特点就是特征的大规模稀疏。
FM自动实现组合:
相比LR ,$W_{i,j}$ 用内积$<v_i,v_j>$代替,$v_i$和$v_j$二者均为长度为k的向量。
SVM 与 FM
和SVM模型最大的不同,在于特征组合 权重的计算 方法。
FM 与DNN
FM和DNN都算是这样的模型,可以在很少的特征工程情况下,通过学习一个低纬度的embedding vector来学习训练集中从未见过的组合特征。
参考:
推荐系统召回四模型之:全能的FM模型
FM与FFM深入解析
推荐系统召回之FM模型12问
ctr预估之Wide&Deep和DeepFM
DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
论文精读-DeepFM
FM与FFM深入解析
推荐算法之—FM
FM系列算法解读FM+FFM+DeepFM
FM算法优势
因子分解机FM-高效的组合高阶特征模型
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。