目录

深度学习推荐模型的演化关系图

在这里插入图片描述

  • (1) 改变神经网络的复杂程度:从最简单的单层神经网络模型 AutoRec (自编码器推荐),到经典的深度神经网络结构 Deep Crossing (深度特征交叉),其主要的进化方式在于增加了深度神经网络的层数和结构复杂度
  • (2) 改变特征交叉方式:例如,改变了用户向量和物品向量互操作方式的 NeuralCF (Neural Collaborative Filtering, 神经网络协同过滤),定义了多种特征向量交叉操作的 PNN (Product-based Neural Network, 基于积操作的神经网络) 模型
  • (3) 组合模型:这类模型主要是指 Wide&Deep 模型及其后续变种 Deep&Cross, DeepFM 等,其思路是通过组合两种不同特点、优势互补的深度学习网络,提升模型的综合能力
  • (4) FM 模型的深度学习演化版本:传统推荐模型 FM 在深度学习时代有了诸多后续版本,其中包括 NFM (Neural Factorization Machine, 神经网络因子分解机)、FNN (Factorization-machine supported Neural Network, 基于因子分解机支持的神经网络)、AFM (Attention neural Factorization Machine, 注意力因子分解机) 等,它们对 FM 的改进方向各不相同。例如,NFM 主要使用神经网络提升 FM 二阶部分的特征交叉能力,AFM 是引入了注意力机制的 FM 模型,FNN 利用 FM 的结果进行网络初始化
  • (5) 注意力机制与推荐模型的结合:主要包括结合了 FM 与注意力机制的 AFM 和引入了注意力机制的 CTR 预估模型 DIN (Deep Interest Network, 深度兴趣网络)
  • (6) 序列模型与推荐模型的结合:这类模型的特点是使用序列模型模拟用户行为或用户兴趣的演化趋势,代表模型是 DIEN (Deep Interest Evolution Network, 深度兴趣进化网络)
  • (7) 强化学习与推荐模型的结合:这类模型将强化学习应用于推荐领域,强调模型的在线学习和实时更新,其代表模型是 DRN (Deep Reinforcement Learning Network, 深度强化学习网络)

AutoRec – 单隐层神经网络推荐模型

AutoRec 模型的基本原理

  • AutoRec 模型是一个标准的自编码器 (AutoEncoder),它的基本原理是利用协同过滤中的共现矩阵 (共现矩阵中缺失的评分可以用默认值或平均分值表示),完成物品向量或者用户向量的自编码。再利用自编码的结果得到用户对物品的预估评分,进而进行推荐排序

下面以预测物品评分向量的 I-AutoRec (Item based AutoRec) 为例,预测用户评分向量的 U-AutoRec (User based AutoRec) 同理

AutoRec 模型的结构

  • 如下图所示,AutoRec 使用单隐层神经网络的结构来解决构建重建函数的问题
    在这里插入图片描述输入为物品向量或用户向量,输出为
    h ( r ; θ ) = f ( W ⋅ g ( V r + μ ) + b ) h(r;\theta)=f(W\cdot g(Vr+\mu)+b) h(r;θ)=f(Wg(Vr+μ)+b)其中 f , g f,g f,g 为激活函数。目标函数为 (为了防止过拟合,加入了 L2 正则项):
    min ⁡ θ 1 n ∑ i = 1 n ∣ ∣ r ( i ) − h ( r ( i ) ; θ ) ∣ ∣ 2 2 + λ 2 ( ∣ ∣ W ∣ ∣ F 2 + ∣ ∣ V ∣ ∣ F 2 ) \min_\theta\frac{1}{n}\sum_{i=1}^n||r^{(i)}-h(r^{(i)};\theta)||_2^2+\frac{\lambda}{2}(||W||_F^2+||V||_F^2) θminn1i=1nr(i)h(r(i);θ)22+2λ(WF2+VF2)

基于 AutoRec 模型的推荐过程

  • 当输入物品 i i i 的评分向量为 r ( i ) r^{(i)} r(i) 时,模型的输出向量 h ( r ( i ) ; θ ) h(r^{(i)};\theta) h(r(i);θ) 就是所有用户对物品 i i i 的评分预测。通过遍历输入物品向量就可以得到用户 u u u 对所有物品的评分预测,进而根据评分预测排序得到推荐列表

U-AutoRec v.s. I-AutoRec

  • 在进行推荐列表生成的过程中,U-AutoRec 相比 I-AutoRec 的优势在于仅需输入一次目标用户的用户向量,就可以重建用户对所有物品的评分向量。也就是说,得到用户的推荐列表仅需一次模型推断过程;其劣势是用户向量的稀疏性可能会影响模型效果

Deep Crossing 模型 – 经典的深度学习架构


  • 相比 AutoRec 模型过于简单的网络结构带来的一些表达能力不强的问题, Deep Crossing 模型完整地解决了从特征工程、稀疏向量稠密化、多层神经网络进行优化目标拟合等一系列深度学习在推荐系统中的应用问题,为后续的研究打下了良好的基础

Deep Crossing 模型的应用场景

  • Deep Crossing 模型的应用场景是微软搜索引擎 Bing 中的搜索广告推荐场景。尽可能地增加搜索广告的点击率,准确地预测广告点击率,并以此作为广告排序的指标之一,是非常重要的工作,也是 Deep Crossing 模型的优化目标

Deep Crossing 模型的网络结构

在这里插入图片描述

  • Embedding 层:Embedding 层的作用是将稀疏的类别型特征转换成稠密的 Embedding 向量,用于完成稀疏特征向量的稠密化 (数值型特征不需要经过 Embedding 层,直接进入 Stacking 层即可)
  • Stacking 层:把不同的 Embedding 特征和数值型特征拼接在一起,形成新的包含全部特征的特征向量
  • Multiple Residual Units 层:采用 ResNet 结构,用于对特征向量各个维度进行充分的交叉组合,使模型能够抓取到更多的非线性特征和组合特征的信息
  • Scoring 层:对于 CTR 预估这类二分类问题,Scoring 层往往使用的是逻辑回归模型 (sigmoid)

Deep Crossing 模型对特征交叉方法的革命

  • 从目前的时间节点上看,Deep Crossing 模型是平淡无奇的,因为它没有引入任何诸如注意力机制序列模型等特殊的模型结构,只是采用了常规的 "Embedding+多层神经网络” 的经典深度学习结构
  • 但从历史的尺度看,Deep Crossing 模型的出现是有革命意义的。Deep Crossing 模型中没有任何人工特征工程的参与,原始特征经 Embedding 后输入神经网络层,将全部特征交叉的任务交给模型。相比 FM,FFM 模型只具备二阶特征交叉的能力,Deep Crossing 模型可以通过调整神经网络的深度进行特征之间的 “深度交叉”,这也是 Deep Crossing 名称的由来

NeuralCF 模型 – CF 与深度学习的结合

从深度学习的视角重新审视矩阵分解模型

在这里插入图片描述

其实就是直接由 Embedding 层得到用户和物品的隐向量,进而由向量内积得到预估评分

  • 在实际使用矩阵分解来训练和评估模型的过程中,往往会发现模型容易处于欠拟合的状态,究其原因是因为矩阵分解的模型结构相对比较简单,特别是 “输出层” ( Scoring 层),无法对优化目标进行有效的拟合。这就要求模型有更强的表达能力,在此动机的启发下,新加坡国立大学的研究人员提出了 NeuralCF 模型

NeuralCF 模型的结构

  • NeuralCF 用 “多层神经网络 + 输出层” 的结构替代了矩阵分解模型中简单的内积操作,让用户向量和物品向量做更充分的交叉,得到更多有价值的特征组合信息,同时引入更多的非线性特征,让模型的表达能力更强
    在这里插入图片描述

广义矩阵分解模型

  • 事实上,用户和物品向量的互操作层可以被任意的互操作形式 所代替,这就是所谓的 “广义矩阵分解” 模型

NeuralCF 混合模型

  • NeuralCF 混合模型整合了原始 NeuralCF 模型和以元素积 (element-wise product) 为互操作的广义矩阵分解模型。这让模型具有了更强的特征组合和非线性能力
    在这里插入图片描述

NeuralCF 模型的优势和局限性

  • NeuralCF 模型实际上提出了一个模型框架,它基于用户向量和物品向量这两个 Embedding 层,利用不同的互操作层进行特征的交叉组合,并且可以灵活地进行不同互操作层的拼接
  • NeumlCF 模型也存在局限性。由于是基于协同过滤的思想进行构造的,所以 NeuralCF 模型并没有引入更多其他类型的特征,这在实际应用中无疑浪费了其他有价值的信息。此外,对于模型中互操作的种类并没有做进一步的探究和说明。这都需要后来者进行更深入的探索

PNN 模型 – 加强特征交叉能力


  • NeuralCF 模型的主要思想是利用多层神经网络替代经典协同过滤的点积操作,加强模型的表达能力。广义上,任何向量之间的交互计算方式都可以用来替代协同过滤的内积操作,相应的模型可称为广义的矩阵分解模型。但NeuralCF 模型只提到了用户向量和物品向量两组特征向量,如果加入多组特征向量又该如何设计特征交互的方法呢? 2016 年,上海交通大学的研究人员提出的 PNN 模型,给出了特征交互方式的几种设计思路

PNN 模型的网络架构

  • PNN 模型的提出同样是为了解决 CTR 预估和推荐系统的问题。相比 Deep Crossing 模型,PNN 唯一的区别在于用乘积层 (Product Layer) 代替了 Deep Crossing 模型中的 Stacking 层。也就是说,不同特征的 Embedding 向量不再是简单的拼接,而是用 Product 操作进行两两交互,更有针对性地获取特征之间的交叉信息
    在这里插入图片描述

Product 层的多种特征交叉方式

  • 针对特征的交叉方式,PNN 模型也给出了更多具体的互操作方法:PNN 模型的乘积层由线性操作部分 (图 3-12 中乘积层的 z z z 部分,对各特征向量进行线性拼接) 和乘积操作部分 (图 3-12 中乘积层的 p p p 部分) 组成。其中,乘积特征交叉部分又分为内积操作外积操作,使用内积操作的 PNN 模型被称为 IPNN (Inner Product-based Neural Network), 使用外积操作的 PNN 模型被称为 OPNN (Outer Product-based Neural Network)
  • 事实上,PNN 模型在经过对特征的线性和乘积操作后,并没有把结果直接送入上层的 L 1 L_1 L1 全连接层,而是在乘积层内部又进行了局部全连接层的转换,分别将线性部分 z z z,乘积部分 p p p 映射成了 D 1 D_1 D1 维的输入向量 l z l_z lz l p l_p lp ( D 1 D_1 D1 为 L1 隐层的神经元数量),再将 l z l_z lz l p l_p lp 叠加,输入 L1 隐层,也就是说,L1 层的输出 l 1 l_1 l1
    l 1 = r e l u ( l z + l p + b 1 ) l_1=relu(l_z+l_p+b_1) l1=relu(lz+lp+b1)

内积操作

  • 假设经过 Embedding 层的输入特征向量分别为 f i , f j f_i,f_j fi,fj f i ∈ R M f_i\in\R^M fiRM,特征的内积互操作 g i n n e r ( f i , f j ) g_{inner}(f_i,f_j) ginner(fi,fj) 定义为:
    g i n n e r ( f i , f j ) = f i T f j g_{inner}(f_i,f_j)=f_i^Tf_j ginner(fi,fj)=fiTfj从矩阵角度看,Emdedding 层的特征向量经过乘积层后的结果形成了一个 N × N N\times N N×N 的矩阵 P P P,其中 P i j = f i T f j P_{ij}=f_i^Tf_j Pij=fiTfj
  • 如果将 L1 隐层和 IPNN 的乘积层一起考虑,假设 W p d ∈ R N × N W_p^d\in\R^{N\times N} WpdRN×N 为第 d d d 个结点连接乘积层的权重,那么 L1 层输出的第 d d d 个结点 l p d l_p^d lpd
    l p d = W p d ⊙ P = ∑ i = 1 N ∑ j = 1 N ( W p d ) i j P i j l_p^d=W_p^d\odot P=\sum_{i=1}^N\sum_{j=1}^N(W_p^d)_{ij}P_{ij} lpd=WpdP=i=1Nj=1N(Wpd)ijPij其中 W p d W_p^d Wpd P P P 均为对称矩阵。为了进一步降低模型复杂度,类似 FM,可以利用一阶矩阵分解 θ d θ d   T \theta^d\theta^{d\ T} θdθd T 来近似 W p d W_p^d Wpd,因此有
    l p d = W p d ⊙ P = ∑ i = 1 N ∑ j = 1 N θ i d θ j d < f i , f j > = < ∑ i = 1 N θ i d f i , ∑ j = 1 N θ j d f j > l_p^d=W_p^d\odot P=\sum_{i=1}^N\sum_{j=1}^N\theta^d_i\theta^{d}_j\left<f_i,f_j\right> =\left<\sum_{i=1}^N\theta^d_if_i,\sum_{j=1}^N\theta^d_jf_j\right> lpd=WpdP=i=1Nj=1Nθidθjdfi,fj=i=1Nθidfi,j=1Nθjdfj δ i d = θ i d f i \delta_i^d=\theta^d_if_i δid=θidfi,则有
    l p d = < ∑ i = 1 N δ i d , ∑ j = 1 N δ i d > = ∣ ∣ ∑ i = 1 N δ i d ∣ ∣ 2 l_p^d=\left<\sum_{i=1}^N\delta_i^d,\sum_{j=1}^N\delta_i^d\right>=||\sum_{i=1}^N\delta_i^d||^2 lpd=i=1Nδid,j=1Nδid=i=1Nδid2这就相当于直接将乘积层和局部 L1 隐层结合到了一起,时间复杂度为 D 1 × N × M D_1\times N\times M D1×N×M

外积操作

  • 外积操作是对输入特征向量 f i , f j f_i,f_j fi,fj 的各维度进行两两交叉,生成特征交叉矩阵
    g o u t e r ( f i , f j ) = f i f j T g_{outer}(f_i,f_j)=f_if_j^T gouter(fi,fj)=fifjT
  • 假设 M M M 是输入向量的维度。这样的外积操作无疑会直接将问题的复杂度从原来的 M M M 提升到 M 2 M^2 M2。为了在一定程度上减小模型训练的负担,PNN 模型的论文中介绍了一种降维的方法,就是把所有两两特征 Embedding 向量外积互操作的结果叠加 (Superposition), 形成一个叠加外积互操作矩阵 p p p
    p = ∑ i = 1 N ∑ j = 1 N g o u t e r ( f i , f j ) = ∑ i = 1 N ∑ j = 1 N f i f j T = f Σ f Σ T p=\sum_{i=1}^N\sum_{j=1}^Ng_{outer}(f_i,f_j)=\sum_{i=1}^N\sum_{j=1}^Nf_if_j^T=f_\Sigma f_\Sigma^T p=i=1Nj=1Ngouter(fi,fj)=i=1Nj=1NfifjT=fΣfΣT其中, f Σ = ∑ i = 1 N f i f_\Sigma=\sum_{i=1}^Nf_i fΣ=i=1Nfi。从上式的最终形式看,叠加矩阵的最终形式类似于让所有特征 Embedding 向量通过一个平均池化层后,再进行外积互操作
    • 在实际应用中,还应对平均池化的操作谨慎对待。因为把不同特征对应维度进行平均,实际上是假设不同特征的对应维度有类似的含义。但显然,如果一个特征是 “年龄”,一个特征是 “地域”,那么这两个特征在经过各自的Embedding 层后,二者的 Embedding 向量不在一个向量空间中,显然不具备任何可比性。这时,把二者平均起来,会模糊很多有价值的信息。平均池化的操作经常发生在同类 Embedding 上,例如,将用户浏览过的多个物品的 Embedding 进行平均。因此,PNN 模型的外积池化操作也需要谨慎,在训练效率和模型效果上进行权衡

PNN 模型的优势和局限性

  • PNN 的结构特点在于强调了特征 Embedding 向量之间的交叉方式是多样化的,相比于简单的交由全连接层进行无差别化的处理,PNN 模型定义的内积和外积操作显然更有针对性地强调了不同特征之间的交互,从而让模型更容易捕获特征的交叉信息
  • 但 PNN 模型同样存在着一些局限性,例如在外积操作的实际应用中,为了优化训练效率进行了大量的简化操作。此外,对所有特征进行无差别的交叉,在一定程度上忽略了原始特征向量中包含的有价值信息

  • 如何综合原始特征及交叉特征,让特征交叉的方式更加高效,后续的 Wide&Deep 模型和基于 FM 的各类深度学习模型将给出它们的解决方案

Wide&Deep 模型 – 记忆能力和泛化能力的综合


  • Wide&Deep 模型的主要思路正如其名,是由单层的 Wide 部分和多层的 Deep 部分组成的混合模型。其中,Wide 部分的主要作用是让模型具有较强的 “记忆能力” (memorization); Deep 部分的主要作用是让模型具有 “泛化能力” (generalization), 正是这样的结构特点,使模型兼具了逻辑回归和深度神经网络的优点 – 能够快速处理并记忆大量历史行为特征,并且具有强大的表达能力,不仅在当时迅速成为业界争相应用的主流模型,而且衍生出了大量以 Wide&Deep 模型为基础结构的混合模型,影响力一直延续到至今

模型的记忆能力与泛化能力

记忆能力

  • “记忆能力” 可以被理解为模型直接学习并利用历史数据中物品或者特征的 “共现频率” 的能力。一般来说,协同过滤、逻辑回归等简单模型有较强的 “记忆能力”。由于这类模型的结构简单,原始数据往往可以直接影响推荐结果,产生类似于 “如果点击过 A A A 就推荐 B B B” 这类规则式的推荐,这就相当于模型直接记住了历史数据的分布特点,并利用这些记忆进行推荐
    • 例如,假设在 Google Play 推荐模型的训练过程中,设置如下组合特征AND(user_installed_app=netflix, impression_app=pandora) (简称 netflix&pandora), 它代表用户已经安装了 netflix 这款应用,而且曾在应用商店中看到过 pandora 这款应用。如果以 “最终是否安装 pandora” 为数据标签 (label), 则可以轻而易举地统计出 netflix&pandora 这个特征和安装 pandora 这个标签之间的共现频率。假设二者的共现频率高达 10% (全局的平均应用安装率为 1%), 这个特征如此之强,以至于在设计模型时,希望模型一发现有这个特征,就推荐 pandora 这款应用,这就是所谓的模型的 “记忆能力”。像逻辑回归这类简单模型,如果发现这样的 “强特征”,则其相应的权重就会在模型训练过程中被调整得非常大,这样就实现了对这个特征的直接记忆。相反,对于多层神经网络来说,特征会被多层处理,不断与其他特征进行交叉,因此模型对这个强特征的记忆反而没有简单模型深刻

泛化能力

  • “泛化能力” 可以被理解为模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。深度神经网络通过特征的多次自动组合,可以深度发掘数据中潜在的模式,即使是非常稀疏的特征向量输入,也能得到较稳定平滑的推荐概率,这就是简单模型所缺乏的 “泛化能力”

Wide&Deep 模型的结构

在这里插入图片描述

  • Wide&Deep 模型把单输入层的 Wide 部分与由 Embedding 层和多隐层组成的 Deep 部分连接起来,一起输入最终的输出层。单层的 Wide 部分善于处理大量稀疏的 i d id id 类特征;Deep 部分利用神经网络表达能力强的特点,进行深层的特征交叉,挖掘藏在特征背后的数据模式。最终,利用逻辑回归模型,输出层将 Wide 部分和 Deep 部分组合起来,形成统一的模型

下面以 Google Play app 推荐的场景为例进行说明

在这里插入图片描述

  • Deep 部分的输入是全量的特征向量,包括数值型特征:用户年龄 (Age)、已安装应用数量 (#App Installs)… 以及类别型特征:设备类型 (Device Class)、已安装应用 (User Installed App) (multi-hot vector)、曝光应用 (Impression App) (multi-hot vector) 等特征。在类别型特征经过 Embedding 层后拼接成 1200 维的 Embedding 向量,再依次经过 3 层 ReLU 全连接层,最终输入 LogLoss 输出层
  • Wide 部分的输入仅仅是已安装应用和曝光应用两类特征,其中已安装应用代表用户的历史行为,而曝光应用代表当前的待推荐应用。选择这两类特征的原因是充分发挥 Wide 部分 “记忆能力” 强的优势,记忆已安装应用与曝光应用之间的相关性,有点类似装个这个 app 后还可能会装什么。Wide 部分组合 “已安装应用” 和 “曝光应用” 两个特征的函数被称为交叉积变换 (Cross Product Transformation) 函数,其形式化定义如下所示:
    ϕ k ( x ) = ∏ i = 1 d x i c k i , c k i ∈ { 0 , 1 } \phi_k(x)=\prod_{i=1}^dx_i^{c_{ki}},\quad c_{ki}\in\{0,1\} ϕk(x)=i=1dxicki,cki{0,1} c k i c_{ki} cki 是一个布尔变量,当第 i i i 个特征属于第 k k k 个组合特征时, c k i c_{ki} cki 的值为 1, 否则为 0; x i x_i xi 是第 i i i 个特征的值。例如,对于 “AND(user_installed_app=netflix, impression_app=pandora)” 这个组合特征来说,只有当 “user_installed_app=netflix” 和 “impression_app=pandora” 这两个特征同时为 1 时,其对应的交叉积变换层的结果才为 1,否则为 0。Wide 部分的输出 y y y 可写为
    y = w T [ x , ϕ ( x ) ] + b y=w^T[x,\phi(x)]+b y=wT[x,ϕ(x)]+bGoogle play app 推荐中,Wide 部分只使用了 “已安装应用 × \times × 曝光应用” 的一组特征叉乘。由于已安装应用和曝光应用均为 multi-hot vector,假如应用数为 N N N,那么 Wide 部分的特征总维数就为 N × N N\times N N×N
  • Wide&Deep 最终的输出概率值为
    P ( Y = 1 ∣ x ) = σ ( w w i d e T [ x , ϕ ( x ) ] + w d e e p T a ( l f ) + b ) P(Y=1|x)=\sigma(w^T_{wide}[x,\phi(x)]+w_{deep}^Ta^{(l_f)}+b) P(Y=1x)=σ(wwideT[x,ϕ(x)]+wdeepTa(lf)+b)其中, σ \sigma σ 为 Sigmoid 函数, a ( l f ) a^{(l_f)} a(lf) 是 Deep 部分最后一层的激活值

Wide&Deep 模型的进化 – Deep&Cross 模型 (DCN)


  • 在 Wide&Deep 模型之后,有越来越多的工作集中于分别改进 Wide&Deep 模型的 Wide 部分或是 Deep 部分。较典型的工作是 2017 年由斯坦福大学和谷歌的研究人员提出的 Deep&Cross 模型。DCN 的主要思路是使用 Cross 网络替代原来的 Wide 部分,Deep 部分的设计思路并没有本质的改变

交叉网络

  • 设计 Cross 网络的目的是增加特征之间的交互力度,使用多层交叉层对输入向量进行特征交叉。假设第 l l l交叉层的输出向量为 x l x_l xl, 那么第 x l + 1 x_{l+1} xl+1 层的输出向量如下式所示:
    x l + 1 = x 0 x l T w l + b l + x l x_{l+1}=x_0x_l^Tw_l+b_l+x_l xl+1=x0xlTwl+bl+xl主要就是将输入向量 x l x_l xl 与输入 Cross 网络第一层的稠密特征向量 x 0 x_0 x0 作特征交叉。假设有 L L L 个交叉层,则可以进行 L + 1 L+1 L+1 维的特征交叉。因此,交叉网络可以以一种参数共享的方式高效地进行特征的自动化交叉,避免了更多基于业务理解的人工特征组合
  • 同时可以看出,交叉层在增加参数方面是比较 “克制” 的,在每一层均保留了输入向量,因此输出与输入之间的变化不会特别明显

Deep&Cross 模型

在这里插入图片描述

FM 与深度学习模型的结合

FNN – 用 FM 的隐向量完成 Embedding 层初始化


FNN 模型结构

  • FNN 的模型结构初步看是一个类似 Deep Crossing 模型的经典深度神经网络,从稀疏输入向量到稠密向量的转换过程也是经典的 Embedding 层的结构
    在这里插入图片描述

Embedding 层的收敛速度往往很慢

  • FNN 模型到底在哪里与 FM 模型进行了结合呢?问题的关键还在于 Embedding 层的改进。在神经网络的参数初始化过程中,往往采用随机初始化这种不包含任何先验信息的初始化方法。由于 Embedding 层的输入极端稀疏化,导致 Embedding 层的收敛速度非常缓慢。再加上 Embedding 层的参数数量往往占整个神经网络参数数量的大半以上,因此模型的收敛速度往往受限于 Embedding 层

用 FM 模型训练好的各特征隐向量初始化 Embedding 层的参数

  • 针对 Embedding 层收敛速度的难题,FNN 模型的解决思路是用 FM 模型训练好的各特征隐向量初始化 Embedding 层的参数,相当于在初始化神经网络参数时,已经引入了有价值的先验信息
  • 这里再回顾一下 FM 的数学形式,
    y F M ( x ) = s i g m o i d ( w 0 + ∑ i = 1 N w i x i + ∑ i = 1 N ∑ j = i + 1 N < v i , v j > x i x j ) y_{FM}(x)=sigmoid\left(w_0+\sum_{i=1}^Nw_ix_i+\sum_{i=1}^N\sum_{j=i+1}^N\left<v_i,v_j\right>x_ix_j\right) yFM(x)=sigmoid(w0+i=1Nwixi+i=1Nj=i+1Nvi,vjxixj)其中的参数主要包括常数偏置 w 0 w_0 w0,一阶参数部分 w i w_i wi 和二阶隐向量部分 v i v_i vi
  • 下面用图示的方法显示 FM 各参数和 FNN 中 Embedding 层各参数的对应关系 (在 FNN 模型中,特征被分成了不同特征域, 因此每个特征域具有对应的 Embedding 层,并且每个特征域 Embedding 的维度都应与 FM 隐向量维度保持一致;下图中 FM 隐向量维度为 3)
    在这里插入图片描述需要注意的是,上图虽然把 FM 中的参数指向了 Embedding 层各神经元,但其具体意义是初始化 Embedding 神经元与输入神经元之间的连接权重。具体来说,Embedding 层与全连接层的偏置用 FM 的偏置参数 w 0 w_0 w0 去初始化 ,每个特征域的第一个神经元的连接权重用一阶参数 w i w_i wi 去初始化,其余神经元的连接权重用二阶参数 v i v_i vi 去初始化。因此初始化后,第 i i i 个输入特征的二阶输出部分 (i.e. 第 i i i 个输入特征所属特征域的后 k k k 个神经元) 即为 x i v i x_iv_i xivi,一整个特征域的二阶输出部分即为 ∑ i = s t a r t e n d x i v i \sum_{i=start}^{end}x_iv_i i=startendxivi,相当于是以域为单位,用之后的全连接层来代替 FM 中二阶特征交叉的点积操作 (FM 中的二阶部分相当于是用点积操作来进行所有特征的 v i x i v_ix_i vixi 的交叉)

在 FNN 模型的原始实现中,整个梯度下降过程还是会更新 Embedding 的权重,如果希望进一步加快网络的收敛速度,还可以采用 “固定 Embedding 层权重,仅更新上层神经网络权重” 的方法,这是更彻底的 Embedding 预训练方法

DeepFM – 用 FM 代替 Wide 部分


  • DeepFM 用 FM 替换了 Wide&Deep 模型原来的 Wide 部分,加强了浅层网络部分特征组合的能力。如下图所示,左边的 FM 部分与右边的深度神经网络部分共享相同的 Embedding 层。左侧的 FM 部分对不同的特征域的 Embedding 进行了两两交叉, 也就是将 Embedding 向量当作原 FM 中的特征隐向量。最后将 FM 的输出与 Deep 部分的输出一同输入最后的输出层,参与最后的目标拟合
    在这里插入图片描述

NFM – FM 的神经网络化尝试


  • NFM 利用深度神经网络更强的表达能力改进 FM 模型,用一个表达能力更强的函数替代原 FM 中二阶隐向量内积的部分
    在这里插入图片描述
  • 用以替代 FM 二阶部分的神经网络结构如下图所示:
    在这里插入图片描述就是在 Embedding 层和多层神经网络之间加入特征交叉池化层 (Bi-Interaction Pooling Layer)。假设 V x V_x Vx 是所有特征域的 Embedding 集合,那么特征交叉池化层的具体操作为
    在这里插入图片描述也就是用元素乘积代替了 FM 点积,然后将得到的向量输入上层的多层全连接神经网络,进行进一步的交叉

与 Wide&Deep 模型的联系

  • 上面的 NFM 架构图省略了其一阶部分。如果把 NFM 的一阶部分视为一个线性模型,那么 NFM 的架构也可以视为 Wide&Deep 模型的进化。相比原始的 Wide&Deep 模型,NFM 模型对其 Deep 部分加人了特征交叉池化层,加强了特征交叉。这是理解 NFM 模型的另一个角度

基于 FM 的深度学习模型的优点和局限性

  • 沿着特征工程自动化的思路, 深度学习模型从 PNN 一路走来, 经过了 Wide&Deep、Deep&Cross、FNN、DeepFM、NFM 等模型,进行了大量的、基于不同特征互操作思路的尝试。但特征工程的思路走到这里几乎已经穷尽了可能的尝试,模型进一步提升的空间非常小,这也是这类模型的局限性所在
  • 从这之后,越来越多的深度学习推荐模型开始探索更多 “结构” 上的尝试,诸如注意力机制序列模型强化学习等在其他领域大放异彩的模型结构也逐渐进入推荐系统领域,并且在推荐模型的效果提升上成果显著

注意力机制在推荐模型中的应用

AFM – 引入注意力机制的 FM


  • AFM 模型可以被认为是 NFM 模型的延续。在 NFM 模型中,不同域的特征 Embedding 向量经过特征交叉池化层的交叉,将各交叉特征向量进行 “加和”,输入最后由多层神经网络组成的输出层。问题的关键在于加和池化操作,它相当于 “一视同仁” 地对待所有交叉特征,不考虑不同特征对结果的影响程度,事实上消解了大量有价值的信息
  • 这里 “注意力机制” 就派上了用场,它基于假设 – 不同的交叉特征对于结果的影响程度不同,以更直观的业务场景为例,用户对不同交叉特征的关注程度应是不同的
    • 举例来说,如果应用场景是预测一位男性用户是否购买一款键盘的可能性,那么 “性别=男且购买历史包含鼠标” 这一交叉特征,很可能比 “性别=男且用户年龄=30” 这一交叉特征更重要,模型投入了更多的 “注意力” 在前面的特征上

基于注意力机制的池化层

在这里插入图片描述

  • 其实就是给 NFM 的加和池化层加上了权重 (Attention Score) a i j a_{ij} aij
    f A t t n ( f P I ( ε ) ) = ∑ i = 1 n ∑ j = i + 1 n a i j ( x i v i ) ⊙ ( x j v j ) f_{Attn}(f_{PI}(\varepsilon))=\sum_{i=1}^n\sum_{j=i+1}^na_{ij}(x_iv_i)\odot(x_jv_j) fAttn(fPI(ε))=i=1nj=i+1naij(xivi)(xjvj)
  • 对注意力得分 a i j a_{ij} aij 来说,最简单的方法就是用一个权重参数来表示,但为了防止交叉特征数据稀疏问题带来的权重参数难以收敛,AFM 模型使用了一个在两两特征交叉层 Pair-wise Interaction Layer) 和池化层之间的注意力网络来生成注意力得分。该注意力网络的结构是一个简单的单全连接层加 softmax 输出层的结构,其数学形式如下所示:
    在这里插入图片描述

DIN – 引入注意力机制的深度学习网络


  • 相比于之前很多 “学术风” 的深度学习模型,阿里巴巴提出的 DIN 模型显然更具业务气息。它的应用场景是阿里巴巴的电商广告推荐,因此在计算一个用户是否点击一个广告 a a a 时,模型的输入特征自然分为两大部分:一部分是用户 u u u 的特征组,另一部分是候选广告 a a a 的特征组。无论是用户还是广告,都含有两个非常重要的特征:商品 i d id id (good_id) 和商铺 i d id id (shop_id)。用户特征里的商品 i d id id 是一个序列,代表用户曾经点击过的商品集合,商铺 i d id id 同理;而广告特征里的商品 i d id id 和商铺 i d id id 就是广告对应的商品 i d id id 和商铺 i d id id

Base Model

  • 在原来的基础模型中,用户特征组中的商品序列和商铺序列经过简单的平均池化操作后就进入上层神经网络进行下一步训练,序列中的商品既没有区分重要程度,也和广告特征中的商品 i d id id 没有关系
    在这里插入图片描述
  • 然而事实上,广告特征和用户特征的关联程度是非常强的。假设广告中的商品是键盘,用户的点击商品序列中有几个不同的商品 i d id id 分别是鼠标、T 恤和洗面奶。从常识出发,“鼠标” 这个历史商品 i d id id 对预测 “键盘” 广告的点击率的重要程度应大于后两者。从模型的角度来说,在建模过程中投给不同特征的 “注意力” 理应有所不同,而且 “注意力得分” 的计算理应与广告特征有相关性

DIN 模型

在这里插入图片描述

  • 从上图中可以看到,相比 Base 模型,DIN 模型增加了激活单元用于计算 Attention Score,用户特征组中的商品序列和商铺序列都经过加权求和后才进入上层神经网络进行下一步训练 (上图中红色箭头所示,商铺 i d id id 只跟用户历史行为中的商铺 i d id id 序列发生作用,商品 i d id id 只跟用户的商品 i d id id 序列发生作用)
  • 激活单元的结构也比较简单,输入层是两个 Embedding 向量, 经过元素减 (element-wise minus) 操作后,与原 Embedding 向量一同连接后形成全连接层的输入,最后通过单神经元输出层生成注意力得分

DIEN – 序列模型与推荐系统的结合


  • DIEN 是 DIN 模型的演化版本,应用场景和 DIN 完全一致,其创新在于用序列模型模拟了用户兴趣的进化过程

DIEN 的 “进化” 动机

  • 无论是电商购买行为,还是视频网站的观看行为,或是新闻应用的阅读行为,特定用户的历史行为都是一个随时间排序的序列。既然是时间相关的序列,就一定存在或深或浅的前后依赖关系,这样的序列信息对于推荐过程无疑是有价值的
  • 例如,上周一位用户在挑选一双篮球鞋,这位用户上周的行为序列都会集中在篮球鞋这个品类的商品上,但在他完成购买后,本周他的购物兴趣可能变成买一个机械键盘。序列信息的重要性在于:
    • (1) 它加强了最近行为对下次行为预测的影响。在这个例子中,用户近期购买机械键盘的概率会明显高于再买一双篮球鞋或购买其他商品的概率
    • (2) 序列模型能够学习到购买趋势的信息。在这个例子中,序列模型能够在一定程度上建立 “篮球鞋” 到 “机械键盘” 的转移概率。如果这个转移概率在全局统计意义上是足够高的,那么在用户购买篮球鞋时,推荐机械键盘也会成为一个不错的选项。直观上,二者的用户群体很有可能是一致的

DIEN 模型的架构

在这里插入图片描述

  • 抛开彩色部分不看,模型仍是输入层 + Embedding 层 + 连接层 + 多层全连接神经网络 + 输出层的整体架构
  • 图中彩色的 “兴趣进化网络” 被认为是一种用户兴趣的 Embedding 方法,它最终的输出是用户兴趣向量 h ′ ( T ) h'(T) h(T)

兴趣进化网络分为三层,从下至上依次是:

  • (1) 行为序列层 (Behavior Layer, 浅绿色部分):其主要作用是把原始的 i d id id 类行为序列转换成 Embedding 行为序列
  • (2) 兴趣抽取层 (Interest Extractor Layer, 米黄色部分):其主要作用是通过模拟用户兴趣迁移过程,抽取用户兴趣
  • (3) 兴趣进化层 (Interest Evolving Layer, 浅红色部分):其主要作用是通过在兴趣抽取层基础上加入注意力机制,模拟与当前目标广告相关的兴趣进化过程

兴趣抽取层的结构

  • 兴趣抽取层的基本结构是 GRU (Gated Recurrent Unit, 门循环单元) 网络,每个 GRU 单元的具体形式由如下公式定义:
    在这里插入图片描述
    z = σ ( x t W x ( z ) + h t − 1 W h ( z ) + b ( z ) ) r = σ ( x t W x ( r ) + h t − 1 W h ( r ) + b ( r ) ) h ~ = tanh ⁡ ( x t W x + ( r ⊙ h t − 1 ) W h + b ) h t = ( 1 − z ) ⊙ h t − 1 + z ⊙ h ~ \begin{gathered} z=\sigma\left(x_{t} {W}_{x}^{(\mathrm{z})}+{h}_{t-1} {W}_{h}^{(\mathrm{z})}+{b}^{(\mathrm{z})}\right) \\ {r}=\sigma\left(x_{t} {W}_{x}^{(\mathrm{r})}+{h}_{t-1} {W}_{h}^{(\mathrm{r})}+{b}^{(\mathrm{r})}\right) \\ \tilde{h}=\tanh \left(x_{t} {W}_{x}+\left(r \odot {h}_{t-1}\right) {W}_{h}+{b}\right) \\ h_{t}=(1-z) \odot {h}_{t-1}+z \odot \tilde{h} \end{gathered} z=σ(xtWx(z)+ht1Wh(z)+b(z))r=σ(xtWx(r)+ht1Wh(r)+b(r))h~=tanh(xtWx+(rht1)Wh+b)ht=(1z)ht1+zh~
  • 经过由 GRU 组成的兴趣抽取层后,用户的行为向量被进一步抽象化,形成了兴趣状态向量

兴趣进化层的结构

  • DIEN 兴趣进化层相比兴趣抽取层最大的特点是加入了注意力机制,其中 Attention Score 的生成过程与 DIN 完全一致, 都是当前状态向量与目标广告向量进行互作用的结果,因此在兴趣抽取层之上再加上兴趣进化层就是为了更有针对性地模拟与目标广告相关的兴趣进化路径
    • 由于阿里巴巴这类综合电商的特点,用户非常有可能同时购买多品类商品,例如在购买 “机械键盘” 的同时还在查看 “衣服” 品类下的商品,那么这时注意力机制就显得格外重要了。当目标广告是某个电子产品时,用户购买 “机械键盘” 相关的兴趣演化路径显然比购买“衣服” 的演化路径重要,这样的筛选功能兴趣抽取层没有
  • 兴趣进化层完成注意力机制的引入是通过 AUGRU (GRU with Attentional Update gate, 基于注意力更新门的GRU) 结构, AUGRU 在原 GRU 的更新门 (update gate) 的结构上加入了注意力得分,具体形式如下所示:
    z = a t ⋅ σ ( x t W x ( z ) + h t − 1 W h ( z ) + b ( z ) ) r = σ ( x t W x ( r ) + h t − 1 W h ( r ) + b ( r ) ) h ~ = tanh ⁡ ( x t W x + ( r ⊙ h t − 1 ) W h + b ) h t = ( 1 − z ) ⊙ h t − 1 + z ⊙ h ~ \begin{gathered} z=a_t\cdot\sigma\left(x_{t} {W}_{x}^{(\mathrm{z})}+{h}_{t-1} {W}_{h}^{(\mathrm{z})}+{b}^{(\mathrm{z})}\right) \\ {r}=\sigma\left(x_{t} {W}_{x}^{(\mathrm{r})}+{h}_{t-1} {W}_{h}^{(\mathrm{r})}+{b}^{(\mathrm{r})}\right) \\ \tilde{h}=\tanh \left(x_{t} {W}_{x}+\left(r \odot {h}_{t-1}\right) {W}_{h}+{b}\right) \\ h_{t}=(1-z) \odot {h}_{t-1}+z \odot \tilde{h} \end{gathered} z=atσ(xtWx(z)+ht1Wh(z)+b(z))r=σ(xtWx(r)+ht1Wh(r)+b(r))h~=tanh(xtWx+(rht1)Wh+b)ht=(1z)ht1+zh~

在工程实现上需要注意:序列模型比较高的训练复杂度,以及在线上推断过程中的串行推断,使其在模型服务过程中延迟较大,这无疑增大了其上线的难度,需要在工程上着重优化

强化学习与推荐系统的结合

深度强化学习推荐系统框架

在这里插入图片描述

  • 智能体推荐系统本身,它包括基于深度学习的推荐模型、探索 (explore) 策略,以及相关的数据存储
  • 环境:由新闻网站或 App、用户组成的整个推荐系统外部环境。在环境中,用户接收推荐的结果并做出相应反馈
  • 行动:对一个新闻推荐系统来说,“行动” 指的就是推荐系统进行新闻排序后推送给用户的动作
  • 反馈:用户收到推荐结果后,进行正向的或负向的反馈。例如,点击行为被认为是一个典型的正反馈,曝光未点击则是负反馈的信号。此外,用户的活跃程度,用户打开应用的间隔时间也被认为是有价值的反馈信号
  • 状态:状态指的是对环境及自身当前所处具体情况的刻画。在新闻推荐场景中,状态可以被看作已收到所有行动和反馈,以及用户和新闻的所有相关信息的特征向量表示。站在传统机器学习的角度,“状态” 可以被看作已收到的、可用于训练的所有数据的集合

在这样的强化学习框架下,模型的学习过程可以不断地迭代,迭代过程主要有如下几步:

  • (1) 初始化推荐系统 (智能体)
  • (2) 推荐系统基于当前已收集的数据 (状态) 进行新闻排序 (行动),并推送到网站或 App (环境) 中
  • (3) 用户收到推荐列表,点击或者忽略 (反馈) 某推荐结果
  • (4) 推荐系统收到反馈,更新当前状态或通过模型训练更新模型
  • (5) 重复第 2 步

深度强化学习推荐模型

  • 在 DRN 框架中,智能体部分中扮演 “大脑” 角色的是 DQN (Deep Q-Network),网络结构如下图所示,在特征工程中套用强化学习状态向量和行动向量的概念,把用户特征 (user features) 和环境特征 (context features) 归为状态向量,因为它们与具体的行动无关;把用户-新闻交叉特征和新闻特征归为行动特征,因为其与推荐新闻这一行动相关
    在这里插入图片描述

DRN 的学习过程

在这里插入图片描述
按照从左至右的时间顺序,依次描绘 DRN 学习过程中的重要步骤

  • (1) 在离线部分,根据历史数据训练好 DQN 模型,作为智能体的初始化模型
  • (2) 在 t 1 → t 2 t_1\rightarrow t_2 t1t2 阶段,利用初始化模型进行一段时间的推送 (push) 服务,积累反馈 (feedback) 数据
  • (3) 在 t 2 t_2 t2 时间点,利用 t 1 → t 2 t_1\rightarrow t_2 t1t2 阶段积累的用户点击数据,进行模型微更新 (minor update) (竞争梯度下降算法, Dueling Bandit Gradient Descent Algorithm)
  • (4) 在 t 4 t_4 t4 时间点,利用 t 1 → t 4 t_1\rightarrow t_4 t1t4 阶段的用户点击数据及用户活跃度数据进行模型的主更新 (major update)。模型主更新操作可以理解为利用历史数据的重新训练,用训练好的模型替代现有模型
  • (5) 重复第 2~4 步

DRN 的在线学习方法 – 竞争梯度下降算法

在这里插入图片描述

竞争梯度下降算法的主要步骤如下:

  • (1) 对于已经训练好的当前网络 Q Q Q,对其模型参数 W W W 添加一个较小的随机扰动 Δ W \Delta W ΔW, 得到新的模型参数 W ~ \widetilde W W ,这里称 W ~ \widetilde W W 对应的网络为探索网络。产生随机扰动的公式为:
    Δ W = α ⋅ r a n d ( − 1 , 1 ) ⋅ W \Delta W=\alpha\cdot rand(-1,1)\cdot W ΔW=αrand(1,1)W其中, α \alpha α 是探索因子,决定探索力度的大小。 r a n d ( − 1 , 1 ) rand(-1,1) rand(1,1) 是一个 [ − 1 , 1 ] [-1,1] [1,1] 之间的随机数 (探索粒度可以精细到每次获得反馈之后)
  • (2) 对于当前网络 Q Q Q 和探索网络 Q ~ \widetilde Q Q , 分别生成推荐列表 L L L L ~ \widetilde L L ,用 Interleaving 将两个推荐列表组合成一个推荐列表后推送给用户
  • (3) 实时收集用户反馈。如果探索网络 Q ~ \widetilde Q Q 生成内容的效果好于当前网络 Q Q Q, 则用探索网络代替当前网络,进入下一轮迭代;反之则保留当前网络

强化学习对推荐系统的启发

  • 强化学习相比传统深度模型的优势就在于强化学习模型能够进行 “在线学习”,不断利用新学到的知识更新自己,及时做出调整和反馈。它把模型学习的实时性提到了一个空前重要的位置,这也正是将强化学习应用于推荐系统的收益所在
  • 它也给我们提出了一个值得思考的问题 – 到底是应该打造一个重量级的、“完美” 的,但训练延迟很大的模型;还是应该打造一个轻巧的、简单的,但能够实时训练的模型。当然,工程上的事情没有假设,更没有猜想,只通过实际效果说话,“重量” 与 “实时” 之间也绝非对立关系,但在最终决定一个技术方案之前,这样的思考是非常必要的,也是值得花时间去验证的

总结 – 推荐系统的深度学习时代

在这里插入图片描述

参考文献

  • 《深度学习推荐系统》(王喆)
  • 详解 PNN: 在 NN 中显式引入 Product
  • 详解 Wide & Deep 结构背后的动机 由于阿里巴巴这类综合电商
    的特点,用户非常有可能同时购买多品类商品,例如在购买“机械键盘”的同时
    还在查看“衣服” 品类下的商品,那么这时注意力机制就显得格外重要了。当目
    标广告是某个电子产品时,用户购买“机械键盘” 相关的兴趣演化路径显然比购
    买“衣服” 的演化路径重要,这样的筛选功能兴趣抽取层没有。
Logo

更多推荐