【全面了解自然语言处理三大特征提取器】RNN(LSTM)、transformer(注意力机制)、CNN
目录
- 一 、RNN
- 1.RNN单个cell的结构
- 2.RNN工作原理
- 3.RNN优缺点
- 二、LSTM
- 1.LSTM单个cell的结构
- 2. LSTM工作原理
- 三、transformer
- 1 Encoder
- (1)position encoding
- (2)multi-head-attention
- (3)add&norm 残差链接和归一化
- (4)feed forward & add&norm
自然语言处理(NLP)是人工智能领域中一个重要的分支,它的目的是让计算机能够理解和处理人类语言,而特征提取是让计算机理解和处理人类语言时必不可少的过程,除了数据的因素,一个特征抽取器是否适配问题领域的特点,有时候决定了它的成败,而很多模型改进的方向,其实就是改造得使得它更匹配领域问题的特性(引自张俊林老师的文章)。
下面本文从基本结构、工作原理、优缺点和适用场景具体介绍一下这三个主要的特征提取器
一 、RNN
循环神经网络或递归神经网络。顾名思义,RNN在处理序列信息时(比如一段文本)是递归进行,即下一时刻的处理依赖于上一时刻的结果。
即:不同于传统的神经网络结构,RNN隐藏层之间的节点不再无连接而是有连接的。
1.RNN单个cell的结构
参考

可以看到当前时刻的输出 y^t 和隐藏层状态 a^t 依赖于当前时刻的输入 x^t 和上一时刻的隐藏层状态 a^t-1
2.RNN工作原理

其中一个cell对应于RNN单个细胞的结构,对于上图中的文本翻译问题,输出接收最后一层每个时刻隐藏层的状态,但是对于分类问题,输出只接受最后一层最后一个时刻的隐藏层状态。
3.RNN优缺点
-
优点:
- RNN能够有效地处理序列数据
- 由于权重共享,RNN在内存使用上比全连接网络高效
-
缺点
- 梯度消失和梯度爆炸: 在学习长序列时,RNN容易遇到梯度消失或梯度爆炸的问题,这使得模型难以学习到长距离的依赖关系。
- 难以捕捉长期依赖: 尽管RNN理论上能够捕捉长期依赖关系,但在实际应用中,由于梯度问题,其性能往往受限。
- 并行计算受限: 由于RNN的序列特性,使得其在并行计算上受到限制,影响了训练速度。
二、LSTM
当输入的序列数据足够长,梯度在层之间进行反向传播时容易消失和爆炸,梯度消失会导致RNN会忘记之前学到的内容,而只能保存短时记忆,难以处理长期依赖问题,而梯度爆炸会使其计算量将呈指数级增长,给模型训练带来极大挑战。
为解决RNN梯度消失和难以捕捉长距离依赖问题,LSTM应运而生。传统RNN的做法是将的所有知识全部提取出来,不作任何处理的输入到下一个时间步进行迭代,LSTM的结构更类似于人类对于知识的记忆方式,通过引入细胞状态与三个门控机制来缓解了以上问题。
1.LSTM单个cell的结构
参考

其中,三个门控机制分别指遗忘门、输入门(图中的update gate)和输出门。除此之外,LSTM引入了一个细胞状态变量:c^t,用于记录每个门控机制发挥作用之后,该保留上文(反向LSTM就是下文)的多少信息。
三个门控机制都相当于是一个函数,该函数通过输入的x和输入的隐藏层状态a来不断更新参数,最后经过sigmoid层获得[0,1]之间的值,该值与细胞状态相乘,即实现了信息的遗忘或者保留。
细胞状态也是LSTM能够解决长依赖问题的关键,它能够保存上文中有价值的记忆。
2. LSTM工作原理
其中一个cell对应于LSTM单个细胞的结构,图中的h是隐藏状态,对应于上图中的a;c代表细胞状态。

三、transformer
RNN和LSTM在处理序列信息时,都是递归进行的,transformer则突破了这种限制。transformer是处理序列到序列问题的架构,单纯由self-attention组成,其优良的可并行性以及可观的表现提升,让它在NLP领域中大受欢迎,GPT-3以及BERT、ERNIE等都是基于Transformer实现的。
首先,一个transformer block有两个部分组成:encoder和decoder

1 Encoder
encoder,编码,主要是用来做特征提取。而能让Transformer效果好的,不仅仅是Self attention,这个Block里所有元素,包括Multi-head self attention,Skip connection,LayerNorm,FF一起在发挥作用,除此之外,position encoding也发挥了很大的作用。
下面来详细讲解一下各个流程。
(1)position encoding
讲position encoding之前,我们需要回顾一下RNN和LSTM对于文本的处理过程,由于他们都是递归的处理,所以天然的记忆了文本中字或者词语之间的顺序关系,而transformer由于是直接读取所有文字,并行处理,所以其丢失了文本的位置信息,也就是无法理解词语的前后关系。position encoding就是为了解决这个问题,在input_embedding的基础上,对文本的位置进行编码,保留位置信息。
【需要注意的是,这里的位置信息属于相对位置信息,BERT里的position embedding属于绝对位置信息,因为在 BERT 中 Positional Embedding 并没有采用固定的变换公式来计算每个位置上的值,而是采用了类似普通 Embedding的方式来为每个位置生成一个向量,然后随着模型一起训练。因此,这一操作就限制了在使用预训练的中文 BERT模型时,最大的序列长度只能是512,因为在训练时只初始化了 512 个位置向量】。
在Transformer中,作者采用了如公式(1)所示的规则来生成各个维度的位置信息。

其中,PE就是代表position的编码表示,pos代表一行文本中单个文字的具体的某一个位置, i的取值范围是[0, dmodel/2]代表维度。
(2)multi-head-attention
之后input进入到多头注意力机制(transformer的核心)部分。多头注意力机制是self-attention即自注意力机制的变形,接下来首先讲一下自注意力机制。
可以将注意力机制归纳为两个过程:第一个过程是根据Query和Key计算权重系数,第二个过程根据权重系数对Value进行加权求和。而第一个过程又可以细分为两个阶段:第一个阶段根据Query和Key计算两者的相似性或者相关性;第二个阶段对第一阶段的原始分值进行归一化处理,公式如下。

具体过程如下图所示。

那么Query、Key和Value是怎么得到的呢,在自注意力机制中上述三个向量都来源于input本身,通过可学习的权重W^q 矩阵, W^k矩阵, W^v矩阵获得,所以自注意机制可以捕获一段文字内的各词语之间的语法特征关系。
而多头注意力机制相当于对同一段序列做了多次自注意力机制,其中每个头在不同的表示子空间中学习序列内的关系。 通过这种方式,模型能够同时从不同的角度捕捉信息,增强了模型的表示能力。

其长距离特征捕获能力主要受到Multi-Head数量的影响,Multi-Head的数量越多,Transformer的长距离特征捕获能力越强。
(3)add&norm 残差链接和归一化
主要有两个主要部分
- 一个残差链接,也叫skip-connection,把上一层的输入和上一层的输出相加,为了解决梯度消失问题。
- 第二个是层归一化,作用是把神经网络中隐藏层归一为标准正态分布,加速收敛。
(4)feed forward & add&norm
将上一个模块的输出经过relu激活函数,残差操作和归一化与(3)相同
相关文章:
【全面了解自然语言处理三大特征提取器】RNN(LSTM)、transformer(注意力机制)、CNN
目录 一 、RNN1.RNN单个cell的结构2.RNN工作原理3.RNN优缺点 二、LSTM1.LSTM单个cell的结构2. LSTM工作原理 三、transformer1 Encoder(1)position encoding(2)multi-head-attention(3)add&norm 残差链…...
区块链推广海外市场怎么做,CloudNEO服务商免费为您定制个性化营销方案
随着区块链技术的不断发展和应用场景的扩大,区块链项目希望能够进入海外市场并取得成功已成为越来越多公司的目标之一。然而,要在海外市场推广区块链项目,需要采取有效的营销策略和措施。作为您的区块链项目营销服务商,CloudNEO将…...
【S5PV210】 | ARM的指令集合
【S5PV210】 | ARM的指令集合 时间:2024年3月17日23:32:06 目录 文章目录 【S5PV210】 | ARM的指令集合目录 ARM指令集具有一系列显著的特点。首先,它属于RISC(精简指令集计算机)架构,这意味着译码机制相对简单。在AR…...
2024-3-17Go语言入门
在Go语言中: var a chan int 定义了一个名为 a 的变量,其类型为 chan int。这意味着 a 是一个整型值的通道(channel)。通道是Go语言中用于goroutine之间通信的一种机制,你可以通过通道发送和接收特定类型的值。在这个例…...
AJAX-XMLHttpRequest
XMLHttpRequest 定义: XMLHttpRequest对象用于与服务器交互。通过XMLHttpRequest可以在不断刷新页面的情况下请求特定URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。 关系: axios内部采用XMLHttpReques…...
【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析
说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…...
论文阅读_时序模型_iTransformer
1 2 3 4 5 6 7 8英文名称: ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING 中文名称: ITRANSFORMER:倒置Transformers在时间序列预测中的有效性 链接: https://openreview.net/forum?idX6ZmOsTYVs 代码: https://github.com/thum…...
Docker 哲学 - 容器操作 -cp
1、拷贝 容器绑定的 volume的 数据,到指定目录 2、匿名挂载 volume 只定义一个数据咋在容器内的path,docker自动生成一个 sha256 的key作为 volume 名字。这个 sha256 跟 commitID 一致都是唯一的所以 ,docker利用这个机制,可以…...
作品展示ETL
1、ETL 作业定义、作业导入、控件拖拽、执行、监控、稽核、告警、报告导出、定时设定 欧洲某国电信系统数据割接作业定义中文页面(作业顶层,可切英文,按F1弹当前页面帮助) 涉及文件拆分、文件到mysql、库到库、数据清洗、数据转…...
python的集合应用
在Python中,集合是一种无序、可变的数据类型,用于存储不重复的元素。Python提供了内置的集合类型 set,以及 frozenset(不可变的集合)。以下是一些Python集合的常见应用场景: 去重: 集合是存储唯…...
盒子IM开源仿微信聊天程序源码,可以商用
安装教程 1.安装运行环境 安装node:v14.16.0安装jdk:1.8安装maven:3.6.3安装mysql:5.7,密码分别为root/root,运行sql脚本(脚本在im-platfrom的resources/db目录)安装redis:5.0安装minio,命令端口使用9001,并创建一个名为”box-im”的bucket,…...
鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)中篇
onBeforeUnload onBeforeUnload(callback: (event?: { url: string; message: string; result: JsResult }) > boolean) 刷新或关闭场景下,在即将离开当前页面时触发此回调。刷新或关闭当前页面应先通过点击等方式获取焦点,才会触发此回调。 参数…...
静默安装OGG21.3微服务版本FOR ORACLE版本
静默安装OGG21.3微服务版本FOR ORACLE版本 silent install ogg21.3 for oracle 某度找来找去都没有找到一份可靠的静默安装OGG21.3微服务版本的案例,特别难受,为此将自己静默安装的步骤一步步贴出来分享给大家,请指点,谢谢。 至…...
[二分查找]LeetCode2040:两个有序数组的第 K 小乘积
本文涉及的基础知识点 二分查找算法合集 题目 给你两个 从小到大排好序 且下标从 0 开始的整数数组 nums1 和 nums2 以及一个整数 k ,请你返回第 k (从 1 开始编号)小的 nums1[i] * nums2[j] 的乘积,其中 0 < i < nums1.…...
【Godot4.2】颜色完全使用手册
概述 本篇简单汇总Godot中的颜色的构造和使用,内容包括了: RGB、RGBA,HSV以及HTML16进制颜色值、颜色常量等形式构造颜色颜色的运算以及取反、插值用类型化数组、紧缩数组或PNG图片形式存储多个颜色 构造颜色 因为颜色是一种视觉元素&…...
Blocks —— 《Objective-C高级编程 iOS与OS X多线程和内存管理》
目录 Blocks概要什么是BlocksOC转C方法关于几种变量的特点 Blocks模式Block语法Block类型 变量截获局部变量值__block说明符截获的局部变量 Blocks的实现Block的实质 Blocks概要 什么是Blocks Blocks是C语言的扩充功能,即带有局部变量的匿名函数。 顾名思义&#x…...
Python零基础---爬虫技术相关
python 爬虫技术,关于数据相关的拆解: 1.对页面结构的拆解 2.数据包的分析(是否加密了参数)(Md5 aes)难易程度,价格 3.对接客户(433,334) # 数据库 CSV 4.结单(发一部分数据&a…...
利用 STM32 TIMER 触发 ADC 实现分组转换
1、问题描述 使用 STM32G4 系列芯片开发产品,用到其中一个 ADC 模块的多个通道,他希望使 用 TIMER 来定时触发这几个通道的转换。不过他有两点疑惑。第一,他期望定时器触发这几个 通道是每触发一次则只转换一个通道,这样依次触发…...
2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——B 题:基于多模态特征融合的图像文本检索完整思路与源代码分享
一、问题背景 随着近年来智能终端设备和多媒体社交网络平台的飞速发展,多媒体数据呈现海量增长 的趋势,使当今主流的社交网络平台充斥着海量的文本、图像等多模态媒体数据,也使得人 们对不同模态数据之间互相检索的需求不断增加。有效的信…...
Java12~14 switch语法
JDK8以后的语法没学习了,现在时代发展这么快,所以得加紧时间学习了。JDK12只有一个特性就是switch语法,算是比较容易学习的一个版本吧。总体来说就是三部分内容。具体内容可以看JEP-325的内容。 箭头语法 每个case可以放箭头了。以下是一个例…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
