08 模型演化根本 深度学习推荐算法的五大范式

易经》“九三:君于终日乾乾;夕惕若,厉无咎”。九三是指阳爻在卦中处于第三位,已经到达中位,惕龙指这个阶段逐渐理性,德才已经显现,会引人注目;但要反思自己的不足,努力不懈,日夜警惕戒备,即使处于危境,也可无咎。

模块三我们将讲解深度学习推荐算法,这部分近年来发展迅速,我们将学习和掌握最有影响力的深度学习推荐算法及其发展脉络。

上一课时《07 | 物以类聚,基于特征的七种算法模型》,我们讲到传统机器学习组合 GDBT+LR 模型开启了特征工程化和端到端学习的开端,而深度学习的发展将继续延续了这一趋势。

神经网络的结构更加复杂和灵活多变,所以复杂的网络结构就需要更多、更丰富的样本去拟合参数,这样对算力的要求也就高了很多。但是深度学习能够全自动从原有数据中提取到有用特征,而对于处理文本、图像、语音等非结构化数据,人工筛选是基本不可能完成,所以我们说深度学习具有传统机器学习无法比拟的优势。

因此,从这一讲开始我们进入激动人心的深度学习算法部分。

进入深度学习时代后,推荐模型主要有以下两个方面的进展:

  • 与传统模型相比,深度学习模型的表达能力更强,且能够从数据中挖掘出更多隐藏的模式;

  • 深度学习模型结构非常灵活,它能够根据业务场景和数据特点灵活调整模型结构,使得模型与应用场景实现完美契合。

《道德经》中“道之在天下,犹川谷之于江海;为天下谷,常德乃足,复归于朴。朴散则为器,圣人用之,则为官长,故大制不割。”这句话主要阐述了“见素抱朴”的思想。

在光怪陆离、纷繁芜杂的世界,我们只有剥离事物的表面现象,找到事物的本质,才能把握一切事物的变化规律,并据此预测事物的发展趋势,也就是所谓的“降维”思想。

而机器学习的过程就是对世界降维理解的过程,其中用户的隐向量是对用户的降维理解,物品的隐向量是对物品的降维理解,这就是我们说的“朴”。

那么,我们应该如何找到“朴”呢?也就是如何找到事物的本质呢?

在深度学习中,通过找到一些范式方法,并将这些范式方法应用到范式模型中,我们就可以得到“朴”。

所谓的范式模型,是指其他模型基于此范式演化的基础模型。

得到的“朴”如果不够精确,我们则可以通过改进范式与范式的组合方式,来拟合反馈更加精确的“朴”,这就形成了推荐系统的深度学习体系。

这也是这一讲的重点内容,下面我们着重介绍一下。在推荐系统中,深度学习的范式模型分为多层感知器(MLP)、自编码器(AE)、受限玻尔兹曼机(RBM)、卷积神经网络(CNN)、循环神经网络(RNN)这五种,下面我们逐一说明一下。

多层感知器(MLP)—— 最通用组件

目前多层感知器(Muti-Layer Perception)在推荐领域应用甚为广泛,它是一种简单、原汁原味的神经网络,能有效地建模高阶特征之间的交互,属于深度推荐算法中最通用的组件,并且其他的各种范式都是由此演变而来。

最典型的 MLP 包括三层:输入层、一个或多个隐藏层和输出层。MLP 神经网络的不同层之间是全连接的;每个神经元上面都有一个输入权重、偏置量和激活函数。

MLP 已被证明是一种通用的函数近似方法,可以拟合复杂的函数或解决分类问题。

自编码器(AE)—— 学习隐向量表征

自编码器(AutoEncoder)是最常见的神经网络无监督模型,主要用于特征降维或特征提取。

AE 一般由编码器(Encoder)和解码器(Decoder)组成,

  • 这里可以理解为学习到输入数据的隐向量表征称为编码;

  • 用隐向量表征重构出原始输入数据称为解码。

模型目的在于,使输入和输出无限逼近。学习数据的隐向量表征由最中间层计算输出。

自编码器在推荐领域,主要用于学习用户或物品的隐向量表征,然后基于表征预测用户对物品的偏好。需要说明的是,自编码器的适用场景与其训练数据强相关,且因为属于无监督模型,无需标注,可以自动进行样本学习。

受限玻尔兹曼机(RBM)—— 评分预测

受限玻尔兹曼机(Restricted Boltzmann Machine)是一个由可见层和隐藏层组成的双层神经网络无监督模型,两层内部不存在连接,两层之间进行全连接。

RBM 与玻尔兹曼机(Boltzmann Machine)的差别在于:RBM 不存在两层内部连接,而 BM 存在两层内部连接,因为去除了同层之间的连接,从而提高了训练效率。

RBM 在推荐领域,主要用于评分预测,通过学习用户对物品的评分数据进行预测。

卷积神经网络(CNN)—— 提取隐向量表征

卷积神经网络(Convolutional Neural Network)是一种特殊的前馈神经网络,基本结构上包含以下三层:

  • 卷积层,捕捉局部特征;

  • 池化层,可大幅降低模型参数量级,并有效避免过拟合;

  • 全连接层,根据不同的场景和任务输出模型的结果。

可以看出,CNN 把大量参数降维成少量参数再做处理,简化问题域的同时,又不会影响结果。

CNN 在推荐领域,主要用于从图像、文本、音频中提取物品的隐向量表征,并结合用户的隐向量表征进行推荐。

循环神经网络(RNN)—— 序列数据建模

循环神经网络(Recurrent Neural Network)是一种含有反馈结构的神经网络,模型输出不但与当前输入相关,与之前的输入也相关,适用于对序列数据建模。

RNN 在网络各隐层之间的节点是具有连接的,可根据输入层的输出和前一时刻的隐层状态来计算当前时刻的隐层输出,从而具备对过去信息的记忆。

RNN 本身存在梯度消失和梯度爆炸的问题,经过改进网络结构后,如长短时记忆网络(LSTM)和门控循环单元(GRU)等采用了特殊的隐层结构,使得模型具备有效建模长程依赖关系的能力。

RNN 在推荐领域,主要用于对用户行为序列的建模,以及对用户或物品相关文本信息序列的建模等。

【其他范式还有哪些?】

除了上述 5 种常用范式之外,还包括神经自回归分布估计(Neural Autoregressive Distribution Estimation)、对抗网络(Adversarial Networks)等范式。

由于它们在推荐领域的应用比较有限,这一讲中我们就不一一介绍了。

此外,目前注意力机制、深度强化学习等在深度学习领域中发展迅速,在推荐领域深度模型中也有普遍化的趋势,这类模型我们将在“10 | 更深、更专注的 7 种深度推荐范式组合算法”中介绍。

【从 深度网络范式 到 深度学习推荐模型】

利用以上深度网络范式来构成深度学习推荐模型主要有以下两种方法。

1、利用深度网络范式进行用户和物品的表征或者高阶交互特征提取(双塔模型),再将隐向量表征集成到推荐系统模型当中,这里集成方式又分为以下两种。

松耦合:信息呈单向流动,将隐向量表征作为推荐模型的输入。

紧耦合:将深度学习部分作为单独的组件接入模型,再加上其他传统或者深度模型组件,同时进行学习和预测。这种情况下,隐向量表征是跟随模型学习而变化的。

2、利用深度网络范式直接拟合效用函数,这种方式直接利用一个或多个深度网络范式,产出预测结果。

以上方法我们将在后续的课程中逐步讲解。

本节小结

道德经中“道生一,一生二,二生三,三生万物”,说的是“道”的诞生,从无到有产生阴阳二气,阴阳二气相交而形成了“三”,“三”即是万物的范式,通过范式的循环往复地叠加组合产生了万物。

本节介绍了深度推荐方法中的范式,下一节开始我们将逐个介绍基于这些范式方法的深度学习模型。那么关于深度推荐算法,你了解哪些?它们的关系是什么?欢迎与我讨论。

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

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

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

相关文章

基于 SSH 的任务调度系统的设计与实现

点击下载源码 基于SSH的任务调度系统的设计与实现 摘 要 随着科学技术的飞速发展和各行各业的分工愈发明细化,对于改革传统的人工任务调度方式的呼声越来越大。得益于快速发展的计算机技术,我们看到了改革的方向。本系统是针对企业或者事业单位甚至一个…

Golang | Leetcode Golang题解之第234题回文链表

题目: 题解: func reverseList(head *ListNode) *ListNode {var prev, cur *ListNode nil, headfor cur ! nil {nextTmp : cur.Nextcur.Next prevprev curcur nextTmp}return prev }func endOfFirstHalf(head *ListNode) *ListNode {fast : headslo…

camtasia怎么剪掉不用的部分 屏幕录制的视频怎么裁剪上下不要的部分 camtasia studio怎么裁剪视频时长 camtasia怎么剪辑视频教程

有时我们录制的屏幕内容,并不一定全部需要。那么,屏幕录制的视频怎么裁剪上下不要的部分?可以使用视频剪辑软件,或者微课制作工具来进行裁剪。屏幕录制的视频怎么旋转?录制视频的旋转也是一样的,均在编辑步…

万字长文之分库分表里如何优化分页查询?【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 分页查询】

分库分表的一般做法 一般会使用三种算法: 哈希分库分表:根据分库分表键算出一个哈希值,根据这个哈希值选择一个数据库。最常见的就是数字类型的字段作为分库分表键,然后取余。比如在订单表里,可以按照买家的ID除以8的…

【Flutter】 webview_flutter避坑

webview_flutter webview_flutter没有SSL Error接口,也就是说等你的网页出现SSL 错误的时候这个插件无法捕捉处理,除非你改它的源码。 下面这段是webview_flutter官网的例子,它有onHttpError、onWebResourceError、但没有任何捕捉 SSL 错误…

代谢组数据分析(十五):基于python语言构建PLS-DA算法构建分类模型

介绍 本教程描述了一个具有二元分类结果的研究的典型代谢组学数据分析工作流程。主要步骤包括: 从Excel表格导入代谢物和实验数据。基于汇总QC的数据清洗。利用主成分分析可视化来检查数据质量。两类单变量统计。使用偏最小二乘判别分析(PLS-DA)进行多变量分析,包括: 模型…

go语言 fmt的几个打印区别以及打印格式

文章目录 一、打印Print1.1 fmt.Print 和 fmt.Println1.2fmt.Printf1.3 fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln1.4 fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln 二、打印格式基本格式动词整数类型浮点数和复数类型字符串和字节切片布尔类型指针 一、打印Print Go 语言的 fm…

字符串类中的常用方法

1 string对象的创建 静态创建 String s1  "abc";  String s2  "abc";  动态创建 String s3  new String("abc"); String s4  new String("abc"); 2string对象的不可变性 任何一个String对象在创建之后都不能对它的…

大数据环境下的房地产数据分析与预测研究的设计与实现

1绪论 1.1研究背景及意义 随着经济的快速发展和城市化进程的推进,房地产市场成为了国民经济的重要组成部分。在中国,房地产行业对经济增长、就业创造和资本投资起到了重要的支撑作用。作为中国西南地区的重要城市,昆明的房地产市场也备受关…

云备份服务端

文件使用工具和json序列化反序列化工具 //文件和json工具类的设计实现 #ifndef __UTIL__ #define __UTIL__ #include<iostream> #include<fstream> #include<string> #include <vector> #include<sys/stat.h> #include"bundle.h" #inc…

FPGA资源容量

Kintex™ 7 https://www.amd.com/zh-tw/products/adaptive-socs-and-fpgas/fpga/kintex-7.html#product-table AMD Zynq™ 7000 SoC https://www.amd.com/en/products/adaptive-socs-and-fpgas/soc/zynq-7000.html#product-table AMD Zynq™ UltraScale™ RFSoC 第一代 AMD Z…

【每日一练】python类的构造方法以及常用的魔术方法详细讲解

在Python中&#xff0c;构造方法是一个用来初始化新创建的对象状态的特殊方法。Python中的构造方法是__init__。此外&#xff0c;Python中的"魔术方法"是Python提供的一系列特殊方法&#xff0c;它们都以双下划线开头和结尾&#xff0c;例如__init__, __str__, __rep…

Redis系列命令更新--Redis列表命令

Redis列表 1、Redis Blpop命令&#xff1a; &#xff08;1&#xff09;说明&#xff1a;Redis Blpop命令移出并获取列表的第一个元素&#xff1b;如果列表没有元素会阻塞列表直到等到超时或发现可弹出元素为止 &#xff08;2&#xff09;语法&#xff1a;redis 127.0.0.1:63…

mybaits-plus自定义分页查询

1. 引入依赖 在 pom.xml 文件中添加必要的依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId&…

Git进阶(十四):Windows下 git 提示 Repository not found

文章目录 一、前言 一、前言 在Windows10下执行 git clone/pull 的时候出现Repository not found错误。解决方法如下&#xff1a; 打开控制面板 搜索“凭据” 选中“Windows凭据” 在“普通凭据”一栏中查看当前git服务器配置的凭据信息是否正确&#xff0c;出现以上问题的…

081、Python 关于方法重写

所谓方法重写&#xff0c;就是子类对父类已有的方法&#xff0c;重新编写自己的实现版本&#xff0c;这个过程就叫做方法重写&#xff08;override&#xff09;。 说到方法重写&#xff0c;就不得不提多态。因为方法重写是实现多态的一种重要方式。 所谓多态&#xff0c;就是…

Windows的包管理器Chocolatey

Chocolatey 是 Windows 平台上的一个软件包管理工具&#xff0c;类似于 Linux 上的 apt、yum 或者 macOS 上的 Homebrew。你可以通过命令行快速安装、更新和卸载软件包。 一、安装 Chocolatey 查看是否有安装 choco --version 2.3.0如果有显示版本号&#xff0c;说明安装成功…

Laravel IDE Helper:开发者的代码导航灯塔

Laravel IDE Helper&#xff1a;开发者的代码导航灯塔 在Laravel开发过程中&#xff0c;IDE&#xff08;集成开发环境&#xff09;的辅助工具可以极大地提高开发效率和代码质量。Laravel IDE Helper是一个专门为此目的设计的工具&#xff0c;它为PHP IDE提供了额外的上下文信息…

提高自动化测试脚本编写效率 5大关键注意事项

提高自动化测试脚本编写效率能加速测试周期&#xff0c;减少人工错误&#xff0c;提升软件质量&#xff0c;促进项目按时交付&#xff0c;增强团队生产力和项目成功率。而自动化测试脚本编写效率低下&#xff0c;往往会导致测试周期延长&#xff0c;增加项目成本&#xff0c;延…

Python项目部署到Linux生产环境(uwsgi+python+flask+nginx服务器)

1.安装python 我这里是3.9.5版本 安装依赖&#xff1a; yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y 根据自己的需要下载对应的python版本&#xff1a; cd local wget https://www.python.org/ftp…