09 深度推荐模型演化中的“平衡与不平衡“规律

你好,我是大壮。08 讲我们介绍了深度推荐算法中的范式方法,并简单讲解了组合范式推荐方法,其中还提到了多层感知器(MLP)。因此,这一讲我们就以 MLP 组件为基础,讲解深度学习范式的其他组合推荐方法。

MLP 是一种非常简单、原汁原味的神经网络(DNN),它能够逼近任何可测函数并得到任何期望的精确度,简洁又有效。在推荐领域,MLP 由于能有效地建模高阶交互特征,所以成了深度推荐算法中最通用的组件。

下面我们看看在推荐系统中,如何使用 MLP 进行隐向量表征学习和推荐模型建立。

深度矩阵分解(DMF)模型(双塔结构)

深度矩阵分解模型(Deep Matrix Factorization Model,DMF)是以传统的矩阵分解(MF)模型为基础,再与 MLP 网络组合而成的一种模型。

DMF 模型的框架图如下所示:该模型的输入层为交互矩阵 Y,其行、列分别对应为对用户和对物品的打分,并采用 multi-hot 形式分别表征用户和物品。

  • Relevance measured by cosine similarity:余弦相似度计算

  • Latent representation:隐向量表征

  • Multi-layer non-linear projection:多层非线性投影

  • Interaction Matrix:交互矩阵

  • Layer1~N:层1~N

图片来自论文《Deep Matrix Factorization Models for Recommender Systems》(IJCAI 2017)

  • Yi* 指的是交互矩阵 Y 中的第 i 行,表示用户 i 对所有物品的评分,即用户 i 的表征;

  • Y*j指的是交互矩阵 Y 中的第 j 列,表示所有用户对物品 j 的评分,即物品 j 的表征。

  • 然后,我们将用户表征 Yi* 和物品表征 Y*j 分别送入 MLP 双塔结构,生成用户隐向量表征 Pi 和物品隐向量表征 qj;

  • 最后,对二者使用余弦点积匹配分数。

Tips:实际上,DMF 模型是由 MF+MLP 双塔串联而成的一种模型,其中 MF 主要负责线性部分,MLP 主要负责非线性部分。它主要以学习用户和物品的高阶表征向量为目标。

下面我们有必要简单说明下什么是双塔结构。

【双塔结构】

双塔结构是一种被广泛使用的采用深度模型进行表征学习的范式组合方式,因为这样的模型画出来像一个“塔”,所以称之为“双塔”。

关于双塔结构中所谓的“塔”指的是 DNN 结构,通过在模型中加入 DNN 结构实现“降维”。在双塔结构中,靠进输入侧的参数越多,靠近输出侧的参数越少。

我们主要使用“双塔”结构,各自构建两种类型的隐向量表征,例如用户和物品的隐向量表征、Query 和 Doc 的隐向量表征等,然后通过一定的计算方式(如点积)计算二者的匹配得分。

Tips:因为最后我们需要通过相对简单的计算方式,衡量两个向量之间的距离,所以两个塔输出的向量维度必须相同。而且因为双塔结构讲究两个塔之间的平衡性,所以两个塔的参数配置通常也需要保持相同。

双塔结构为什么只通过相对简单的计算方式衡量两个向量之间的距离呢?

这是因为复杂的神经网络计算一般使用离线的方式进行计算,再将双方的隐向量表征进行存储,而线上服务只计算向量之间的距离,这样就可以缩短线上服务的响应时间,从而减少线上服务的计算量。但这也不能一概而论,例如 Query 和 Doc 的匹配计算遇到长尾 Query 时,我们就需要实时计算 Query 的隐向量。

对于算法工程师而言,算法模型可谓是他们手中的一件强有力兵器。在十八般兵器中,有人使用双枪左右开弓,必然会有人使用单枪破双枪法。

在双塔模型大行其道之时,单塔同样不输双塔,这不有人总结出了“双枪发,单枪扎;双枪不发,单枪拉”的要义。

所以,接下来我们来看看单塔结构的相关模型。

神经网络协同过滤(NFC)模型(单塔结构)

神经网络协同过滤 (Neural Collaborative Filtering, NFC) 是一个端到端的模型。为了方便你理解这部分知识,我们先来看一下传统的矩阵分解模型(MF)。

传统的矩阵分解模型(MF)将用户物品交互矩阵分解为两个低秩稠密的矩阵p和q计算公式如下:

传统 MF 模型相当于把稀疏的用户和物品 ID 向量转化为了稠密的隐向量表征,模拟了浅层神经网络的作用。其中,p 代表用户的隐因子矩阵,q 代表物品的隐因子矩阵。通过这两个矩阵,我们就可以预测用户对物品的评分。

了解了传统的 MF 模型后,下面我们再来看看 NCF 模型,框架如下图所示:

  • Output Layer:输出层

  • Neural CF Layer:神经协同过滤层

  • mbedding Layer:表征层

  • Input Layer(Sparse):稀疏输入层

  • Training:训练

  • Target:目标

  • Score:分数

  • Layer1~X:层1~X

  • User:用户

  • Item:物品

  • User Latent Vector:用户隐向量

  • Item Latent Vector:物品隐向量

从图中可知,模型输入端利用类 MF 的浅层神经网络将稀疏的用户和物品 ID(one-hot)转化为用户隐向量和物品隐向量。

NCF 模型整体操作过程:首先,利用类 MF 的结构获得用户和物品交互关系的隐向量表征,并加上用户画像和物品画像特征的向量表征,二者连接后作为 MLP 的输入;然后,我们利用 MLP 拟合用户和物品间的非线性关系。

对比双塔结构使用 MLP 对用户和物品的特征进行了隐向量提取,NCF 模型对 MLP 的使用有了本质变化。

NCF 模型由 MF+MLP 单塔串联组合而成,并以精确拟合匹配分数为目标。其中,MF 之后添加辅助信息(side information),MLP 用来拟合打分。

相比于 DMF 模型的双塔结构而言,NCF 模型主要使用 MLP 单塔拟合效用函数,然后产出端到端的预测结果。虽然该模型丧失了一些表征学习的灵活性,却获得了精确拟合匹配分数的能力。

在刺击类武器中,最早出现的长矛能够在较远的距离杀伤敌人保护自己。而在砍击类武器中,最早大规模使用的戈能够钩开敌人的盾牌阵。后来又出现了一种结合了两者优势的武器——戟,它集刺、砍、钩能力于一身。

那么,有没有一种将单塔和双塔优势结合为一体的模型呢?

有的,在 NCF 模型的同一篇论文中,我就找到了这样一个混合模型——神经矩阵分解(NeuMF)模型,下面一起来看看。

说明:从严格意义上说,它不能算是单塔和双塔的结合,但是管他呢~道德经中说“是以圣人为腹不为目,故去彼取此”,实用才是目的。

神经矩阵分解(NeuMF)模型(混合结构)

神经矩阵分解 (Neural Matrix Factorization, NeuMF)模型在 NCF 模型的基础上增加了通用矩阵分解 GMF(General Matrix Factorization)部分。

关于 NeuMF 模型框架如下图所示:

NeuMF Layer:神经矩阵分解层

Concatenation:拼接

GMF Layer:通用矩阵分解层

Element-wise Product:点积

Training:训练

Target:目标

Score:分数

MLP Layer1~X:MLP层1~X

User:用户

Item:物品

MF User Vector:矩阵分解用户向量

MLP User Vector:MLP用户向量

MF Item Vector:矩阵分解物品向量

MLP Item Vector:MLP物品向量

图中左边为 GMF 部分,它是以用户 ID 和物品 ID 的 one-hot 形式进行输入,然后利用一层网络生成用户和物品的低阶隐向量表征,再通过向量点积和一层网络输出线性交互特征。

图中右边为多层感知器,它同样是以用户 ID 和物品 ID 的 one-hot 形式进行输入,然后经过多层网络输出非线性交互特征。最后,它将 GMF 和 MLP 的输出进行连接,并经过最后一个激活函数为 Sigmoid 的全连接层,输出推荐分数。

NeuMF 模型是在 MF 通过接入 GMF+MLP 模型并联而成,再接 FC 层进行输出。该模型

采用 GMF+MLP 的并联结构,使得模型同时具备低阶和高阶特征提取的双重能力,并以精确拟合匹配分数为目标。虽然这种并联结构不平衡,但是也有一定的好处。

说到不平衡的结构模型,其中影响最为深远的要数广深(Wide&Deep)模型了。

广深(Wide&Deep)模型(不平衡结构模型)

广深(Wide&Deep)模型最早由 Google 提出,自工业界诞生后,便为在范式组合方式基础上产生模型打开了一扇大门。因此,我们与其说广深(Wide&Deep)模型是一种模型,倒不如说是一套通用的范式框架。

通过名字我们就知道,Wide&Deep 模型是由 Wide 和 Deep 两大部分组成,它的框架图如下所示:

  • Output Units:输出单元

  • Hidden Layers:隐藏层

  • Dense Embeddings:稠密表征

  • Sparse Features:稀疏特征

Wide

属于广义线性部分,它对用户或者物品 ID 这类高频低阶特征使用少量参数即可学习,故记忆能力好;但是对没有见过的 ID 学习能力较差,故泛化能力差。这是因为特征从输入到输出比较通透,保留了大量的原始信息,因此模型捕捉的特征更加具体。

例如 58 同城 App 本地服务推荐业务中,如果训练数据中望京和酒仙桥的家政帖子共现频率较高,模型一旦记住了望京和酒仙桥这两个商圈 ID 的关联关系,那么就会在用户点击酒仙桥的家政帖子时,同时赋予望京的家政帖子更高的排序权重。而这种直接从历史数据挖掘的特征相关性,属于低层特征信息。当用户复现某个历史行为,模型能够拟合用户兴趣,这是对特征的良好记忆能力的一种体现。

Deep

属于神经网络 MLP 部分,它主要用于学习样本中的长尾部分,因为它对出现较少或者没有出现过的特征组合都能够做出预测,所以需要的人工参与较少,且泛化能力强。

例如App本地服务推荐业务中,家政的帖子信息进入 MLP 经过多层信息抽取后,模型挖掘到的用户兴趣会偏向高层特征信息抽象表征。如果用户产生的历史数据没有出现过新的行为,模型能够做到非零预测,这就是对特征的良好泛化能力的一种体现。

由此可见,Wide&Deep 模型同时具备记忆能力(Memorization)和泛化能力(Generalization)。

总结:Wide&Deep 模型由 LR+MLP 两部分并联组成,综合了传统机器学习和深度学习的长处。

Wide 部分根据历史行为数据推荐与用户已有行为直接相关的物品;

Deep 部分负责捕捉新的特征组合,从而提高推荐的多样性。

接下来,让我们一起看看出现的一种新模型。

1.深度因子分解机(DeepFM)模型

深度因子分解机(Deep Factorization Machine,DeepFM)模型是从广深(Wide&Deep)框架中演化出来的一种模型。

因为 Wide&Deep 模型的广义线性部分,挖掘到的用户兴趣对交叉信息仍然需要人工特征工程来人为构建特征和特征间的组合,所以过程相当繁琐且需要依赖人工经验。

那么,有没有一种办法可以避免人工特征工程呢?

答案是有的,在传统机器学习部分我们已经讲述了其解法,这就是 DeepFM 模型。它使用 FM 模型替换掉了 LR 部分,从而形成了 FM&Deep 结构。

DeepFM 模型框架如下图所示:

Output Units:输出单元

FM Layer:因子分解机层

Hidden Layer:隐藏层

Dense Embeddings:稠密表征

Sparse Features:稀疏特征

Addition:加

Inner Product:内积

Sigmoid Function:Sigmoid函数

Activation Function:激活函数

Weight-1 Connection:权重1连接

Normal Connection:正常连接

Embedding:隐向量

Field i~m:域 i~m

与 Wide&Deep 模型异曲同工,DeepFM 模型分为 FM 部分和 Deep 部分。

  • FM 部分:它可以自动提取特征交叉信息,其中包含了加权求和的一阶信息和向量内积的二阶信息。相比 Wide&Deep 模型而言,它在低层特征的使用上更合理。

  • Deep 部分:DeepFM 模型与 Wide&Deep 模型的 Deep 部分本质上并无区别,然而,Wide&Deep 模型中的 Embedding 层是为 Deep 部分专门设计的,而 DeepFM 模型中的Embedding 层由 Deep 部分与 FM 部分共享输出。

讲到使用 FM 替换了 LR,我们感觉传统机器学习算法那一套又来了一遍?是不是又要打 FM 模型只能进行二阶特征交叉这个缺点的主意了?

没错,接下来我们看看可以学习高于二阶特征交叉的推荐模型。

2.深度和交叉网络(DCN)模型

深度和交叉网络(Deep & Cross Network,DCN)模型是从广深(Wide&Deep)框架中演化出来的一个模型。

通过前面的学习,我们知道 Wide&Deep 在低层特征使用时,无法提供更高阶的特征,必须需要依赖人工构建交叉信息。而 DeepFM 模型中的 FM 部分虽然可以自动组合特征,但是仅限于二阶特征交叉,那么如何自动学习高于二阶特征交叉的特征组合呢?

DCN 模型将 Wide 部分替换为由特殊网络结构实现的特征交叉网络,它的框架如下图所示:左侧的交叉层除了接收前一层的输出外,还会同步接收原始输入层的特征,从而实现特征信息的高阶交叉。

Combination output layer:组合输出层Cross network:交叉网络

Deep network:深度网络

Embedding and stacking layer:表征和堆叠层

Dense feature:稠密特征

Sparse feature:稀疏特征

Embedding vec:表征向量

Cross Layer:交叉层

Deep Layer:深度层

Output:输出

对比 DeepFM 模型,DCN 模型在低层特征的信息提取上,不仅能够挖掘特征中更高阶的交叉信息,而且计算效率更有优势。

以上两个模型主要是对 Wide 部分进行改进,因此我们会很自然地想到是不是也可以对 Deep 部分进行改进?

没错,当然可以,接下来我们一起看看又演化了什么模型。

3.神经因子分解机(NFM)模型

神经因子分解机(Neural Factorization Machine)模型也是 Wide&Deep 框架中的一种。

NFM 模型把 Wide 部分放到一边不碰,Deep 部分在 FM 的基础上结合了 MLP 部分。其中,FM 部分能够提取二阶线性特征,MLP 部分能够提取高阶非线性特征,从而使模型具备捕捉高阶非线性特征的能力。

NFM 模型框架的 Deep 部分如下图所示,NFM 模型是在 Embedding 层后将 FM 的输出进行 Bi-Interaction Pooling 操作(将表征向量的两两元素相乘后,再将所有组合的结果进行求和),然后在后面接上 MLP。

Prediction Score:预测分数

Hidden Layers:隐藏层

B-Interaction Layer:双交互层

Embedding Layer:表征层

Input Feature Vector(sparse):稀疏输入特征向量

Layer 1~L:层 1~L

相比 DeepFM 的拼接操作而言,Bi-Interaction Pooling 操作使得特征之间可以强行交互。因此,我们可以说 NFM 模型的核心是在 Deep 部分中引入了 Bi-Interaction Pooling 操作,使得 Deep 部分通过浅层网络可以学习到包含更多信息的组合特征,而且性能更好、训练和调整参数更容易。

小结与预告

道德经中“天之道,其犹张弓与!高者抑之,下者举之”。也就是说,万物都是在平衡和不平衡之中循环和轮回,算法模型的演化亦如此。

这一讲介绍了深度推荐范式的基于平衡与不平衡的组合规律,下一课时我们将继续介绍深度推荐模型的其他演化路径。

这里留一道思考题:你还能想到哪些模型符合深度推荐模型的平衡与不平衡演化路径?请在评论区与我交流。

最后,如果你觉得本专栏有价值,欢迎分享给更多好友~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3246702.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

pico+unity3d手部动画

在 Unity 开发中,输入系统的选择和运用对于实现丰富的交互体验至关重要。本文将深入探讨 Unity 中的 Input System 和 XR Input Subsystem 这两种不同的输入系统,并详细介绍它们在控制手部动画方面的应用。 一、Input System 和 XR Input Subsystem 的区…

每日练习,不要放弃

目录 题目1.下面叙述错误的是 ( )2.java如何返回request范围内存在的对象?3.以下代码将打印出4.下列类定义中哪些是合法的抽象类的定义?()5.以下代码段执行后的输出结果为6.以下代码运行输出的是总结 题目 选自牛客网 1.下面叙述…

【node-RED 4.0.2】连接操作 Oracle 数据库实现 增 删 改 查【新版,使用新插件:@hylink/node-red-oracle】

总览 上节课,我们说到,在 node-red 上链接 oracle 数据库 我们使用的插件是 node-red-contrib-agur-connector。 其实后来我发现,有一个插件更简便,并且也更好用:hylink/node-red-oracle !!&am…

Linux--网络基础

计算机网络背景 计算机网络背景是一个复杂而丰富的领域,涵盖了从计算机单机模式到网络互联的演变过程,以及网络技术的不断发展和创新。 计算机单机模式和独立发展 在早期,计算机主要以单机模式存在,即每台计算机都是独立的&…

传知代码-揭秘AI如何揪出图片中的“李鬼”(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 文字篡改图像的“照妖镜”:揭秘AI如何揪出图片中的“李鬼” 在数字化时代,我们时常被各种图像信息所包围。然而,这些图像中有时隐藏着不为人知的秘密——被篡改的文字或图像。这…

C++ | Leetcode C++题解之第238题除自身以外数组的乘积

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int length nums.size();// L 和 R 分别表示左右两侧的乘积列表vector<int> L(length, 0), R(length, 0);vector<int> answer(l…

188数码管轮询扫描

前言 最近用到了188数码管&#xff0c;总结一下。 188数码管&#xff0c;用5个IO&#xff0c;在不借助外部驱动芯片的情况下&#xff0c;可以点亮20个灯。188数码管广泛应用于电子烟、充电器、充电宝、DVD、高级音响、工业设备控制面板、医疗器械等多个领域&#xff0c;满足不…

【iOS】——TaggedPointer

TaggedPointer介绍 在为了改进从 32位CPU 迁移到 64位CPU 的内存浪费和效率问题&#xff0c;在 64位CPU 环境下&#xff0c;引入了 Tagged Pointer 。旨在提高内存效率和运行性能&#xff0c;尤其针对小的、频繁使用的对象&#xff0c;如NSNumber, NSDate, 和NSString等。在64…

昇思学习打卡-19-生成式/Pix2Pix实现图像转换

文章目录 网络介绍训练推理结果 网络介绍 Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;可以实现语义/标签到真实图片、灰度图到彩色图、航空图到地图、白天到黑夜、线…

mmdetection

首先下载mmdetection 3.2.0版本的 https://github.com/open-mmlab/mmdetection/tree/v3.2.0 第二步&#xff1a;创建虚拟环境 conda create -n mmdetection python3.8 -y conda activate mmdetection第三步&#xff1a;安装包 pip install torch2.0.1cu118 -f https://downl…

【c++】新领域:“智能数组 ” 问世

引入: 大家有没有发现每次创建和使用数组时很麻烦,因为数组长度一般只能用静态常量,太过局限,不满足大部分开发者的需求。而且遍历数组也很麻烦,又要for循环,又要在其他使用数组的地方检查边界。 于是我就构想了一种“智能数组” 就解决了大部分的难题 这样的语言风格是…

分布式IO系统2通道串口通信模块M602x

现场总线耦合器本身包含一个电源模块&#xff0c;它有 2 个串口通道&#xff0c;通过 Modbus RTU&#xff08;Master&#xff09;协议连接外部串行设备&#xff0c;实现耦合器与外部串行设备通信&#xff0c;现以连接设备的示例带大家了解我们钡铼的2 通道串口通信模块 M602x。…

自闭症孩子为什么容易出现饮食问题?

在星启帆自闭症学校&#xff0c;我们深知自闭症孩子在日常生活中常常面临饮食问题的挑战。这些问题不仅影响孩子的营养摄入和健康成长&#xff0c;也给家庭和学校带来了不小的困扰。以下是我对自闭症孩子容易出现饮食问题的几点分析&#xff1a; 一、感官敏感性 自闭症孩子往往…

【NetTopologySuite类库】合并所有几何的包围盒AABB

流程示意图 示例代码 using GeoAPI.Geometries; using Microsoft.VisualStudio.TestTools.UnitTesting; using NetTopologySuite.Geometries; using NetTopologySuite.IO; using System.Collections.Generic; using System.Linq;namespace Test472 {[TestClass]public class T…

vim网络和安全的操作及shell的使用

目录 vim模式 一般模式下的基本操作&#xff1a; 一般模式切换到编辑模式&#xff1a; 一般模式切换到命令模式&#xff1a; Vim多窗口使用技巧 横向切割打开&#xff1a; 纵向切割打开&#xff1a; 关闭多窗口&#xff1a; 窗口的切换&#xff1a; 网络&#xff1a;…

使用 Flask 3 搭建问答平台(二):User 模型搭建

前言 以下所有代码均是在之前的基础上添加&#xff01;&#xff01;&#xff01; 后面的章节均是如此 知识点 1. 使用 pymysql 模块连接数据库 2. 在模型中创建用户数据表 3. 初始化数据库、创建初始迁移脚本、应用初始迁移脚本 一、User 模型搭建 1.1 准备数据库 1.2 …

Python进阶 异常-包-模块案例

import my_utils.str_util from my_utils import file_utilprint(my_utils.str_util.str_reserves("黑马程序员")) print(my_utils.str_util.substr("itheima",0,4))#文件处理 def print_file_info(file_name):"""将给定路径文件的内容输出…

appium2.0 执行脚本遇到的问题

遇到的问题&#xff1a; appium 上的日志信息&#xff1a; 配置信息 方法一 之前用1.0的时候 地址默认加的 /wd/hub 在appium2.0上&#xff0c; 服务器默认路径是 / 如果要用/wd/hub 需要通过启动服务时设置基本路径 appium --base-path/wd/hub 这样就能正常执行了 方法二…

MongoDB综合实战篇(超容易)

一、题目引入 在MongoDB的gk集合里插入以下数据&#xff1a; 用语句完成如下功能&#xff1a; &#xff08;1&#xff09;查询张三同学的成绩信息 &#xff08;2&#xff09;查询李四同学的语文成绩 &#xff08;3&#xff09;查询没有选化学的同学 &#xff08;4&#xf…

Windows与Ubuntu安装ffmpeg

文章目录 前言ffmpeg的简介安装ffmpegWindows下载设置环境变量 Ubuntu 总结 前言 FFmpeg是一款非常强大的开源音视频处理工具&#xff0c;它包含了众多的音视频编解码库&#xff0c;可以用于音视频的采集、编解码、转码、流化、过滤和播放等复杂的处理。在Windows系统上安装FF…