【NLP自然语言处理】Transformer模型的几大核心优势与应用前景

6e001beffcd64b73affc0c819d5f7976.jpeg

目录

🍔 Transformer的并行计算

🍔 Transformer架构的并行化过程

2.1 Transformer架构中Encoder的并行化

2.2 Transformer架构中Decoder的并行化

🍔 Transformer的特征抽取能力

🍔 为什么说Transformer可以代替seq2seq?

4.1 seq2seq的两大缺陷

4.2 Transformer的改进

🍔 小结

a224bb662c244d0a9e855cae12cc8188.gif

学习目标

🍀 掌握Transformer相比于RNN/LSTM的优势和背后的原因.

🍀 掌握Transformer架构的并行化是如何进行的.

🍀 理解为什么采用这样的方式可以实现Transformer的并行化.

🍀 掌握Transformer可以替代seq2seq的核心原因.

🍔 Transformer的并行计算

对于Transformer比传统序列模型RNN/LSTM具备优势的第一大原因就是强大的并行计算能力.

  • 对于RNN来说, 任意时刻t的输入是时刻t的输入x(t)和上一时刻的隐藏层输出h(t-1), 经过运算后得到当前时刻隐藏层的输出h(t), 这个h(t)也即将作为下一时刻t+1的输入的一部分. 这个计算过程是RNN的本质特征, RNN的历史信息是需要通过这个时间步一步一步向后传递的. 而这就意味着RNN序列后面的信息只能等到前面的计算结束后, 将历史信息通过hidden state传递给后面才能开始计算, 形成链式的序列依赖关系, 无法实现并行.
  • 对于Transformer结构来说, 在self-attention层, 无论序列的长度是多少, 都可以一次性计算所有单词之间的注意力关系, 这个attention的计算是同步的, 可以实现并行.

🍔 Transformer架构的并行化过程

2.1 Transformer架构中Encoder的并行化

首先Transformer的并行化主要体现在Encoder模块上.


e074a8198ad341d4b77bb686b7b4bca0.png

 

  • 上图最底层绿色的部分, 整个序列所有的token可以并行的进行Embedding操作, 这一层的处理是没有依赖关系的.

  • 上图第二层土黄色的部分, 也就是Transformer中最重要的self-attention部分, 这里对于任意一个单词比如x1, 要计算x1对于其他所有token的注意力分布, 得到z1. 这个过程是具有依赖性的, 必须等到序列中所有的单词完成Embedding才可以进行. 因此这一步是不能并行处理的. 但是从另一个角度看, 我们真实计算注意力分布的时候, 采用的都是矩阵运算, 也就是可以一次性的计算出所有token的注意力张量, 从这个角度看也算是实现了并行, 只是矩阵运算的"并行"和词嵌入的"并行"概念上不同而已.

  • 上图第三层蓝色的部分, 也就是前馈全连接层, 对于不同的向量z之间也是没有依赖关系的, 所以这一层是可以实现并行化处理的. 也就是所有的向量z输入Feed Forward网络的计算可以同步进行, 互不干扰.

2.2 Transformer架构中Decoder的并行化

其次Transformer的并行化也部分的体现在Decoder模块上.


6fc9f3cc8cc74bf186cddfbf9f45da64.png

 

  • Decoder模块在训练阶段采用了并行化处理. 其中Self-Attention和Encoder-Decoder Attention两个子层的并行化也是在进行矩阵乘法, 和Encoder的理解是一致的. 在进行Embedding和Feed Forward的处理时, 因为各个token之间没有依赖关系, 所以也是可以完全并行化处理的, 这里和Encoder的理解也是一致的.

  • Decoder模块在预测阶段基本上不认为采用了并行化处理. 因为第一个time step的输入只是一个"SOS", 后续每一个time step的输入也只是依次添加之前所有的预测token.

  • 注意: 最重要的区别是训练阶段目标文本如果有20个token, 在训练过程中是一次性的输入给Decoder端, 可以做到一些子层的并行化处理. 但是在预测阶段, 如果预测的结果语句总共有20个token, 则需要重复处理20次循环的过程, 每次的输入添加进去一个token, 每次的输入序列比上一次多一个token, 所以不认为是并行处理.

🍔 Transformer的特征抽取能力

对于Transformer比传统序列模型RNN/LSTM具备优势的第二大原因就是强大的特征抽取能力.

  • Transformer因为采用了Multi-head Attention结构和计算机制, 拥有比RNN/LSTM更强大的特征抽取能力, 这里并不仅仅由理论分析得来, 而是大量的试验数据和对比结果, 清楚的展示了Transformer的特征抽取能力远远胜于RNN/LSTM.
  • 注意: 不是越先进的模型就越无敌, 在很多具体的应用中RNN/LSTM依然大有用武之地, 要具体问题具体分析.

🍔 为什么说Transformer可以代替seq2seq?

4.1 seq2seq的两大缺陷

  • seq2seq架构的第一大缺陷是将Encoder端的所有信息压缩成一个固定长度的语义向量中, 用这个固定的向量来代表编码器端的全部信息. 这样既会造成信息的损耗, 也无法让Decoder端在解码的时候去用注意力聚焦哪些是更重要的信息.

  • seq2seq架构的第二大缺陷是无法并行, 本质上和RNN/LSTM无法并行的原因一样.

4.2 Transformer的改进

  • Transformer架构同时解决了seq2seq的两大缺陷, 既可以并行计算, 又应用Multi-head Attention机制来解决Encoder固定编码的问题, 让Decoder在解码的每一步可以通过注意力去关注编码器输出中最重要的那些部分.

🍔 小结

  • 学习了Transformer相比于RNN/LSTM的优势和原因.
    • 第一大优势是并行计算的优势.
    • 第二大优势是特征提取能力强.
  • 学习了Transformer架构中Encoder模块的并行化机制.
    • Encoder模块在训练阶段和测试阶段都可以实现完全相同的并行化.
    • Encoder模块在Embedding层, Feed Forward层, Add & Norm层都是可以并行化的.
    • Encoder模块在self-attention层, 因为各个token之间存在依赖关系, 无法独立计算, 不是真正意义上的并行化.
    • Encoder模块在self-attention层, 因为采用了矩阵运算的实现方式, 可以一次性的完成所有注意力张量的计算, 也是另一种"并行化"的体现.
  • 学习了Transformer架构中Decoder模块的并行化机制.

    • Decoder模块在训练阶段可以实现并行化.
    • Decoder模块在训练阶段的Embedding层, Feed Forward层, Add & Norm层都是可以并行化的.
    • Decoder模块在self-attention层, 以及Encoder-Decoder Attention层, 因为各个token之间存在依赖关系, 无法独立计算, 不是真正意义上的并行化.
    • Decoder模块在self-attention层, 以及Encoder-Decoder Attention层, 因为采用了矩阵运算的实现方式, 可以一次性的完成所有注意力张量的计算, 也是另一种"并行化"的体现.
    • Decoder模块在预测计算不能并行化处理.
  • 学习了seq2seq架构的两大缺陷.

    • 第一个缺陷是Encoder端的所有信息被压缩成一个固定的输出张量, 当序列长度较长时会造成比较严重的信息损耗.
    • 第二个缺陷是无法并行计算.
  • 学习了Transformer架构对seq2seq两大缺陷的改进.

    • Transformer应用Multi-head Attention机制让编码器信息可以更好的展示给解码器.
    • Transformer可以实现Encoder端的并行计算.

b71643814fb5438baded6a54c617e117.gif8f8a231bb0f842f28aacab54f363e9d7.jpeg 

 

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

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

相关文章

Maven中管理SNAPSHOT版本含义及作用

在开发过程中突然产生了一个疑问:IDEA中 maven deploy的依赖包的版本号,比如 1.0.0-SNAPSHOT是在哪配置的?在远程仓库中的版本和这个有关系吗 ? 在 Maven 中,-SNAPSHOT 后缀是用于标识项目版本为快照(Snapshot&#xf…

数据结构与算法之排序

9.1 排序的概念 1. 排序的定义 定义:排序是将表中的记录按关键字递增(或递减)有序排列的过程。说明:数据中可以存在相同关键字的记录。本章主要考虑递增排序。扩展:排序是数据处理中的基本操作之一,广泛应用…

《C++11》各种初始化方式的详细列举与对比

在 C 中,初始化对象的方式多种多样。随着 C 标准的演进,特别是 C11 的引入,初始化方式得到了显著的扩展和改进。本文将详细列举 C 中的各种初始化方式,并对它们进行对比,帮助开发者更好地理解和应用这些特性。 1. C98…

算法:两个升序单链表的合并

将两个按值排序的带头结点的单链表La和Lb排列成一个升序的 单链表,并返回一个新的单链表的表头指针 (两个升序合并成升序,用尾插法) LinkList Merge_LinkList(LNode* La, LNode* Lb) {//准备工作LNode* Lc;//新链表的头结点LNode…

基于 Python Django 的西西家居全屋定制系统(源码+部署+文档)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

25考研|重邮软件工程复试攻略!

与计算机一样,重邮复试不合格也很有可能被淘汰!快快认真准备起来! 一、复试内容 1、笔试:分值100 2、综合面试:满分100 主要考核考生的综合素质和业务能力,由各招生学院具体组织实施,综合面试…

如何制作重识别数据集及如何解决all query identities do not appear in gallery的问题

如何制作重识别数据集 数据集制作链接 注意点: 按照上述方式制作完成数据集之后,分别建立3个文件夹,分别为train,test,query, 值得注意的是,query文件里的相机编号要进行修改,修改…

链地址法(哈希桶)

链地址法(哈希桶) 解决冲突的思路 开放定址法中所有的元素都放到哈希表⾥,链地址法中所有的数据不再直接存储在哈希表中,哈希表 中存储⼀个指针,没有数据映射这个位置时,这个指针为空,有多个数…

【C语言】可移植性陷阱与缺陷(七): 除法运算时发生的截断

在C语言编程中,除法运算可能会引发一些与可移植性相关的问题,特别是当涉及到整数除法时发生的截断(truncation)。不同平台对于整数除法的行为和处理方式可能会有所不同,这可能导致代码在不同编译器或硬件平台上的行为不…

2. 模型和算法

1. 模型(Model) 模型指的是通过机器学习或其他方法从数据中提取出的一个数学结构或表示,它可以用于做出预测、分类、回归或其他决策任务。模型是机器学习的核心,它在一定程度上是数据的“抽象化”,用于表达输入与输出…

C++ 原子变量

C 原子变量 文章目录 C 原子变量1. 原子变量是什么?2. 原子操作的特点3. 原子变量的作用1. 多线程安全的共享数据访问2. 替代锁机制3. 实现低级同步算法 4. 原子变量的常见操作5. 内存顺序(Memory Ordering)内存顺序控制在原子变量中的作用如…

前后端分离架构设计与实现:构建现代Web应用的基石

前后端分离架构设计与实现:构建现代Web应用的基石 引言 随着互联网技术的发展,Web应用变得越来越复杂和多样化。传统的单体式架构难以满足快速迭代、团队协作以及性能优化的需求。前后端分离架构应运而生,它不仅提高了开发效率,…

了解RabbitMQ的工作原理

RabbitMQ是一个开源的消息代理系统,实现了高级消息队列协议(AMQP)。在现代分布式系统中,特别是在微服务架构中,RabbitMQ有广泛的应用。本文将详细介绍RabbitMQ的工作原理,并通过实践案例帮助读者理解和应用…

Excel中公式和函数的区别

Excel中公式和函数的区别 概念讲解例子公式函数 详细介绍函数面板最后再次进行演示操作文档 概念讲解 公式是用户自己编写的表达式,而函数是由Excel预定义的操作。公式可以包含各种数学运算符和逻辑表达式,函数则是执行特定任务的工具。公式可以引用其他…

分布式搜索引擎之elasticsearch基本使用3

分布式搜索引擎之elasticsearch基本使用3 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&…

【FlutterDart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100)

上效果 预期的是通过拖动一条边界线改变窗口大小,类似vscode里拖动效果。这个是简单的拖动实现 上代码: import package:flutter/material.dart;class MyDraggableViewDemo extends StatelessWidget {const MyDraggableViewDemo({super.key});override…

使用Dinky快速提交Flink operator任务

官网地址:K8s集成 | Dinky 1.目前使用版本 Dinky1.2.0、Flink1.18.1、Flink operator0.10.0 2.制作镜像 2.1创建DockerFile ARG FLINK_VERSION1.18.1 FROM flink:${FLINK_VERSION}-scala_2.12 RUN mkdir -p /opt/flink/usrlib COPY commons-cli-1.3.1.jar …

查找路由器的管理后台ip【通用找IP】

需求: 刚刚搞了个【小米】路由器,我想进路由的管理后台,提示:安装xx的路由管家,我不想安装 但是无法找到这个管理后台。 而且我是用这个路由作为中继,那么这个路由的ip就会经常更换 尝试通过网上搜索引擎来…

【大数据】(选修)实验4 安装熟悉HBase数据库并实践

实验4 安装熟悉HBase数据库并实践 1、实验目的 (1)理解HBase在Hadoop体系结构中的角色; (2)熟练使用HBase操作常用的Shell命令; (3)熟悉HBase操作常用的Java API。 2、实验平台 操作系统:Linux Hadoop版本:2.6.0或以上版本 HBase版本:1.1.2或以上版本 JDK版…

Flutter鸿蒙化 在鸿蒙应用中添加Flutter页面

前言 今天这节课我们讲一下 在鸿蒙应用中添加Flutter页面。 作用: 之前有很多朋友和网友问我鸿蒙能不能使用Flutter开发,他们的项目已经用Flutter开发成熟了有什么好的方案呢,今天讲到这个就可以很好的解决他们的问题,例如我们正式项目中可能是一部分native 开发 一部分…