本篇是论文Wide & Deep Learning for Recommender Systems的阅读笔记,这是谷歌的一篇发表在2016的论文。网络
对于解决regression和classification问题,有两类方法,一种是wide的一种是deep的。wide,一般是linear model,输入特征不少,带有可以实现非线性的交叉特征(因此wide。)。deep,主要就是基于神经网络的模型啦。ide
任何事情都有两面性,有利就有弊。wide的模型有什么好处呢?特征之间是如何相互做用的,是一目了然的,也就是可解释性好。缺点呢?特征工程很费劲,并且历史数据中没有的模式是学不到的。deep的模型有什么好处呢?更加general,能够学到一些没见过的特征组合(由于是基于对query和item作embedding的)。缺点呢?过度general了,可能会推荐出一些不相关的东西。函数
这篇论文提出的模型,就是把wide的模型和deep的模型融合到一块儿,让两种模型相互制约,取两种模型的优势。学习
如何融合?如何联合训练?为何效果比单独的linear model或者deep model效果好。是这篇论文最值得研究的点。优化
这篇论文还从工程的角度,描述了如何部署,这也是值得学习借鉴的。component
这个部分做者进一步解释了abstract中提到的几个点。blog
One challenge in recommender systems, is to achieve both memorization and generalization.部署
对于memorization和generalization,论文中中有解释:深度学习
Memorization can be loosely defined as learning the frequent co-occurrence of items or features and exploiting the correlation available in the historical data.it
Generalization, on the other hand, is based on transitivity of correlation and explores new feature combinations that have never or rarely occurred in the past.
我理解,memorization就是总结过去,generalization就是发现未知
This paper present the Wide & Deep learning framework to achieve both memorization and generalization in one model, by jointly training a linear model component and a neural network component.
这里做者对推荐系统作了介绍,言简意赅。
首先是retrieval过程,由于候选实在太多了,不能每一个都计算个分值,因此先筛选,缩小候选集合,这一步一般是经过简单的模型或者规则完成。
接下来是rank,给候选一个分值。
接下来就介绍这模型究竟是怎么构建的了。
1,the wide component
线性模型,经过cross-product产生交叉特征
2,the deep compoent
feed-forward neural network
上面的图展现的比较清楚,连续特征直接输入,category特征进行embedding。
3,join training
损失函数采用的是log-loss.
对于wide部分,采用的是FTRL with L1正则做为优化方法,deep部分采用的是AdaGrad.
这部分讲述了一些构建和部署模型的细节,有几个点比较有意思
1,data gengeration
对categorical的特征映射到ID,对连续特征映射经过它的累计分布映射到0-1
2,model traing
这里categorical特征映射到一个32维的embedding,而后与连续特征拼接到一块儿,构成一个大概1200维的向量
这里有一个值得注意的,对于新来的数据,论文采用一种warm-starting的方法,用原来的模型的embeding和linear模型的参数做为新模型的起始参数。
3,model serving
服务时间低于10ms,并行。
从实验上看,离线的AUC,深度学习的不如linear model,wide&deep最好,在线的效果更加突出。