资深算法专家解读CTR预估业务中的深度学习模型
内容来源:2018 年 01 月 05 日,资深算法专家张俊林在“2018 移动技术创新大会”进行《深度学习在CTR预估业务中的应用》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。
阅读字数:3430 | 9分钟阅读
摘要
本次演讲主要分享深度学习在CTR预估业务中的应用,分别介绍了FM模型以及如何解决深度学习中CTR模型所面临的各种问题。
CTR任务的应用
CTR任务描述其实很简单:给定一位用户以及一个商品或者电影等,再配合上下文,比如时间地点,最后预测用户是否会点击该广告或电影。CTR任务典型的应用场景有计算广告、推荐系统、信息流排序。
CTR任务例子
上图的CTR任务例子对应着应用场景中的推荐系统——电影推荐。机器学习中最核心的是训练数据,它分为输入数据(对应图中的Feature vector x),预测数据(对应图中的Target y)。在这个推荐系统中Feature vector x的每一行表示一个用户的各种特征(图中不同的颜色区域表示不同特征),通过特征信息可以预测出target y数值,target y数值越高表示越感兴趣。
CTR任务的特点
CTR任务有三个特点,一是包含大量离散特征,上图中的user ID和movie ID就是离散特征,与之对的是连续特征。二是有大量高纬度稀疏特征,比如假设一个网站有10亿用户,这意味着单单user特征就有10亿度。三是特征工程,确切说是特征组合,它对CTR任务效果起到非常关键的作用。
Factorization Machine模型
线性模型
在讲Factorization Machine模型之前这里先说下线性模型,它是机器学习中最简单的一个模型,公式是图中的Linear,Xi表示有哪些特征,是分布特征,Wi是特征权重。在计算广告中是使用最多的则是下方的LR模型,它对比Linear模型区别在于多了非线性变换。LR模型优势在于简单,能很容易看出每个特征所代表的含义,同时也很容易扩展,缺点则是难以捕获特征组合。
上图是针对LR模型缺陷的改进版本,公式的前半部分不变,后面增加了任意两个特征的组合,也就是XiXj, Wij是提取出放入新特征。这样就直接将两两组合特征引入到模型中,但是还是存在另一个问题——组合特征泛化能力弱。机器学习中泛化指的是模型在训练的时候如果有未曾碰到过的数据,那么在使用时碰到该数据预测效果就会不佳。在该模型中对于训练时未碰到过的XiXj特征组合,其对应的Wij就一定是0。
FM模型
FM模型着手解决的就是上文改进版本泛化能力弱的问题,重点在于标红的地方,之前的模型中Wij是一个数值,而现在的<Vi, Vj>是两个向量的乘积。Vi和Vj表示针对每个特征所取的一维向量,通过他们的乘积来表示特征重要程度。
由于FM模型针对每个特征都会取一维向量,所以即使在使用的时候出现没有见过的组合,也可以根据特征的一维向量进行计算。这就是FM模型泛化能力强的原因。
深度学习CTR模型
深度学习解决CTR任务的几个关键问题
首先是大量离散特征的表示问题,典型的就是如何将向user ID、性别之类的数据输入到神经网络中并让它理解。第二是如何快速处理高纬度稀疏特征。第三是如何从手工到自动,简单来说就是如何摆脱人工寻找特征的过程,转而使用机器完成。最后是如何捕获和表达两两组合特征以及多组组合特征。
离散特征处理
深度学习中特征分为两类,一类是连续特征,比如收入、身高、体重等这类有着含义的特征。另一类是离散特征,比如职业、性别、毕业学校等一些神经网络无法直接理解的特征。
对离散特征的处理一种最直观的思路是使用Onehot表达。上图是用Onehot表达的三个特征,分别是星期、项目和产品ID。这里星期被表示为一个七维向量,向量中每一位对应一星期中的一天,比如星期五的时候第五位为1,其他为都为0。性别和产品ID的表示方式同样如此,通过将这三个特征的Onehot表达组合起来就得到了输入,这样形式的输入神经网络是可以识别的。
Onehot表达虽然很直观,但是并不能实际应用。我们计算一下就会明白了,通过Onehot表达的输入层一般来说会有1000万节点,另外神经网络还有隐层神经元,它通过全连接的方式与输入层连接,也就是每个隐层的神经元与输入层的任意神经元都会有连接。这里假设神经元有500个节点,这样与输入层一组合就会得到50亿参数,很显然如此多的参数对于机器学习来说很难选出一个好的模型。
解决Onehot所面临的问题的基本思路是避免全链接,分而治之(从Onehot到Dense Vector)。尽管输入层的维度很多,但是种类有限,而我们可以将每个种类分开,让输入层只和隐层神经元的一小部分连接,这样就解决了全链接造成的参数过多的问题。
这张图表示的就是优化之后的最终结构——DNN结构,也是典型的深度学习神经网络模型,它是目前所有深度学习方案中最核心的一部分。
之前讨论的是如何解决离散特征输入问题,那么如何将连续特征也加入进来?其实有两种方案,一是添加到Dense层,二是添加到上方的隐层中。
低阶组合单独建模
前面提到过特征组合对CTR很关键,而DNN结构的两个隐层网络已经实现了低阶和高阶特征组合,这是由于Dense层和上方的两个隐层是全链接的,使得上层要获取的两个特征在隐层一定会发生交互作用。
虽然特征组合已经被实现,但是我们还想做的更进一步,将低阶特征组合和高阶特征组合分开。要想将它们分开首先要设计一个低阶组合的神经网络模块,这个模块需要满足三个要求。第一它要表示两两特征组合,第二要具有神经网络的表现形式,第三要能够体现FM思想,即两两特征组合中每个特征体现为一个一维向量。
低级组合模块被分离出来后,面临的下一个问题是如何与原先的模型组合,对此也有两种典型组合方式。
第一种组合方式是并行结构,目前很多模型都采用这种方式,包括DeepFM、Deep&Cross、Wide&Deep等。
第二种组合方式是串行结构,这种模式的实现有PNN模型、NFM模型、AFM模型。
模型选择与训练优化
对于wide & Deep模型、串行结构模型以及类似FNN的模型等,它们的Dense层都需要预训练,这种情况下用FM初始化Onehot到Dense层的映射性能能够明显提升。
一般的隐层结构是梯形的,即上层最少,中间次之,底层最多。但是经过试验发现平行结构或者菱形结构效果会更好。关于隐层的层深,一般建议是两到三层。
资深算法专家解读CTR预估业务中的深度学习模型相关推荐
- 如何为Keras中的深度学习模型建立Checkpoint
深度学习模式可能需要几个小时,几天甚至几周的时间来训练. 如果运行意外停止,你可能就白干了. 在这篇文章中,你将会发现在使用Keras库的Python训练过程中,如何检查你的深度学习模型 Checkp ...
- 如何在Keras中检查深度学习模型(翻译)
本文翻译自:How to Check-Point Deep Learning Models in Keras 深度学习模型可能需要数小时,数天甚至数周才能进行训练. 如果意外停止运行,则可能会丢失大量 ...
- 【Django】项目中调用深度学习模型model.predict()(Django两种启动方式runserver和uwsgi的区别)
目录 问题 测试 解决方法 Django两种启动方式runserver和uwsgi的区别 问题 部署含有深度学习模型的Django项目的uWSGI.Nginx服务器的时候,所有模块都可以正常运行,也可 ...
- 在服务器上运行论文中的深度学习模型
前言 首先需要在服务器上搭建运行环境,参见上一篇博客:[服务器上搭建深度学习模型运行环境:ubuntu] 本文主要讲在搭建好运行环境的情况下如何跑开源模型,以Inf-Net: Automatic CO ...
- 医学图像处理中的深度学习模型
细胞病理学识别和疾病组织目标检测是目标人工智能技术在影像医学和病理方向的重要应用. 该技术主要是前期的预处理技术复杂,主要原因是因为医学的相关病理特征成因复杂,图像方面的随机误差很大(噪音),图像断 ...
- 从原理到应用落地,一文读懂推荐系统中的深度学习技术
作者丨gongyouliu.zandy 来源丨大数据与人工智能(ID:ai-big-data) 2016年DeepMind开发的AlphaGo在围棋对决中战胜了韩国九段选手李世石,一时成为轰动全球的重 ...
- 浏览器中实现深度学习?有人分析了7个基于JS语言的DL框架
作者:仵冀颖 编辑:H4O 本文中,作者基于WWW'19 论文提供的线索,详细解读了在浏览器中实现深度学习的可能性.可行性和性能现状.具体而言,作者重点分析了 7 个最近出现的基于JavaScript ...
- 如何将深度学习模型部署到实际工程中?(分类+检测+分割)
应用背景介绍 早在遥远的1989年,一家叫做ALVIVN的公司首次将神经网络用在汽车上,进行车道线检测和地面分割.时至今日,深度学习已经应用在自动驾驶系统的多个分支领域.首先是感知领域,常用的传感器有 ...
- 感知器算法的基本原理和步骤_很多情况下,深度学习算法和人脑相似
人脑模拟 深度学习背后的主要原因是人工智能应该从人脑中汲取灵感.此观点引出了"神经网络"这一术语.人 脑中 包含 数 十亿个神经元,它 们 之间有 数 万个 连 接.很多情况下,深 ...
最新文章
- C/C++程序从编译到最终生成可执行文件的过程分析
- jupyter notebook即原来的Ipython notebook的使用方法
- SAP UI5 应用开发教程之十一 :SAP UI5 容器类控件 Page 和 Panel
- Uediter的引用和取值
- 如何在 Ubuntu 12.04 Server 中安装图形用户界面
- qt的qfiledialog怎么判断打开的是不是一张图片_花瓣网画板图片一键导出 设计师速来围观...
- 在线卡密销售系统之JAVA WEB学习之路
- windows设置自动获取IP地址
- rj45 千兆接口定义_rj45 千兆接口定义_rj45接口定义,大神教你秒懂rj45的接线方法【详细方法】...
- 小米9开发版自带root吗_怎么获取root权限-小米CC9和小米CC9美图版刷入MIUI开发版,获取完美ROOT权限功能...
- 百度搜索引擎都有哪些算法
- 网易邮箱与GMAIL
- 以为精通Java 线程池,看到这些误区,还是年轻了
- 安装出现Kernel not compiled with GPU support
- 建立数据驱动,关键字驱动和混合Selenium框架这些你了解吗
- vue报错:vue.js:634 [Vue warn]: Cannot find element: #app
- SSH协议弱加密算法漏洞的利用及复现(中间人攻击)
- BZOJ2069 POI2004ZAW(最短路)
- mybatis parametertype可以不填么
- iOS APP 启动页面的使用