推荐系统(Recommender System)01

  • 推荐系统的架构
    • 数据部分
    • 模型部分
  • 传统推荐模型
    • 协同推荐(Collaborative Filtering)
    • 矩阵分解(Matrix Factorization)
    • 逻辑回归(Logistic Regression)
    • 自动特征交叉的解决方案
      • POLY2 模型 - 特征交叉的开始
      • FM 模型 - 隐向量特征交叉
      • FFM 模型 - 引入特征域
      • * 从 POLY2 到 FFM 的演化过程
      • GBDT + LR - 特征工程模型化
        • GBDT 模型
      • LS-PLM - 阿里曾经的主流推荐模型
  • 深度学习推荐模型
    • AutoRec - 单隐层神经网络推荐模型
    • Deep Crossing - 深度学习架构
    • NerualCF 模型 - CF 与深度学习相结合
    • PNN 模型 - 加强特征交叉能力
    • Wide&Deep 模型 - 记忆能力与泛化能力的综合
      • *Deep&Cross 模型
    • FM 模型族和深度学习模型的结合
      • FNN 模型 - 使用 FM 的隐向量完成 Embedding 层的初始化
      • DeepFM - 用 FM 替代 Wide 部分
      • NFM - FM 的神经网络化
    • 注意力机制(Attention Policy)
      • AFM - 引入注意力机制的 FM 模型
      • DIN - 引入注意力机制的深度网络
    • DIEN - 序列模型与推荐模型的结合
      • 兴趣抽取层
      • 兴趣进化层
    • 强化学习与推荐系统
    • 总结

推荐系统的架构

推荐系统 (RS) 的核心思想:

在获知 “用户信息”,“物品信息”,“场景信息” 的基础上,推荐系统要处理的问题可以较形式化地定义为:对于用户 U (user),在特定场景 C (context) 下,针对海量的 “物品” 信息,构建一个函数 f(U,I,C) ,预测用户对特定候选物品 I (item) 的喜好程度,再根据喜好程度对所有候选物品进行排序,生成推荐列表的问题。

根据上述思想,可以得到推荐系统的逻辑框架,如下图所示:

对于实际的推荐系统,需要着重解决的问题有 2 个:

  1. 数据和信息相关问题:即如何获取、存储和处理 “用户信息”,“物品信息”,“场景信息” 这三类数据
  2. 算法和模型相关问题:即如何选择、训练和优化模型。

针对这两个部分的问题 ,我们可以得到推荐系统的技术架构:

数据部分

主要负责"用户" “物品” "场景"的信息收集与处理。处理之后的数据主要有三个用途:

  1. 作为推荐模型使用的样本数据。主要用于模型的训练、测试和评估
  2. 用以提取 “模型服务” 需要的特征 (feature),作为线上推断的依据
  3. 生成系统监控、商业智能 (Business Intelligence , BI) 系统所需的统计型数据

模型部分

该部分是推荐系统的主体,模型的结构由 “召回层” “排序层” "补充策略与算法层"组成:

  • 召回层:使用相对简单高效的召回算法从海量候选集中召回用户可能感兴趣的对象(第一次缩小范围)
  • 排序层:利用排序模型对初筛的候选集进行精排序
  • 补充策略与算法层:“再排序层”,对于排序层的结果,综合额外的因素,补充算法进行进一步的筛选和排序

传统推荐模型

根据演化关系图,我们可以看到,传统的推荐模型主要分为下面几类:

  1. 协同推荐模型 (Collaborative Filtering):从物品相似度和用户相似度角度出发,主要分为 User-user Collaborative Filtering 和 Item-item Collaborative Filtering,以及为了解决稀疏矩阵问题衍生出的矩阵分解
  2. 逻辑回归模型 (Logistic Regression):与协同过滤仅利用用户和物品之间的显式或隐式反馈信息相比,逻辑回归能够利用和融合更多用户、物品及上下文特征
  3. 因子分解机模型 (Factorization Model):因子分解机在传统逻辑回归的基础上,加入了二阶部分,使模型具备了进行特征组合的能力
  4. 混合模型 (Mixed Model):结合多种模型

协同推荐(Collaborative Filtering)

矩阵分解(Matrix Factorization)

该部分的内容已经在之前做过笔记,参考:Big Data Management笔记06:Recommender Systems

这里只做一些总结。

逻辑回归(Logistic Regression)

逻辑回归 (Logistic Regression) 和前面两种推荐模型有很大不同。协同推荐(Collaborative Filtering)主要仅利用用户 (User) 和对象 (Item) 的相互行为信息作为推荐的依据,而逻辑回归 (Logistic Model) 模型能够综合利用对象、用户、上下文等多种特征进行全面推荐。 另外,逻辑回归可以作为基本的感知机来充当神经网络的基本神经元。

逻辑回归本质作为一个分类器 (Classifier),在推荐系统中,也扮演相同的角色。协同推荐 (CF) 和矩阵分解 (MF) 主要利用用户之间或者对象之间的相似度 (Similarity) 进行推荐,而逻辑回归 (LR) 则把问题转换为其本职的分类问题 (Classification)。通过预测对象为 “正样本 (Positive)” 的概率,来对对象进行排序。这里的 “正样本” 可以根据用户是否点击、购买、标记等行为进行标签。

具体的推荐流程和分类任务的过程基本一致:

  1. 将用户年龄、性别、对象属性、对象价格等特征组成特征向量 (特征工程与数据处理)
  2. 确定逻辑回归的优化目标(降低误差率/提高点击率等),使用样本数据对模型进行训练,确定模型的参数
  3. 在模型服务阶段(实测阶段),将对象的特征向量输入模型,得到该对象为 “正样本” (用户会点击/购买)的概率
  4. 使用得到的概率进行排序

具体的数学过程如下所示,激活函数选择 Sigmoid 将结果映射到 [0, 1] 之间。

逻辑回归模型 (LR) 的整个推断过程如下式所示:

逻辑回归 (LR) 的优势:

  1. 数学含义上的支撑:“点击事件” 和 LR 模型中的因变量 y 都服从伯努利分布
  2. 可解释性强:LR 使用各特征的加权和是为了综合不同特征对CTR 的影响,而不同特征的重要程度不一样,所以为不同特征指定不同的权重代表不同特征的重要程度。这很符合我们的常理认知
  3. 工程化需要:逻辑回归模型凭借其易于并行化、模型简单、训练开销小等特点,占据着工程领域的主流

逻辑回归 (LR) 的局限性:

表达能力不强,无法进行特征交叉、特征筛选等一系列较为"高级"的操作,因此不可避免地造成信息的损失

自动特征交叉的解决方案

逻辑回归模型 (LR) 的表达能力不够强,不可避免地会造成信息损失。这是因为逻辑回归 (LR) 只对单一特征做简单加权,不具备进行高维组合特征的能力,甚至可能会得出 “辛普森悖论” 那样的错误结论。因此需要对逻辑回归模型 (LR) 进行改造,使其具备特征交叉的能力。

“辛普森悖论”:在对样本集合进行研究时,在分组中占据优势的一方,在总体评价中反而会失势的现象。

比如:

在上面这个分组样本中,视频 B 的点击率都更高,因此应当推荐视频 B。但是如果将数据汇总

此时会发现,视频 A 的点击率反而更高。这是因为我们一开始使用了 “视频 ID + 用户性别” 的组合特征计算点击率,而在汇总数据中,我们使用 “视频 ID” 这一单一特征

POLY2 模型 - 特征交叉的开始

POLY2 模型会对特征进行 “暴力” 组合。它会将两个特征 (xj1, xj2) 两两组合,穷举出所有可能的组合,并且为每一个特征组合赋一个权值 wh(j1,j2) 。POLY2 模型本质上还是线性模型。

FM 模型 - 隐向量特征交叉

依旧是穷举组合,不同在于这里所赋的权值是两个向量的内积 (wj1 · wj2)。可以说 FM (因子分解) 是将 矩阵分解 (MF) 的隐向量思想更进一步,从单纯的对象 (Item) 和用户 (User) 隐向量推广到所有特征上。FM 模型将 POLY2 中 n2 级别的权重参数数量减少到 nk (k 为隐向量维度)

相比于 POLY2,FM 会丢失对某些具体特征组合的精确记忆能力,但是有着更好的泛化能力

我们考虑一种特征组合 <channel, brand>,某个训练样本的特征组合为 <ESPN, Adidas>

在 POLY2 中,只有当 ESPN 和 Adidas 同时出现在一个训练样本中时,模型才能学到这个特征组合的权重;

在 FM 中,ESPN 的隐向量可以通过 (ESPN, Gucci) 样本进行更新,Adidas 的隐向量也可以用通过 (NBC, Adidas) 样本进行更新,如此一来大幅降低了模型对数据稀疏性的要求

对于一个从未出现的特征组合 (NBC, Gucci) 由于模型在此之前已经学习了 NBC 和 Gucci 的隐向量,因此也能计算该特征组合的权重

FFM 模型 - 引入特征域

FFM 基于 FM 引入了特征域感知 (field-aware) 这一概念,使得模型的表达能力更强。我们可以很清楚地从公式中看到,此时特征 xj1 的隐向量由 FM 中的 wj1 变为 wj1,f2,这就表示每一个特征的隐向量不唯一,而是有一组隐向量。

仍然以公式为例,当特征 xj1 与 xj2 进行交叉时,xj1 特征会从它的一组隐向量中,挑选与特征 xj2 的域 f2 对应的隐向量 wj1,f2 进行叉积计算

这里需要对域 (field) 进行介绍。这里的域就是所谓的特征域 (feature field),域内的特征一般都是 one-hot 形式的特征向量。比如对于 ”性别“ 这个特征来说,表征为 ”女“ 的 one-hot 特征向量为 [0, 1, 0],此时的 ”性别“ 特征域中,全都是类似的 one-hot 向量。

在了解了特征域的概念之后,我们再整体看一个 FFM 模型的例子:

根据训练样本,我们可以知道,共有 3 个特征域 Publisher, Advertiser, Gender。

在 FM 模型中,我们针对该样本得到的权值应为:wESPN · wNIKE 和 wESPN · wMale。在前后两次特征交叉过程中,wESPN 的值是一样的;

在 FFM 模型中,ESPN 和 NIKE,ESPN 和 Male 交叉特殊的权重为:wESPN,A · wNIKE,P 和 wESPN,G · wMale,P。我们注意到 ESPN 在与 NIKE 和 Male 交叉时分别使用了不同的隐向量,这是因为 NIKE 和 Male 分别处于不同的特征域中

在 FFM 模型中,需要学习 n 个特征在 f 个特征域中的 k 维隐向量,因此参数数量为 n · f · k。训练过程中,不能像 FM 那样简化,因此复杂度为 f · n2

* 从 POLY2 到 FFM 的演化过程

理论上来说,FM 模型族可以将交叉特征的方法推及 3 阶甚至是更高维的向量组合。但是由于组合爆炸问题的限制,从三阶起,FM 模型的权重数量以及训练复杂度都会很高,因此很难适用于实际问题。

GBDT + LR - 特征工程模型化

我们前面已经说过 FM 模型族只能用来处理二阶的特征交叉,在涉及三阶以及三阶以上的高维特征交叉时,会不可避免地面对组合爆炸以及复杂度过高地问题。为了能更有效地进行高维特征组合,GBDT + LR 的组合模型应运而生。

该模型的整体思想:使用 GBDT 自动进行特征筛选和组合,生成新的离散特征向量,再把这个特征向量输入给 LR 模型,最终预估 CTR 的一种组合模型。

作为组合模型的两个部分,GBDT 和 LR 模型是分开独立训练的,因此我们不需要关心如何将 LR 的梯度回传给 GBDT 模型。

GBDT 模型

GBDT 的基本结构是决策树 (Decision Tree) 组成的森林,学习的方式为梯度提升。

GBDT 会逐一生成决策树以生成整片森林,生成新子树的过程是利用样本标签值与当前森林 (current forest) 预测值之间的残差。

比如当前森林一共有 3 棵树,那么,其预测值为:

D(x) = dtree1(x) + dtree2(x) + dtree3(x)

此时生成第四棵子树,目标是让当前预测结果加上第四棵子树的预测结果更加接近拟合函数 f(x) :

D(x) + dtree4(x) = f(x)

所以第四棵子树的生成过程,是以目标拟合函数和当前预测值的残差 R(x) 为目标的:

R(x) = f(x) - D(x)

每棵树的生成过程是一棵标准的回归树生成的过程,每个节点的分裂都是自然的特征选择过程。

接下来看 GBDT 如何进行特征组合。GBDT 可以将原始的特征向量转换为新的离散型特征向量。一个样本在被输入某个子树后,最终会根据节点的规则,落入某个叶节点,此时该叶节点值为 1,其余叶节点值为 0,所有叶节点组成的向量就是该树的特征向量。而把森林中所有子树的特征向量连接起来就是最后要输入 LR 模型的离散型特征向量

子树 1 的特征向量为 [0, 0, 1, 0];

子树 2 的特征向量为 [1, 0, 0, 0];

子树 3 的特征向量为 [0, 0, 0, 1];

最终的离散型特征向量为 [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1]

决策树的深度 (Depth) 就决定了特征交叉的阶数。如果深度为 4,那么有 3 层节点分裂,最终的叶节点换言之是 3 阶特征组合之后的结果。 而这正是 FM 模型族最欠缺的能力 - 高阶的特征组合能力。

但是 GBDT 也存在缺点,那就是容易过拟合 (overfitting),且它的特征转换方式实际导致许多特征的数值信息丢失。 所以我们不能单纯因为特征组合能力强就说 GBDT 的效果比 FFM 更好,还是需要结合实际情况来选择模型。

GBDT + LR 的组合模型,其最大的意义在于开启了特征工程模型化,特征工程完全交予一个独立的模型完成,模型的输入可以是原始的特征向量,让程序员无需花费过多的时间在特征工程上,实现了完全的端到端 (End to End) 训练。

LS-PLM - 阿里曾经的主流推荐模型

大规模分段线性模型 (Large Scale Piece-Wise Linear Model, LS-PLM) 是前深度学习时代最后一个主流推荐模型。LS-PLM 也可成为混合逻辑回归模型 (Mixed Logistic Model)。它属于 LR 的衍生模型,基于 LR 提出了 ”分而治之“ 的思想,即先对样本进行切片,在不同的切片中应用 LR 进行 CTR 预估。

一种比较直觉的切片方法就是聚类 (Clustering)。为了让 CTR 模型对不同的用户群体和应用场景更具针对性,采用的方法就是先对全部的样本进行聚类,再对不同的簇 (Cluster) 运用 LR 模型进行 CTR 预估。

具体的公式如上所示,其中 π(x) 就是聚类函数 (Clustering Function),该函数采用 softmax 函数对样本进行多分类,再用 η(x) 表示的逻辑模型计算样本在分片中具体的 CTR ,然后将两者相乘之后求和。值得注意的是参数 m,这是一个超参数,表示聚类中簇 (Cluster) 的数量(”分片数“),当 m=1 时,模型会退化为基本的 LR 模型;m 越大,模型的拟合能力越强,同时模型的参数量也会越来越大,拟合所需的样本数量就越多。

为了便于理解,我们可以直观比较 LR 和 LS-PLM 模型的分类效果。通过下面的样本分类结果可以看到,LR 很难找到非线性的决策边界/平面,但是 MLR 可以通过 4 分片完美处理这个问题:

LS-PLM 主要有 2 个优点:

  1. 端到端的非线性学习能力:因为具备样本切片能力,因此可以挖掘出数据中隐藏的非线性模式。节省特征工程上的人力。使得 LS-PLM 可以完成端到端的训练,便于用一个模型对不同的应用领域和业务场景进行统一建模。
  2. 模型的稀疏性强:LS-PLM 在建模时引入了 L1 和 L2 范数,可以使训练出来的模型有更高的稀疏性,让模型的部署更加轻量级。模型服务过程仅需使用权重非零特征,因此稀疏模型也使其在线推断的效率更高。

从深度学习的角度来看,可以把 LS-PLM 模型看作是一个加入了注意力机制 (Attention) 的三层神经网络。 第一层是输入层,输入样本的特征向量;中间层是 m 个神经元组成的隐藏层,这里的 m 就是切片的数量;对于一个 CTR 预估问题,LS-PLM 最后一层就是单一神经元组成的全连接层/输出层。

注意力机制应用于隐藏层和输出层之间,神经元之间的权重是由分片函数得出的注意力得分 (attention score) 来确定的。换言之,样本属于哪个切片的概率就是其注意力得分。

深度学习推荐模型

上面这张演化图展现了以多层感知机 (MLP) 为核心演化而出的一系列深度学习模型,主要的演化方向有以下几种:

  1. 改变神经网络复杂程度,增加深度神经网络的层数和复杂度
  2. 丰富深度学习网络中的特征交叉方式
  3. 通过结合两种不同特点、优势互补的深度学习网络,提升模型的综合能力
  4. FM 模型的深度学习演化版本
  5. 注意力机制和推荐模型相结合
  6. 序列模型和推荐模型相结合
  7. 强化学习和推荐模型相结合

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

该模型是将自编码器 (AutoEncoder) 和CF 相结合的一种单隐藏层神经网络推荐模型。AutoRec 是一个标准的自编码器 (AutoEncoder),它的核心思想在于利用 CF 中的共现矩阵,完成 User 向量和 Item 向量的自编码,使用自编码的结果来获取 User 对 Item 的预估评分,以此作为推荐的依据。

自编码器 (AutoEncoder)

无论是视频、音频还是其他形式的数据都可以表示为向量的形式。假设这个向量为 r,自编码器的意义在于将该向量作为输入,使输出的向量尽可能接近 r 本身。

假设自编码的重构函数为 h(r, θ),那么自编码器的损失函数/目标函数为:

这里的 S 就是所有数据向量的集合。完成训练之后的自编码器,相当于在重构函数 h(r, θ) 中保留了所有数据向量的精华。重构函数的参数量远远小于输入数据向量的维度量,因此,自编码器实质上完成了数据的压缩和降维。

在 AutoRec 中,我们再一次考虑 User 和 Item 组成的贡献矩阵,我们可以从这个矩阵中提取出 “对 Item i,所有 m 个 User 对它的评分可以组成一个 m 维的评分向量”。 AutoRec 的主要任务就是构建一个重构函数 h(r, θ),使得该重构函数生成的所有评分向量与原向量的平方残差和最小。 在得到这个重构函数之后,经过评分预估和排序,就能得到最终的推荐列表。

我们之前已经说过,AutoRec 使用的是单隐藏层的神经网络模型,其结构如下图所示:

蓝色部分就是构成隐藏层的神经元。该模型的输入层是评分向量 r,输出层是一个多分类层,蓝色神经元表示 k 维隐藏层(k << m)。VW 分别表示输入层-隐藏层和隐藏层-输出层的参数矩阵。该模型表示的重构函数如下所示:

其中 f(·) 和 g(·) 分别是输出层神经元和隐藏层神经元的激活函数。为防止重构函数过拟合,在加入 L2 正则化之后,目标函数/损失函数变为:

作为一个只有三层的神经网络,只需要利用梯度反向传播(链式法则)即可完成对网络的训练。

在了解了 AutoRec 的结构之后,对于该模型的推荐方式就会感到十分直觉。输入一个 Item 的评分向量 r(i),模型的输出向量 h(r(i), θ) 就是预测的所有 User 对于当前 Item 的评分汇总,那么只需要找到第 u 维,即可得知 User u 对该 Item 的预估评分,使用这样的方法可以得到 User u 对所有 Item 的预估评分,对这些评分进行排序即可得到最后的推荐列表。

根据是针对 Item 评分向量还是 User 的评分向量搭建模型,AutoRec 可以分为 I-AutoRec 和 U-AutoRec。相比于 I-AutoRec,U-AutoRec 的优势在于只需要输入一次目标用户的评分向量就能得到推荐列表,劣势在于用户的评分向量一般会比较稀疏,这回影响模型效果。

AutoRec 使用了一个但隐藏层的神经网络模型,因此具有一定的泛化和表达能力,但是因为结构较为简单,因此表达能力会有些薄弱。

Deep Crossing - 深度学习架构

是微软 Bing 首先应用的模型。目标在于提高搜索广告的点击率。将特征分为 3 种类型,可用 one-hot/multi-hot 表示的类别型特征;数值型特征和需要深入处理的特征。在生成了所有输入特征的特征向量之后,Deep Crossing 利用该特征向量预估 CTR。

在这个深度模型中,需要考虑以下三个问题:

  1. 如何应对类别型特征会产生的稀疏向量,该如何进行稠密化
  2. 如何进行特征自动交叉
  3. 如何在输出层种达成目标设定的优化问题

该模型一共有 4 层网络,以应对以上提出的问题。从下至上分别为:Embedding 层、Stacking 层、Multiple Residual Units 层、Scoring 层:

  • Embedding 层将输入的稀疏的类别特征向量转换为稠密的 Embedding 向量。 该层以经典的全连接层 (Fully Connected) 结构为主。Embedding 向量的维度会远远低于原始的稀疏特征向量
  • Stacking 层将 Embedding 特征和数值型特征结合起来,形成新的向量。 因此这层也被称为拼接层 (Concatenate Layer)
  • Multiple Residual Units 层:该层的主要结构是多层感知机。一般的神经网络以感知机作为基本单元,组成神经网络。Deep Crossing 使用多层残差网络 (Multi-Layer Residual Networks) 作为 MLP (Multi Layer Perceptron) 的具体实现。多层残差网络可以对特征向量的各个维度进行充分的交叉组合,使模型学习到更多非线性特征以及组合特征
  • Scoring 层:作为输出层,是为拟合优化目标而存在的。对于 CTR 预估这种二分类,可采用逻辑回归;对多分类,可使用 Softmax

基于这样的结构,使用反向传播算法进行训练。

NerualCF 模型 - CF 与深度学习相结合

先从 DL 的角度回顾一下矩阵分解 (MF)。简单回顾一下矩阵分解的思想:将 CF 中的 User-Item 共现矩阵分解为 User 向量矩阵和 Item 向量矩阵。User u 的隐向量和 Item i 的隐向量内积就是 u 对 i 的预估评分。

类比上面提到的 Deep Crossing,矩阵分解 (MF) 的 User 隐向量和 Item 隐向量就是一种 Embedding 方法。最后通过 User 隐向量和 Item 隐向量内积得到 User 对 Item 的预估得分就类比最终的 Scoring 层,因此可以得到如下所示的矩阵分解的网络化表示图:

但在实际使用中,会发现矩阵分解常常无法对优化目标有效拟合,这是因为矩阵分解的结构相对简单,特别是 Scoring 层,因此出现了欠拟合。

NerualCF 使用 “多层神经网络 + 输出层” 替代了矩阵分解中的内积操作:

这样的操作有 2 个好处。首先,让特征能够更充分地交叉组合,得到更多有价值地特征组合;其次,引入了更多非线性特征,让模型有了更强的表达能力。

实际上 User 向量和 Item 向量之间的互操作可以用很多方式代替,这被成为 “广义矩阵分解”。原本在矩阵分解中,使用的是内积作为互操作方式。实际上可以选择使用 “元素积 (Element Product)”,该计算的结果仍是一个向量,每个元素为两个输入向量对应元素的乘积。然后再通过逻辑回归等输出层拟合最终的目标。

再进一步,可以将通过不同互操作网络得到的特征向量拼接起来,然后交给输出层进行目标拟合。这就可以构成一个 NerualCF 混合模型:

上图中的混合模型结合了一般的 NerualCF 和使用元素积的冠以矩阵分解。

NerualCF 可以利用神经网络的优势,拟合任意函数,灵活地组合特征,按需求增减模型地复杂度。但由于是基于 CF 构造的,所以没有引入更多其他类型地特征,浪费了其他的有价值信息。

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

刚刚说过,NeuralCF 因为时基于 CF 构造的,因此值使用了 User 和 Item 两组特征向量,所以浪费了其他信息。为了强化多组特征的交互能力,PNN 诞生了。

与 Deep Crossing 模型相比,PNN 最主要的区别体现在使用乘积层 (Product Layer) 替代了 Stacking 层。换言之,不再简单地拼接 Embedding 向量,而是用 Product 操作进行两两交互,更有针对性地获取特征之间的交叉信息。

再把目光放到输入层上,我们可以看到,PNN 模型的输入并不是只有 User 和 Item 两种向量,而是有多种不同来源的特征向量,这些向量在通过 Embedding 层之后,都会变为长度相同的稠密向量 (Dense Vector),这也是后续乘积操作的必要条件。PNN 模型在乘积层 (Product Layer) 提供了更多的特征交叉方式。

根据模型结构图,我们可以清晰地看到成绩层 (Product Layer) 由 2 部分组成:z 和 p

  • z 部分:线性操作部分。将各特征向量进行线性拼接
  • p 部分:乘积操作部分。该部分又分为内积操作和外积操作
    1. 使用内积操作的 PNN 被称为 IPNN (Inner Product-based Neural Network)
    2. 使用外积操作的 PNN 被称为 OPNN (Outer Product-based Neural Network)

内积 (Inner Product) = 点积 (Dot Product):

两个向量的内积是一个标量:a = (1, 2, 3), b = (4, 5, 6), a · b = 1*4 + 2 * 5 + 3 * 6 = 32

外积 (Outer Product) = 叉积 (Cross Product):

两个向量的外积是一个向量,该向量是向量 a 和 b 组成的平面的法向量

由于外积会让两个 M 维的向量得到一个 M x M 的矩阵,因此参数量直接从 M 变为 M2。对此 PNN 提出了一个降维的方法。将所有特征 Embedding 向量两两互操作得到的外积结果 (矩阵) 进行累加,形成一个叠加外积互操作矩阵 p:

矩阵 p 的最终结果等同于让所有特征的 Embedding 向量通过一个 Average Pooling 再进行外积互操作。

这里的平均池化实际上需要斟酌,因为把不同特征向量的同一维度进行平均有一个前提,那就是默认不同特征在对应维度有类似的含义。但是很明显这是很难遵守的,比如 “年龄” 和 “地域” 特征向量根本无关联,那就更不可能在某个维度上有类似的含义。所以,平均池化一般发生在同类的特征向量之间

PNN 考虑到了多种特征的交叉组合,内积和外积的操作更具针对性地强调了不同特征之间的交互,让模型更容易捕捉特征的交叉信息。但是在实际应用中,为了提升外积操作的效率,会进行简化操作,另外这样的无差别交叉会丢失蕴含在原始数据中更有价值的信息。

Wide&Deep 模型 - 记忆能力与泛化能力的综合

Google 提出的模型,是由单层的 Wide 和多层的 Deep 部分组成的混合模型。其中:

  1. wide 部分负责记忆能力 (Memorization)
  2. deep 部分负责泛化能力 (Generalization)

记忆能力 (Memorization)模型直接学习和利用历史数据中物品或者特征的 “共现频率 (co-occurrence frequency)” 的能力。 CF, LR 等模型有很强的记忆能力,因为结构相对简单,原始的数据可以直接影响最后的推荐结果,实质上达成 “因为用过 A,所以推荐 B” 的效果。相当于模型记住了历史数据的分布特点,并用这段记忆进行推荐。(可以看作是表征对强特征的记忆能力

泛化能力 (Generalization)模型传递特征的相关性,以及发掘稀疏甚至是从未出现过的稀疏特征与最终标签相关性的能力。 矩阵分解 (MF) 和神经网络有着更强的泛化能力,因为它们即使接收到的是比较稀疏的特征向量,也能给出相对稳定的推荐概率

wide&deep 模型将 “记忆能力” 强的简单模型和 “泛化能力” 强的深度模型结合在一起。根据上面的模型结构图可以看到,单输入层的 wide 部分和由 Embedding 层与多隐层组成的 deep 部分连接起来,一起输入到最后的输出层。 wide 部分处理大量稀疏类的 ID 特征;deep 部分使用神经网路,进行特征交叉,挖掘深层次的数据规律。最后,使用逻辑回归模型 (LR) 将 wide 和 deep 部分结合,形成统一的模型。

*Deep&Cross 模型

Deep&Cross 模型是 Wide&Deep 的进阶版。主要的区别在于用 Cross 网络替代原本的 wide 部分。

Cross 网络会进一步增强特征之间的交叉力度。若第 l 层的输出向量为 xl,那么第 l +1 层的输出向量为:

这个交叉层的操作和 PNN 模型中的外积操作非常相似,不过现在增加了外积操作的权重向量 W 以及输入向量 xl 和偏置向量 bl 具体的操作如下图所示:

Corss 层对于参数增加显得非常谨慎。每一次操作仅增加了一个 n 维的权重 w 向量,且都保留了原始的输出向量,因此输出和输入之间的变化不会十分明显。与 Wide&Deep 模型中的 Wide 部分相比,Cross 增加了特征自动交叉,避免了更多的人工特征工程。但是,论及对于特征的理解以及对于非线性特征的学习,Deep 部分还是独占鳌头。

FM 模型族和深度学习模型的结合

FNN 模型 - 使用 FM 的隐向量完成 Embedding 层的初始化

FNN 模型最大的特点在于对 Embedding 层的改进。在神经网络中,参数初始化往往会采用随机初始化,因此不会包含任何先验信息。同时,因为 Embedding 层的输入是稀疏向量,因此收敛速度会非常慢,进而拖慢整个模型的收敛速度。

FNN 模型选择使用 FM 模型训练好的各特征隐向量初始化 Embedding 层的参数,也就是在这个时候,已经为网络引入了先验信息。FM 的数学表达式中各参数与 Embedding 层参数对应关系如下:

具体来看如何初始化 Embedding 层神经元与输入层神经元的连接权值。如果 FM 模型的隐向量是 m 维的,第 i 个特征域 (Field) 的第 k 维特征的隐向量为 vi,k = (vi,k1, vi,k2, vi,k3, …, vi,km)。那么隐向量第 l 维就会成为输入层神经元 k 与 Embedding 层神经元 l 的连接权值的初始值。

在 FM 模型的训练中,我们没有对特征域进行区分,但在 FNN 模型中,特征被划分为不同的特征域,每个特征域有对应的 Embedding 层,且每个特征域的 Embedding 层的神经元数量与 FM 隐向量维度相同。

DeepFM - 用 FM 替代 Wide 部分

这是 FM 模型与 Wide&Deep 模型的结合:

DeepFM 相比原有的 Wide&Deep 模型,最大的改动在于使用 FM 替换了 Wide 部分,加强了浅层网络部分特征组合的能力。 根据上面的模型结构图,我们可以知道:

  • 左边的 FM 与右边的深度神经网络共享同一个 Embedding 层
  • 左边的 FM 将不同特征域的 Embedding 两两交叉(以 Embedding 作为特征隐向量)
  • 左边的 FM 输出与右边 Deep 部分输出一同输出给输出层,参与最后的目标拟合

这一模型的改进动机与 Deep&Cross 一致,皆为解决 Wide 部分不具备特征组合的缺陷。因此,我们可以类比 Deep&Cross 和 DeepFM 两个模型,都是对 Wide 部分进行替换

NFM - FM 的神经网络化

我们在之前介绍 FM 模型族时已经说过,这一系列模型最大的缺点在于只能对二阶特征进行组合,难以扩展到多阶特征组合。NFM 模型的思想是使用一个表达能力更强的函数去替代 FM 中的二阶隐向量内积部分:

这里对于这个新函数 f(x) 的构造,可以交由某个深度神经网络来完成。

NFM 网络架构的特点在于它在 Embedding 层和多层神经网络之间添加了特征交叉池化层 (Bi-interaction Pooling Layer)。 我们用 Vx 表示所有特征域的 Embedding 向量的集合,特征交叉池化层进行的工作可由下式表示:

这里的 ⊙ 表示向量对应维度数值相乘,最后的结果应为维度相同的一个新向量。在对 Embedding 向量两两进行了元素积的操作之后,对结果向量进行求和,其结果即为特征交叉池化层的输出,将它输入之后的多层全连接神经网络,进行进一步交叉。

上述的这三种模型都是在深度神经网络的基础上,加入由针对性的特征交叉操作,让模型具备更强的非线性表达能力。但到此为止,特征工程在推荐模型上的探究已经到达了一个几乎穷尽的地步。因此,后续对于模型的改良更偏重于 “结构” 上的改进。

注意力机制(Attention Policy)

注意力机制的直观体现就是注意力热度图,可以显式表达用户对不同区域注意力的分布情况。

AFM - 引入注意力机制的 FM 模型

由浙江大学提出的 AFM 是引入了注意力机制的 FM 模型,可以说是 NFM 的延续。回顾一下 NFM 的核心思想:

在对 Embedding 向量两两进行了元素积的操作之后,对结果向量进行求和,其结果即为特征交叉池化层的输出,将它输入之后的多层全连接神经网络,进行进一步交叉

问题就出现在求和池化 (Sum Pooling) 上,单纯的求和忽略了不同特征对最后结果的影响程度。因此需要引入 “注意力机制” 来弥补这个问题,注意力机制的基本思想:不同的交叉特征对于最终结果的影响程度不同,因此模型会将更多的注意力投入给更重要的交叉特征。

根据上面的结构图,我们能够知道,AFM 模型是通过在特征交叉层和输出层之间添加了注意力网络 (Attention Net) 实现的,这个网络会为每一组交叉特征赋予一个权重。 特征交叉的过程与 NFM 一致,仍使用元素积的方式,但通过引入注意力网络,我们有了一个新的变量,注意力得分 a:

这个注意力得分 ai,j 就是注意力网络为交叉特征 xixj 赋予的权重。注意力网络本身的结构并不复杂,是单层全连接网络加上 softmax 层

需要学习的模型参数就是:

  • W:特征交叉网络到注意力网络的权重矩阵
  • b:偏置 (bias) 向量
  • h:注意力网络全连接层到 softmax 层的

这个模型会整体进行训练,得到最后的参数

DIN - 引入注意力机制的深度网络

这是由阿里开发的商业模型,应用场景为电商广告推荐。在这个场景下,模型输入特征自然而然地分为两个部分:

  1. 用户 u 的特征组
  2. 候选广告 a 的特征组

它们都包含有 2 个重要特征:商品 ID 和商铺 ID。用户特征组中的商品 ID 和商铺 ID 都是该用户的历史点击记录序列;而广告特征组则简单的对应广告内容中的商品及其对应商铺。

在这个模型中,注意力机制主要用于体现不同用户特征的重要程度。同时,用户特征的注意力得分应该与广告特征相互关联。

从模型的角度来看,需要利用候选商品与用户的历史点击商品之间的相关性计算出权值,这个权值就是 “注意力得分”。引入了这个注意力得分的 DNN 就是 DIN:

在这个式子中:

  • Vu:用户的 Embedding 向量
  • Va:候选广告商品的 Embedding 向量
  • Vi:用户 u 在第 i 次浏览的商品/商铺的 Embedding 向量
  • wig(Vi, Va),“注意力得分”,即 Vi 和 Va 之间的相关性

g(Vi, Va) 函数就是一个注意力激活神经元 (activation unit),位于结构图的右上角。即输入两个 Embedding 向量,做差运算,结果与原有的两个 Embedding 向量连接,通过单神经元输出层得到注意力得分。

从数学角度来看,“注意力机制” 实际上就是将原本的直接求和操作变为加权求和,但是因此更加符合人类天生的 “注意力机制”,从而提升了对于特征的学习能力,进而优化了推荐结果。

DIEN - 序列模型与推荐模型的结合

这是阿里基于 DIN 模型不断研究得出的升级版模型,其最大的特点在于==引入了 “时间” 这一不可忽视的变量,模拟了用户兴趣的变化==。之前已经说过,用户的特征组记录着历史行为,这样的序列信息具有时间维度的价值,将这样的时间信息纳入考虑是必要的,因为在互联网时代,一个用户的兴趣变化速度是极快的,因此,拥有了一个用户的序列信息(历史行为)就能够:

  1. 加强最近行为对未来行为预测的影响。 简单地来说,时间越近地行为,置信度越高
  2. 序列模型可学习到购买趋势等信息。 序列模型能够学习到兴趣变化地 “转移概率”

比如一个男生一周前浏览的所有商品全为球鞋,这周变成了机械键盘。那么序列模型应该能够建立一个从 “球鞋” 到 “机械键盘” 的转移概率。如果这个概率的意义足够强,那么在该用户购买球鞋时,推荐机械键盘也是个不错的选择

DIEN 的关键在于,如何构建图中彩色部分的 “兴趣进化网络”。该网络是一种用户兴趣的 Embedding 方法,最终的输出是 h’(T) 这个用户兴趣向量。 兴趣进化网络的层级从下至上为:

  • 行为序列层 (Behaviour Layer):将原始的 ID 行为序列转换为 Embedding 行为序列。与一般的 Embedding 层一致
  • 兴趣抽取层 (Interest Extractor Layer):通过模拟用户兴趣迁移过程,抽取用户的兴趣
  • 兴趣进化层 (Interest Evolving Layer):在兴趣抽取层上加入 “注意力机制”,模拟与当前广告相关的兴趣进化过程

兴趣抽取层

兴趣抽取层是一个 GRU (Gated Recurrent Unit) 网络。

这是一个典型的时序网络 - 循环神经网络的强化版。 GRU 单元中用一个门 (Gate) 来决定是记住还是遗忘当前的信息。简单来说 ut = 1 时,决定遗忘过去,记住现在; ut = 0 时,决定保留过去,不记住现在。

GRU 的好处在于它解决了传统 RNN 的梯度消失(遗忘)问题,但是参数量没有 LSTM 那么多。

在上面的式子中,σ 时 Sigmoid 函数,◦ 表示元素积操作。Wu, Wr, Wh, Uu, Ur, Uh 是六组需要学习的参数矩阵,it 是输入状态向量,即行为序列层的各行为 Embedding 向量 b(t),ht 是GRU 网络中的第 t 个隐状态向量。

可以看到,在这一层,用户的行为向量 b(t) 被进一步抽象为兴趣状态向量 h(t),因为 GRU 本身就能用来进行时序预测,理论上我们已经能够预测用户的下一个兴趣状态向量

兴趣进化层

兴趣进化层最大的特征在于引入了 “注意力机制”。这里的注意力得分生成机制与 DIN 完全一致,都是用当前状态向量与目标广告向量进行相互作用。换句话说,兴趣进化层在模拟兴趣变迁的过程中需要考虑与目标广告的相关性。因此,在兴趣抽取层上增加兴趣进化层,是为了更具针对性地模拟与目标广告相关的兴趣路径

用户非常有可能同时购买多品类商品,例如在购买"机械键盘"的同时 还在查看"衣服"品类下的商品,那么这时注意力机制就显得格外重要了 。 当目标广告是某个电子产品时,用户购买"机械键盘"相关的兴趣演化路径显然比购买"衣服"的演化路径重要

具体的做法是引入 AUGRU (GRU with Attention Update Gate)。即在原有 GRU 的更新门上加入注意力得分:

强化学习与推荐系统

强化学习的主要组成有 2 个:Agent 与 Enviroment。Agent 通过 Action 改变 Environment 的状态,并通过 Environment 反馈的 Reward 来不断优化自身。我们可以把推荐系统也看作一个 Agent,DRN 就是一个基于此思想得到的强化学习推荐模型框架

在这个架构中:

  • Agent:推荐系统。包括基于 DL 的推荐模型、探索策略、数据存储
  • Environment:由网站、APP、用户组成的整体推荐环境。用户接收推荐结果并给出反馈
  • Action:推荐系统将推荐结果排序推送给用户
  • Reward:用户收到推荐之后做出的反馈。(曝光但未点击是典型的负反馈,点击就是正反馈)
  • State:对 Environment 以及推荐系统自身所处情况的刻画

根据这样一个框架,具体的学习步骤为:

  1. 初始化推荐系统 (Agent)
  2. 系统基于已有数据生成排序的推荐结果并推送
  3. 用户收到推送,点击/忽略,这就是 Reward
  4. 系统接收 Reward,更新模型
  5. 重复 Step 2

因此,应用了强化学习的推荐系统,其最大的特点就在于支持 “在线学习”

在 DRN 中,Agent 就是 DQN (Deep Q-Network) 模型:

此时,把和具体 Action 无关的用户特征 (User Feature) 和环境特征 (Context Feature) 作为状态向量 (State Vector);把和推荐对象相关的用户-对象交叉特征和对象特征作为行为向量 (Action Vector)。这里的 DQN 模型在强化学习领域实际上非常有名,作为一个 Q-Learning 模型,它的核心任务在于学习得到一个理想的 Q-Funtion。此处的 Q-Funtion 就是用户特征和环境特征经过左侧多层神经网络的拟合生成价值( value )得分 V(s) , 利用状态向量和行动向量生成优势( advantage )得分 A(s) 的结合。

这个模型的学习过程依旧遵循强化学习的基本逻辑:

  1. 使用历史数据离线训练 DQN 模型
  2. 在 t1 - t2 阶段,使用初始模型进行一段时间推送,收集反馈
  3. 在 t2 使用得到的反馈数据对模型进行调整
  4. 在 t4 使用 t1 - t4 用户点击数据和用户活跃度数据进行主更新 (Major Update) - 重新训练
  5. 重复步骤 2

这里主要关注步骤 3 中如何进行模型调整,我们主要借助竞争梯度下降法 (Dueling Gradient Descent Algorithm)

该算法主要步骤如下:

  1. 对已经训练好的模型 Q 的参数 W 进行随即调整。得到新的参数 W’,此时的网络 Q’ 就是探索网络
  2. 用 Q 和 Q’ 生成两个推荐列表并进行合并,推送给用户之后获取反馈
  3. 如果 Q’ 好,则参数变为 W’,否则维持 W

这里的随机调整 ΔW = α * rand(-1, 1) W。α 就是探索因子,决定了探索力度的大小

所以 DRN 就是通过不断 “探索”,通过海量尝试试图达到最优点。强化学习将模型的 “实时性” 变得极为重要。

总结



推荐系统(Recommender System)笔记 01:推荐系统的演化相关推荐

  1. 推荐系统实践读书笔记-01好的推荐系统

    推荐系统实践读书笔记-01好的推荐系统 在研究如何设计推荐系统前,了解什么是好的推荐系统至关重要.只有了解了优秀推荐系统的特征,我们才能在设计推荐系统时根据实际情况进行取舍.本章分3个步骤来回答这个问 ...

  2. 《深度学习推荐系统》读书笔记之推荐系统的进化之路

    来源:https://zhuanlan.zhihu.com/ p/138446984 作者:一块小蛋糕 编辑:深度传送门 最近读完了王喆老师的新作--<深度学习推荐系统>,拿到书之前,期待 ...

  3. 推荐系统实践读书笔记-05利用上下文信息

    推荐系统实践读书笔记-05利用上下文信息 本章之前提到的推荐系统算法主要集中研究了如何联系用户兴趣和物品,将最符合用户兴趣的物品推荐给用户,但这些算法都忽略了一点,就是用户所处的上下文(context ...

  4. 入门机器学习(十九)--推荐系统(Recommender Systems)

    推荐系统(Recommender System) 1. 问题规划(Problem Formulation) 2. 基于内容的推荐系统(Content Based Recommendations) 3. ...

  5. 推荐系统(Recommender System)笔记 03:推荐系统的重要思想

    推荐系统(Recommender System)笔记 03:推荐系统的重要思想 推荐系统的特征工程 构建特征工程的原则 推荐系统的常用特征 用户行为数据 用户关系数据 属性.标签类数据 内容类数据 上 ...

  6. 吴恩达机器学习系列课程笔记——第十六章:推荐系统(Recommender Systems)

    16.1 问题规划 https://www.bilibili.com/video/BV164411b7dx?p=96 在接下来的视频中,我想讲一下推荐系统.我想讲推荐系统有两个原因: 第一.仅仅因为它 ...

  7. 推荐系统炼丹笔记:推荐系统Bias/Debias大全

    作者:一元 公众号:炼丹笔记 背景 在实践中,做推荐系统的很多朋友思考的问题是如何对数据进行挖掘,大多数论文致力于开发机器学习模型来更好地拟合用户行为数据.然而,用户行为数据是观察性的,而不是实验性的 ...

  8. 推荐系统实践读书笔记-04利用用户标签数据

    推荐系统实践读书笔记-04利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品. ...

  9. 《推荐系统实践》笔记

    推荐类型:社会化推荐(根据好友推荐电影).基于内容的推荐(根据演员找电影).基于协同过滤的推荐(根据兴趣相似的人找电影): 推荐应用:电商(如亚马逊).电影和视频(如Netflix.YouTube). ...

最新文章

  1. Oracle字符集的查看查询和Oracle字符集的设置修改
  2. js实现禁止右键 禁止f12 查看源代码
  3. faststone 注册码
  4. BugKuCTF WEB 备份是个好习惯
  5. Programming C# 4th Edition 中文版/英文版 对照阅读体验
  6. 三次多项式曲线php,多项式计算的效率测试,多项式计算效率_PHP教程
  7. 9 10次c语言上机作业答案,第十五次上机作业带答案
  8. Bzoj4011 [HNOI2015]落忆枫音
  9. 自动运维化tools篇2:通过SSH信任关系,批量修改LINUX密码
  10. CNN_原理以及pytorch多分类实践
  11. 解压缩 tar命令详解
  12. 史上最后一位数学全才——庞加莱
  13. Unity之Touch触摸屏单指、多指触碰
  14. 锁定计算机后qq能远程吗,如何通过QQ进行远程控制(利用QQ远程协助在不同网络下远程控制电脑)...
  15. win7怎样设置计算机休眠时间,win7休眠时间怎么设置
  16. 百度图片爬虫【图片编码处理】
  17. 重磅推荐:火爆全网的「合成大西瓜」源码来了
  18. pmv计算c语言软件,Fluent 软件
  19. 硬盘读不出来如何恢复?好用的数据恢复软件分享
  20. 【docker系列】docker API管理接口增加CA安全认证

热门文章

  1. 模糊相似矩阵_主要代码实现
  2. 操作系统基本原理(软件设计师考试)
  3. Matlab初阶绘图(2022b)
  4. 含文档+PPT+源码等]精品基于Uniapp+SSM实现的移动端的家庭客栈管理系统实现的App[包运行成功]Java毕业设计Android项目源码
  5. 导出cvs文件格式数据
  6. Odoo忘记Master Password怎么办?
  7. 谈谈蓝牙跳频技术解决方案
  8. 求质数算法的N种境界[1] - 试除法和初级筛法
  9. firefox 导入导出书签
  10. 2021-10-29