deep deepfm wide 区别_FM算法和DeepFM算法
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向量。
$$:第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$二者均为长度为k的向量。
SVM 与 FM
和SVM模型最大的不同,在于特征组合 权重的计算 方法。
FM 与DNN
FM和DNN都算是这样的模型,可以在很少的特征工程情况下,通过学习一个低纬度的embedding vector来学习训练集中从未见过的组合特征。
参考:
deep deepfm wide 区别_FM算法和DeepFM算法相关推荐
- MD5算法和SHA-1算法
目录 一.MD5算法 1.MD5算法是什么? 2.MD5算法的优点 3.MD5算法的不足 4.MD5加密的应用场景 5.MD5算法的代码 二.SHA-1算法 1.SHA-1算法和MD5算法 ...
- 腾讯云SSL证书RSA算法和ECC算法区别对比及选择攻略
腾讯云SSL证书支持RSA算法和ECC算法两种,RSA算法和ECC算法有什么不同?如何选择?SSL证书大全网从密钥长度.CPU占用.内存占用.网络消耗.加密效率.抗攻击性和兼容范围来详细对比下SSL证 ...
- 【最小生成树】Prim算法和Kruskal算法的区别对比
Prim算法和Kruskal算法都是从连通图中找出最小生成树的经典算法- 从策略上来说,Prim算法是直接查找,多次寻找邻边的权重最小值,而Kruskal是需要先对权重排序后查找的- 所以说,Krus ...
- 操作系统之存储管理——FIFO算法和LRU算法
操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...
- Prim算法和Kruskal算法
Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...
- 浅谈迪杰斯特拉(Dijkstra)算法和A*算法原理及实现
写在前面 最近我在学习一门名叫<智能自主机器人及系统>的课程,虽然跟过去所学的<机器人学>在部分内容上有所重复,但该课程的应用性更强.对于不同的机器人,如差速轮式车.四轮车.四 ...
- 关联规则挖掘算法: Aprior算法和Fpgrowth算法
关联规则挖掘的目的是挖掘不同物品(item)之前的相关性,啤酒和尿布的故事就是一个典型的成功例子.关联规则挖掘思想简单高效,在广告推荐领域也有较多的应用,主要用于推荐模型落地前的流量探索以及构建规 ...
- 《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- lru调度算法例题_FIFO调度算法和LRU算法
微信公众号关注我,更多计算机知识告诉你! 一.理论 FIFO:先进先出调度算法 LRU:最近最久未使用调度算法 两者都是缓存调度算法,经常用作内存的页面置换算法. 打一个比方,帮助你理解.你有很多的书 ...
最新文章
- iOS 提示更新 业务逻辑
- SAP QM 源检验(Source Inspection)功能展示
- Jlink接口的Jtag和SWD接口定义
- 类欧几里得算法详细推导过程(附带模板)
- 1107班html大赛比赛说明 同学们需注意的事项
- 一个完全摆脱findViewById的自动绑定库
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_02maven依赖管理的概念
- 4.8、漏洞利用-NSF配置漏洞与Rpcbind信息泄露
- HTML中font标签中size属性值对应的像素大小
- 杨子江gre填空词汇分类整理
- android 虚拟按键自定义,如何适配Android底部虚拟按键
- apahce2+tomcat6整合 2010-06-28
- 18年春季第一题 PAT甲级 1144 The Missing Number (20分) 上限感很重要
- 社会内卷的真正原因:华为内部论坛的这篇雄文火了
- 建材企业ERP 重在规划(转)
- ios浏览器微信支付回调页面_iOS H5微信支付和微信支付完成之后跳转回APP
- centOS 安装dns服务器
- 获取微博内容的文字以及表情
- 【游戏开发】角色选择功能实现
- win11微软账户登录一直转圈怎么解决?win11微软账户登录一直转圈