内容来源:2018 年 01 月 05 日,资深算法专家张俊林在“2018 移动技术创新大会”进行《深度学习在CTR预估业务中的应用》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。
阅读字数:3430 | 9分钟阅读
摘要
本次演讲主要分享深度学习在CTR预估业务中的应用,分别介绍了FM模型以及如何解决深度学习中CTR模型所面临的各种问题。
嘉宾演讲视频及PPT回顾,请复制链接:http://t.cn/RdOtf8U,粘贴至浏览器地址栏即可。
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层的映射性能能够明显提升。
一般的隐层结构是梯形的,即上层最少,中间次之,底层最多。但是经过试验发现平行结构或者菱形结构效果会更好。关于隐层的层深,一般建议是两到三层。
以上为全部分享内容,谢谢大家! 推荐文章