社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

资深算法专家解读CTR预估业务中的深度学习模型

IT大咖说 • 6 年前 • 1001 次点击  
阅读 17

资深算法专家解读CTR预估业务中的深度学习模型



内容来源:2018 年 01 月 05 日,资深算法专家张俊林在“2018 移动技术创新大会”进行《深度学习在CTR预估业务中的应用》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:3430 | 9分钟阅读

嘉宾演讲视频PPTt.cn/RdOtf8U

摘要

本次演讲主要分享深度学习在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层的映射性能能够明显提升。

一般的隐层结构是梯形的,即上层最少,中间次之,底层最多。但是经过试验发现平行结构或者菱形结构效果会更好。关于隐层的层深,一般建议是两到三层。




今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/C4fg6l7RQC
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/20827
 
1001 次点击