前言
今天分享一篇谷歌2016发表的推荐论文《Wide & Deep Learning for Recommender Systems》。本文的亮点主要是作者提出了Wide部分与Deep部分结合,使模型具有较强的“记忆能力”和“泛化能力”。
本文约2.8k字,预计阅读15分钟
引言
本文是2016年谷歌提出的Wide&Deep模型。如其说谷歌提出了一个具体的模型,不如说是给出了一个线性模型与深度学习模型结合共同学习的架构,为后来的混合模型抛砖引玉。因此WIde&Deep模型在工业界发挥着巨大的影响力。该模型主要由两部分组成:
Wide部分:通过线性模型来处理大量历史的行为特征,使模型具有“记忆能力”。但其通常依赖于更多的特征工程。
Deep部分:通过对稀疏特征的embedding进行学习,模型可以较好地推广到不可见的深度特征组合,让模型具有“泛化能力”。但如果数据过于稀疏,那么神经网络会过度泛化,即过拟合。
Wide&Deep模型结合Wide和Deep的优势,能够快速处理并记忆大量历史行为特征,并且具有强大的表达能力。
有关该模型的结构,首先我们对文中提到“记忆能力”和“泛化能力”进行解释。
Memorization与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. 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.
翻译一下可以理解为:
记忆能力: 模型直接学习并利用(exploiting)历史数据中物品或特征“贡献频率”的能力。
泛化能力: 基于特征传递的相关性,探索(exploring)过去从未或很少发生的新特征组合。
「基于记忆的推荐」是指直接学习并利用历史数据中物品或者特征的“共现频率”的能力的模型,例如常见的协同过滤、逻辑回归模型都是具有较强的“记忆能力”,原始数据往往可以直接影响推荐结果,类似于“如果点击A,就推荐B”的规则式推荐。「基于泛化的推荐」是模型传递特征的相关性进行推荐。对于传统的协同过滤存在着缺陷,处理稀疏向量能力弱。为了解决上述问题,矩阵分解被提出,来增强模型的泛化能力。矩阵分解引入了隐向量的结构,这使得数据稀少的用户或物品也能生成隐向量,从而获得有数据支撑的推荐得分。对于深度学习模型,通过对特征的自动组合,挖掘数据中的潜在模式,从而提高模型的泛化能力。
讨论1: 上面关于记忆与泛化的描述,我们是否可以认为,存在一个用户与物品数量少,而流量【即用户与物品交互】过多的场景,那么基于记忆的推荐的性能不逊于基于泛化的推荐?在推荐精度相同的情况下,简单的推荐模型比复杂的深度学习模型效率更高,因此选择传统模型应该会更适合,也就一定程度上符合了奥卡姆剃刀原则。
Wide & Deep
Wide Component
Wide部分善于处理稀疏类的特征。该部分通常是由一个广义线性模型构成(如图1左):
其中特征