FM算法和DeepFM算法

肖圣贤

FM

线性模型的二阶特征组合

image.png
$w_ij$是固定的。

对于n个特征的模型,相比组合之前参数量级增加量级是$n^2$:
n个特征组合后是n(n-1)/2,比如有(n=)1000个特征增加近50万个参数。

怎么能减少参数呢?

概述

因子分解机(Factorization Machine),又称分解机器。
以线性二阶特征组合模型为基础,解决在稀疏数据的条件下特征组合的问题。

假设函数:
image.png
其中image.png

上面第一个公式表示一条数据的假设函数。
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维度。

推导

image.png
图片引用

降低负责度:
但经过一些数学变换,复杂度由$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可以使用“线性模型+人工特征组合引入非线性”的模式引入特征组合。
image.png

  1. 优点:

因为LR模型具有简单方便易解释。
容易上规模等诸多好处。

  1. 缺点:

人工特征工程,耗时费力费人力资源。
对组合特征建模,泛化能力比较弱,特征相乘为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-高效的组合高阶特征模型
阅读 4.7k

喜欢大数据技术,个性化推荐系统,架构设计。

31 声望
5 粉丝
0 条评论
你知道吗?

喜欢大数据技术,个性化推荐系统,架构设计。

31 声望
5 粉丝
文章目录
宣传栏