【推荐算法系列五】DeepFM 模型

文章目录

  • 参考资料
    • Sparse Features
    • Dense Embeddings
    • FM Layer
    • Hidden Layer
    • Output Units
  • 优缺点
    • DeepFM 的优点
    • DeepFM 自身的缺点。

参考资料

DeepFM 中关于 整个发展过程, FM, PNN, wide&deep 的描述很给力。
所以FM在其中的含义就是low-order, deep 就是所谓的 high-order 么?

DeepFM 是一种基于深度学习和 FM 模型的混合模型,它包含两个部分,一部分是 FM 模型,用来捕捉特征之间的交互效应;另一部分是一个深度神经网络,用来学习更高阶的特征交互和特征表达。

由于 DeepFM 算法有效地结合了 FM 和神经网络算法的优点,能够同时对低阶组合特征和高阶组合特征进行提取,因此被广泛使用。

在 DeepFM 中,FM 部分用来处理低阶特征交互,包括一阶特征和二阶特征交互。FM 模型能够捕捉到特征之间的线性关系和二次关系,对于数据稀疏的情况,FM 模型以几乎线性的时间和空间复杂度快速地学习特征交互,这对于处理高维离散特征非常有优势。

而 DNN 部分用来处理高阶特征交互,包括三阶特征和更高阶的特征交互。DNN 对输入的 Embedding 向量进行深度处理,从而能够挖掘到更为复杂的高阶交互模式。同时,DNN 可以对未知的特征进行插值和泛化,因此在数据不完整的情况下也能够保持较好的预测准确率。

在这里插入图片描述
在这个模型中从下往上看,一共分成五个部分,分别是 Sparse Features、Dense Embeddings、FM Layer、Hidden Layer 以及 Output Units。

Sparse Features

这一层的主要作用是对特征进行处理。在做特征处理时,需要对每一个离散型的数据来做 One-Hot 编码。经过 One-Hot 编码后,一个特征会用很多列来表示,这时整个特征就会变得非常稀疏。因此就需要去记录 One-Hot 之前的特征(即图中的 Field),我们可以暂且理解为原始输入的特征。这样做就是为了在存储矩阵时,可以把一个大的稀疏矩阵转换成两个小的矩阵和一个字典进行存储。

Dense Embeddings

DeepFM 模型中的 Dense Embeddings 层(稠密嵌入层)用于将稀疏高维的数据压缩成稠密的实数向量表示。

我们在上一步(也就是通过 Sparse Features 层的处理后)得到的是一个高维度的稀疏向量,这个高维度的稀疏向量实际上在计算时无法得到特征之间的相互关系。那么我们就可以通过 Dense Embeddings 层,将稀疏的 01 向量做一个 Embedding,将其转化成低维稠密的向量。

根据上面的结构图可以看到,实际上每一个高维稀疏向量都有自己所对应的 Embedding 向量,不同的向量之间的 Embedding 实际上是相互独立的,我们把每一个稠密向量进行横向的拼接,使其变成一个长度很长的稠密向量,然后再拼接上原始的数值特征,统一作为 Deep 与 FM 的输入。

一般来说在 DeepFM 模型中,Sparse Features 层和 Dense Embeddings 层是紧密结合的。我们所做的就是提取稀疏特征,再划分 Field 做 Dense Embeddings,将这些原始的特征转化为低维稠密的向量,方便 input 到之后的模型中。而这些 input 共同构成了一个特征嵌入的整体,旨在为数据提供更好的特征表达能力和更强的预测性能。

FM Layer

DeepFM 中的 FM 层由线性部分和交叉部分两部分组成。
线性部分指输入特征的线性组合,可以类比于 LR 模型的线性部分。它可以得到输入特征的权重,从而学习输入特征的重要程度。

交叉部分是指捕获二阶交互特征的部分,它会将所有特征向量的每个元素分别相乘,得到所有可能的二阶交互项,然后,对这些二阶交互项进行加权求和,得到交叉部分的输出。

值得注意的是,FM 层的线性和交叉部分可以共享特征向量的 Embedding 参数,有助于节省模型的参数量,提高模型训练效率。

在这里插入图片描述

Hidden Layer

Hidden Layer 是一个简单的前馈神经网络,由于原始特征向量中大多数都是高维度的稀疏向量、连续的特征和类别特征混合。为了能够更好地发挥 DNN 模型的特性,设计了一套子网络来将原始的系数特征转换成稠密的特征向量,也就是下面这张图中的部分。

Output Units

Output Units 实际上就是将 FM 的预训练向量 V 作为网络权重,初始化替换为 FM 和 DNN 进行联合训练,从而得到一个端到端的模型。在这一层中,会对 FM Layer 的结果与 Hidden Layer 的结果进行累加,这样做的好处是将低阶与高阶的特征交互融合,然后将得到的结果进行一个 sigmoid 操作,得到预测的概率输出。

优缺点

DeepFM 的优点

  • 考虑了高阶交叉特征:DeepFM 可以对各种交叉特征进行编码,包括高阶交叉特征,从而提高了模型的表达能力。
  • 既考虑了线性特征又考虑了非线性特征:DeepFM 同时考虑了线性模型和因子分解机模型,可以对线性特征和非线性特征进行学习和推断。
  • 适用于稀疏特征:DeepFM 可以处理具有稀疏结构的特征,例如在推荐系统中常见的用户 - 物品交互。
  • 可以通过高效的 Embedding 实现对离散特征的编码:DeepFM 基于 Embedding 层实现了对离散特征的编码,这种方法可以高效地处理海量的离散特征。

DeepFM 自身的缺点。

  • 模型训练较慢:DeepFM 中的深度模块导致了训练过程的时间和计算复杂度的增加。
  • 特征选取和处理的要求较高:DeepFM 需要对原始数据进行一定的预处理,同时对于不同的数据集,需要结合实际场景设计合适的特征。
  • 对于连续特征的处理较为有限:DeepFM 采用了 Embedding 层来处理离散特征,虽然它也支持连续特征,但是处理连续特征的方法较为简单并且直接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/265075.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ArcGIS Pro为栅格图添加坐标信息

在某些时候,我们从网上获取的资源是一张普通的栅格图,没有任何的坐标信息,如果想要和带坐标信息的数据一起使用就需要先添加坐标信息,在GIS上,我们把这个过程叫做地理配准,这里为大家介绍一下地理配准的方法…

VSCode-更改系统默认路径

修改vscode中的默认扩展路径:"%USERPROFILE%\.vscode" 打开目录C:\用户\电脑用户名,将.vscode文件剪切至D:\VSCode文件夹下 用管理员身份打开cmd.exe命令界面输入mklink /D "%USERPROFILE%\.vscode" "D:\VSCode\.vscode\"…

二次供水物联网:HiWoo Cloud助力城市水务管理升级

随着城市化的快速推进,二次供水系统作为城市基础设施的重要组成部分,其稳定运行和高效管理显得至关重要。然而,传统的二次供水管理方式在应对复杂多变的城市供水需求时,显得力不从心。为了破解这一难题,HiWoo Cloud平台…

Vue3之属性传值的四种情况

文章目录 Vue3之属性传值的四种情况一、引言二、父组件向子组件传值三、子组件向父组件传值四、祖先组件向后代组件传值五、兄弟组件之间传值 Vue3之属性传值的四种情况 一、引言 在vue3中,组件与组件之间是可以传递属性的,包括三种类型: …

电商风控系统(flink+groovy+flume+kafka+redis+clickhouse+mysql)

一.项目概览 电商的防止薅羊毛的风控系统 需要使用 groovy 进行风控规则引擎的编写 然后其它技术进行各种数据的 存储及处理 薅羊毛大致流程 如果单纯使用 if else在业务代码中进行风控规则的编写 那么 维护起来会比较麻烦 并且跟业务系统强绑定不合适 所以一般独立成一个单…

【Python笔记-设计模式】中介者模式

一、说明 中介者模式是一种行为设计模式,减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。 (一) 解决问题 降低系统中对象之间的直接通信,将复杂的交互转化为通过中介者进行的间接交…

[Mac软件]Adobe Substance 3D Stager 2.1.4 3D场景搭建工具

应用介绍 Adobe Substance 3D Stager,您设备齐全的虚拟工作室。在这个直观的舞台工具中构建和组装 3D 场景。设置资产、材质、灯光和相机。导出和共享媒体,从图像到 Web 和 AR 体验。 处理您的最终图像 Substance 3D Stager 可让您在上下文中做出创造性…

绝对路径拼接漏洞 [NISACTF 2022]babyupload

打开题目 最开始以为是文件上传的漏洞 结果发现无论我们上传什么文件都会显示bad filename 去网上看了大佬的wp知道 我们直接去看源代码得到提示 /source 那我们去访问一下这个路径看看 得到一个下载文件 用记事本打开得到 源代码如下 from flask import Flask, request, r…

SSL OV证书和DV、EV证书的区别

在网站搭建的过程中和小程序开发过程中,很难免会有需要用到SSL证书的地方,但是目前数字证书种类繁多,该选择什么类型的证书成为了一个令人纠结的问题。 目前在市场上较为常见的证书分为三种:DV域名验证型证书;OV组织验…

iPhone利用文件管理器批量导出语音备忘录和照片到电脑

步骤1:使用文件服务器在 iPhone 和电脑间共享文件 参考文献:苹果官网操作指南 步骤1.1:iPhone上打开文件app,点击右上角三个点,选择“连接服务器” 步骤1.2:输入电脑的登录账号和密码 步骤1.3&#xff1a…

LVGL 环境搭建-基于WSL

背景说明 小白刚开始接触LVGL,前些日子狠心花198元入手了一块堪称LVGL 入门利器~HMI-Board 开发板,虽然有RT-Thread 集成好的LVGL 环境,只需要几个步骤就能成功把lvgl 的示例运行起来,对于爱折腾的我来说,过于简单也并…

【UE 材质】冰冻效果

效果 步骤 1. 打开“Quixel Bridge” 下载冰的纹理 2. 新建一个材质,这里命名为“M_Frozen” 打开“M_Frozen”,添加如下节点,此时我们可以通过控制参数“偏移”来改变边界的偏移 此时预览效果如下 如果增加参数“偏移”的默认值效果如下 3.…

动态规划课堂2-----路径问题

目录 引言: 例题1:不同路径 例题2:不同路径II 例题3:礼物的最⼤价值 例题4:下降路径最⼩和 例题5:最小路径和 结语: 引言: 在学习完动态规划斐波那契数列模型后,…

QT GUI编程常用控件学习

1 GUI编程应该学什么 2 QT常用模块结构 QtCore: 包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用 QtGui: 包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类 QtWidgets: 包含了一些列创建桌面应用的UI元素…

input输入框过滤非金额内容保留一个小数点和2位小数

这篇是输入框过滤非金额内容保留一个小数点和2位小数,金额的其他格式化可以看这篇文章常用的金额数字的格式化方法 js方法直接使用 该方式可以直接使用过滤内容,也可以到onInput或onblur等地方过滤,自行使用 /*** 非金额字符格式化处理* p…

安全测试工具之nmap使用指南

文章目录 一、前言二、简介三、使用示例(一)常用命令(二)主机存活检测(三)端口探测(四)服务识别(五)操作系统识别 三、其它 一、前言 当我们在构建环境或排查…

【电子通识】为什么单片机芯片上会有多组VDD电源?

在单片机芯片规格书中,我们经常能看到多个组VDD的设计,如下红框所示管脚都是VDD管脚。 为什么需要这样设计?只设置一个VDD管脚,把其他的VDD管脚让出来多做几个IO或是其他复用功能不好吗?接下来我们从单片机内部的电路结…

Linux线程(二)----- 线程控制

目录 前言 一、线程资源区 1.1 线程私有资源 1.2 线程共享资源 1.3 原生线程库 二、线程控制接口 2.1 线程创建 2.1.1 创建一批线程 2.2 线程等待 2.3 终止线程 2.4 线程实战 2.5 其他接口 2.5.1 关闭线程 2.5.2 获取线程ID 2.5.3 线程分离 三、深入理解线程 …

eureka 简介和基本使用

Eureka 是Netflix开发的服务发现框架,是Spring Cloud微服务架构中的一部分。它主要用于微服务架构中的服务注册与发现。Eureka由两部分组成:Eureka Server 和 Eureka Client。获取更详细的信息可以访问官网,如下图: Eureka Server…

Qt的QThread、QRunnable和QThreadPool的使用

1.相关描述 随机生产1000个数字,然后进行冒泡排序与快速排序。随机生成类继承QThread类、冒泡排序使用moveToThread方法添加到一个线程中、快速排序类继承QRunnable类,添加到线程池中进行排序。 2.相关界面 3.相关代码 widget.cpp #include "widget…