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算法相关推荐

  1. MD5算法和SHA-1算法

    目录 一.MD5算法  1.MD5算法是什么?  2.MD5算法的优点  3.MD5算法的不足  4.MD5加密的应用场景  5.MD5算法的代码 二.SHA-1算法  1.SHA-1算法和MD5算法 ...

  2. 腾讯云SSL证书RSA算法和ECC算法区别对比及选择攻略

    腾讯云SSL证书支持RSA算法和ECC算法两种,RSA算法和ECC算法有什么不同?如何选择?SSL证书大全网从密钥长度.CPU占用.内存占用.网络消耗.加密效率.抗攻击性和兼容范围来详细对比下SSL证 ...

  3. 【最小生成树】Prim算法和Kruskal算法的区别对比

    Prim算法和Kruskal算法都是从连通图中找出最小生成树的经典算法- 从策略上来说,Prim算法是直接查找,多次寻找邻边的权重最小值,而Kruskal是需要先对权重排序后查找的- 所以说,Krus ...

  4. 操作系统之存储管理——FIFO算法和LRU算法

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  5. Prim算法和Kruskal算法

       Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...

  6. 浅谈迪杰斯特拉(Dijkstra)算法和A*算法原理及实现

    写在前面 最近我在学习一门名叫<智能自主机器人及系统>的课程,虽然跟过去所学的<机器人学>在部分内容上有所重复,但该课程的应用性更强.对于不同的机器人,如差速轮式车.四轮车.四 ...

  7. 关联规则挖掘算法: Aprior算法和Fpgrowth算法

      关联规则挖掘的目的是挖掘不同物品(item)之前的相关性,啤酒和尿布的故事就是一个典型的成功例子.关联规则挖掘思想简单高效,在广告推荐领域也有较多的应用,主要用于推荐模型落地前的流量探索以及构建规 ...

  8. 《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. lru调度算法例题_FIFO调度算法和LRU算法

    微信公众号关注我,更多计算机知识告诉你! 一.理论 FIFO:先进先出调度算法 LRU:最近最久未使用调度算法 两者都是缓存调度算法,经常用作内存的页面置换算法. 打一个比方,帮助你理解.你有很多的书 ...

最新文章

  1. iOS 提示更新 业务逻辑
  2. SAP QM 源检验(Source Inspection)功能展示
  3. Jlink接口的Jtag和SWD接口定义
  4. 类欧几里得算法详细推导过程(附带模板)
  5. 1107班html大赛比赛说明 同学们需注意的事项
  6. 一个完全摆脱findViewById的自动绑定库
  7. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_02maven依赖管理的概念
  8. 4.8、漏洞利用-NSF配置漏洞与Rpcbind信息泄露
  9. HTML中font标签中size属性值对应的像素大小
  10. 杨子江gre填空词汇分类整理
  11. android 虚拟按键自定义,如何适配Android底部虚拟按键
  12. apahce2+tomcat6整合 2010-06-28
  13. 18年春季第一题 PAT甲级 1144 The Missing Number (20分) 上限感很重要
  14. 社会内卷的真正原因:华为内部论坛的这篇雄文火了
  15. 建材企业ERP 重在规划(转)
  16. ios浏览器微信支付回调页面_iOS H5微信支付和微信支付完成之后跳转回APP
  17. centOS 安装dns服务器
  18. 获取微博内容的文字以及表情
  19. 【游戏开发】角色选择功能实现
  20. win11微软账户登录一直转圈怎么解决?win11微软账户登录一直转圈

热门文章

  1. BOM(浏览器模型)
  2. 客户画像模型宽表搭建
  3. 测试ocx(MFC ActiveX控件)
  4. 学会和人沟通与请教问题秘籍
  5. 网页调试工具显示waiting TTFB时间过长的问题
  6. 不用函数,如何提取身份证出生日期?
  7. 实景三维可视化管理平台助力提升景区运营管理水平
  8. 【机器学习】手写识别系统
  9. 人工蜂群算法c语言程序,基于人工蜂群算法的炼钢连铸生产调度方法研究
  10. excel数据分析案例——电信运营商用户流失分析