当前位置: 首页 > 编程日记 > 正文

谷歌、阿里们的杀手锏:三大领域,十大深度学习CTR模型演化图谱

640?wx_fmt=jpeg


作者 | 王喆

来源 | 转载自知乎专栏王喆的机器学习笔记


今天我们一起回顾一下近3年来的所有主流深度学习CTR模型,也是我工作之余的知识总结,希望能帮大家梳理推荐系统、计算广告领域在深度学习方面的前沿进展。


随着微软的Deep Crossing,Google的Wide&Deep,以及FNN,PNN等一大批优秀的深度学习CTR预估模型在2016年被提出,计算广告和推荐系统领域全面进入了深度学习时代,时至今日,深度学习CTR模型已经成为广告和推荐领域毫无疑问的主流。在进入深度学习时代之后,CTR模型不仅在表达能力、模型效果上有了质的提升,而且大量借鉴并融合了深度学习在图像、语音以及自然语言处理方向的成果,在模型结构上进行了快速的演化。


本文总结了广告、推荐领域最为流行的10个深度学习CTR模型的结构特点,构建了它们之间的演化图谱。选择模型的标准尽量遵循下面三个原则:

  1. 模型的在业界影响力较大的;

  2. 已经被Google,微软,阿里等知名互联网公司成功应用的;

  3. 工程导向的,而不是仅用实验数据验证或学术创新用的。


下面首先列出这张深度学习CTR模型的演化图谱,再对其进行逐一介绍:


640?wx_fmt=jpeg

图1 深度学习CTR模型演化图谱


一、微软Deep Crossing(2016年)——深度学习CTR模型的base model


640?wx_fmt=jpeg

图2 微软Deep Crossing模型架构图


微软于2016年提出的Deep Crossing可以说是深度学习CTR模型的最典型和基础性的模型。如图2的模型结构图所示,它涵盖了深度CTR模型最典型的要素,即通过加入embedding层将稀疏特征转化为低维稠密特征,用stacking layer,或者叫做concat layer将分段的特征向量连接起来,再通过多层神经网络完成特征的组合、转换,最终用scoring layer完成CTR的计算。跟经典DNN有所不同的是,Deep crossing采用的multilayer perceptron是由残差网络组成的,这无疑得益于MSRA著名研究员何恺明提出的著名的152层ResNet。


论文:[Deep Crossing] Deep Crossing - Web-Scale Modeling without Manually Crafted Combinatorial Features (Microsoft 2016)


二、FNN(2016年)——用FM的隐向量完成Embedding初始化


640?wx_fmt=jpeg

图3 FNN模型架构图


FNN相比Deep Crossing的创新在于使用FM的隐层向量作为user和item的Embedding,从而避免了完全从随机状态训练Embedding。由于id类特征大量采用one-hot的编码方式,导致其维度极大,向量极稀疏,所以Embedding层与输入层的连接极多,梯度下降的效率很低,这大大增加了模型的训练时间和Embedding的不稳定性,使用pre train的方法完成Embedding层的训练,无疑是降低深度学习模型复杂度和训练不稳定性的有效工程经验。


论文:[FNN] Deep Learning over Multi-field Categorical Data (UCL 2016)


三、PNN (2016年)——丰富特征交叉的方式


640?wx_fmt=jpeg

图4 PNN模型架构图


PNN的全称是Product-based Neural Network,PNN的关键在于在embedding层和全连接层之间加入了Product layer。传统的DNN是直接通过多层全连接层完成特征的交叉和组合的,但这样的方式缺乏一定的“针对性”。首先全连接层并没有针对不同特征域之间进行交叉;其次,全连接层的操作也并不是直接针对特征交叉设计的。但在实际问题中,特征交叉的重要性不言而喻,比如年龄与性别的交叉是非常重要的分组特征,包含了大量高价值的信息,我们急需深度学习网络能够有针对性的结构能够表征这些信息。因此PNN通过加入Product layer完成了针对性的特征交叉,其product操作在不同特征域之间进行特征组合。并定义了inner product,outer product等多种product的操作捕捉不同的交叉信息,增强模型表征不同数据模式的能力 。


论文:[PNN] Product-based Neural Networks for User Response Prediction (SJTU 2016)


四、Google Wide&Deep(2016年)——记忆能力和泛化能力的综合权衡


640?wx_fmt=jpeg

图5 Google Wide&Deep模型架构图


Google Wide&Deep模型的主要思路正如其名,把单输入层的Wide部分和经过多层感知机的Deep部分连接起来,一起输入最终的输出层。其中Wide部分的主要作用是让模型具有记忆性(Memorization),单层的Wide部分善于处理大量稀疏的id类特征,便于让模型直接“记住”用户的大量历史信息;Deep部分的主要作用是让模型具有“泛化性”(Generalization),利用DNN表达能力强的特点,挖掘藏在特征后面的数据模式。最终利用LR输出层将Wide部分和Deep部分组合起来,形成统一的模型。Wide&Deep对之后模型的影响在于——大量深度学习模型采用了两部分甚至多部分组合的形式,利用不同网络结构挖掘不同的信息后进行组合,充分利用和结合了不同网络结构的特点。


论文:[Wide&Deep] Wide & Deep Learning for Recommender Systems (Google 2016)


五、华为 DeepFM (2017年)——用FM代替Wide部分


640?wx_fmt=jpeg

图6 华为DeepFM模型架构图


在Wide&Deep之后,诸多模型延续了双网络组合的结构,DeepFM就是其中之一。DeepFM对Wide&Deep的改进之处在于,它用FM替换掉了原来的Wide部分,加强了浅层网络部分特征组合的能力。事实上,由于FM本身就是由一阶部分和二阶部分组成的,DeepFM相当于同时组合了原Wide部分+二阶特征交叉部分+Deep部分三种结构,无疑进一步增强了模型的表达能力。


论文:[DeepFM] A Factorization-Machine based Neural Network for CTR Prediction (HIT-Huawei 2017)


六、Google Deep&Cross(2017年)——使用Cross网络代替Wide部分


640?wx_fmt=jpeg

图7 Google Deep Cross Network模型架构图


Google 2017年发表的Deep&Cross Network(DCN)同样是对Wide&Deep的进一步改进,主要的思路使用Cross网络替代了原来的Wide部分。其中设计Cross网络的基本动机是为了增加特征之间的交互力度,使用多层cross layer对输入向量进行特征交叉。单层cross layer的基本操作是将cross layer的输入向量xl与原始的输入向量x0进行交叉,并加入bias向量和原始xl输入向量。DCN本质上还是对Wide&Deep Wide部分表达能力不足的问题进行改进,与DeepFM的思路非常类似。


论文:[DCN] Deep & Cross Network for Ad Click Predictions (Stanford 2017)


七、NFM(2017年)——对Deep部分的改进

640?wx_fmt=jpeg

图8 NFM的深度网络部分模型架构图


相对于DeepFM和DCN对于Wide&Deep Wide部分的改进,NFM可以看作是对Deep部分的改进。NFM的全称是Neural Factorization Machines,如果我们从深度学习网络架构的角度看待FM,FM也可以看作是由单层LR与二阶特征交叉组成的Wide&Deep的架构,与经典W&D的不同之处仅在于Deep部分变成了二阶隐向量相乘的形式。再进一步,NFM从修改FM二阶部分的角度出发,用一个带Bi-interaction Pooling层的DNN替换了FM的特征交叉部分,形成了独特的Wide&Deep架构。其中Bi-interaction Pooling可以看作是不同特征embedding的element-wise product的形式。这也是NFM相比Google Wide&Deep的创新之处。


论文:[NFM] Neural Factorization Machines for Sparse Predictive Analytics (NUS 2017)


八、AFM(2017年)——引入Attention机制的FM



640?wx_fmt=jpeg


图9 AFM模型架构图


AFM的全称是Attentional Factorization Machines,通过前面的介绍我们很清楚的知道,FM其实就是经典的Wide&Deep结构,其中Wide部分是FM的一阶部分,Deep部分是FM的二阶部分,而AFM顾名思义,就是引入Attention机制的FM,具体到模型结构上,AFM其实是对FM的二阶部分的每个交叉特征赋予了权重,这个权重控制了交叉特征对最后结果的影响,也就非常类似于NLP领域的注意力机制(Attention Mechanism)。为了训练Attention权重,AFM加入了Attention Net,利用Attention Net训练好Attention权重后,再反向作用于FM二阶交叉特征之上,使FM获得根据样本特点调整特征权重的能力。


论文:[AFM] Attentional Factorization Machines - Learning the Weight of Feature Interactions via Attention Networks (ZJU 2017)


九、阿里DIN(2018年)——阿里加入Attention机制的深度学习网络


640?wx_fmt=jpeg

图10 阿里DIN模型与Base模型的架构图


AFM在FM中加入了Attention机制,2018年,阿里巴巴正式提出了融合了Attention机制的深度学习模型——Deep Interest Network。与AFM将Attention与FM结合不同的是,DIN将Attention机制作用于深度神经网络,在模型的embedding layer和concatenate layer之间加入了attention unit,使模型能够根据候选商品的不同,调整不同特征的权重。


论文:[DIN] Deep Interest Network for Click-Through Rate Prediction (Alibaba 2018)


十、阿里DIEN(2018年)——DIN的“进化”


640?wx_fmt=jpeg

阿里DIEN模型架构图


DIEN的全称为Deep Interest Evolution Network,它不仅是对DIN的进一步“进化”,更重要的是DIEN通过引入序列模型 AUGRU模拟了用户兴趣进化的过程。具体来讲模型的主要特点是在Embedding layer和Concatenate layer之间加入了生成兴趣的Interest Extractor Layer和模拟兴趣演化的Interest Evolving layer。其中Interest Extractor Layer使用了DIN的结构抽取了每一个时间片内用户的兴趣,Interest Evolving layer则利用序列模型AUGRU的结构将不同时间的用户兴趣串联起来,形成兴趣进化的链条。最终再把当前时刻的“兴趣向量”输入上层的多层全连接网络,与其他特征一起进行最终的CTR预估。


论文:[DIEN] Deep Interest Evolution Network for Click-Through Rate Prediction (Alibaba 2019)


总结—— CTR模型的深度学习时代


640?wx_fmt=jpeg


文章的最后,我再次强调这张深度学习CTR模型演化图,可以毫不夸张的说,这张演化图包括了近年来所有主流的深度学习CTR模型的结构特点以及它们之间的演化关系。希望能够帮助推荐、广告、搜索领域的算法工程师们建立起完整的知识体系,能够驾轻就熟的针对业务特点应用并比较不同模型的效果,从而用最适合当前数据模式的模型驱动公司业务。


结合自己的工作经验,关于深度学习模型我想再分享两点内容:

  1. 没有银弹。从来没有一个深度学习模型能够在所有数据集上都表现最优,特别是推荐、广告领域,各家的数据集,数据pattern、业务领域差异巨大,不存在能够解决一切问题的“银弹”模型。比如,阿里的DIEN对于数据质量、用户整个life cycle行为完整性的要求很高,如果在某些DSP场景下运用这个模型,预计不会收到良好的效果。再比如Google 的Deep&Cross,我们也要考虑自己的数据集需不需要如此复杂的特征交叉方式,在一些百万量级的数据集上,也许浅层神经网络的表现更好。

  2. 算法工程师永远要在理想和现实间做trade off。有一种思想要避免,就是我为了要上某个模型就要强转团队的技术栈,强买某些硬件设备。模型的更新过程一定是迭代的,一定是从简单到复杂的,一定是你证明了某个模型是work的,然后在此基础上做改进的。这也是我们要熟悉所有模型演化关系的原因。


就在我们熟悉这些已有模型的时候,深度学习CTR模型的发展从没有停下它的脚步。从阿里的多模态、多目标的深度学习模型,到YouTube基于RNN等序列模型的推荐系统,再到Airbnb使用Embedding技术构建的搜索推荐模型,深度学习的应用不仅越来越广泛,而且得到了越来越快的进化。在今后的专栏文章中,我们不仅会更深入的介绍深度学习CTR模型的知识,而且会更加关注深度学习CTR模型的应用与落地,期待与大家一同学习。


原文链接:https://mp.weixin.qq.com/s/i3_0eUUcbM4q9M09RTNspA


(*本文为 AI科技大本营转载文章,转载请联系原作者)


精彩推荐



640?wx_fmt=jpeg


大会开幕倒计时8天!


2019以太坊技术及应用大会特邀以太坊创始人V神与众多海内外知名技术专家齐聚北京,聚焦区块链技术,把握时代机遇,深耕行业应用,共话以太坊2.0新生态。即刻扫码,享优惠票价。


640?wx_fmt=png


推荐阅读

  • 真正的博士是如何参加AAAI, ICML, ICLR等AI顶会的?

  • Python最抢手、Java最流行、Go最有前途,7000位程序员揭秘2019软件开发现状

  • 程序员学Python编程或许不知的十大提升工具

  • 不要让 Chrome 成为下一个 IE!

  • 这位博士跑赢“地震波”:提前 10 秒预警宜宾地震!

  • 一张图告诉你到底学Python还是Java!

  • 鸿蒙将至,安卓安否?

  • 25岁创立加密城堡, 曾经独角兽创始人社会名流天才黑客是这里的沙发客, 如今却无人问津……

  • 352万帧标注图片,1400个视频,亮风台推最大单目标跟踪数据集


640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

相关文章:

MariaDB 基金会 CEO 宣布将于 10 月 1 日卸任

开发四年只会写业务代码,分布式高并发都不会还做程序员? 近日,MariaDB 基金会 CEO Otto Keklinen 在官网宣布自己将在今年 10 月 1 日正式卸任 CEO,转而退居后线,以 CEO 特别顾问的身份辅助新 CEO 顺利渡过过渡期。从…

思科生成树命令之debug spanning-tree(本文转载自:www.91ccie.coml

debug spanning-tree 命令:debug spanning-treeno debug spanning-tree功能:打开MSTP 的调试信息;本命令的no 操作为关闭MSTP 调试信息。参数:无命令模式:特权模式使用指南:该命令是MSTP 庞大复杂debug 功能…

CImg库中CImg,CImgList,CImgDisplay三个类的介绍

转自:http://www.cppprog.com/2009/0426/108.html 本文简单介绍了CImg库中的三个大类:CImg,CImgList,CImgDisplay。然后给出了让CImg在HDC上绘图以及与HBITMAP互换的方法,为部署CImg到Windows GUI程序中提供了基本支持。 上回介绍了CImg模板…

这可能是Python面向对象编程的最佳实践

作者 | 崔庆才来源 | 进击的Coder(ID:FightingCoder)Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了或者某一对象非常复杂了,其中的一些…

mysql之 CentOS系统针对mysql参数优化

内核相关参数(/etc/sysctl.conf) 以下参数可以直接放到sysctl.conf文件的末尾: net.core.somaxconn 65535 net.core.netdev_max_backlog 65535 net.ipv4.tcp_max_syn_backlog 65535 加快TCP连接的回收: net.i…

天猫双十一神话恐终结

2011年双十一大促,天猫商城创造了单日33.6亿的促销奇迹,是2010年同日交易额的近4倍。今年双十一即将来临,淘宝还能再创奇迹吗?何玺认为,淘宝双十一的神话恐终结,理由如下。 一、电商促销年消费被透支 年初 …

opencv图像旋转

转自&#xff1a;http://download.csdn.net/source/2642701 /* 程序名&#xff1a;rotate.c 功能&#xff1a;读入图像文件&#xff0c;做图像旋转转&#xff0c;然后显示图像在屏幕上 */ #include <stdlib.h> #include <stdio.h> #include <math.h> #inclu…

机器如何读懂人心:Keras实现Self-Attention文本分类

作者 | 小宋是呢转载自CSDN博客一、Self-Attention概念详解了解了模型大致原理&#xff0c;我们可以详细的看一下究竟Self-Attention结构是怎样的。其基本结构如下对于self-attention来讲&#xff0c;Q(Query), K(Key), V(Value)三个矩阵均来自同一输入&#xff0c;首先我们要计…

通俗易懂!使用Excel和TF实现Transformer

作者 | 石晓文转载自小小挖掘机&#xff08;ID:wAIsjwj&#xff09;本文旨在通过最通俗易懂的过程来详解Transformer的每个步骤&#xff01;假设我们在做一个从中文翻译到英文的过程&#xff0c;我们的词表很简单如下&#xff1a;中文词表&#xff1a;[机、器、学、习] 英文词表…

通过注册表修改VC6.0的字体【转】

2019独角兽企业重金招聘Python工程师标准>>> 在VC6.0下更改字体&#xff0c;我们一般通过菜单-Tools-Options-Format来更改 但在我的win7 64位系统下这一选项下的字体和字体颜色是空的&#xff0c;无法选择 所以我想起来通过注册表来更改。 WinR输入“Regedit”&…

Java中创建String的两种方式差异

我们知道创建一个String类型的变量一般有以下两种方法&#xff1a; String str1 "abcd"; String str2 new String("abcd"); 那么为什么会存在这两种创建方式呢&#xff0c;它们在内存中的表现形式各有什么区别&#xff1f; 方法1&#xff1a; String a …

OpenCV支持的图像格式

OpenCV目前支持的图像格式包括&#xff1a; Windows位图文件 - BMP, DIB&#xff1b; JPEG文件 - JPEG, JPG, JPE&#xff1b; 便携式网络图片 - PNG&#xff1b; 便携式图像格式 - PBM&#xff0c;PGM&#xff0c;PPM&#xff1b; Sun rasters - SR&#xff0c;RAS&#xff…

Debian Linux下的Python学习——控制流

python中有三种控制流语句:if、for和while。 1. if语句用法( if..elif..else) 代码: 运行: 注意:raw_input函数要求输入一个字符串,int把这个字符串转换为整数 2.for语句用法 (for ... else) 代码: 运行: 注:else部分是可选的。如果包含else&#xff0c;它总是在for循环结束后…

如何运行ImageMagick的命令行工具

在http://www.imagemagick.org/script/index.php网站下载相应的执行文件&#xff0c;这里以下载ImageMagick-6.6.5-10-Q16-windows-static.exe为例说明。 将ImageMagick-6.6.5-10-Q16-windows-static.exe下载后&#xff0c;安装&#xff0c;然后将其中需要的命令行工具考到你需…

华为最强自研NPU问世,麒麟810“抛弃”寒武纪

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“能效高、算子多、精度高”&#xff0c;华为消费者业务手机产品线总裁何刚用一句话总结了自研达芬奇架构给最新麒麟810芯片带来的变化。6 月 21 日&#xff0c;在 HUAWEI Nova 5 系列新品发布会上&#x…

调用 微信接口报错 {errcode:48001,errmsg:api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]}...

如下截图&#xff0c;仅为备份&#xff0c;本文转载地址&#xff1a; http://www.cnblogs.com/liaolongjun/p/6080240.html 以下正文↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑…

javascript this用法小结

this是面向对象语言中的一个重要概念&#xff0c;在JAVA,C#等大型语言中&#xff0c;this固定指向运行时的当前对象。但是在javascript中&#xff0c;由于 javascript的动态性&#xff08;解释执行&#xff0c;当然也有简单的预编译过程&#xff09;&#xff0c;this的指向在运…

在vc6控制台程序中如何调用运行ImageMagick命令行工具

在http://www.imagemagick.org/script/index.php网站下载相应的执行文件&#xff0c;这里以下载ImageMagick-6.6.5-10-Q16-windows-static.exe为例说明。 将ImageMagick-6.6.5-10-Q16-windows-static.exe下载后&#xff0c;安装&#xff0c;然后将其中需要的命令行工具考到你程…

高频数据交换下Flutter与ReactNative的对比

后端使用go写的socketio服务模拟期货行情数据&#xff0c;每10ms推送10条行情数据 ReactNative已经尽力优化了。 Flutter由于没flutter-socketio这个库不支持dart2.0以上的版本&#xff0c;所有用了安卓的socketio&#xff0c;通过事件与Flutter通讯。 1.内存占用 ReactNative …

6月技术福利限时免费领

《程序员大本营》6月刊来啦~更多福利限时免费领取&#xff1a;CSDN重磅技术大会精选视频以及200PPT&#xff1b;机器学习、知识图谱、计算机视觉、区块链等100技术公开课及PPT全奉送...识别海报二维码&#xff0c;邀请3位好友扫码助力&#xff0c;即可免费领取↓↓↓❤提示&…

我对bgwriter.c 与 guc 关系的初步理解

我用例子来说明&#xff1a;只是一个模拟&#xff0c;我自己做的 假的 bgwriter.c [rootlocalhost test]# cat bgwriter.c #include<stdio.h> #include<stdlib.h> #include<signal.h> #include "bgwriter.h" #include "guc.h" //some co…

媲美Pandas?一文入门Python的Datatable操作

作者 | Parul Pandey译者 | linstancy责编 | Jane出品 | Python大本营&#xff08;id&#xff1a;pythonnews&#xff09;【导读】工具包 datatable 的功能特征与 Pandas 非常类似&#xff0c;但更侧重于速度以及对大数据的支持。此外&#xff0c;datatable 还致力于实现更好的…

java并发编程——并发容器类介绍

2019独角兽企业重金招聘Python工程师标准>>> 并发容器的简单介绍 JDK5中添加了新的concurrent包&#xff0c;相对同步容器而言&#xff0c;并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了&#xff0c;这样保证了线程的安全性&a…

CV_IMAGE_ELEM参数赋值时注意的问题

转自&#xff1a;http://hi.baidu.com/wangruiy01/blog/item/041ab03e8abd33c57d1e71a0.html CV_IMAGE_ELEM是一个宏&#xff0c; #define CV_IMAGE_ELEM( image, elemtype, row, col ) /(((elemtype*)((image)->imageData (image)->widthStep*(row)))[(col)])#define …

公司内部exchange2010 下删除误发邮件

1、Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E20102、get-mailbox | search-mailbox -SearchQuery 填写误发邮件标题 -TargetMailbox "administrator" -TargetFolder "SearchAndDeleteLog" -DeleteContent转载于:https://blog.51cto.com/wo…

从代码设计到应用开发,入坑深度学习看这本书就够了

深度学习&#xff08;Deep Learning&#xff09;是机器学习中一种基于对数据进行表征学习的方法。近年来&#xff0c;深度学习已经在科技界、工业界日益广泛地应用。随着全球各领域多样化数据的极速积累和计算资源的成熟化商业服务&#xff0c;深度学习已经成为人工智能领域最有…

小波矩特征提取matlab代码

这是我上研究生时写的小波矩特征提取代码&#xff1a; %新归一化方法小波矩特征提取---------------------------------------------------------- Fimread(a1.bmp);Fim2bw(F);Fimresize(F,[128 128]);%求取最上点for i1:128 for j1:128 if (F(i,j)1) yt…

hadoop生态搭建(3节点)-06.hbase配置

# http://archive.apache.org/dist/hbase/1.2.4/ # 安装 hbase tar -zxvf ~/hbase-1.2.4-bin.tar.gz -C /usr/local rm –r ~/hbase-1.2.4-bin.tar.gz # 配置环境变量# node1 node2 node3 vi /etc/profile# 在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL下添…

异类框架BigDL,TensorFlow的潜在杀器!

作者 | Nandita Dwivedi译者 | 风车云马责编 | Jane出品 | AI 科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【导读】你能利用现有的 Spark 集群构建深度学习模型吗&#xff1f;如何分析存储在 HDFS、Hive 和 HBase 中 tb 级的数据吗&#xff1f;企业想用深度学习…

对IsUnderPostmaster变量初步学习

开始 在postmaster.c 中的 BackendStartup 中&#xff0c;有如下的代码&#xff1a; 其中定义了 IsUnderPostmastertrue。 而bgwriter 作为 postmaster 的子进程&#xff0c;它的 IsUnderPostmaster 也是为真。 * BackendStartup -- start backend process** returns: STATUS_…