参考自《深度学习推荐系统》,用于学习和记录。
前言
(1)与传统的机器学习模型相比,深度学习模型的表达能力更强,能够挖掘(2)深度学习的模型结构非常灵活,能够根据业务场景和数据特点,灵活调整模型结构,使模型与应用场景完美契合。
主流深度学习推荐模型的演化图谱
AutoRec 单隐层神经网络推荐模型
AutoRec 将自编码器(AutoEncoder)的思想和协同过滤结合,提出了一种单隐层神经网络推荐模型。
AutoRec模型是一个标准的自编码器,它的基本原理是利用协同过滤中的共现矩阵,完成物品向量或者用户向量的自编码。再利用自编码的结果得到用户对物品的预估评分,进而进行推荐排序。
自编码器
自编码器是指能够完成数据“自编码”的模型。无论是图像、音频,还是数据,都可以转换成向量的形式进行表达。假设其数据向量为 r \pmb{r} r 自编码器的作用是将向量 r \pmb{r} r 作为输入,通过自编码器后,得到的输出向量尽量接近其本身。
假设自编码器的重建函数为 h ( r ; θ ) h(r;\theta) h(r;θ) ,那么自编码器的目标函数为
min θ ∑ r ∈ S ∥ r − h ( r ; θ ) ∥ 2 2 \operatorname*{min}_{\theta}\sum_{r\in S}\lVert r-h(r;\theta)\rVert_{2}^{2} θminr∈S∑∥r−h(r;θ)∥22
其中, s s s 是所有数据向量的集合。
在完成自编码器的训练后,就相当于在重建函数 h ( r ; θ ) h(r;\theta) h(r;θ) 中存储了所有数据向量的“精华”。一般来说,重建函数的参数数量远小于输人向量的维度数量,因此自编码器相当于完成了数据压缩和降维的工作。
对一个物品i来说,所有 m m m 个用户对它的评分可形成一个 m m m 维的向量 r ( i ) = ( R 1 i , … , R m i ) \pmb{r}^{(i)}=(R_{1i},\ldots,R_{m i}) r(i)=(R1i,…,Rmi) ,AutoRec 要解决的问题是构建一个重建函数 h ( r ; θ ) h(r;\theta) h(r;θ) ,使所有该重建函数生成的评分向量与原评分向量的平方残差和最小。在得到 AutoRec 模型的重建函数后,还要经过评分预估和排序的过程才能得到最终的推荐列表。
下面为 AutoRec 模型的两个重点内容一重建函数的模型结构和利用重建函数得到最终推荐列表的过程。
AutoRec 模型的结构
网络的输入层是物品的评分向量 r \pmb{r} r ,输出层是一个多分类层。图中蓝色的神经元代表模型的 k k k 维单隐层,其中 k < < m k{<<}m k<<m
图中的 V V V 和 W \pmb{W} W 分别代表输入层到隐层,以及隐层到输出层的参数矩阵。该模型结构代表的重建函数的具体形式如下所示。
h ( r ; θ ) = f ( W ⋅ g ( V r + μ ) + b ) h(r;\theta)=f(W\cdot g(V r+\mu)+b) h(r;θ)=f(W⋅g(Vr+μ)+b)
其中, f ( ⋅ ) , g ( ⋅ ) f(\cdot),g(\cdot) f(⋅),g(⋅) 分别为输出层神经元和隐层神经元的激活函数。
为防止重构函数的过拟合,在加人L2正则化项后,AutoRec目标函数的具体形式如下所示。
min θ ∑ i = 1 n ∥ r ( i ) − h ( r ( i ) ; θ ) ∥ O 2 + λ 2 ⋅ ( ∥ W ∥ F 2 + ∥ V ∥ F 2 ) \underset{\theta}{\min}\sum_{i=1}^{n}\lVert\boldsymbol{r}^{(i)}-\boldsymbol{h}\big(\boldsymbol{r}^{(i)};\theta\big)\rVert_{\mathcal{O}}^{2}+\frac{\lambda}{2}\cdot(\lVert\boldsymbol{W}\rVert_{F}^{2}+\lVert\boldsymbol{V}\rVert_{F}^{2}) θmini=1∑n∥r(i)−h(r(i);θ)∥O2+2λ⋅(∥W∥F2+∥V∥F2)
由于 AutoRec 模型是一个非常标准的三层神经网络,模型的训练利用梯度反向传播即可完成。
神经元、神经网络和梯度反向传播
- 单神经元模型结构
- 简单神经网络
利用求导过程中的链式法则(ChainRule),可以解决梯度反向传播的问题。最终的损失函数到权重 w 1 w_{1} w1 的梯度是由损失函数到神经元 h 1 h_{1} h1 输出的偏导,以及神经元 h 1 h_{1} h1 输出到权重 w 1 w_{1} w1 的偏导相乘而来的。也就是说,最终的梯度逐层传导回来,“指导”权重 w 1 w_{1} w1 的更新。
∂ L o 1 ∂ w 1 = ∂ L o 1 ∂ h 1 ⋅ ∂ h 1 ∂ w 1 \frac{\partial L_{o_{1}}}{\partial w_{1}}=\frac{\partial L_{o_{1}}}{\partial h_{1}}\cdot\frac{\partial h_{1}}{\partial w_{1}} ∂w1∂Lo1=∂h1∂Lo1⋅∂w1∂h1
在具体的计算中,需要明确最终损失函数的形式,以及每层神经元激活函数的形式,再根据具体的函数形式进行偏导的计算。
基于 AutoRec 模型的推荐过程
基于AutoRec模型的推荐过程并不复杂。当输入物品i的评分向量为 r ( i ) \pmb{r}^{(\mathrm{i})} r(i) 时,模型的输出向量 h ( r ( i ) ; θ ) h(r^{(\mathbf{i})};\theta) h(r(i);θ) 就是所有用户对物品i的评分预测。那么,其中的第 u u u 维就是用户 u \mathbf{u} u 对物品i的预测 R ^ m i \widehat{R}_{\mathrm{mi}} R mi ,如下所示。
R ^ u i = ( h ( r ( i ) ; θ ^ ) ) u \widehat{R}_{\mathbf{u}\mathbf{i}}=\big(h\big(\pmb{r}^{(\mathbf{i})};\widehat{\theta}\big)\big)_{u} R ui=(h(r(i);θ ))u
通过遍历输入物品向量就可以得到用户u对所有物品的评分预测,进而根据评分预测排序得到推荐列表。
与之前的协同过滤算法一样,AutoRec也分为基于物品的AutoRec和基于用户的AutoRec。以上介绍的AutoRec输入向量是物品的评分向量,因此可称为I-AutoRec(ItembasedAutoRec),如果换做把用户的评分向量作为输入向量,则得到U-AutoRec(User based Auto Rec)。
AutoRec 特点和局限性
AutoRec模型从神经网络的角度出发,使用一个单隐层的AutoEncoder泛化用户或物品评分,使模型具有一定的泛化和表达能力。由于AutoRec模型的结构比较简单,使其存在一定的表达能力不足的问题。
在模型结构上,AutoRec模型和后来的词向量模型(Word2vec)完全一致,但优化目标和训练方法有所不同。
Deep Crossing 模型——经典的深度学习架构
相比 AutoRec 模型过于简单的网络结构带来的一些表达能力不强的问题, DeepCrossing 模型完整地解决了从特征工程、稀疏向量稠密化、多层神经网络进行优化目标拟合等一系列深度学习在推荐系统中的应用问题,为后续的研究打下了良好的基础。
Deep Crossing
DeepCrossing模型的应用场景是微软搜索引擎Bing中的搜索广告推荐场景。
针对该使用场景,微软使用的特征如表3-1所示,这些特征可以分为三类:一类是可以被处理成 one-hot 或者 multi-hot 向量的类别型特征,包括用户搜索词(query)、广告关键词(keyword)、广告标题(title)、落地页(landing page)、匹配类型(matchtype);一类是数值型特征,微软称其为计数型(counting)特征,包括点击率、预估点击率(clickprediction);一类是需要进一步处理的特征,包括广告计划(campaign)、曝光样例(impression)、点击样例(click)等。严格地说,这些都不是独立的特征,而是一个特征的组别,需要进一步处理。例如,可以将广告计划中的预算(budget)作为数值型特征,而广告计划的id则可以作为类别型特征。
类别型特征可以通过 one-hot 或 multi-hot 编码生成特征向量,数值型特征则可以直接拼接进特征向量中,在生成所有输人特征的向量表达后, DeepCrossing 模型利用该特征向量进行CTR预估。
Deep Crossing 模型的网络结构
为完成端到端的训练,DeepCrossing模型要在其内部网络中解决如下问题。
(1)离散类特征编码后过于稀疏,不利于直接输人神经网络进行训练,如何解决稀疏特征向量稠密化的问题。
(2)如何解决特征自动交叉组合的问题。(3)如何在输出层中达成问题设定的优化目标。
DeepCrossing模型分别设置了不同的神经网络层来解决上述问题。如图所示,4层—Embedding层、Stacking层、Multiple ResidualUnits层和Scoring层。接下来,从下至上依次介绍各层的功能和实现。
Embedding层:Embedding层的作用是将稀疏的类别型特征转换成稠密的Embedding向量。
Stacking层:Stacking层(堆叠层)的作用比较简单,Embedding特征和数值型特征拼接在一起,形成新的包含全部特征的特征向量,该层通常也被称为连接(concatenate)层。
MultipleResidualUnits层:该层的主要结构是多层感知机,相比标准的以感知机为基本单元的神经网络,DeepCrossing模型采用了多层残差网络(Multi-Layer Residual Network)作为MLP的具体实现。通过多层残差网络对特征向量各个维度进行充分的交叉组合,使模型能够抓取到更多的非线性特征和组合特征的信息,进而使深度学习模型在表达能力上较 传统机器学习模型大为增强。
什么是残差神经网络,其特点是什么
- 残差单元
与传统的感知机不同,残差单元的特点主要有两个:
(1)输入经过两层以ReLU为激活函数的全连接层后,生成输出向量。
(2)输入可以通过一个短路(shortcut)通路直接与输出向量进行元素加(element-wiseplus)操作,生成最终的输出向量。
在这样的结构下,残差单元中的两层ReLU网络其实拟合的是输出和输人之间的“残差” x o − x i { {\pmb x}^{\mathrm o}-{\pmb x}^{\mathrm{i}}} xo−xi ),这就是残差神经网络名称的由来。
残差神经网络的诞生主要是为了解决两个问题:
(1)神经网络是不是越深越好?对于传统的基于感知机的神经网络,当网络加深之后,往往存在过拟合现象,即网络越深,在测试集上的表现越差。而在残差神经网络中,由于有输入向量短路的存在,很多时候可以越过两层ReLU网络,减少过拟合现象的发生。
(2)当神经网络足够深时,往往存在严重的梯度消失现象。梯度消失现象是指在梯度反向传播过程中,越靠近输人端,梯度的幅度越小,参数收敛的速度越慢。为了解决这个问题,残差单元使用了ReLU激活函数取代原来的sigmoid激活函数。此外,输人向量短路相当于直接把梯度毫无变化地传递到下一层,这也使残差网络的收敛速度更快。
Scoring层:Scoring层作为输出层,就是为了拟合优化目标而存在的。对于CTR预估这类二分类问题(点击广告或内容的概率),Scoring层往往使用的是逻辑回归模型,而对于图像分类等多分类问题,Scoring层往往采用softmax模型。
NeuralCF 模型——CF 与深度学习的结合
如果从深度学习的视角看待矩阵分解模型,那么矩阵分解层的用户隐向量和物品隐向量完全可以看作一种Embedding方法。最终的“Scoring层”就是将用户隐向量和物品隐向量进行内积操作后得到“相似度”,这里的“相似度”就是对评分的预测。综上,利用深度学习网络图的方式来描述矩阵分解模型的架构:
在实际使用矩阵分解来训练和评估模型的过程中,往往会发现模型容易处于欠拟合的状态,究其原因是因为矩阵分解的模型结构相对比较简单,特别是“输出层”(也被称为“Scoring层”),无法对优化目标进行有效的拟合。这就要求模型有更强的表达能力,在此动机的启发下,新加坡国立大学的研究人员提出了NeuralCF模型。
NeuralCF
如图所示,NeuralCF用“多层神经网络 + + + 输出层的结构替代了矩阵分解模型中简单的内积操作。这样做的收益是直观的,一是让用户向量和物品向量做更充分的交叉,得到更多有价值的特征组合信息;二是引人更多的非线性特征,让模型的表达能力更强。
原始的矩阵分解使用“内积”的方式让用户和物品向量进行交互,为了进一步让向量在各维度上进行充分交叉,可以通过“元素积”(element-wiseproduct,长度相同的两个向量的对应维相乘得到另一向量)的方式进行互操作,再通过逻辑回归等输出层拟合最终预测目标。
softmax 函数
给定一个 n _n n 维向量,softmax函数将其映射为一个概率分布。标准的softmax函数 σ : R n → R n \sigma\!:\!\mathbb{R}^{n}\to\mathbb{R}^{n} σ:Rn→Rn 由下面的公式定义:
σ ( X ) i = exp ( x i ) ∑ j = 1 n exp ( x j ) \sigma(X)_{i}={\frac{\exp(x_{i})}{\sum_{j=1}^{n}\exp\!\left(x_{j}\right)}}\, σ(X)i=∑<