Wide & Deep Learning模型介绍
Wide & Deep Learning 是由Google Inc发表的paper:Wide & Deep Learning for Recommender Systems中提出的一种使用非线性特征的线性模型和一个用来embedding特征的深度学习,并且使用联合训练(joint training)的方法1。
Introduction2
通过将稀疏数据的非线性转化特征应用在广义线性模型中被广泛应用于大规模的回归和分类问题。通过广泛的使用交叉特征转化,使得特征交互的记忆性是有效的,并且具有可解释性,而然不得不做许多的特征工作。相对来说,通过从稀疏数据中学习低纬稠密embedding特征,并应用到深度学习中,只需要少量的特征工程就能对潜在的特征组合具有更好的范化性。但是当用户项目交互是稀疏和高纬数据的时候,利用了embeddings的深度学习则表现得过于笼统(over-generalize),推荐的都是些相关性很低的items。在这篇文章中,提出了一个wide & deep 联合学习模型,去结合推荐系统的memorization和generalization。
通过结合使用非线性特征的线性模型和一个用来embedding特征的深度学习,并且使用联合训练(joint training)的方法进行优化。思想是,基于交叉特征的线性模型只能从历史出现过的数据中找到非线性(显性的非线性),深度学习可以找到没有出现过的非线性(隐性的非线性)。memorization的话就是去把历史数据中显性的非线性找出来,generalization的就是范化性,就是把一些隐性的非线性找出来。
推荐系统可以被看做是一个搜索排序系统,其中输入的query是一系列的用户和文本信息,输出是items的排序列表。给定一个query,推荐的任务就是到数据库中去找出相关的items,然后对这些items根据相关对象,如点击或者购买行为,进行排序。
和传统的搜索排序问题一样,在推荐系统中,一个挑战就是区域同时达到memorization和generalization。Memorization可以被大概定义为学习items或者features之间的相关频率,在历史数据中探索相关性的可行性。Generalizaion的话则是基于相关性的传递,去探索一些在过去没有出现过的特征组合。基于memorization的推荐相对来说具有局部性,是在哪些用户和items已经有直接相关联的活动上。相较于memorization,generalization尝试去提高推荐items的多元化。
在工业中,对于大规模的在线推荐和排序系统,像逻辑回归这样的广义线性模型应用是相当广泛的,实现简单,可扩展性好,可解释性强。可以喂给它一些one-hot编码的稀疏特征,比如二值特征(user_installed_app=netfix)表示用户安装了Netflix。Memorization则可以通过对稀疏特征做交叉积转换获得,就是求交叉特征,比如AND操作 (user_installed_app= netflix, impression_app=pandora)这两个特征,当用户安装了Netflix并且之后展示在Pandora上,那么得到特征的值为1,其余为0。这个交叉特征就展示了特征对之间的相关性和目标lable之间的关联。在逻辑回归上实现generalization可以通过增加一些粗粒度的特征实现,如AND(user_installed_category=video, impression_category=music ),但是这些都是需要人工做特征工程实现,工作量极大。此外,cross-product transformation的一个限制就是他们不能生成从未在训练数据中出现过的query-item特征对。
而Embedding-based的模型,比如因子分解机(FM)或深度神经网络,只需要很少的特征工程,通过为每个query和item特征对(pair)学到一个低维的dense embedding vector,可以泛化到之前未见过的query-item特征对。但是如果潜在的query-item矩阵是稀疏,高秩的话,为query和items学习出一个有效的低纬表示往往很困难,比如基于特殊偏好的users,或者一些很少出现的小众items。在这种情况下,大多数的query-item没有交互,但是稠密的embedding还是会对全部的query-item对有非零的输出预测,因此能做出一些过范化和做出一些不太相关的推荐。另一方面,利用交叉积特征(cross-product features transformations)的线性模型能用很少的参数记住那些异常规则(exception_rules)。
Wide & Deep Learning3
The Wide Component(Wide 组件)
Wide组件是一个泛化的线性模型,,如Fig.1 图左所示。是预测值,是维特征向量,是模型参数,是bias。特征集包括原始的输入特征和转换后(cross-product transformation)的特征。cross-product transformation有如下定义:
其中为一个boolean
变量,如果第个特征是第个变换的一部分,那么为1; 否则为0。对于二值特征,一个cross-product transformation(比如:”AND(gender=female, language=en)”)只能当组成特征(“gender=female” 和 “language=en”)都为1时才会为1, 否则为0。这可以捕获二值特征间的交叉,为通用的线性模型添加非线性(显性的)。
The Deep Component (Deep组件)
Deep组件是一个前馈神经网络(feed-forward NN),如Fig.1图右所示。对于类别型特征,原始的输入是特征字符串(比如:language=en
)。这些稀疏的,高维的类别型特征会首先被转换成一个低维的、dense的、real-valued的向量,通常叫做embedding vector
。embedding的维度通常是到的阶。该embedding vectors被随机初始化,接着最小化最终的loss的方式训练得到该值。这些低维的dense embedding vectors接着通过前向传递被feed给神经网络的隐层。特别地,每个隐层都会执行以下的计算:
其中,是层数,是**函数(通常为ReLUs),,和分别是第层的activations,bias,以及weights。
Wide & Deep模型的联合训练
Wide组件和Deep组件组合在一起,对它们的输入日志进行一个加权求和来做为预测,它会被feed给一个常见的logistic loss function来进行联合训练。注意,联合训练(joint training)和集成训练(ensemble)有明显的区别。在ensemble中,每个独立的模型会单独训练,相互并不知道,只有在预测时会组合在一起。相反地,联合训练(joint training)会同时优化所有参数,通过将wide组件和deep组件在训练时进行加权求和的方式进行。这也暗示了模型的size:对于一个ensemble,由于训练是不联合的(disjoint),每个单独的模型size通常需要更大些(例如:更多的特征和转换)来达到合理的精度。相比之下,对于联合训练(joint training)来说,wide组件只需要补充deep组件的缺点,使用一小部分的cross-product特征转换即可,而非使用一个full-size的wide模型。
一个Wide&Deep模型的联合训练,通过对梯度进行后向传播算法、SGD优化来完成。训练中使用FTRL算法和L1正则做为Wide组件的优化器,对Deep组件使用AdaGrad。
组合模型如Fig.1 图中所示。对于一个logistic regression问题,模型的预测为:
其中是二分类的label,是sigmoid function, 是对原始特征做cross product transformations,是bias项。是所有wide模型权重向量,是应用在最终**函数上的权重。