【全面了解自然语言处理三大特征提取器】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优缺点

  • 优点:

    1. RNN能够有效地处理序列数据
    2. 由于权重共享,RNN在内存使用上比全连接网络高效
  • 缺点

    1. 梯度消失和梯度爆炸: 在学习长序列时,RNN容易遇到梯度消失或梯度爆炸的问题,这使得模型难以学习到长距离的依赖关系。
    2. 难以捕捉长期依赖: 尽管RNN理论上能够捕捉长期依赖关系,但在实际应用中,由于梯度问题,其性能往往受限。
    3. 并行计算受限: 由于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 残差链接和归一化

主要有两个主要部分

  1. 一个残差链接,也叫skip-connection,把上一层的输入和上一层的输出相加,为了解决梯度消失问题。
  2. 第二个是层归一化,作用是把神经网络中隐藏层归一为标准正态分布,加速收敛。

(4)feed forward & add&norm

将上一个模块的输出经过relu激活函数,残差操作和归一化与(3)相同

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm实现一个简单的注册登录Django项目

之前已经实现了一个简单的Django项目,今天我们j基于之前的项目来实现注册、登录以及登录成功之后跳转到StuList页面。 1、连接数据库 1.1 配置数据库信息: 首先在myweb的settings.py 文件中设置MySQL数据库连接信息: DATABASES {default…

在线疫苗预约小程序|基于微信小程序的在线疫苗预约小程序设计与实现(源码+数据库+文档)

在线疫苗预约小程序目录 目录 基于微信小程序的在线疫苗预约小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、疫苗管理 2、疫苗订单管理 3、论坛管理 4、公告管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源…

html5cssjs代码 022 表单输入类型示例

html5&css&js代码 022 表单输入类型示例 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;展示了表单输入类型示例。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记 html5&css&js 表单输入…

SpringBoot整合JPA

一 运行效果如下 二 项目结构图 三 代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——A 题:生产线的故障自动识别与人员配置具体思路以及源代码分析

一、问题背景 随着新兴信息技术的大规模应用&#xff0c;工业生产线的智能化控制技术日益成熟。自动生产线 可以自动完成物品传送、物料填装、产品包装和质量检测等过程&#xff0c;极大地提高了生产效率和 产品质量&#xff0c;减少了生产成本。自动生产线融入故障智能报警…

【Spring Boot 源码学习】深入应用上下文初始化器实现

《Spring Boot 源码学习系列》 深入应用上下文初始化器实现 一、引言二、往期内容三、主要内容3.1 spring-boot 子模块中内置的实现类3.1.1 ConfigurationWarningsApplicationContextInitializer3.1.2 ContextIdApplicationContextInitializer3.1.3 DelegatingApplicationConte…

FFmpeg-aac、h264封装flv及时间转换

文章目录 时间概念流程api核心代码 时间概念 dts: 解码时间戳, 表示压缩帧的解码时间 pts: 显示时间戳, 表示将压缩帧解码后得到的原始帧的显示时间 时间基: time_base &#xff0c; 通常以ms为单位 时间戳: timestamp , 多少个时间基 真实时间&#xff1a;time_base * timest…

email + celery+django 异步发送邮件功能的实现

主要流程&#xff1a; django通过发件服务器到收件服务器&#xff0c;最后到收件人 邮件配置设置需要打开SMTP/IMAP并获的授权码&#xff0c;完成授权功能实现发送给收件人 邮件配置请参考另一博客https://blog.csdn.net/qq_44238024/article/details/136277821 项目结构树…

mac下Appuim环境安装

参考资料 Mac安装Appium_mac电脑安装appium-CSDN博客 安卓测试工具&#xff1a;Appium 环境安装&#xff08;mac版本&#xff09;_安卓自动化测试mac环境搭建-CSDN博客 1. 基本环境依赖 1 node.js 2 JDK&#xff08;Java JDK&#xff09; 3 Android SDK 4 Appium&#x…

数据分析 | Matplotlib

Matplotlib 是 Python 中常用的 2D 绘图库&#xff0c;它能轻松地将数据进行可视化&#xff0c;作出精美的图表。 绘制折线图&#xff1a; import matplotlib.pyplot as plt #时间 x[周一,周二,周三,周四,周五,周六,周日] #能量值 y[61,72,66,79,80,88,85] # 用来设置字体样式…

Linux进程管理:(六)SMP负载均衡

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 前置知识 1.1 CPU管理位图 内核…

如何用Selenium通过Xpath,精准定位到“多个相同属性值以及多个相同元素”中的目标属性值

前言 本文是该专栏的第21篇,后面会持续分享python爬虫干货知识,记得关注。 相信很多同学,都有使用selenium来写爬虫项目或者自动化页面操作项目。同样,也相信很多同学在使用selenium来定位目标元素的时候,或多或少遇见到这样的情况,就是用Xpath定位目标元素的时候,页面…

Mysql主从之keepalive+MySQL高可用

一、Keepalived概述 keepalived 是集群管理中保证集群高可用的一个服务软件&#xff0c;用来防止单点故障。 keepalived 是以VRRP 协议为实现基础的&#xff0c;VRRP 全称VirtualRouter Redundancy Protocol&#xff0c;即虚拟路由冗余协议。虚拟路由冗余协议&#xff0c;可以…

launchctl及其配置、使用、示例

文章目录 launchctl 是什么Unix / Linux类似的工具有什么哪个更常用配置使用常用子命令示例加载一个 launch agent:卸载一个 launch daemon:列出所有已加载的服务:启动一个服务:停止一个服务:禁用一个服务:启用一个服务: 附com.example.myagent.plist内容有趣的例子参考 launch…

力扣L15--- 67.二进制求和(JAVA版)-2024年3月17日

1.题目描述 2.知识点 注1&#xff1a; 二进制用 %2 /2 3.思路和例子 采用竖位相加的方法 4.代码实现 class Solution {public String addBinary(String a, String b) {StringBuilder sbnew StringBuilder();int ia.length()-1;int jb.length()-1;int jinwei0;int digit1,d…

快速排序(数据结构)

1. 前言&#xff1a; 这两种排序经常使用&#xff0c;且在算法题中经常遇见。 这里我们简单分析讨论一下。 1. 快速排序 平均时间复杂度&#xff1a;O&#xff08;nlogn&#xff09; 最坏时间复杂度&#xff1a; O&#xff08;n^2&#xff09; 1.1. 左右向中遍历: 取最右侧4…

Multiplicity - 用一个键盘和鼠标控制多台电脑

Multiplicity 是一款用于多台电脑间控制的软件。通过这个工具&#xff0c;用户可以轻松地在多个计算机之间共享剪贴板、鼠标、键盘和显示屏幕。这样&#xff0c;无需每台电脑之间频繁切换&#xff0c;工作效率也会大大提高。 特征 远程PC访问 无缝控制过渡 兼容所有显示类型…

【Linux杂货铺】进程的基本概念

目录 &#x1f308;前言&#x1f308; &#x1f4c1;进程的概念 &#x1f4c2;描述进程-PCB &#x1f4c2; 查看进程 &#x1f4c2; 查看正在运行的程序 &#x1f4c2;杀死进程 &#x1f4c2;通过系统调用获取进程标识符 &#x1f4c2;通过系统调用创建进程 &#x1f…

万界星空科技商业开源MES,技术支持+项目合作

商业开源的一套超有价值的JAVA制造执行MES系统源码 亲测 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境&#xff1a;jdk11tomcatmysql8springbootmaven 可以免费使用&#xff0c;需要源码价格便宜&#xff0c;私信我获取。 一、系统概述&#xff1a; MES制造执…

机器学习(26)回顾gan+文献阅读

文章目录 摘要Abstract一、李宏毅机器学习——GAN1. Introduce1.1 Network as Generator1.2 Why distribution 2. Generative Adversarial Network2.1 Unconditional generation2.2 Basic idea of GAN 二、文献阅读1. 题目2. abstract3. 网络架构3.1 Theoretical Results 4. 文…