CTR深度学习
深度学习在 CTR 中应用
一. Wide&&Deep 模型
首先给出Wide && Deep [1] 网络结构:
本质上是线性模型(左边部分, Wide model)和DNN的融合(右边部分,Deep Model)。
推荐系统需要解决两个问题:
记忆性: 比如通过历史数据知道”麻雀会飞”,”鸽子会飞”
泛化性: 推断在历史数据中从未见过的情形,”带翅膀的动物会飞”
WideDeep是怎么解决这两个问题呢?
Wide模型:
比如现在有一个点餐推荐APP,我输入炸鸡(query),那么会给我进行推荐其他相关的食物(item),那么模型目地就是为了希望知道给定了query, 消费item的概率, 即: P(消费| query, item). 那我们就可以通过构建出一系列(query, item)的cross 特征, 通过LR去学习到这些不同的cross特征与target = 消费 的相关性。比如(query = “炸鸡”, item = “啤酒”) 与target = 消费 ,通过历史数据学习到有很强的相关性,那么就推荐给炸鸡。
Deep模型:
现在我厌倦了推荐的结果,希望推一些让我惊喜的食物,上面的wide模型,我们构建的cross特征也是有限的,不能面面俱到,cross特征或许可以是三个类别,四个类别。所以,需要deep模型自动帮我们做一些特征。每个特征可以映射到一个低维空间去,学习到一个低维dense的表达(embedding vector)。 那么给定一个query, 我们可以在embedding space中找距离相近的item, 认为是潜在喜欢的item
Wide模型与Deep模型的结合,目的是为了平衡记忆性和泛化性的结果.
二. FNN,SNN 模型
和wide deep出发点一样, 一些线性模型LR很难学到非线性表达, 非线性模型比如FM, GBDT又很难学到所有的特征组合方式。那么,如何利用DNN去自动学习到特征表达,自动去学习到特征之间的交叉呢?
FNN模型结构[2]:
首先需要对category特征进行一个one-hot编码。
l1, l2层都是隐藏层,那么, dense real layer 就可以看作一个embedding层, 每个field 分别 对应一个embedding的过程。通常,使用FM去初始化这些参数往往能够更快地收敛,最大限制避免训练过程中陷入局部最小,以及得到更好的结果。可以看到,FNN其实就是widedeep模型的deep部分,但是FNN有用FM进行一个参数初始化的过程。
SNN模型结构:
SNN和FNN模型区别于最底层的训练方法, FNN最底层先用FM初始化,可以看到,SNN最底层是全连接的,不区分不同的field。 初始化采用RBM(限制玻尔兹曼机) 和 DAE(自动编码机)。
训练过程中,没有每轮迭代都会用到所有的特征,对为0的单元进行一个下采样操作,图中黑色的单元即是没有被选取到,不参与参数迭代。计算复杂度得到大量的减少。
文章在iPinYou数据集上进行评测,可以看到FNN效果优于FM,LR。
文章对调参也给出了一些经验
网络结构,通常,钻石型的网络结构往往优于其他结构
- 隐藏层单元数不是越高越好,中间有一个临界值达到最优.
Dropout在数据量本来就很稀疏的情况下尽量不用,不同的数据集dropout表现差距比较大。
三. PNN 模型
PNN[3]的网络结构:
PNN的结构的思想相比于WideDeep模型核心改动地方在对于embedding后的dense feature,增加了两两交叉的功能,widedeep是embedding feature全部输入到隐藏层了。不同field经过Embedding后的特征做点击运算其实就相当于FM,那么PNN认为首先需要确保学习到这些交叉特征,再去额外交给DNN去学习更复杂的交叉特征。那么PNN结构其实相当于FM+DEEP。
再说下网络细节: Embedding layer 和Wide Deep模型是一样的, 不同field特征映射到了一个embedding的空间上,这时,不是所有的特征直接送到一个NN网络里面去,这里分成两个部分z 和p。 z部分直接就是原始的embedding特征不变; P部分是embedding特征两两做内积运算,达到FM的效果,接下来z和p拼接成一个vector, 送到一个NN网络里面,最后softmax输出概率值。
四. DeepFM 模型
DeepFM[4]的网络结构:
可以看到,很像PNN结构,只是在这里FM没有和原始特征一起送到NN中去训练,而是单独拿出来类似于WIDE模型。其实就是WideDeep模型中Wide侧替换为FM。
五. NFM 模型
NFM模型[5]的网络结构:
首先,也是经过全连接得到embedding层,输入是
分别是不同特征对应的相同维数的embedding向量。接下来,这些embedding向量两两做element-wise的相乘运算得到B-interaction layer。(element-wide运算举例: (1,2,3)element-wide相乘(4,5,6)结果是(4,10,18)。)
该B-interaction Layer 得到的是一个和embedding维数相同的向量。然后后面接几个隐藏层输出结果。
为什么这么做呢?首先看如果B-interaction layer后面不接隐藏层,直接把向量的元素相加输出结果(对应下面的公式h=(1,1,1,...,1)) , 就是一个FM, 就好比一个线性模型,权重都是1 :
现在后面增加了隐藏层,相当于做了更高阶的FM,更加增强了非线性表达能力。
六. AFM 模型
AFM模型[6]的网络结构:
AFM是NFM模型的一个改进, 在传统FM模型中,使用二阶交叉特征得到非线性表达能力,但是不是所有的特征交叉都会有预测能力,很多无用的特征交叉加入后反而会相当于加入了噪声。
因此,在这个模型中,加入了Attention Net 机制,aij表示特征i,j交叉的权重。计算方式如下: 经过一个attention net的隐藏层,得到该特征交叉的权重
最后的预测方式和NFM类似, 当P=(1,1,1,...,1),是加了权重的FM, 后面也可以和NFM一样增加隐藏层,得到更高阶特征的表达能力。
结语: 没有万能的模型,针对不同的业务可能需要选择不同的模型,比如如果需要解释能力强的,那么不妨选择AFM模型, Wide Deep实际中应用比较广,效果也可以,但是很难定位问题,也难分析Deep侧的特征重要性。同时网络结构需要不断尝试,或许我们都可以embedding到一个固定的维数后,可以把这个embedding特征当作图像来做,做卷积,pooling, 说不定有惊喜,达到去噪声的目的。
参考文献
[1] Cheng H T, Koc L, Harmsen J, et al. Wide & Deep Learning for Recommender Systems[J]. 2016:7-10.
[2] Zhang, Weinan, T. Du, and J. Wang. "Deep Learning over Multi-field Categorical Data: A Case Study on User Response Prediction." (2016).
[3] Qu Y, Cai H, Ren K, et al. Product-Based Neural Networks for User Response Prediction[J]. 2016:1149-1154.
[4] Guo H, Tang R, Ye Y, et al. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction[J]. 2017.
[5] He X, Chua T S. Neural Factorization Machines for Sparse Predictive Analytics[J]. 2017.
[6] Xiao J, Ye H, He X, et al. Attentional factorization machines: Learning the weight of feature interactions via attention networks[C]. IJCAI, 2017.
相关阅读
基于 word2vec 和 CNN 的文本分类 :综述 & 实践
深度学习的异构硬件加速:TPU 特性与数据中心的 ASIC 应用(概述篇)
此文已由作者授权腾讯云技术社区发布,转载请注明文章出处
原文链接:https://cloud.tencent.com/community/article/817449
CTR深度学习的更多相关文章
- 深度学习在 CTR 中应用
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:高航 一. Wide&&Deep 模型 首先给出Wide && Deep [1] 网络结构: 本质上 ...
- 为什么要用深度学习来做个性化推荐 CTR 预估
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...
- 深度学习在CTR预估中的应用
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 一.前言 二.深度学习模型 1. Factorization-machine(FM) FM = LR+ e ...
- 机器学习如何选择模型 & 机器学习与数据挖掘区别 & 深度学习科普
今天看到这篇文章里面提到如何选择模型,觉得非常好,单独写在这里. 更多的机器学习实战可以看这篇文章:http://www.cnblogs.com/charlesblc/p/6159187.html 另 ...
- 深度学习word2vec笔记之应用篇
好不容易学了一个深度学习的算法,大家是否比较爽了?但是回头想想,学这个是为了什么?吹牛皮吗?写论文吗?参加竞赛拿奖吗? 不管哪个原因,都显得有点校园思维了. 站在企业的层面,这样的方式显然是不符合要求 ...
- 贾扬清分享_深度学习框架caffe
Caffe是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的 贾扬清,目前在Google工作.本文是根据机器学习研究会组织的online分享的交流内容,简单的整理了一下. 目录 ...
- 用深度学习(DNN)构建推荐系统 - Deep Neural Networks for YouTube Recommendations论文精读
虽然国内必须FQ才能登录YouTube,但想必大家都知道这个网站.基本上算是世界范围内视频领域的最大的网站了,坐拥10亿量级的用户,网站内的视频推荐自然是一个非常重要的功能.本文就focus在YouT ...
- ML平台_微博深度学习平台架构和实践
( 转载至: http://www.36dsj.com/archives/98977) 随着人工神经网络算法的成熟.GPU计算能力的提升,深度学习在众多领域都取得了重大突破.本文介绍了微博引入深度学 ...
- 深度学习在美团点评推荐平台排序中的应用&& wide&&deep推荐系统模型--学习笔记
写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运 ...
随机推荐
- springboot整合Beetl、BeetlSql实现ajax分页
Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎.而且还易学易用. BeetSql是一个 ...
- 数据存储值归档Archive
先比較一下各个数据存储之间的关系: 关于归档.是ios中的shu'j数据存储中的一种数据存储方式.以下了解一下归档中的一个实例: 以下的是父类person #import <Foundation ...
- Qt样式表之盒子模型(以QSS来讲解,而不是CSS)
说起样式表,不得不提的就是盒子模型了,今天小豆君就来给大家介绍下盒子模型. 上图是一张盒子模型图. 对于一个窗口,其包括四个矩形边框.以中间的边框矩形(border)为基准,在border外侧的是外边 ...
- 用openssl生成含有中文信息的证书
openssl 支持 ASCII 和 UTF-8 两种编码,应该可以制作中文证书. 在生成证书签发申请时,当输入中文则 openssl 报错,这是因为当前输入的字符是 ANSI 本地编码格式,超出了 ...
- js21---单体(单例)模式
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- vim-录制命令的使用
使用vim时无意间触碰到q键,左下角出现“recording”这个标识,这是vim的一个强大功能. 他可以录 制一个宏(Macro),在开始记录后,会记录你所有的键盘输入,包括在insert模式下的输 ...
- GridView-属性大全
这是个网格控件 他的实现也是通过adapter来实现的,感觉跟listview在使用上并没有多大的区别 常见属性如下 1.android:numColumns=”auto_fit” //GridVie ...
- IK分词器插件elasticsearch-analysis-ik 6.1.1
http://88250.b3log.org/full-text-search-elasticsearch#b3_solo_h3_0 IK分词器插件 (1)源码 https://github.com/ ...
- 26.多线程join detach
#include <iostream> #include <thread> #include <array> #include <Windows.h> ...
- Mac 终端操作数据库
名词解释: 事务:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这 ...