CTR 预估问题关注的一个重心是如何进行自动特征组合的问题,因为好的特征组合对于性能影响非常关键,而深度学习天然具有端对端的优势,所以这是神经网络模型能够自然发挥作用的地方,能够无需人工介入自动找到好的特征组合,这一般体现在深度 CTR 模型的 Deep 网络部分。——2017年AI技术前沿进展与趋势 by 张俊林
基于深度学习的 CTR 模型基本都符合如下的一个或多个特点:
- 用 Dense Vector (即 Embedding) 表示离散特征
- 利用 Deep 网络对特征组合进行自动建模
- 将低维特征和高维特征组合在网络结构上进行分离,Deep 网络体现高维度特征组合,而引入神经网络版本的 FM 模型来对两两特征组合进行建模
与传统推荐模型相比,深度学习推荐系统有哪些优势(取得了哪些进展)?
- 深度学习模型的表达能力更强,能够挖掘出更多数据中潜藏的模式
- 深度学习的模型结构非常灵活,能够根据业务场景和数据特点,灵活调整模型结构,使模型与应用场景完美契合
1、深度学习推荐模型的演化关系(汇总)
- AutoRec 相当于自编码器 + 协同过滤 CF
- Neural CF 用 MLP 代替 MF 的内积操作,是广义矩阵分解
- Deep Crossing 是经典的 Embedding 层 + 多隐层 + 输出层的结构,用 MLP 实现特征的自动交叉
- PNN 在 Deep Crossing 的基础上加了乘积层来做显式的特征两两交叉(内积、外积),再输入到 MLP
- NFM 用特征交叉池化层代(特征两两元素积再求和)替了 PNN 的乘积层,再输入到 MLP,也可以理解为用神经网络代替 FM 的二阶交叉操作
- AFM 在 NFM 的基础上,为每个特征交叉项赋予一个注意力得分,求加权和
- DeepFM 将 Wide&Deep 的 Wide 部分替换为 FM,以提升特征交叉能力
- DCN 将 Wide&Deep 的 Wide 部分替换为 Cross 网络,和 Deep FM 的动机相同,解决原始 Wide 部分需要人工组合特征的问题,提升特征交叉能力
- FNN 结构类似 Deep Crossing,但是用因子分解机 FM 训练好的权重参数来初始化 Embedding 层的参数,加快收敛
- DIN:根据和目标商品的相关性,对历史点击序列中的不同商品赋予不同的权重,求加权和,而不是一视同仁的 sum pooling
- DIEN:在 DIN 模型的基础上,融合了序列模型来模拟用户的兴趣进化过程,考虑了时序性,加强了最近行为(而不是所有历史行为)对下次行为预测的影响
- DRN:将推荐系统当作推荐系统中的智能体,那么推荐系统学习更新的过程就是智能体“行动-反馈-状态更新”的循环,使得推荐系统能进行在线学习,增强了实时性
两种发展方向:
- 特征工程自动化:PNN → Wide&Deep → Deep&Cross → FNN → DeepFM → NFM
- 探索结构上的尝试:注意力机制(AFM、DIN)、序列模型(DIEN)、强化学习(DRN) 等
推荐系统技术演进趋势:从召回到排序再到重排 纯粹的简单DNN模型:
- 本质上其实是在FM模型的特征 Embedding 化基础上,添加几层 MLP 隐层来进行隐式的特征非线性自动组合而已。
- 所谓隐式,意思是并没有明确的网络结构对特征的二阶组合、三阶组合进行直接建模,只是通过 MLP,让不同特征发生交互,至于怎么发生交互的,怎么进行特征组合的,谁也说不清楚,这是 MLP 结构隐式特征组合的作用,当然由于 MLP 的引入,也会在特征组合时候考虑进入了特征间的非线性关系
2、AutoRec——单隐层神经网络推荐模型
自编码器:将输入的数据向量 ,通过自编码器的重建函数,得到输出向量
- 自编码器的目标函数:,即让输出向量尽量接近输入向量本身
为什么需要自编码器?
- 一般来说,重建函数的参数量远小于输入向量的维度数量,因此自编码器相当于完成了数据压缩和降维的工作
- 由于经过了自编码器的泛化过程,输出向量与输入向量不完全相同,具备了一定的缺失维度预测能力
AutoRec:是将自编码器 AutoEncoder 的思想和协同过滤 CF 结合的一种单隐层神经网络推荐模型
- 基本原理:利用协同过滤中的共现矩阵,完成物品向量和用户向量的自编码。再利用自编码的结果得到用户对物品的预估评分,进而进行推荐排序
- 构建协同过滤的共现矩阵:m 个用户、n 个物品就得到 m×n 维的共现矩阵(若某个用户对某个物品无评分,可用默认值 or 平均值填充)
- I-AutoRec(基于物品的 AutoRec)
- 物品 i 的 m 维评分(列)向量 作为输入向量
- 输入到训练好的 AutoRec 模型中
- 输出 m 维的预估评分向量 ,包含了所有的 m 个用户对物品 i 的预估评分
- 遍历所有物品向量就可以得到用户 u 对所有物品的预测评分,根据预测的评分排序,得到推荐列表
- U-AutoRec(基于用户的 AutoRec)
- 用户 u 的 n 维评分(行)向量 作为输入向量
- 输入到训练好的 AutoRec 模型中
- 输出 n 维的预估评分向量 ,包含了用户 u 对所有物品的预估评分,根据预估评分排序得到推荐列表
2.1 AutoRec 模型的结构
论文:AutoRec: Autoencoders Meet Collaborative Filtering 另,在模型结构上,AutoRec 和后来的词向量模型 Word2vec 完全一致,但优化目标和训练方法不同
I-AutoRec(基于物品的 AutoRec)使用单隐层神经网络结构,如下图所示:
- 输入层:物品的评分向量;输出:多分类层,得到编码后新的评分向量
- 该模型结构代表的重建函数:
- f、g 是激活函数
- AutoRec 的目标函数(带 L2 正则化项):
- 训练方法:梯度反向传播
2.2 AutoRec 模型的特点和局限性
优点:
- 使用一个单隐层的 AutoEncoder 泛化用户或物品评分,使模型具有一定的泛化和表达能力
- 单隐层神经网络结构简单,可以快速训练和部署
局限性:
- 模型结构比较简单,因此表达能力不足
3、Deep Crossing 模型
相比于 AutoRec 由于模型结构简单导致的表达能力不足的问题,Deep Crossing 模型使用“Embedding + 多层神经网络”的经典深度学习结构,完整地解决了一系列深度学习在推荐系统中的应用问题:
- 特征工程:生成所有输入特征的向量表达(类别型特征用 one-hot/multi-hot 编码,数值型特征直接拼接到特征向量)
- 稀疏向量稠密化问题:Embedding 层
- 离散类特征(类别特征)通常使用 one-hot/multi-hot 编码,过于稀疏,不利于训练,通过 Embedding 层转换成稠密向量
- 特征自动交叉组合问题:Multiple Residual Units 层
- 在输出层中达成问题设定的优化目标:Scoring 层
3.1 Deep Crossing 的应用场景
场景:微软 Bing 搜索广告推荐
三类特征:
- 类别型特征:被处理成 one-hot 或 multi-hot 编码的特征向量
- 用户搜索词 query、广告关键词、广告标题、落地页(点击广告后的落地页面)、匹配类型等
- 数值型特征:也称计数型特征,可以直接拼接进特征向量中
- 历史点击率、预估点击率(另一个 CTR 模型的预估值)等
- 组合特征:需要进一步处理,部分特征作为数值型特征,部分特征作为类别型特征
- 广告计划(广告计划中的预算可当作数值型特征,id 则可当作类别型特征)、曝光样例、点击样例等
Deep Crossing 作为深度学习推荐模型,可以进行端到端的训练,输入原始特征向量,输出预估的点击率(CTR)
3.2 Deep Crossing 模型的网络架构
Deep Crossing 的模型结构如上图所示,分为四个层:
- Embedding 层:将稀疏的(one-hot/multi-hot 编码的)类别型特征向量转换成稠密的 Embedding 向量;数值型特征则无需通过 Embedding 层,直接输入到 Stacking 层
- Embedding 技术参考 第 4 章 Embedding 技术在推荐系统中的应用,以经典的全连接层为主,衍生出了 Word2vec、Graph Embeeding 等不同方法
- Embedding 向量的维度应远小于原始稀疏特征向量的维度,几十到上百维一般就能满足要求
- Stacking 层(堆叠层 / 连接层):将所有特征(Embedding 特征和数值型特征)拼接成一个特征向量
- Multiple Residual Units 层:采用多层残差网络作为 MLP 的具体实现,对特征向量各个维度进行充分的交叉组合,使模型能抓取到更多非线性特征和组合特征的信息,增强模型表达能力(可以通过调整网络深度来进行特征之间的深度交叉,因此称为 Deep Crossing)
- 残差网络的诞生主要是为了解决两个问题:①残差连接,可以减少深层网络的过拟合现象;② 使用 ReLU 代替 sigmoid 激活函数,缓解梯度消失问题,加快模型收敛
- Scoring 层(输出层):为了拟合优化目标而设置的输出层
- 如果是类似 CTR 预估的二分类问题,则使用逻辑回归模型
- 如果是图像分类等多分类问题,则使用 softmax 模型
为什么 softmax 函数能解决多分类问题?
- softmax 函数: ,能够得到一个样本在 n 个分类上的概率分布
- 在分类问题中,softmax 函数往往和交叉熵损失函数一起使用
- 交叉熵损失函数: ,刻画了预测分类和真是结果之间的相似度
- sofrmax 和交叉熵搭配在梯度形式上也非常简洁,通过梯度反向传播,即可更新整个网络的权重
训练方法:梯度反向传播
3.3 Deep Crossing 模型的特点
特点:
- 是“Embedding + 多层神经网络的”的经典深度学习结构
- 可以通过调整 Multiple Residual Units 层的网络深度来进行特征之间的深度交叉(相较于传统的 FM 模型族,具备了高阶特征交叉能力)
局限性:
- Stacking 层将所有特征简单拼接,然后通过 Multiple Residual Units 层做特征交叉,针对性不强(无法有针对性地获取特征之间的交叉信息)
- 改进:PNN 模型,使用乘积层(Product Layer)代替 Deep Crossing 模型中的 Stacking 层,使得不同特征的 Embedding 向量之间不再是简单的拼接,而是用 Product 操作进行两两交互,更有针对性地获取特征之间的交叉信息
4、NeuralCF 模型——CF 与深度学习的结合
基于深度学习的协同过滤模型 NeuralCF:将矩阵分解算法 MF(由协同过滤算法 CF 发展而来)中用户和物品向量的点积操作,换成由深度神经网络代替的互操作,加强模型的表达能力,是广义的矩阵分解模型
矩阵分解算法 MF:
- 矩阵分解算法 MF 将用户-物品共现矩阵分解为用户向量矩阵和物品向量矩阵,就得到用户隐向量和物品隐向量,这就相当于 Deep Crossing 模型中的 Embedding 层的作用
- 用户 u 地隐向量和物品 i 的隐向量做内积,计算得到相似度,就是用户 u 对物品 i 的预测评分,这就相当于 Deep Crossing 模型中的 Scoring 层(输出层)的作用
但是 MF 简单的做内积,输出层无法对优化目标进行有效的拟合(欠拟合)
NeuralCF 模型用“NeuralCF层(多层神经网络)+输出层”的结构代替了 MF 的内积操作:
- 更充分的特征交叉:让用户向量和物品向量做更充分的交叉,得到更多有价值的特征组合信息
- 更强的表达能力:引入更多的非线性特征,增强模型表达能力
内积:即点积 (dot product),两个向量内积得到一个实数值
- 设两个向量
- 内积
元素积:element-wise product,长度相同的两个向量的对应维度相乘,得到另一个向量
外积:两个向量外积,得到一个矩阵
4.1 NeuralCF 模型的结构
如上图所示,NeuralCF 模型就是用“NeuralCF层(多层神经网络)+输出层”的结构代替了 MF 的内积操作
“广义矩阵分解”模型: 即改变原始的矩阵分解算法(MF)中用户向量和物品向量的互操作形式:
- 原始矩阵分解算法中用户向量和物品向量通过内积(dot product)方式进行交互
- 也可以使用元素积(element-wise product)进行互操作,让向量在各维度上进行充分交叉,再通过逻辑回归等输出层拟合最终预测目标
- NeuralCF 模型中用神经网络来拟合互操作函数
- NeuralCF 混合模型将 元素积 和 神经网络 这两种互操作整合在一起,将两种互操作得到的特征向量拼接起来,交由输出层进行目标拟合(如下图所示)
- 广义上,任何向量之间的交互计算方式都可以用来代替协同过滤的内积操作,相应的模型可称为广义矩阵分解模型
4.2 NeuralCF 模型的优势和局限性
NeuralCF 模型的优势:
- NeuralCF 是表达能力加强版的矩阵分解模型:基于用户向量和物品向量这两个 Embedding 层,利用不同的互操作层进行特征的交叉组合,并且可以灵活地进行不同互操作层的拼接
NeuralCF 模型的局限性:
- 由于是基于矩阵分解模型 MF 构造的,因此无法避免协同过滤 CF 模型族的共同缺点:只是用了用户和物品的 id 特征,没有引入其它更多类型的特征
- 解决:PNN 模型,引入了更多不同形式、不同来源的特征
5、PNN 模型——加强特征交叉能力
上一节介绍的 NeuralCF 模型的主要思想是利用多层神经网络代替矩阵分解 MF 中的点积操作,加强模型的表达能力,是广义的矩阵分解模型。 但是 NeuralCF 模型只用到了用户向量和物品向量这两组特征向量,如果加入多组特征向量,如何设计特征交互的方法?于是就有了 PNN 模型
5.1 PNN 模型的网络架构
PNN 模型的网络架构如上图所示(和 Deep Crossing 模型架构的唯一区别就是用乘积层代替了 stacking 层),分为几个部分:
- 输入层:相较于 NeuralCF 模型,PNN 模型的输入不仅包括用户和物品(交互)信息,还可以有更多不同形式、不同来源的特征
- Embedding 层:相当于 Deep Crossing 模型中的 Embedding 层,将原始输入特征编码生成同样长度的稠密特征 Embedding 向量(为保证后续乘积操作能顺利进行,各 embedding 维度必须相同)
- 乘积层:用乘积层代替了 Deep Crossing 模型中的 Stacking 层,不同特征的 Embedding 向量不再是简单的拼接,而是用 Product 操作进行两两交互,更有针对性地获取特征之间的交叉信息
- 多层神经网络:相当于 Deep Crossing 模型中的 Multiple Residual Units 层
- 输出层:相当于 Deep Crossing 模型中的 Scoring 层(输出层)
5.2 乘积层的多种特征交叉方式
乘积层包含两部分:
- 线性操作部分:对各种特征向量进行线性拼接
- 乘积操作部分:对不同的特征 Embedding 向量进行两两组合,分为两种操作:
- 内积操作:使用内积操作的 PNN 称为 IPNN
- 两个 M 维的特征向量内积生成一个实数值,
- 外积操作:使用外积操作的 PNN 称为 OPNN
- 两个 M 维的特征向量外积生成一个 M×M 维的矩阵,
- 为了降低模型复杂度,进行了降维,即,将所有两两特征 embedding 向量外积的结果相加,形成一个叠加外积互操作矩阵
- 近似于将所有特征 Embedding 向量通过一个平均池化层后,再进行外积操作(但平均池化适用于同类 Embedding 上,对不同特征使用平均池化可能影响模型表达能力,在这里是训练效率和模型效果的权衡)
平均池化:将不同特征 embedding 对应维度进行平均,实际上是假设不同特征对应维度有类似的含义
- 平均池化常作用于同类 embedding 上,比如将用户历史浏览过的多个物品的 embedding 进行平均
- 对于不同类特征的 embedding 进行平均池化,可能会损失很多有价值信息:
- eg. 年龄、地域两个特征的 embedding 向量,并不在一个向量空间中,显然不具备任何可比性,这时将二者平均起来,会模糊很多有价值的信息
- 近似于将所有特征 Embedding 向量通过一个平均池化层后,再进行外积操作(但平均池化适用于同类 Embedding 上,对不同特征使用平均池化可能影响模型表达能力,在这里是训练效率和模型效果的权衡)
- 内积操作:使用内积操作的 PNN 称为 IPNN
5.3 PNN 模型的优势和局限性
PNN 模型的优势:
- 在经典深度学习框架(Deep Crossing)的基础上提升了模型的特征交叉能力(做了显示的特征二阶交叉):PNN 模型的特征 Embedding 向量之间的交叉方式是多样化的,相比于简单的交由全连接层进行无差别化的处理(Deep Crossing 的做法),PNN 模型针对不同特征域之间的交叉操作,定义了内积和外积等多种 product 操作,更有针对性地强调了不同特征之间的交互,让模型更容易捕获特征之间的交叉信息
PNN 模型的局限性:
- 外积操作为了优化训练效率进行了大量简化操作,一定程度上影响了模型的表达能力
- 对所有特征进行无差别的交叉,在一定程度上忽略了原始特征向量中包含的有价值信息
- 解决:Wide&Deep 模型 和 基于 FM 的各类深度学习模型,综合原始特征和交叉特征,让特征交叉的方式更高效
6、Wide&Deep 模型——记忆能力和泛化能力的综合
Wide & Deep 模型是由单层的 Wide 部分和多层的 Deep 部分组成:
- Wide 部分:加强模型的“记忆能力”(简单模型“记忆能力”强) → 记忆历史行为特征
- Deep 部分:加强模型的“泛化能力”(深度神经网络“泛化能力”强) → 泛化到稀疏特征
使模型兼具了逻辑回归(等简单模型)和深度神经网络的优点——能够快速处理并记忆大量历史行为特征,并且具有强大的表达能力
6.1 模型的记忆能力和泛化能力
记忆能力:模型直接学习并利用历史数据中物品或特征的“共现频率”的能力
- 一般简单模型(eg. 协同过滤 CF、逻辑回归 LR 等)具有较强的记忆能力
- 由于模型结构简单,相当于模型直接记忆历史数据的分布特点并进行推荐
- eg. 组合特征
“安装了 netflix 应用 && 在 APP STORE 看到过 pandora 应用”
和标签“最终安装了 pandora”
的共现频率远高于 pandora 的全局平均安装率,逻辑回归模型在训练过程中就将该“强特征”的权重调整的很大(使得该特征对预测结果的影响变大),相当于实现了对这个特征的直接记忆 - 而对于多层神经网络,特征会被多层处理,不断与其它特征交叉,因此模型对这个强特征的记忆反而没有简单模型深刻
- eg. 组合特征
泛化能力:模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力
- 一般复杂模型(eg. 深度神经网络)具有较强的泛化能力
- eg. 矩阵分解 MF 引入隐向量,将全局数据传递到稀疏特征上,使得数据稀少的物品 or 用户也能生成隐向量,相较于 协同过滤 CF 提高了泛化能力
- eg. 深度神经网络通过特征的多次自动组合,深度发掘数据中潜在的模式,使得即使输入非常稀疏的特征向量,也能得到较稳定平滑的推荐概率
6.2 Wide&Deep 模型的结构
Wide&Deep 模型的结构如上图所示,分为 Wide 和 Deep 两部分:
- Wide 部分:记忆能力强,善于处理大量稀疏的 id 类特征
- 以 Google Play 推荐为例,Wide 部分的输入仅仅是“已安装应用”(代表用户的历史行为)和“曝光应用”(代表待推荐应用)两类特征,以充分发挥 wide 部分记忆能力强的优势
- 用交叉积变换函数组合特征:
- 是第 i 个特征的值
- 当第 i 个特征属于第 k 个组合特征时,,否则为 0
- 相当于与操作,对于一个组合特征,其中的两个特征都为 1,对应的交叉积变换的结果才为 1
- 其实就相当于逻辑回归模型,只是这里的输入是组合特征,而不是单个特征
- Deep 部分:泛化能力强,利用神经网络表达能力强的特点,进行深层特征交叉,挖掘藏在特征背后的数据模式
- Deep 部分的输入是全量的特征向量
最终输出层:wide 和 deep 部分连接起来,输入到输出层(逻辑回归模型 LR)
Wide&Deep 模型的详细结构如下图所示:
6.3 Wide&Deep 模型的特点和局限性
Wide&Deep 模型的特点:
- 利用 Wide 部分加强模型的“记忆能力”,利用 Deep 部分加强模型的“泛化能力”
- 开创了组合模型(不同网络结构融合)的构造方法,后续的深度学习推荐系统可以通过改进 Wide 部分或 Deep 部分来改进模型
Wide&Deep 模型的局限性:
- Wide 部分需要人工进行特征组合的筛选:例如原始论文中,是基于 Google Play 团队对于业务场景的深刻理解,来决定将哪些特征作为 Wide 部分的输入
Wide 部分改进:
- 改进动机:加强 Wide 部分的特征交叉能力(原始的 Wide&Deep 中 Wide 部分不具备自动的特征组合能力,需要基于业务人工进行特征组合的筛选)
- DCN: Deep&Cross 模型:将 Wide 部分替换成 Cross Layer network 来处理特征交叉
- DeepFM:将 wide 部分由 LR 替换为 FM
Deep 部分改进:
- AFM: Attention FM:在 Deep 部分加入注意力网络(Attention Net)
- NFM:将 Deep 部分替换成有 Bi-interaction 层(特征交叉池化层)的 MLP,加强了特征交叉
- 即对所有特征 embedding 两两做元素积(相当于做了显式特征交叉),再求和(sum pooling),作为 MLP 的输入,
6.4 DCN: Deep&Cross 模型——Wide&Deep 模型的进化
Deep&Cross 模型(简称 DCN):
- 深度网络:Deep 部分的设计思路相较于 Wide&Deep 无本质变化
- Deep 部分相比 Cross 部分表达能力更强,使模型具备更强的非线性学习能力
- Cross 网络:使用 Cross 网络代替原来的 Wide 部分
- 目的:增加特征之间的交互力度,使用多层交叉层对输入向量进行特征交叉
- 交叉层:第 层的输出向量为 ,则第 层的输出向量为 ,交叉操作的二阶部分类似于 PNN 模型中的外积操作(),在此基础上增加了外积操作的权重向量,以及原输入向量和偏置向量
- 如下图所示,可以看到
- 交叉层在增加参数方面很克制,每一层仅增加了一个 n 维权重向量
- 且每层还保留了输入向量,因此输出和输入之间的变化不会特别明显,因此一定程度上保留了原本 wide 部分“记忆能力”强的优点
- 由多层交叉层组成的 Cross 网络进行了特征的自动化交叉,避免了原始 Wide&Deep 模型 Wide 部分更多基于业务理解的人工特征组合
6.5 DCN: Deep&Cross 模型的特点和局限性
Deep&Cross 模型的特点:
- 解决了 Wide&Deep 模型人工组合特征的问题:使用 Cross 网络的多层交叉层进行特征的自动化交叉
- 提升了 Wide 部分的特征交叉能力
Deep&Cross 模型的局限性:
- Cross 网络的复杂度较高
7、FM 与深度学习模型的结合
第二章介绍的传统推荐模型中,因子分解机 FM 在特征组合上具有优势,FM 与深度学习结合(eg. FNN, DeepFM, NFM, AFM 模型),能继续发挥其在特征组合上的优势
7.1 FNN——用 FM 的隐向量完成 Embedding 层初始化
FNN 模型结构如下所示,类似 Deep Crossing 模型,但是用 FM 训好的权重参数来初始化 embedding 层的参数
FNN 模型结构如上图所示,其最大特点就是用因子分解机 FM 训练好的权重参数来初始化 Embedding 层的参数(Embedding 层神经元和输入层神经元之间的连接权重参数)
- 作用:相当于在初始化神经网络参数时,已经引入有价值的先验信息,加快整个网络的收敛速度
- 即,神经网络训练的起点更接近目标最优点,自然加快了整个神经网络的收敛过程
- 另外,FNN 模型训练时,将特征分成了不同的特征域(而 FM 中并未划分特征域)
为什么随机初始化的 Embedding 层的收敛速度往往很慢?
- Embedding 层的参数数量巨大(占整个神经网络绝大部分),训练时间和计算开销大
- 输入向量过于稀疏,而随机梯度下降的过程只有与非零特征相连的 Embedding 层权重会被更新(参照随机梯度下降的参数更新公式理解),因此进一步降低了 Embedding 层的收敛速度
因此,使用随机初始化这种不带任何先验信息的初始化方法,Embedding 层的收敛速度往往很慢
FNN 模型的局限性:
- 模型的主结构比较简单,没有针对性的特征交叉层
7.2 DeepFM——用 FM 代替 Wide 部分
DeepFM 模型用因子分解机 FM 替换了 Wide&Deep 模型中的 Wide 部分
- 作用:加强了 Wide 部分的特征交叉(特征组合)能力(原本 Wide&Deep 模型中的 Wide 部分不具备自动的特征组合能力),改进动机和 Deep&Cross 模型一致
- 另外,与原始的 Wide&Deep 模型的一个区别是,DeepFM 模型的 FM 部分与深度网络部分共享相同的 Embedding 层
- FM 部分对不同特征域的 Embedding 进行两两交叉,也就是将 Embedding 向量当作原 FM 中的特征隐向量
DeepFM 模型的局限性:
- 与经典的 Wide&Deep 模型相比,结构差别不大
7.3 NFM——FM 的神经网络化尝试
改进动机:FM 模型族的缺点是只能做二阶特征交叉,几乎不可能扩展到高阶(组合爆炸问题),限制了 FM 模型的表达能力。而 NFM 是要利用表达能力更强的深度神经网络来代替 FM 的二阶交叉部分,理论上神经网络能实现高阶的特征交叉
NFM 模型用深度神经网络 f(x) 代替原 FM 模型中二阶隐向量内积(交叉)的部分:
NFM 模型的神经网络 f(x) 的模型结构如下图所示(未包含一阶项和偏置)
- 在 Embedding 层和多层神经网络之间加入了特征交叉池化层:进行显式的二阶特征交叉,但用元素积替换了原 FM 的内积
- 特征交叉池化层将所有特征域的 Embedding 向量两两进行特征交叉(元素积)后,对交叉特征向量取和(sum pooling),得到池化层的输出向量:
- 全连接层 MLP:进行进一步的交叉,理论上能实现高阶的特征交叉(隐式的,黑盒)
NFM 模型也可以视为 Wide&Deep 模型的进化
- Deep 部分:下图所示的神经网络相当于 Deep 部分,Deep 部分加入了特征交叉池化层,加强了特征交叉
- Wide 部分:NFM 模型的一阶部分和偏置,相当于 LR(下图中未显示)
NFM 模型的优点:
- 相比 FM,NFM 模型的表达能力和特征交叉能力更强(MLP 具备高阶特征交叉能力)
- 相较于 Wide&Deep,将 Deep 部分替换成有特征交叉池化层的 MLP,加强了特征交叉(显式)
NFM 模型的局限性:
- Deep 部分与 PNN 模型的结构非常相似,只是用特征交叉池化层代替了乘积层
- 特征交叉池化层将不同域的 Embedding 向量两两进行特征交叉(元素积),将各交叉特征向量“加和”。但这个加和池化操作,相当于一视同仁地对待所有交叉特征,不考虑不同特征对结果的影响程度,事实上消解了大量有价值的信息
- 解决:AFM 模型,通过引入注意力机制,为每个交叉特征提供一个权重(注意力得分),因此不同交叉特征对结果的影响程度不同
7.4 基于 FM 的深度学习模型的优点和局限性
基于 FM 的深度学习模型(FNN、DeepFM、NFM)的特点:
- 都是在经典多层神经网络的基础上加入有针对性的特征交叉操作,让模型具备更强的非线性表达能力
PNN → Wide&Deep → Deep&Cross → FNN → DeepFM → NFM 这些模型的局限性:
- 这些模型都是沿着特征工程自动化的思路发展的,进行了不同的特征互操作的尝试。但是特征工程的思路几乎已经穷尽了所有可能的尝试,模型进一步提升的空间非常小
- 解决:更多结构性的尝试,eg. 注意力机制、序列模型、强化学习等
8、注意力机制在推荐模型中的应用
注意力机制在数学形式上只是将过去的平均池化 (avg pooling) 操作 or 加和池化 (sum pooling) 操作换成了加权和 or 加权平均操作,从而不同的特征的重要性不同,提升推荐效果
8.1 AFM——引入注意力机制的 FM
NFM 模型的特征交叉池化层将不同域的 Embedding 向量两两进行特征交叉(元素积),将各交叉特征向量“加和”。但这个加和池化(sum pooling)操作,相当于一视同仁地对待所有交叉特征,不考虑不同特征对结果的影响程度,事实上消解了大量有价值的信息
想法:“性别=男 & 购买过鼠标”和“性别=男 & 年龄=30”这两个交叉特征,前者对于预测一个用户是否购买键盘更重要
AFM 模型是在 NFM 模型的基础上,在二阶隐向量交叉的基础上为每个交叉特征赋予一个权重(即注意力得分),并使用注意力网络学习注意力得分,使得不同交叉特征对结果的影响程度不同
- Embedding 层:每个特征分配一个隐向量 embedding
- 两两特征交叉层:AFM 的特征交叉过程采用元素积(同 NFM),即所有特征 embedding 两两进行元素积,得到所有特征交叉项的 embedding:
- 基于注意力机制的池化层:对所有特征交叉项的 embedding 求加权和(区别于 NFM 的 sum pooling):
- 注意力网络:生成注意力得分,代表特征 i 和特征 j 的交叉项的注意力得分(权重参数)
- 结构:简单的全连接层 + softmax
- 全连接层:
- 其中是全连接层到 softmax 输出层的权重向量
- softmax 输出层:
- 全连接层:
- 结构:简单的全连接层 + softmax
- 注意力网络:生成注意力得分,代表特征 i 和特征 j 的交叉项的注意力得分(权重参数)
AFM 模型的优点:
- 不同交叉特征的重要性不同
AFM 模型的局限性:
- 注意力网络的训练过程比较复杂
8.2 DIN——引入注意力机制的深度学习网络
参考:推荐系统中的注意力机制——阿里深度兴趣网络(DIN) DIN 代码详解:[阿里DIN] 深度兴趣网络源码分析 之 整体代码结构
应用场景:阿里巴巴的电商广告推荐,计算一个用户 u 是否点击一个广告 a
- 输入特征分为两部分:用户 u 的特征组(用户历史点击过的商品 id 序列)、候选广告 a 的特征组(广告对应的商品 id)。
基础模型:如上左图所示,用户特征组中的商品 id 序列经过简单的 sum pooling 或 avg pooling,输入到上层的 MLP
- 缺点:序列中的商品既没有区分重要程度,也和广告特征中的商品 id 没有关系。
- 而实际上,假设用户历史点击序列包含商品
[鼠标, T恤, 洗面奶]
,广告商品是“键盘”,那么显然“鼠标”对预测点击率的重要程度大于其他历史点击商品- 改进:因此应该在建模时,对历史点击序列中的不同商品赋予不同的权重,求加权和,而不是一视同仁的 sum pooling
DIN 模型:结构如上图右半部分所示,在基础模型的基础上,加入了注意力激活单元,利用候选广告商品和用户历史行为商品之间的相关性计算其注意力得分(权重)
- 注意力部分的形式化表达:
- 是用户的 embedding 向量, 是候选广告商品的 embedding 向量, 是用户 u 的第 i 次行为的 embedding 向量(即该次浏览的商品的 embedding 向量)
- 引入注意力机制后, 从过去的 的加和变成了 的加权和
- 权重 通过注意力激活单元(activation unit)计算得到,需要注意的是,计算方法不是传统的注意力机制中的点积操作,而是将用户历史点击的商品 i 的 embedding 和 候选广告商品 embedding 以及两者的差值向量 (后续的版本用外积 out product 操作代替差值)concat 起来作为输入,喂给全连接层 MLP,得到注意力打分(权重)。这样做的优点是损失的信息更少。
- 注意,还有一点与传统的注意力机制不同:DIN 模型在计算权重(注意力得分)后不使用 softmax 对权重进行归一化,即 。这样做的目的是保留用户兴趣的强度。eg. 一个用户的历史行为包含 90% 的衣服和 10% 的电子产品,给定 T恤和手机这两个候选广告,T恤会激活大部分属于衣服的历史行为,因此会比手机得到更大的 值,代表更高的兴趣强度
除了引入注意力机制,本文的其他贡献:
- 用 GAUC 这个离线指标替代AUC
- 用 Dice 方法替代经典的 PReLU 激活函数
- 介绍一种 Adaptive 的正则化方法
- 介绍阿里的 X-Deep Learning 深度学习平台
DIN 模型的特点:
- 在传统深度学习推荐模型的基础上引入注意力机制,并利用用户历史行为物品和目标广告物品的相关性计算注意力得分。因此能根据目标广告物品的不同,进行更有针对性的推荐
DIN 模型的局限性:
- 并没有充分利用除“历史行为”以外的其他特征
代码:
def din_attention(query, facts, attention_size, mask, stag='null', mode='SUM', return_alphas=False):
"""B: batch_size; T: max_len, 用户历史行为序列的最大长度; H: dim, embedding size
:param query: 候选文章的 embedding,shape: [B, H]
:param facts: 用户历史行为(点击过的文章)的 embedding 序列,shape: [B, T, H]
:param mask: Batch 中每个历史行为(点击过的文章)的真实意义,shape: [B, T]
相当于 Transformer 中的 padding mask,屏蔽掉序列中 padding 的部分,
只关注真正代表用户历史行为的部分
"""
# B, T, H
batch_size, max_len, dim = facts.get_shape().as_list()
# 转换 mask:
# - 使用 tf.ones_like(mask) 构建一个和 mask 维度一样,元素都是 1 的张量
# - 使用 tf.equal 把 mask 从 int 类型转换为 bool 类型
# tf.equal 的作用就是判断两个输入逐元素是否相等,相等的元素返回 True,不等的为 False
mask = tf.equal(mask, tf.ones_like(mask)) # [B, T]
# 转换 query 维度, 复制 T 份,[B, H] -> [B, T, H],即转换成和 facts 相同维度
queries = tf.tile(query, [1, max_len]) # [B, H] -> [B, T*H]
queries = tf.reshape(queries, tf.shape(facts)) # [B, T*H] -> [B, T, H]
# 将候选文章 queries 对应的 embedding、用户历史点击文章 facts 对应的 embedding、
# 以及两者的交叉特征(差、积)concat 拼接在一起,作为注意力激活单元的输入
din_all = tf.concat([queries, facts, queries - facts, queries * facts], axis=-1) # [B, T, 4*H]
din_all = tf.reshape(din_all, [-1, dim*4]) # [B*T, 4*H]
# 注意力激活单元,通过 3 层 MLP 做 attention,输出注意力权重
din_all_output = modules.DenseTower(name='din_attention',
output_dims=[80, 40, 1],
initializers=initializers.GlorotNormal(mode='fan_in'),
)(din_all) # [B*T, 1]
din_all_output = tf.reshape(din_all_output, [-1, 1, max_len]) # [B, 1, T]
scores = din_all_output # 注意力得分(权重)
# Mask
key_masks = tf.expand_dims(mask, 1) # [B, T] -> [B, 1, T]
# # 得到有真实意义的 scores
# # 将序列后面 padding 的部分设置为负无穷,这样后面计算 softmax 的结果约为 0
# padding = tf.ones_like(scores) * (-2 ** 32 + 1)
# scores = tf.where(key_masks, scores, padding) # [B, 1, T]
# Scale
scores = scores / (dim ** 0.5)
# # Activation: Softmax
# scores = tf.nn.softmax(scores) # [B, 1, T]
# # 换种写法,手动实现 softmax,且包含了 mask,后面 padding 部分的 softmax 结果直接设为 0
padding_zeros = tf.zeros_like(scores)
# scores_exp = tf.exp(scores)
# scores_exp = tf.where(key_masks, score_exp, padding_zeros) # [B, 1, T]
# score_exp_sum = tf.reduce_sum(score_exp, axis=2, keepdims=True) # [B, 1, 1]
# scores = scores_exp / (scores_exp_sum + 1e-5)
# 将后面 padding 部分对应的注意力权重设为 0
scores = tf.where(key_masks, scores, padding_zeros) # [B, 1, T]
# weighted sum
if mode == 'SUM':
# 将注意力打分 scores 和用户历史行为序列 facts 做矩阵乘法
output = tf.matmul(scores, facts) # [B, 1, T] * [B, T, H] -> [B, 1, H]
# output = tf.reshape(output, [-1, tf.shape(facts)[-1]]) # [B, H]
else: # 哈达玛相乘(element-wise product)
scores = tf.reshape(scores, [-1, max_len]) # [B, 1, T] - >[B, T]
output = facts * tf.expand_dims(scores, -1) # [B, T, H] * [B, T, 1] -> [B, T, H]
output = tf.reshape(output, tf.shape(facts)) # [B, T, H]
return output
9、DIEN——序列模型与推荐系统的结合
DIEN 是 DIN 模型的演化版本,模型的应用场景和 DIN 完全一致。其创新在于用序列模型模拟了用户兴趣的进化过程。
实际上,用户的历史行为是一个和时间相关的序列,但是之前的推荐模型都没有利用序列信息。即便 AFM 和 DIN 模型引入了注意力机制,但仅对不同行为的重要性打分,这个得分是与时间无关、与序列无关的
序列信息的重要性:
- 加强了最近**行为**(而不是所有历史行为)对下次行为预测的影响
- 序列模型能学习到购买趋势的信息:eg. 能学习到“购买了篮球鞋”到“购买机械键盘”的转移概率
如果不使用序列信息,那么模型学习时间和趋势这类信息的能力就不会那么强,推荐模型就仍然是基于用户所有购买历史的综合推荐,而不是针对“下一次购买”推荐
9.1 DIEN 模型的架构
DIEN 模型是在 DIN 模型的基础上(输入层 + Embedding 层 + 连接层 + 多层全连接神经网络 + 输出层的架构),融合了序列模型来模拟用户的兴趣进化过程
DIEN 模型的创新在于构建了“兴趣进化网络”:一种用户兴趣的 Embedding 方法,最终的输出是用户兴趣向量 :
- 行为序列层:与普通的 Embedding 层一致,用于将原始的 id 类行为序列转换成 Embedding 行为序列
- 兴趣抽取层:通过模拟用户兴趣迁移过程,抽取用户兴趣
- 基本结构是 GRU 网络(门控循环单元网络)
- 兴趣进化层:在兴趣抽取层的基础上,加入注意力机制(注意力得分的计算过程与 DIN 模型一致),更有针对性地模拟与目标广告相关的兴趣进化之路
- 通过 AUGRU 结构(基于注意力更新门的 GRU)引入注意力机制
9.2 兴趣抽取层的结构
GRU 网络(门控循环单元网络):
- 相比于传统的序列模型 RNN 和 LSTM,GRU 解决了 RNN的梯度消失问题,且比 LSTM 参数数量更少,训练收敛速度更快
- 兴趣抽取层的基本结构是 GRU 网络
- 每个 GRU 单元的具体形式:
- 是输入状态向量,即行为序列层得到的行为 embedding 向量
- 每个 GRU 单元的具体形式:
- 兴趣抽取层将用户行为 Embedding 向量 进一步抽象化,形成兴趣状态向量
9.3 兴趣进化层的结构
理论上,兴趣抽取层的 GRU 网络已经可以做出下一个兴趣状态向量的预测,再加上一层兴趣进化层(计算 DIN 注意力得分),是为了在模拟兴趣进化的过程中,考虑与目标广告的相关性
兴趣进化层是在兴趣抽取层的基础上加入了注意力机制,来更有针对性地模拟与目标广告相关的兴趣进化路径
eg. 用户可能同时买了键盘、衣服等商品,但当目标广告是某个电子产品时,用户购买“机械键盘”相关的兴趣演化路径显然比购买衣服的兴趣演化路径更重要,而兴趣抽取层没有这种筛选功能,需要依靠兴趣进化层的注意力机制实现
- 注意力得分的计算过程和 DIN 模型完全一致:当前状态向量与目标广告向量互操作
- 兴趣进化层通过 AUGRU(基于注意力更新门的 GRU)结构完成注意力机制
- AUGRU 在原 GRU 的更新门的结构上加入了注意力得分:
9.4 序列模型的优点和局限性
序列模型(eg. DIEN 模型)的优点:
- 序列模型增强了系统对用户兴趣变迁(时间序列)的表达能力,使推荐系统开始考虑事件相关的行为序列中包含的有价值信息,非常适合预估用户经过一系列行为后的下一次动作
序列模型(eg. DIEN 模型)的局限性:
- 序列模型的训练复杂度较高,并且在线上推断过程中串行推断,导致模型线上服务的延迟较大,增大了其上线难度,需要进行工程上的优化
10、DRN——强化学习与推荐系统的结合
强化学习中智能体的学习过程是“行动-反馈-状态更新”的循环 可以将推荐系统当作智能体,那么推荐系统学习更新的过程就是智能体“行动-反馈-状态更新”的循环
10.1 深度强化学习推荐系统框架
在如上图所示的强化学习框架下,推荐系统学习迭代的过程:
- 初始化推荐系统(智能体)
- 推荐系统根据当前已收集的数据(状态)进行新闻排序并推送到网站 or APP(环境)中(行动)
- 用户收到推荐列表,点击 or 忽略(反馈)某推荐结果
- 推荐系统收到反馈,更新当前状态或通过模型训练更新模型
- 重复步骤 2
强化学习模型的优势:能进行“在线学习”,不断利用新学到的知识更新自己,及时做出调整和反馈,相比其它“静态”的深度学习模型有了更多实时性上的优势
10.2 DQN:深度强化学习推荐模型
推荐模型:推荐模型是推荐系统(智能体)的“大脑”,实际上任何深度学习模型都可以作为智能体的推荐模型
DQN(深度 Q 网络,Deep Q-Network):是推荐系统 DRN 框架使用的推荐模型
- Q 是 quality 的意思,通过对行动进行质量评估,得到行动的有效得分,以此进行行动决策
- DQN 模型的结构图如下所示
10.3 DRN 的学习过程
DRN 的学习过程如上图所示:
- 初始化推荐系统:在离线部分,根据历史数据训练好 DQN 模型
- 在 阶段,利用初始化模型进行一段时间的推送服务,累积反馈数据
- 在 时间点,利用 阶段累积的用户点击数据,进行模型微更新(在线训练——竞争梯度下降算法)
- 在 时间点,利用 阶段的用户点击数据和用户活跃度数据进行模型的主更新(即利用历史数据重新训练模型)
- 重复步骤 2~4
10.4 DRN 的在线学习方法——竞争梯度下降算法
竞争梯度下降算法流程如下图所示:
- 对已训练好的当前网络,将其模型参数加上一个较小的随机扰动,得到新的探索网络
- 当前网络和探索网络分别生成推荐列表,用 Interleaving 的方法(详见本书 7.5 节)整合两个推荐列表,推送给用户
- 实时收集用户反馈,若探索网络的反馈内容好于当前网络,则用探索网络代替当前网络;否则保留当前网络
10.5 强化学习推荐系统的特点和局限性
DRN 模型的特点:
- 将推荐模型从静态变为动态,模型对数据实时性的利用大大增强
DRN 模型的局限性:
- 线上部分较复杂,工程实现难度大
11、总结:深度学习推荐系统模型
模型名称 | 基本原理 | 特点 | 局限性 |
---|---|---|---|
AutoRec | 自编码器 + 协同过滤 CF 基于自编码器,对用户或者物品进行编码,利用自编码器的泛化能力进行推荐 |
单隐层神经网络结构简单,可实现快速训练和部署 | 表达能力较差 |
Deep Crossing | 利用“Embedding层+多隐层+输出层”的经典深度学习框架,用多隐层完成特征的自动深度交叉 | 经典的深度学习推荐模型框架 | 利用全连接隐层进行特征交叉,针对性不强 |
NeuralCF | 用神经网络代替传统的矩阵分解 MF 中用户向量和物品向量的点积操作(互操作) | 是表达能力加强版的矩阵分解模型 | 只使用了用户和物品的 id 特征,没有加入更多其它特征 |
PNN | 用乘积层代替了 Deep Crossing 的 stacking 层,针对不同特征域之间的交叉操作,定义内积、外积等多种积操作 | 在经典深度学习框架上,提高了模型的特征交叉能力(显式特征交叉) | 外积操作进行了近似化,一定程度上影响了其表达能力 |
Wide&Deep | 利用 Wide 部分加强模型的“记忆能力”,利用 Deep 部分加强模型的“泛化能力” | 开创了组合模型的构造方法,对深度学习推荐模型的后续发展产生重大影响 | Wide 部分需要人工进行特征组合的筛选 |
DCN (Deep&Cross) | 用 Cross 网络代替 Wide&Deep 模型中的 Wide 部分 | 解决了 Wide&Deep 模型人工组合特征的问题 | Cross 网络的复杂度较高 |
FNN | 利用 FM 的参数来初始化深度神经网络的 Embedding 层参数 | 利用 FM 初始化参数,加快整个网络的收敛速度 | 模型的主结构比较简单,没有针对性的特征交叉层 |
DeepFM | 在 Wide&Deep 模型基础上,用 FM 替代原来的线性 Wide 部分 | 加强了 Wide 部分的特征交叉能力 | 与经典的 Wide&Deep 模型相比,结构差别不明显 |
NFM | 用神经网络代替 FM 中二阶隐向量交叉的操作 | 相比 FM,NFM 的表达能力和特征交叉能力更强(特征之间两两求元素积再求和 + MLP) | 与 PNN 的结构非常相似(特征交叉池化层代替了 PNN 的乘积层) |
AFM | 在 NFM 的基础上,在二阶隐向量交叉的基础上对每个交叉结果赋予注意力得分,并使用注意力网络学习注意力得分 | 不同特征交叉项的重要性不同 | 注意力网络的训练过程比较复杂 |
DIN | 在传统深度学习推荐模型的基础上引入注意力机制,并利用用户行为历史物品和目标广告物品的相关性计算注意力得分 | 根据目标广告物品的不同,进行更有针对性的推荐 | 并没有充分利用除“历史行为”以外的其他特征 |
DIEN | 将序列模型与深度学习推荐模型结合,使用序列模型模拟用户的兴趣进化过程 | 序列模型增强了系统对用户兴趣变迁的表达能力,使推荐系统开始考虑时间相关的行为序列中包含的有价值信息 | 序列模型的训练复杂,线上服务的延迟较长,需要进行工程上的优化 |
DRN | 将强化学习的思路应用于推荐系统,进行推荐模型的线上实时学习和更新 | 模型对数据实时性的利用能力大大加强 | 线上部分较复杂,工程实现难度较大 |