CTR预估之WideDeep系列(下):NFM/xDeepFM

news2024/11/29 9:51:01

在上一篇文章中CTR预估之Wide&Deep系列模型:DeepFM/DCN,学习了Wide & Deep这种通用框架:wide组件的线性模型的显性低阶特征交叉提供记忆能力,deep组件的深度网络模型的隐式高阶特征交叉提供泛化能力,还有DeepFM和Deep&Cross(DCN)模型,对wide部分进行改进。

今天,再介绍两种同属这种框架的模型,但改进的不是wide部分,其中NFM(Neural Factorization Machines)是对deep部分的改进,而xDeepFM(eXtreme Deep Factorization Machine)则是引入新的子网络

NFM

论文:Neural Factorization Machines for Sparse Predictive Analytics

地址:https://arxiv.org/pdf/1708.05027.pdf

  • FMs模型的二阶特征交叉是一种线性的方式,论文认为缺乏捕获现实数据中非线性和复杂的内在结构的能力,并且仅实现二阶的特征交叉;
  • 而当时2017年,对标的是谷歌提出的Wide&Deep和微软的DeepCrossing,加入了深度神经网络,虽然拥有了学习非线性的高阶特征交叉的能力,但是作为神经网络的输入:特征embeddings的简单拼接,在底层携带的特征交叉信息过少,并且存在梯度消失/爆炸、过拟合等问题,使训练变得困难。
  • 因此,提出了NFM(Neural Factorization Machines)模型,既拥有FM二阶特征交叉的线性建模能力(底层),又拥有神经网络的高阶特征交叉的非线性建模能力。

NFM的wide部分,其实与谷歌的Wide&Deep模型是一样的,只是简单的线性模型,如下式:

其创新点主要在deep部分f(x),其deep部分如下图所示,加入了Bi-Interaction Pooling,而不是像常规神经网络,输入仅仅是特征embeddings的拼接。NFM结构

下面,我们就着重介绍Bi-Interaction Pooling部分,其它部分与Wide&Deep系列都是一样的,不再赘述。

Bi-Interaction Pooling

Bi-Interaction Pooling其实是FM模型的二阶特征交叉部分,可以认为是将所有embeddings vectors集合 V x V_x Vxpooling为一个vector,是一个k维的向量,编码了特征emebddings二阶交互,具体公式如下:

接着,经过Bi-Interaction Pooling之后的k维向量作为神经网络的输入:

最后,加入线性部分,NFM模型的完整表达式为:

到这里,我们可以看出,NFM去掉神经网络层,那么等同于FM模型;如果将Bi-Interaction Pooling替换为拼接操作,再接MLP或者残差网络,那么NFM则可以还原Wide&Deep或者DeepCrossing。

xDeepFM

论文:xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems

地址:https://arxiv.org/pdf/1803.05170.pdf

为了学习高阶的特征交互,往往是引入DNN模块,如Wide&Deep、DeepFM等等,但是论文认为DNN对高阶特征交互的建模是一种隐式的方式,最后学到的function可能是随心所欲的(arbitrary),并且没有理论的结论说明特征交互能达到的最高阶,另外这是bit-wise级别的,以FM框架的vector-wise不同。

因此,xDeepFM(eXtreme Deep Factorization Machine)提出了一种能够在vector-wise级别上,显式地捕获特征交互,并且可以达到界定阶数的子网络:Compressed Interaction Network (CIN),并且还带有CNN和RNN的部分能力。其结构如下图:xDeepFM结构

Cross Network的缺点

Deep & Cross(DCN)提出了一种显示学习高阶特征交互的方法Cross Network,具体如下式:

但是,Cross Network存在以下两个缺点:

  1. 对于一个k层的Cross Network,每一层网络的输出 x k x_k xk其实都是 x 0 x_0 x0的标量乘积(见下证明),但这不意味着 x k x_k xk x 0 x_0 x0的线性关系, x k x_k xk的系数 α i + 1 \alpha^{i+1} αi+1 x 0 x_0 x0相关敏感的,但 x 0 x_0 x0并不是模型的参数;
  2. 特征交叉是一种bit-wise的方式,那么同一个field embedding的每个bit都会相互影响。

第1点的证明

Compressed Interaction Network

针对DCN中的Cross Network存在的缺点,论文设计了一种新的交叉网络Compressed Interaction Network (CIN),具有以下优点:

  • 特征交互是应用在vector-wise级别的,而不是bit-wise;
  • 高阶的特征交互是显式的;
  • 网络复杂度不会随着特征交互的阶数增加而增加。

The output of the k-th layer in CIN. CIN的输入是由field embedding组成的矩阵 X 0 ∈ R m × D , X 0 X_0\in \mathbb{R}^{m\times D},X_0 X0Rm×DX0的第i行则是第i个field的embedding vector: X i , ∗ 0 = e i X^0_{i,*}=e_i Xi,0=ei ,D则是field embedding的维度。

第k层CIN的输出仍然是一个矩阵 X k ∈ R H k × D , H k X_k\in \mathbb{R}^{H_k\times D},H_k XkRHk×DHk代表第k层的embedding vectors的数量, H 0 = m H_0=m H0=m。那么,对于每层网络的输出 X k X_k Xk计算公式为下式:其中, 1 ≤ h ≤ H k , W k , h ∈ R H k − 1 × m 1\le h \le H_k,W^{k,h}\in \mathbb{R}^{H_{k-1}\times m} 1hHkWk,hRHk1×m是第h个特征向量(第k层CIN网络)的参数矩阵。 ∘ \circ 为哈达玛积(Hadamard product): < a 1 , a 2 , a 3 > ∘ < b 1 , b 2 , b 3 > = < a 1 b 1 , a 2 b 2 , a 3 b 3 > <a_1,a_2,a_3> \circ <b_1,b_2,b_3>=<a_1b_1,a_2b_2,a_3b_3> <a1,a2,a3><b1,b2,b3>=<a1b1,a2b2,a3b3>

X k X_k Xk计算公式可以看出:

  1. X k X_k Xk是通过 X k − 1 和 X 0 X_{k-1}和X_0 Xk1X0哈达玛积交叉而来,这种特征交互明显是显式,并且阶数随着CIN的层数增加而增加
  2. 由于特征交叉是哈达玛积的形式,这决定它是vector-wise,因为同一个embedding vector的bit不会相互交叉,只会与其它embedding vector的bit进行交叉

Sum Pooling. 如下图[CIN图解-c],计算k层CIN隐藏层输出之后,还会在CIN隐藏层的embedding vector维度上进行sum pooling,得到 p + p^+ p+作为CIN的最终输出:

CIN图解

前面还提到CIN还具有RNN和CNN的部分特性,下面我们进行分析:

  • Recurrent Neural Network (RNN)的特点之一是下一个隐藏层的输出依赖于上一个隐藏层和一个补充的输入,这是与CIN结构很相似的;
  • CIN与Convolutional Neural Networks (CNNs)也是有着许多紧密的关联。引入一个中间张量 Z k + 1 Z^{k+1} Zk+1,作为 X k 和 X 0 X_k和X_0 XkX0的outer product。它可以看作一种特殊类型的图像- H k H_k Hk个通道的 m × D m\times D m×D像素点矩阵,正如上图[CIN图解-a]。然后 W k , h W^{k,h} Wk,h则对应是一个滤波器(filter),沿着embedding维度(D)移动(slide)滤波器,如上图[CIN图解-b],然后得到 X h , ∗ k X^k_{h,*} Xh,k,这在计算机视觉领域被称为feature map,因此 X k X_k Xk则是 H k H_k Hk个不同的feature map的集合。

Combination

虽然论文提出了DNN是否为对高阶特征交互建模的最有效模型的提问,但还是保留DNN模块,提供隐式的高阶特征交互能力,提升泛化能力。最终,xDeepFM会组合线性模型+CIN+DNN,它的输出为下式:xDeepFM结构

再回顾上图[xDeepFM结构],可以看出,xDeepFM其实是在Wide&Deep引入了新的子网络-CIN;而当CIN的深度和feature maps数量都为1时,xDeepFM就会退化为DeepFM,唯一不同的只是xDeepFM会为线性部分、交叉网络和DNN学习不同的权重,而DeepFM对于这三部分则是直接链接到输出,没有系数。

多项式分析

接下来,仍然与DCN的Cross Network一样,通过多项式的角度来对CIN的特征交叉阶数进行分析。简化一下,每一层的feature maps数量都为m,那么第一层的第h个feature map计算公式如下式:其中, x h 1 ∈ R D , [ m ] x^1_h\in \mathbb{R}^D,[m] xh1RD[m]为小于等于m的正数集合。可以看出,每个对特征对交叉(pair-wise)建模的feature map都有着 O ( m 2 ) O(m^2) O(m2)个系数。

同样的,第二层的第h个feature map如下式:

一个k阶的多项式会有 O ( m k ) O(m^k) O(mk)个系数,而CIN能够用a chain of feature maps,以 O ( k m 2 ) O(km^2) O(km2)的参数量达到k阶多项式的效果。(论文写的参数量是 O ( k m 3 ) O(km^3) O(km3),不知道是否写错,我个人理解是 O ( k m 2 ) O(km^2) O(km2),望有大佬指出)。下面,则需要进一步分析下k层的CIN是否也拥有 O ( m k ) O(m^k) O(mk)个系数。

第k层的第h个feature map计算如下式:

为了更好的对比阐述,论文还是引用Deep & Cross(DCN)中的符号, α = [ α 1 , . . . , α m ] ∈ N d \alpha=[\alpha_1,...,\alpha_m]\in \mathbb{N}^d α=[α1,...,αm]Nd代表特征交叉项的索引, ∣ α ∣ = ∑ i m α i |\alpha|=\sum_i^m\alpha_i α=imαi为交叉阶数。

使用 x i x_i xi来表示 x i 0 x_i^0 xi0,因为feature maps表达式展开之后都是来自第0层网络(field embeddings)。上标表示向量交叉操作,如 x i 3 = x i ∘ x i ∘ x i x^3_i=x_i \circ x_i \circ x_i xi3=xixixi,那么,k阶的向量多项式如下式:

每个向量多项式都有 O ( m k ) O(m^k) O(mk)个系数,CIN的系数 w α w_{\alpha} wα如下式:

其中, B = [ B 1 , B 2 , . . . , B ∣ α ∣ ] , P α = ( 1 , . . . , 1 ⏟ α 1   t i m e s . . . m , . . . , m ⏟ α m   t i m e s ) B=[B_1,B_2,...,B_{|\alpha|}],P_{\alpha}=(\underbrace{1,...,1}_{\alpha_1\ times}...\underbrace{m,...,m}_{\alpha_m\ times}) B=[B1,B2,...,Bα]Pα=(α1 times 1,...,1...αm times m,...,m),是交叉项索引的所有排列组合

实验结果

baseline对比

超参数实验

总结

在Wide&Deep的框架基础上:

  1. DeepFM和Deep&Cross(DCN)模型是在对wide部分进行改进,分别使用FM和显式高阶特征交叉的Cross Network;
  2. 这篇文章的NFM(Neural Factorization Machines)是对deep部分的改进,使用FM的field embeddings二阶特征交叉来代替简单拼接,为底层提供更多的特征交叉信息;
  3. xDeepFM(eXtreme Deep Factorization Machine)则是引入新的子网络CIN,改进了DCN交叉网络的缺点,具有高效的显式高阶特征交叉能力,并且是vector-wise级别的。

代码实现

GitHub

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯刷题篇①

前言&#xff1a;hello各位童学们好呀&#xff01;许久不见&#xff01;本文为本人的蓝桥杯OJ的刷题笔记&#xff01;文章隶属于专栏蓝桥杯&#xff0c;该专栏的目的是为了记录自己的刷题记录和学习过程&#xff0c;激励自己不断前行&#xff0c;为明年的ACM、ICPC、蓝桥杯等比…

CVPR2023最佳论文提名(12篇)

CVPR2023公布了12篇最佳论文候选文章。&#xff08;直接点击标题可以查看原文&#xff5e;&#xff09; Ego-Body Pose Estimation via Ego-Head Pose Estimation 单位&#xff1a;Stanford-----------关键词&#xff1a;姿态估计 3D Registration With Maximal Cliques 单位&…

三层交换机与路由互联配置(华为设备)

#三层交换机与路由器配置配置 #三层交换机与路由器配置配置 路由器配置 #进入系统视图 <Huawei>system-view #关闭系统提示信息 [Huawei]undo info-center enable #配置一个环回口 [Huawei]int LoopBack 0 #配置IP地址 与 掩码 [Huawei-LoopBack0]ip address 1.1.…

基于matlab使用自定义辐射方向图进行天线阵列分析(附源码)

一、前言 此示例演示如何使用自定义天线辐射方向图创建天线阵列&#xff0c;然后如何分析阵列的响应方向图。这种模式可以通过测量或模拟获得。 二、导入辐射图 根据应用的不同&#xff0c;实用的相控天线阵列有时会使用专门设计的天线元件&#xff0c;其辐射方向图无法用闭式方…

Java018——Java方法

什么是方法&#xff1f; 方法的作用&#xff1f; 方法的定义 方法的使用 一、什么是方法&#xff1f; Java方法是语句的集合 二、方法的作用&#xff1f; 它们&#xff08;语句&#xff09;在一起执行一个功能。 三、方法的定义 格式&#xff1a; 修饰符 返回值类型 方法名…

PostgreSQL(九)内置系统视图

目录 一、系统视图二、 pg_stat_activity 视图1.简介2.核心字段3.全部字段 一、系统视图 PGSQL 中提供了一系列内置的视图&#xff0c;包括系统视图和其他视图。 系统视图提供了查询系统表的一些便利的访问方法。其他视图提供了访问内部服务器状态的方法。 官方文档&#xf…

Spring Boot是什么?详解它的优缺点以及四大核心

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、Spring Boot 是什么&#xff1f; 二、Spring Boot 的优缺点 1、优点 ①可快速构建独立的 Spring 应用 ②直接嵌入Tomcat、Jett…

【Python GUI编程系列 01】安装python pycharm 和 pyside6

Python GUI编程系列 01 安装python pycharm 和 pyside61、安装python2、安装pycharm3、安装 pyside6 安装python pycharm 和 pyside6 本系列使用python3 pycharmpyside6 来进行python gui设计&#xff0c;首先我们来配置编程环境 PS&#xff1a;为了减少复杂程度&#xff0c;本…

学习HCIP的day.15

目录 三层架构 一、网络拓扑冗余 1、线路冗余 2、设备冗余 3、网关冗余 4、电源冗余 二、三和一&#xff08;网关、根网桥、SVI&#xff09; 三、管理vlan 四、三层交换机 五、网关冗余 六、名词注解&#xff1a; 七、数据交换方法&#xff1a; 1、原始交…

STM32开发——ADC(烟雾传感器)

目录 1.ADC简介 2.项目简介 3.CubeMX设置 4.函数代码 1.ADC简介 作用&#xff1a;用于读取电压值&#xff0c;然后转换为数字量传给单片机&#xff0c;单片机再通过计算&#xff0c;可以得到电压值。 ADC的性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;A…

简聊关于Flutter的争议~

关于Flutter的争议 Flutter是谷歌的推出的跨平台UI框架&#xff0c;可以快速在iOS和Android上构建高质量的原生用户界面&#xff0c;可以与现有的代码一起工作。在全世界&#xff0c;Flutter正在被越来越多的开发者和组织使用&#xff0c;并且Flutter是完全免费、开源的。这是…

机器学习课程报告——基于机器学习的自动人脸识别研究

摘 要 生物特征识别技术使用了人体本身所固有的生物特征&#xff0c;与传统的身份识别方法完全不同&#xff0c;具有更高的安全性、可靠性、和有效性&#xff0c;越来越受到人们的重视。人脸识别技术作为生物特征识别技术的重要组成部分&#xff0c;在近三十年里得到了广泛的关…

论文阅读:Dense Depth Priors for Neural Radiance Fields from Sparse Input Views

CVPR2022 Preliminary 首先我们由一组室内的RGB图像 { I i } i 0 N − 1 , I i ∈ [ 0 , 1 ] H W 3 \{I_i\}^{N-1}_{i0}, I_i \in [0,1]^{H \times W \times 3} {Ii​}i0N−1​,Ii​∈[0,1]HW3。通过SFM的方法&#xff0c;我们可以获得相机位姿 p i ∈ R 6 p_i \in \mathb…

QR点歌系统

一、点歌初始化 点歌初始化 A:$获取群列表$ a:0 b:$JSON 长度 A$ :标签 如果:%a%<%b% c:$JSON 获取 A %a%$ $写 点歌系统/音源 %c% Q音$ $写 点歌系统/格式 %c% json$ ‖ %a% ‖ %c% ‖ 初始化成功\n a:[%a%1] $jump :标签$ 如果尾这段代码是点歌系统的初始化过程。它通过…

7.pixi.js编写的塔防游戏(类似保卫萝卜)-plist的使用

游戏说明 一个用pixi.js编写的h5塔防游戏&#xff0c;可以用electron打包为exe&#xff0c;支持移动端&#xff0c;也可以用webview控件打包为app在移动端使用 环境说明 cnpm6.2.0 npm6.14.13 node12.22.7 npminstall3.28.0 yarn1.22.10 npm config list electron_mirr…

NUCLEO-F411RE RT-Thread 体验 (2) - GCC环境 Pin 驱动的移植

NUCLEO-F411RE RT-Thread 体验 (2) - GCC环境 Pin 驱动的移植 1、准备工作 前面控制LED的函数&#xff0c;其实还是调用的hal的函数&#xff0c;RT-Thread分离了驱动层与应用层&#xff0c;驱动层往下对接hal库&#xff0c;往上对接pin组件。 驱动层代码路径如图&#xff1a;…

零基础速成simulink代码生成——stateflow基础3

零基础速成simulink代码生成——stateflow基础3 Stateflow 可以用于嵌入式系统的建模、仿真和代码生成。在嵌入式系统中,Stateflow 可以用于实现控制逻辑、状态机、事件驱动系统等功能。Stateflow 提供了一种图形化的建模语言,可以用于描述状态、转换、事件、动作等元素,并…

新用户注册

业务实现 &#xff08;一&#xff09; 字段校验 检验用户名、密码、手机号、验证码如果校验不通过则刷新页面&#xff0c;并显示字段校验失败信息 &#xff08;二&#xff09; 校验验证码 点击发送验证码&#xff0c;验证会保存一份到redis&#xff0c;并且会发送至手机输入…

【大数据hive】hive 拉链表设计与实现

目录 一、前言 二、拉链表业务背景 2.1 数据同步引发的问题 2.1.1 解决方案1 2.1.2 解决方案2 2.1.3 解决方案3 三、拉链表设计与原理 3.1 功能与应用场景 3.2 实现步骤 3.2.1 Step1 3.2.2 Step2 3.2.3 Step3 3.3 操作演示 3.3.1 创建一张表并加载数据 3.3.2 模…

高级数据分析师工作的基本职责(合集)

高级数据分析师工作的基本职责1 职责&#xff1a; 1. 负责出行平台层面司乘用户分析&#xff0c;给平台相关业务及策略建设输入洞察和方法; 2. 形成天、周和月度的分析报告&#xff0c;传递给公司管理层并进行定期汇报; 3. 可独立完成针对特定问题的分析解读&#xff0c;支持临…