一、Wide & Deep模型

Wide & Deep Learning 模型的核心思想是结合广义线性模型的记忆能力(memorization)和深度前馈神经网络模型的泛化能力(generalization)。利用广义线性模型从历史数据中学习特征相关性,利用深度前馈神经网络揭示隐式特征之间的相互作用。在训练过程中同时优化 2 个模型的参数,从而达到整体模型的预测能力最优。

Wide & Deep模型结构如下图,左边是wide部分,右边是deep部分。

1、Wide部分

Wide模型的实质是一个广义线性模型:
y=w0+WTxy = w_{0}+\textbf{W}^T\textbf{x}y=w0+WTx
其中,特征x=[x1,x2,⋯,xd]\textbf{x}=[x_1,x_2,⋯,x_d]x=[x1,x2,,xd]是一个d维的向量,W\textbf{W}W为模型的参数。最终再使用一个Sigmoid变换,使得输出的y值在0-1之间。——换言之,Wide部分实际上就是一个LR模型。

2、Deep部分

这一部分就是一个前馈神经网络——原始特征会先进行One-hot编码,得到高维稀疏特征,再将高维稀疏特征做Dense Embedding,转换为低维稠密向量,然后将这些低维密集嵌入矢量馈送到前向通道中的神经网络的隐藏层中。每个隐藏层执行以下计算:
a(l+1)=f(W(l)a(l)+b(l))a^{(l+1)} = f(W^{(l)}a^{(l)} + b^{(l)})a(l+1)=f(W(l)a(l)+b(l))

  • a(l)a^{(l)}a(l): 第lll层的计算值(输出值)
  • fff: 是激活函数,通常是ReLUs
  • b(l)b^{(l)}b(l)W(l)W^{(l)}W(l): 分别是第lll层的偏差项和权重参数

关于深度前馈网络的基本原理可以参考这里
在此解释一下Dense Embedding
是针对稀疏特征的一种降维方式,它降维的方式可以类比为一个全连接层(没有激活函数),通过 embedding 层的权重矩阵计算来降低维度。假设:

  • feature_num : 原始特征数
  • embedding_size: embedding之后的特征数
  • [feature_num, embedding_size] 权重矩阵shape
  • [m, feature_num] 输入矩阵shape,m为样本数
  • [m, embedding_size] 输出矩阵shape,m为样本数

那么降维过程可以用下图来描述:

3、联合训练

通过将Wide模块和Deep模块的对数加权输出作为预测值,然后送入逻辑损失函数中,用于联合训练。模型的联合训练通过反向传播将输出值的误差梯度通过最小批随机梯度同时传送给Wide和Deep模块。

二、FM

DeepFM相当于将Wide & Deep模型中的Wide部分的LR换成了FM,因此下面先介绍FM。
FM解决的问题:大规模稀疏数据下的特征组合问题。
在LR的基础上引入交叉项,于是FM的雏形(二阶多项式模型)可以表示为:
y=w0+Σi=0nwixi+Σi=1n−1Σj=i+1nwijxixjy=w_0 + \Sigma_{i=0}^{n}\textbf{w}_i\textbf{x}_i+\Sigma_{i=1}^{n-1}\Sigma_{j=i+1}^n\textbf{w}_{ij}\textbf{x}_i\textbf{x}_jy=w0+Σi=0nwixi+Σi=1n1Σj=i+1nwijxixj
其中,n 代表样本的特征数量。
从这个式子中可以看出,组合特征的参数一共有1+2+….+(n-1) =n(n−1)/2 个,其中的n是特征维度(这里的特征是指离散化后的特征,如city=‘北京’),任意两个参数都是独立的。然而,在数据稀疏性普遍存在的实际应用场景中,交叉项参数的训练是很困难的。其原因是,每个参数 Wij 的训练需要大量 Xi 和Xj特征同时非零的样本;由于样本数据本来就比较稀疏,满足“Xi 和 Xj 都非零”的样本将会非常少。训练样本的不足,很容易导致参数 Wij 不准确,最终将严重影响模型的性能。

Wij求解的思路是通过矩阵分解的方法。所有的二次项参数Wij可以组成一个对称阵W(为了方便说明FM的由来,对角元素可以设置为正实数),那么这个矩阵就可以分解为 W=VTV,V 的第 i 列便是第 i 维特征的隐向量。换句话说,特征分量Xi与Xj的交叉项系数就等于Xi对应的隐向量与Xj对应的隐向量的内积,即每个参数 wij=⟨vi,vj⟩,这就是FM模型的核心思想。V i表示 X i 的隐向量, V j 表示 X j 的隐向量 ,为了求出 Wij, 我们需要求出特征分量 X_i 的辅助向量 Vi=(Vi1……Vik), X_j 的辅助向量 Vj=(Vj1……Vjk),k表示隐向量长度( 实际应用中k<< n),转换过程如下图所示.1

对于交叉项的求解可以利用这一原理:
AB=12[(A+B)2−(A2+B2)]AB = \frac{1}{2}[(A+B)^2-(A^2+B^2)]AB=21[(A+B)2(A2+B2)]



对于度 k=2 的因子分解机 FM 模型来说,其主要的参数就一次项和常数项的参数 w0,w1…,wn 以及交叉系数矩阵 V ,在利用随机梯度对模型的参数进行学习的过程中,主要是对损失函数 loss 的求导。


FM完整的python实现脚本在这里

此外,主要考虑到,FM模型是SVM模型与factorization模型的结合,其优点为:

  • FM模型可以在非常稀疏的数据中进行合理的参数轨迹,而SVM做不到这点。
  • FM模型的复杂度是线性的,优化效果很好,而且不需要像SVM一样依赖于支持向量。
  • FM是一个通用模型,它可以用于任何特征值为实值的情况。而其他因式分解模型只能用于一些输入数据比较固定的情况。

SVM和FM的主要区别在于:

  • SVM的二元特征交叉参数是独立的,而FM的二元特征交叉参数是两个k维的向量vi、vj,交叉参数就不是独立的,而是相互影响的。
  • FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行
  • FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量 2

三、DeepFM

1、FM的结构

2、DNN结构

3、DeepFM结构


DeepFM目的是同时学习低阶和高阶的特征交叉,主要由FM和DNN两部分组成,底部共享同样的输入。模型可以表示为:
ypred=sigmoid(yFM+yDNN)y_{pred} = sigmoid(y_{FM}+y_{DNN})ypred=sigmoid(yFM+yDNN)

四、优缺点对比

在CTR预估以及推荐系统等场合下:

  • LR: LR最大的缺点就是无法组合特征,依赖于人工的特征组合,这也直接使得它表达能力受限,基本上只能处理线性可分或近似线性可分的问题。
  • FM: FM通过隐向量latent vector做内积来表示组合特征,从理论上解决了低阶和高阶组合特征提取的问题。但是实际应用中受限于计算复杂度,一般也就只考虑到2阶交叉特征。后面又进行了改进,提出了FFM,增加了Field的概念。
  • CNN: CNN模型的缺点是:偏向于学习相邻特征的组合特征。
  • RNN: RNN模型的缺点是:比较适用于有序列(时序)关系的数据。
  • FNN: 先使用预先训练好的FM,得到隐向量,然后作为DNN的输入来训练模型。缺点在于:受限于FM预训练的效果,Embedding的参数受FM的影响,不一定准确;预训练阶段增加了计算复杂度,训练效率低; FNN只能学习到高阶的组合特征。模型中没有对低阶特征建模。
  • PNN: PNN为了捕获高阶组合特征,在embedding layer和first hidden layer之间增加了一个product layer。但是内积的计算复杂度依旧非常高,原因是:product layer的输出是要和第一个隐藏层进行全连接的;product layer的输出需要与第一个隐藏层全连接,导致计算复杂度居高不下;和FNN一样,只能学习到高阶的特征组合。没有对于1阶和2阶特征进行建模。
  • Wide&Deep:同时学习低阶和高阶组合特征,它混合了一个线性模型(Wide part)和Deep模型(Deep part)。这两部分模型需要不同的输入,而Wide part部分的输入,依旧依赖人工特征工程。

但是,这些模型普遍都存在一个问题:偏向于提取低阶或者高阶的组合特征。不能同时提取这两种类型的特征。 需要专业的领域知识来做特征工程。无论是FNN还是PNN,他们都有一个绕不过去的缺点:对于低阶的组合特征,学习到的比较少。

  • DeepFM:在Wide&Deep的基础上进行改进,不需要预训练FM得到隐向量,不需要人工特征工程,能同时学习低阶和高阶的组合特征;FM模块和Deep模块共享Feature Embedding部分,可以更快的训练,以及更精确的训练学习。

  1. 参考自:https://blog.csdn.net/tiangcs/article/details/76601643 ↩︎

  2. 参考自:https://blog.csdn.net/vivian_ll/article/details/90371159 ↩︎

Wide Deep、DeepFM系列算法原理与优缺点对比相关推荐

  1. SSD系列算法原理讲解----(1)SSD系列算法介绍(主干网络、多尺度Feature Map预测)(笔记)

    SSD系列算法原理介绍 SSD算法介绍: Single Shot MultiBox Detector(One-stage方法) - Wei Liu在ECCV 2016提出 - 直接回归目标类别和位置 ...

  2. 目标检测—SSD系列算法原理介绍

    一.SSD系列算法原理介绍 1.1 SSD算法介绍: ➢Single Shot MultiBox Detector (one-stage方法)                  ●Wei Liu在EC ...

  3. [转帖]LCD与LED的区别之背光原理与优缺点对比介绍

    LCD与LED的区别之背光原理与优缺点对比介绍 http://m.elecfans.com/article/620376.html 时下液晶面板与液晶电视技术已经达到炉火纯青的境界,并已经成为大屏幕平 ...

  4. 机器学习常用算法原理及优缺点

    KNN 核心思想是: 物以类聚,人以群分 根据两点距离公式,计算距离,选择距离最小的前k个点,并返回分类结果. 假设一个未知样本数据x需要归类,总共有ABC三个类别,那么离x距离最近的有k个邻居,这k ...

  5. 人脸识别系列算法原理

    目录 1.Eigenfaces(特征脸)算法 基本思想 Eigenfaces算法过程 2.FisherFace算法 基本思想 Fisherface算法流程 3.LBPH(Local Binary Pa ...

  6. YOLO系列算法原理介绍

    1. Yolo介绍: 1.1 YOLO: You Only Look Once,是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统. Joseph Redmon和 ...

  7. deep deepfm wide 区别_FM算法和DeepFM算法

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

  8. FM系列算法解读(FM+FFM+DeepFM)

    综述 在计算广告中,CTR是非常重要的一环.对于特征组合来说,业界通用的做法主要有两大类:FM系列和Tree系列.这里我们来介绍一下FM系列. 在传统的线性模型中,每个特征都是独立的,如果需要考虑特征 ...

  9. deep deepfm wide 区别_个性化推荐如何满足用户口味?微信看一看的技术这样做

    原标题:个性化推荐如何满足用户口味?微信看一看的技术这样做 编辑导读:很多人每天都会习惯性地点开微信公众号阅读,除了朋友圈和转发等渠道以外,我们还可以通过看一看发现更多有趣的文章.那么,看一看是怎么实 ...

最新文章

  1. 根据XML配置规则导入Excel数据(⑥)ExcelAble 标记接口
  2. Machine Learning week 3 quiz: programming assignment-Logistic Regression
  3. MapReduce详解和WordCount模拟
  4. 4万次下载,我的这本电子书连续数月蝉联阿里云下载榜冠军!!!
  5. 58 - II. 左旋转字符串
  6. Docker 安装Centos,Tomcat,Jdk等相关的自定义(Dockerfile)镜像
  7. python api调用 验证码_Python调用创蓝253短信验证码API文档
  8. NSUserDefaults 、对象归档
  9. 了解C ++中的Vector insert()
  10. Mysql DBA 高级运维学习之路-DML语句之insert知识讲解
  11. 图像语义分割(9)-DeepLabV3: 再次思考用于图像语义分割的空洞卷积
  12. Python微信、QQ自动发消息
  13. ArcGis 拓扑检查——缺顶点、悬挂检查代码 C#
  14. Meta-Tracker: Fast and Robust Online Adaptation for Visual Object Trackers 论文
  15. 【操作系统】王道考研 p22-26 生产者消费者问题、多生产者多消费者问题、吸烟者问题、读者写者问题、哲学家进餐问题
  16. SuperSlide插件轮播图展示
  17. 【京东商城首页实战4】topbanner制作
  18. 形式逻辑(04)选言判断 和 推理
  19. OI模板 卢卡斯定理
  20. Commands that may modify the data set are disabled, because this instance is configured to report er

热门文章

  1. 用python识别条形码,二维码并且定位标注
  2. Google、苹果与三星各自的创新路径
  3. appium android函数,appium连接Android真机,并调试
  4. 安卓开发之使用Mob的短信接收验证码达到忘记密码找回密码功能*(自绘界面)
  5. Centos7搭建DNS(bind)服务器,配置域名泛解析记录
  6. java泛型带来的变量声明冗长问题
  7. Cisco 交换机修改密码
  8. 高速缓冲存储器Cache的映射方式
  9. Mac M1Pro芯片,新手从安装jdk到第一个Java程序详细指南(2022年10月)
  10. 手机号码在线实名校验(免开发PC版)使用说明书