原文:http://www.52cs.org/?p=1046

闲聊DNN CTR预估模型

Written by b manongb

作者:Kintocai, 北京大学硕士, 现就职于腾讯。

伦敦大学张伟楠博士在携程深度学习Meetup[1]上分享了Talk《Deep Learning over Multi-field Categorical Data – A Case Study on User Response Prediction in Display Ads》。他在2016 ECIR发表了篇同名的paper[2]。八卦一句, 熟悉推荐领域的人应该会知道此人, svdfeature[3]的作者之一, 11年、12年的KDDCUP都有他的身影。本文不打算完完整整详解Dr. Zhang的这篇文章, 而是希望借此来闲聊DNN在 CTR Prediction 问题上的一些设计思路。

基于Neural Network 解决CTR Prediction并不是很新的想法, 虽然我无从追溯最早尝试实用NN解决CTR Prediction 问题的年份, 但是可以确定2010年已经有了很多NN的尝试, 2012年KDDCUP Track 2 腾讯搜索广告CTR 预估Task上亚军团队使用单隐层的ANN了(包括ANN单模型以及基于ANN的Ensemble)[4]。NN是典型的连续值模型,而CTR Prediction 的输入更多时候是离散特征。理所当然地可以把离散特征全部设计成连续特征(表现为各种similarity、ctr等等), 而事实上大量的特征并不适合设计成连续值特征, 比如搜索广告的历史点击query 序列。如何支持大规模离散DNN一直是工业界面临的难题。

2012年 ICML  Online Advertising Workshop上google 的researcher Greg Corrado 分享了Talk 《Deep Networks for Predicting Ad Click Through Rates》[5]。针对DNN CTR Prediction, Google 提出的方案如下:

Embedding的思路应该说历史悠久了, 可以追溯了Hinton 1986的论文《Learning distributed representations of concepts》, 伴随这NNLM的兴起而火起来, 更多的人应该是从Mikolov的Word2vec[6]开始认识它的。从离散到连续, embedding确实是非常合适的方案, embedding可以把离散特征嵌入到高纬连续空间, 而且embedding 可以通过BP训练求解。

Embedding解决了离散到连续的transform并不代表解决了所有的问题。CTR Prediction已经步入了千亿样本、千亿特征的时代[7],Google Play App 推荐都已经是5000亿样本了[8]。 如果每个离散特征都对应一个representation vector,假设dimension 为50, 那么就是50 * 千亿 级别的参数。毫无疑问, 训练如此庞大参数规模的模型是非常困难的,甚至不可为。解决这个问题可以有很多思路, 比如砍掉低频特征、降低representation vector dimension、特征选择、设计连续值特征等等。试着回想一下离散特征体系, 很容易可以发现离散特征总量是千亿级别, 但是category  field (feature set或则叫feature slot)总数一般也就几十到几百, 那么一种很显而易见的思路就是把离散特征的representation vector 都归一到每个category field上, 如此一来dnn的输入规模瞬间回到了 num_category_field * dimension 的复杂度。

再看看google的这个模型, 脱去所有隐层, 明显就是FM(factorization machines)了[10]。

FM的前半部分可以看成是Logistic Regression, 后半部分是Feature Interaction。看到这里,有经验的人肯定会想到,train 一个FM模型就可以得到embedding, 然后再把FM 学到的模型输入给DNN。Dr. Zhang 在此思路设计的DNN 模型如下:

这里Dr.Zhang 有一个假设:每个category field 有且只有唯一 positive value。

如上图所示, FM可以得到每个离散特征的feature vector, 基于上面的假设,所有的离散特征都可以归一到所属category field下, 每个category field 可以用w 以及一个feature vector 表示。下一步就是产生输入层, Dr.zhang的设计非常有意思, 如下图:

他通过使用每个category field的feature vector 做inner product 或则 outer product 来产生dnn 输入层(也就是上图里面的Product Layer)。这种做法有助于特征的交叉,同时也会导致另外一个问题: 输入层的膨胀。假设有100个category  field, inner product 就会产生接近5000个输入节点, outer product 那就更多了。 为解决这个问题作者又引入了一个矩阵分解的方法来优化, 也算是比较常见的优化方法吧。除此之外,文章还提到了一些包括激活函数选择、 隐层数选择、dropout 概率选择等等trick, 这些都不是我今天想要讲的重点, 有兴趣的同学可以参看对应的paper。

回过头,我们来看看Dr.Zhang模型的一些问题, 第一个问题是category 有且仅有一个positive value这个假设大部分时间是不成立的。比如用户的兴趣特征, 很可能有多个兴趣标签, 也可能缺失。当然这个问题也很好解决, 多个的话可以选择average(类似于Word2vec的隐层处理), 缺失的话可以选择均值默认填充。第二个问题,dropout的真的好么?直观上广告特征输入的稀疏性很强, 大量的category field 缺失, dropout 很可能会极大稀疏性, 引起效果损失。但是用不用dropout没有绝对性, 和特征覆盖以及样本数量强相关, 比如你和百度凤巢或则Google一样拥有数千亿样本, 就没有必要使用dropout。第三个问题, 输入层是否真的需要做inner product或则outer product?这应该是学术界的方法, Dr.zhang引用的那篇文章还没公开发表, 所以暂时没有对比数据。但是只要展开w 以及feature vector, 隐层潜在就会完成outer  product,通过隐层数以及隐层节点数可以控制交叉程度。 输入层复杂度增加会影响整个系统的吞吐,如果样本数据量足够大, 尽可能设计简单一些的模型, 提高吞吐量, 大数据本身就可以解决很多问题。

Google Brain的同学曾经带来了一次关于Tensorflow的讲座, 其中就讲到了Google的App 推荐系统的DNN模型设计。之后没多久Google 公布了实现细节的paper[8]并且在Tensorflow r0.9 提供了对应的高级API[11]。Wide and Deep Learning模型设计:

这个模型的特点是结合了离散LR 以及 Deep Neural Network,category feature 通过embedding的方式输入到DNN学习, 其他一些特征通过LR 方式学习。LR部分通过Feature Cross 精细刻画场景, DNN部分则强调Generalization, Combine 二者尝试得到更优的效果。这种设计虽然好玩, 但是相对于纯Dense Feature的模型设计优势也没有多大, 毕竟有一些问题可以通过特征和数据解决。不过可以换一个角度看这个问题, DNN的每一个隐层都可以有新的输入, 那么这个模型其实就是在最后一个隐层增加输入而已, 这也是很常见的设计方案。相反但是这种模型设计在一些特定的地方是非常有帮助的, 比如需要增加position bias 特征的时候, 把position bias 特征放在最后一个隐层就很有意义(有一些特征真的不适合乱交叉)。

最后我们来回顾DNN CTR Prediction模型的设计, 综合学术界以及工业界的经验, 整个模型的设计思路大致如下:

通过embedding的方式把离散特征转化为Dense Feature, 输入层同时可以增加其他Dense 特征, 比如CTR统计特征、similarity 特征、pv、click等等。每一个隐层都可以增加新的特征输入, 尤其是最后一个隐层。

工业上很多时候都会选择基于FM来产生representation,包括比较有名的百度凤巢、今日头条、阿里。【注:其实不是基于FM产生representation的方法最优秀, 只是国内大部分公司都没有复杂模型自主研发能力, 如果TF、MxNet之类开源DNN Lib没有现成支持离散特征Embedding版本的话就只好如此了。还有一种原因是线上迁移成本以及实际应用场景缘故导致的, 比如线上也想用FM\LR的预估。】输入层可以使用 FM产生的所有数据,包括feature vector、w,同时可以引入其他统计值特征以及新设计的连续值特征。学术界以及一些比赛当中会有一些CNN预估模型, 设计方案也特别令人印象深刻, 这里就不多展开了。

DNN 虽然已经是非常常见的模型了, 而且工业界应用非常广泛了, 但是杀鸡焉用牛刀, 离散LR依然是二分类问题场景的首选方案。不可小看大离散LR, 设计精良的离散LR效果杠杠的, 足够解决大部分实际问题。

到此本文结束, 本文旨在介绍模型设计, DNN的设计细节有兴趣可以未来再探讨。水平有限, 仓促写作, 如有错误或理解错误, 随时沟通!

参考文献

  1. http://techshow.ctrip.com/archives/1149.html
  2. Deep Learning over Multi-field Categorical Data – A Case Study on User Response Prediction. Weinan Zhang
  3. http://svdfeature.apexlab.org/wiki/Main_Page
  4. http://www.kddcup2012.org/
  5. https://sites.google.com/site/admlworkshop/schedule
  6. https://code.google.com/p/word2vec/
  7. Large-scale Deep Learning at Baidu - CIKM 2013. Kai Yu.
  8. Wide & Deep Learning for Recommender Systems. Heng-Tze Cheng,Levent Koc
  9. http://mp.weixin.qq.com/s?__biz=MzAwNDI4ODcxNA==&mid=2652243946&idx=2&sn=de8bb9a36fe9f2f0c97f30aaec87063f&scene=2&srcid=0727O4JXBdr5NU7sFOD48J69&from=timeline&isappin
  10. Factorization Machines. Steffen Rendle.
  11. https://www.tensorflow.org/versions/r0.10/tutorials/wide_and_deep/index.html

闲聊DNN CTR预估模型的更多相关文章

  1. 主流CTR预估模型的演化及对比

    https://zhuanlan.zhihu.com/p/35465875 学习和预测用户的反馈对于个性化推荐.信息检索和在线广告等领域都有着极其重要的作用.在这些领域,用户的反馈行为包括点击.收藏. ...

  2. CTR预估模型演变及学习笔记

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] [再啰嗦一下]如果你对智能推荐感兴趣,欢迎先浏览我的另一篇随笔:智能推荐算法演 ...

  3. 【转】- 从FM推演各深度CTR预估模型(附代码)

    从FM推演各深度CTR预估模型(附代码) 2018年07月13日 15:04:34 阅读数:584 作者: 龙心尘 && 寒小阳 时间:2018年7月 出处: 龙心尘 寒小阳

  4. 深度CTR预估模型中的特征自动组合机制演化简史 zz

    众所周知,深度学习在计算机视觉.语音识别.自然语言处理等领域最先取得突破并成为主流方法.但是,深度学习为什么是在这些领域而不是其他领域最先成功呢?我想一个原因就是图像.语音.文本数据在空间和时间上具有 ...

  5. PaddlePaddle分布式训练及CTR预估模型应用

    前言:我在github上创建了一个新的repo:PaddleAI, 准备用Paddle做的一系列有趣又实用的案例,所有的案例都会上传数据代码和预训练模型,下载后可以在30s内上手,跑demo出结果,让 ...

  6. ctr预估模型

    http://wenku.baidu.com/course/view/1488bfd5b9f3f90f76c61b8d

  7. 几句话总结一个算法之CTR预估模型

    背景 假设现在有个商品点击预测的任务,有用户端特征性别.年龄.消费力等,商品侧特征价格.销量等,样本为0或者1,现在对特征进行one hot encode,如性别特征用二维表示,男为[1,0],女为[ ...

  8. CTR预估经典模型总结

    计算广告领域中数据特点:    1 正负样本不平衡    2 大量id类特征,高维,多领域(一个类别型特征就是一个field,比如上面的Weekday.Gender.City这是三个field),稀疏 ...

  9. 计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践

    计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践 2018年06月13日 16:38:11 轻春 阅读数 6004更多 分类专栏: 机器学习 机器学习荐货情报局   版 ...

随机推荐

  1. HTTP协议GET和POST的区别

    from http://blog.csdn.net/whuslei/article/details/6667095 权威点的说明请参考:http://www.cs.tut.fi/~jkorpela/f ...

  2. C#访问远程主机资源的方法,多种方式

    最近要实现访问远程主机的共享目录中的一个文件.遇到了权限问题.google了一下,找到了几种解决方法,记录如下: 一.调用Net use命令 // 使用方法:        //if (Connect ...

  3. Revit MEP API连接器类别

    连接器的类别,风管不仅有两端,可能在曲线上也有. ;         ;         ;         ;             Connector conn = csi.Current ; ...

  4. AngularJS一个由于未声明对象而报的错

    实现这样的一个需求:点击某个按钮,然后显示或隐藏某块区域. 先注册一个AngularJS的一个module: var myApp = angular.module("myApp", ...

  5. Spring主从数据库的配置和动态数据源切换原理

    原文:https://www.liaoxuefeng.com/article/00151054582348974482c20f7d8431ead5bc32b30354705000 在大型应用程序中,配 ...

  6. C#编程(六十)----------LINQ的概述

    LINQ的概述 LINQ的全名为语言继承查询,是VS2008个.NET3.5版中一款突破性的创新,他再对象领域和数据领域之间架起了一座桥梁.使用LINQ能大大加快对于对象数据等等的查询,加快效率. 由 ...

  7. C#编程(二十一)----------扩展方法

    C#中的扩展方法 有许多扩展类的方式.如果有类的源代码,继承就是给类添加功能的好方法.但是如果没有源代码,怎么办?吃屎可以使用扩展方法,它允许改变一个类,但不需要该类的源代码.扩展方法是静态方法,它是 ...

  8. Java集合类: Set、List、Map、Queue使用场景

    目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的 ...

  9. 女子监狱第四季/全集Orange Is the New Black迅雷下载

    女子监狱 第三季 Orange Is the New Black 3 (2015) 本季看点:该剧由<吉尔莫女孩>.<单身毒妈第一季>编剧杰姬·科恩的打造.由<护士当家& ...

  10. 使用node-webkit实现打包工具的小结

    之前一直使用的hta在开发工具,最近转到node-webkit上了,对比一下二者的优劣势.hta单个文件,体积较小,但有兼容性的问题(兼容ie6.7.8就行了,也还好),node-webkit使用we ...