论文地址:https://arxiv.org/abs/1606.07792
一 为什么读这篇
自从打算重新搞推荐以来,看了各种各样的资料,收集了一堆TODO论文,发现这篇出现频率十分之高,是深度学习与推荐系统相结合的必读论文之一,因为很多新出的模型都是在这个架构的基础上进行迭代的。而且有google的实际产品背书,工程上大概率是实用的。
二 截止阅读时这篇论文的引用次数
2019.5.27 396次。本篇算是推荐领域里的经典论文,引用次数都不过比CV里那些动辄引用上千的paper,确实有差距,不过也从侧面说明CV更能灌水?
三 相关背景介绍
15年12月挂到arXiv上,中了16年的ECCV。一作刘伟是北卡罗来纳大学教堂山分校的PHD,也是GoogLeNet的的二作。其他几个作者都有Google背景,包括Szegedy大神,所以SSD差不多算是Google系的。本篇提出时间比Faster R-CNN和YOLO v1晚半年。
16年6月挂到arXiv上,中了16年ACM下的Deep Learning for Recommender Systems Workshop。有16个共同作者。。。
一作Heng-Tze Cheng是个台湾小哥,13年CMU博士毕业,毕业后就去G家了。本篇提出时间比FNN晚半年,比DeepFM,DIN,AFM,NFM,DCN早差不多一年。
四 关键词
Wide & Deep
memorization
generalization
cross-product feature
五 论文的主要贡献
提出Wide & Deep架构,挖了一个好坑,等着后续各种模型来填
六 详细解读
0 摘要
具有非线性特征变换的广义线性模型被广泛应用于具有稀疏输入的大规模回归和分类问题。通过a wide set of交叉特征变换来记住特征交互是有效且可解释的,然而泛化则需要更多的特征工程工作;与此相反,不用过多的特征工程,深度神经网络可以通过对稀疏特征学习到的低维稠密嵌入来更好地泛化到未曾见过的特征组合。然而,当用户物品交互行为是稀疏且高秩时,具有嵌入的深度神经网络会过度泛化并推荐不太相关的物品。本文提出的Wide & Deep学习统一训练宽的线性模型和深度神经网络,这样就结合了记忆(memorization)与泛化(generalization)的优势。用有超过10亿用户行为,百万apps上的Google Play上进行试验。
1 介绍
推荐系统可以被视为是搜索排序系统,其输入query是用户和上下文信息,输出是排好序的物品列表。记忆(memorization)定义为学习与物品或特征频繁共现的东西,并利用历史数据中可用的相关性。然而泛化(generalization)是基于相关的传递性,并探索过去从未或很少发生的新特征组合。基于记忆的推荐通常更与主题相关,并且与用户已经有过行为的物品直接相关。泛化倾向于改进推荐物品的多样性。
广义线性模型的优势是简单,可扩展,可解释。记忆通过使用在稀疏特征上的叉积变换来实现,泛化通过使用更粗粒度的特征来实现,但是手动特征工程是必不可少的。叉积变换的一个限制是无法泛化出没出现在训练样本中的query-item特征对。
基于嵌入的模型(FM,DNN)通过学习低维稠密嵌入向量来泛化到之前未见过的query-item特征对,然而当潜在的query-item矩阵稀疏并有很高的秩时(例如用户有特殊的偏好,或者物品有狭隘的吸引力),很难学习有效的低维表示。在这种情况下,绝大多数query-item对应该没有交互,然而稠密嵌入将对所有的query-item对进行非零值预测,因此会过度泛化并作出不太相关的推荐。从另一方面讲,使用叉积特征变换的广义线性模型能够用更少的参数记住这些例外规则。
本文主要贡献:
1 Wide & Deep框架,联合训练有嵌入的前向神经网络和有特征变换的线性模型
2 在Google Play上实现并评估Wide & Deep
3 在TensorFlow上开源了高阶API的实现
2 推荐系统概述
query通常包括不同的用户和上下文特征。
本篇的Wide & Deep聚焦于排序模型那块。
3 Wide & Deep学习
3.1 Wide部分
特征集合包括原始输入特征和变换特征,其中最重要的变换的叉积变换,定义如下:
这样捕获了二元特征间的交互,并为广义线性模型增加了非线性。
3.2 Deep部分
将稀疏,高维的分类特征,首先转化为低维,稠密的实数向量,即嵌入向量,嵌入维度通常是10到100。
3.3 联合训练Wide & Deep模型
联合训练和Ensemble的不同,联合训练的wide部分只需要通过少量的叉积特征变换来补充deep部分的不足,而不用全尺寸的wide模型。本文用FTRL(Follow-the-regularized-leader)优化模型的wide部分,AdaGrad优化深度部分(这为什么??)。
4 系统实现
4.1 数据生成
Vocabularies,用来将分类特征字符串映射为整数IDs。连续实数特征归一化到[0, 1]。
4.2 模型训练
wide部分由用户安装的apps和曝光的apps的叉积变换组成。对于deep部分,每个分类特征学习32维的嵌入向量。模型在5000亿的样本上训练。。。
4.3 模型服务
为了优化速度(每个请求10ms内),没有用一个batch,而是用多线程并行跑多个小batch。
5 实验结果
5.1 APP获取
AB试验做了3周,控制组为LR,实验组为Wide & Deep,两者特征一样。
5.2 服务性能
在峰值时,每秒为1000w apps打分。这里有个trick就是用多线程把大batch拆为几个小batch。
6 相关工作
本文受FM的启发,不同的是把FM的点积用神经网络的嵌入代替。剩下的部分就是硬凑。。
七 小结
还是看原文爽,仅仅读了摘要和介绍部分,就明白了模型是为什么要这么做。这也是看原文的好处,背景介绍的非常清楚,会告诉你为什么有这个idea。感觉推荐和CV的风格差异还是挺大的,貌似推荐的要易读一点?也可能是这篇相对易懂,内容很短,只有4页,看完后懂了为什么要这么多作者,合着是把一个项目组的人都拉进来了。。。另外从最后的实验结果来看,提升并没有特别的高,看来模型侧的改进真没有想象中那么有效。
素质四连
要解决什么问题
LR泛化能力不足,DNN泛化能力过强导致的无关推荐
用了什么方法解决
结合LR和DNN
效果如何
相比LR,AUC提升不多,但线上提升较多
还存在什么问题
本篇只是搭了架构,还有各种花式技巧,魔改网络结构没有用上