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://www.mzph.cn/news/872795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子设备中丝杆模组高精度重复定位技术的原理!

丝杆模组是由螺旋丝杆和导杆组成的一种机械运动控制系统,通过在导杆内进行旋转,使导杆沿着线性方向进行移动,从而实现机械运动的线性控制。丝杆模组以其高精度、高稳定性和可重复定位的特性,在现代工业自动化和精密制造领域发挥着…

controller-from表单1

mvc模式是spring boot 开发web应用程序主要使用模式,mvc分别代表model模型,view是视图 ,controller是控制器 controller是对接用户请求数据调用服务层代码,具体怎么操作 浏览器发送http请求给到dispatcherServlet(前…

【操作系统】文件管理——文件存储空间管理(个人笔记)

学习日期:2024.7.17 内容摘要:文件存储空间管理、文件的基本操作 在上一章中,我们学习了文件物理结构的管理,重点学习了操作系统是如何实现逻辑结构到物理结构的映射,这显然是针对已经存储了文件的磁盘块的&#xff0…

无人驾驶的未来:AI如何重塑我们的出行世界

无人驾驶汽车,作为人工智能(AI)技术的集大成者,正以前所未有的速度改变着我们的出行方式。从机器学习到计算机视觉,再到人工智能生成内容(AIGC),AI技术的每一次进步都在为无人驾驶汽…

Linux内核编程(八) 添加自定义目录驱动菜单 (Kconfig文件使用)

本文目录 一、Linux 内核驱动目录二、自定义驱动的Kconfig编写●示例:在 drivers 菜单添加一个自己驱动的子菜单。 三、自写驱动的Makefile编写四、总结 一个Linux内核源码,其中包含了很多驱动程序,对应不同的功能。我们在编译内核时。如果将…

设计模式:真正的建造者模式

又臭又长的set方法 经常进行Java项目开发使用各类starter的你一定见过这种代码: public class SwaggerConfig {Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any…

【BUG】已解决:ModuleNotFoundError: No module named ‘cv2’

已解决:ModuleNotFoundError: No module named ‘cv2’ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开…

基于 Web 的家校联系系统的设计与实现

目录 基于 Web 的家校联系系统的设计与实现 一、绪论 (一)研究背景 (二) 研究目的 (三) 研究意义 二、需求分析 (一) 功能需求 (二) 性能需求 &#…

开发一个自己的chrom插件

开发一个自己的chrom插件 一、创建一个文件夹 二、配置文件manifest.json 创建名字为:manifest.json的配置文件,模板如下: {"manifest_version": 3,"name": "Hello World Extension","version": …

AV1 编码标准屏幕内容编码技术概述

AV1 屏幕内容编码 为了提高屏幕捕获内容的压缩性能,AV1采用了几种编码工具,例如用于处理屏幕画面中重复模式的内帧内块复制(IntraBC),以及用于处理颜色数量有限的屏幕块的调色板模式。 帧内块拷贝 AV1 编码中的 Intra …

【Elasticsearch7.11】reindex问题

参考博文链接 问题:reindex 时出现如下问题 原因:数据量大,kibana的问题 解决方法: 将DSL命令转化成CURL命令在服务上执行 CURL命令 自动转化 curl -XPOST "http://IP:PORT/_reindex" -H Content-Type: application…

Python: 一些python和Java不同的基础语法

文章目录 1. 数据类型2. 字符串的引用3. 字符串拼接4. Python中的报错5. Python中的输入语句(input)6. 运算符(**和//)7. 除法运算8. 注释方法: #或者三引号9. Python中的比较10. Java中用and, or, not代替逻辑运算符11. 多元赋值12. Python不支持自增自减操作13. 在Python中, …

zookeeper基础知识学习

官网:Apache ZooKeeper 下载地址:Index of /dist/zookeeper/zookeeper-3.5.7Index of /dist/zookeeperIndex of /dist/zookeeper/zookeeper-3.5.7 ZK配置参数说明: 1、tickTime2000:通讯心跳时间,zookeeper服务器与客…

笑中带泪《抓娃娃》

【标题】笑中带泪,《抓娃娃》:一场关于成长的中式惊悚喜剧盛宴在这个夏日炎炎的季节里,一部名为《抓娃娃》的电影悄然上映,以沈腾与马丽的黄金搭档再次点燃观众的热情。然而,当笑声在影院回荡时,一股不易察…

搭建图片缓存服务器,解决图片访问403 Forbidden问题

在现代Web开发中,图片是网站和应用的重要组成部分。然而,有时我们在访问某些图片时会遇到403 Forbidden错误,尤其是自己的应用访问互联网上的三方的图片时,这通常是由于别人的服务器设置了访问限制。本文将介绍如何通过搭建一个图…

7月15日学习打卡,二叉搜索树和字符串操作

hello大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不…

C#学习

C#学习 1.B站丑萌气质狗C#的循环-判断泛型错误处理面向对象static的使用定义showInfo类和Hero类 在这里插入图片描述 然后在该解决方案add新建一个类库,点击rebuild,会在bin文件夹下生成.dll文件 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direc…

数据类型与运算符

一、进制 1.1 进制的区分 1.2进制的换算 只要掌握计算器的方式即可。人工计算的方式了解一下就行了。 二、计算机数据的存储原理 2.1 存储单位 最小的单位:比特位 bit 1位比特要么为0,要么为1 最基本的单位:字节 …

Spring-Cache 缓存

1.简介 2.SpringCache 整合 简化缓存开发 1.导入依赖 <!-- spring cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>2.redis 作为缓存…

二分法binary search

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…