【NLP】关于Transformer模型的一些认知

目录

一. Transformer模型简介

二. Transformer模型的架构

1. 编码器:

2. 解码器:

三. Transformer模型中残差连接层的作用

四. Transformer模型中, 输入部分的位置编码(PisitionalEncoding)矩阵为什么要使用三角函数对奇数列和偶数列做变换 ?

五. Transformer模型中掩码的应用

六. Transformer模型的优势 (相比RNN类模型)

七. Transformer的并行化计算是怎么体现的?

 八. Transformer模型的应用

 

一. Transformer模型简介

Transformer模型是深度学习领域中的一种革命性架构,尤其在自然语言处理(NLP)任务中产生了深远影响。该模型由谷歌的研究团队在2017年的论文《Attention is All You Need》中首次提出,完全摒弃了循环神经网络(RNN)和卷积神经网络(CNN),转而采用自注意力(Self-Attention)机制为核心构建而成。

二. Transformer模型的架构

如下图所示,Transformer模型的组成部分包括输入部分(Input)、编码器(Encoder)和解码器(Decoder)、输出部分(Output)四个部分,其中编码器和解码器均基于注意力机制设计: 

1. 编码器

  • 编码器由多个相同的层堆叠而成,每个层内部含有自注意力子层和前馈神经网络子层,以及残差连接(Residual Connections)和层归一化(Layer Normalization)。
  • 自注意力机制使得模型能够在处理序列信息时同时考虑序列中所有元素之间的相互依赖关系,每个词都能够“关注”到序列中其他所有词,以便更好地理解上下文。

2. 解码器

  • 解码器同样由多层结构堆叠,每层也包括自注意力机制(但增加了遮蔽机制,防止未来信息泄露)、编码器-解码器注意力机制(Decoder-Encoder Attention),以及前馈神经网络子层等组件。
  • 解码器不仅考虑输入序列的上下文信息,还能通过自注意力机制处理自身的序列信息,生成目标序列。

三. Transformer模型中残差连接层的作用

在Transformer模型中,残差连接(Residual Connections)扮演着至关重要的角色,它主要解决了以下几个关键问题:

  1. 梯度消失/梯度爆炸: 在深度神经网络中,随着网络层数的增加,梯度在反向传播过程中可能逐渐减小(梯度消失),或者由于连乘效应而增大到不可控的程度(梯度爆炸)。这两种情况都会阻碍网络的有效训练。残差连接通过允许信息绕过非线性变换直接传递到下一层,使得模型能够更容易地学习恒等映射,即如果某一层没有学到任何东西,则至少可以通过学习“零”权重来保证输入不变,这样就可以缓解梯度消失问题。

  2. 简化优化过程残差连接允许网络直接学习输入和输出之间的差异,而非从零开始构建完整的输出,这降低了模型的学习难度,提高了优化效率。

  3. 增强模型表达能力: 即便在网络很深的情况下,残差连接也可以帮助保持信号的完整性,使得网络能够捕获更深层次的抽象特征,同时保持浅层特征的有效利用。

 在Transformer模型架构中,每个多头自注意力子层(Multi-Head Self-Attention, MHA)和前馈神经网络子层(Position-wise Feed-Forward Networks, FFN)之后都会紧跟着一个残差连接,然后是一个层归一化(Layer Normalization)层。这样的设计确保了即使在网络深度增加时,信号仍然能够有效地在网络中流动,并且优化算法能够稳定地更新网络参数。

四. Transformer模型中, 输入部分的位置编码(PisitionalEncoding)矩阵为什么要使用三角函数对奇数列和偶数列做变换 ?

Transformer模型中,输入部分的位置编码矩阵采用三角函数(通常是正弦和余弦函数)来生成是因为这样的设计有助于模型捕捉序列中不同位置的相对或绝对位置信息,并且可以与嵌入向量以可学习的方式相结合,同时保持数值上的稳定性和平滑性。

具体来说,原始Transformer的位置编码方法将位置信息编码成向量的形式,通过以下公式生成位置编码向量P:

其中:

  • pos 是位置索引。
  • i 是位置编码向量的维度索引。
  • d_model 是模型的隐藏层维度大小。

 这里采用奇数列和偶数列分别对应正弦和余弦函数的原因是利用了三角函数的周期性特征。通过调整频率(通过指数项控制),不同的维度会捕获不同频率的位置信号,从而允许模型学习不同尺度上的位置关系。这种编码方式使得模型能够区分相邻位置和较远位置的Token,并且当这些编码向量与词嵌入相加时,不会因为叠加而失去位置信息,因为三角函数在不同的位置上产生的值是不同的。

另外,这种方法保证了随着深度增加,位置编码不会因为多次线性变换而趋于零,从而解决了位置信息在深度网络中可能消失的问题。同时,由于正弦和余弦函数的值域在[-1, 1]之间,它们与词嵌入的元素值处于同一数量级,易于融合而不至于破坏原有输入信息的分布。

五. Transformer模型中掩码的应用

 Transformer模型中的掩码主要应用于自回归序列建模任务,特别是在解码器部分的设计中。掩码的主要目的是确保在预测序列的当前位置时,模型只能访问到之前已经生成的词或位置信息,而不允许查看未来时刻的信息,这是自回归性质的要求。

1. 在Encoder部分:

在Encoder中,掩码主要用来处理输入序列中的填充(Padding)问题。由于输入序列通常会被填充到相同的长度,掩码张量会标记出哪些位置是实际的有效输入,哪些是填充的空位。这样,在计算Self-Attention时,模型就不会对填充的空位进行考虑,从而避免这些无意义的区域影响到有效输入的表示学习。

2. 在Decoder部分:

Decoder在训练和预测阶段都需要使用掩码来实现自回归性。在训练过程中,为了防止当前位置预测时参考到未来时刻的token,会对未来的tokens应用掩码,使得它们在当前时刻的注意力计算中被忽略,即其对应的attention权重置为0或者一个很小的负数(通常是在softmax操作前添加很大的负无穷,使对应的概率近似为0)。这样就确保了模型在预测序列中的下一个元素时只依赖于之前生成的元素,而不是尚未生成的后续元素。

 总结来说,Transformer中的掩码是为了保证模型在处理变长序列以及进行自回归预测时遵循正确的数据流约束。

六. Transformer模型的优势 (相比RNN类模型)

  • 完全并行化计算,解决了RNN在处理长序列时的瓶颈,提高了训练速度;
  • 自注意力机制能够有效捕获长距离依赖关系,比传统的RNN和CNN在某些情况下表现更好;
  • 结构设计灵活,容易进行扩展和优化,例如通过堆叠更多的层或增加模型宽度来提升性能。

七. Transformer的并行化计算是怎么体现的?

在传统的循环神经网络(RNN)中,其核心特性是隐藏层状态的循环迭代,即每个时间步的计算都会依赖于前一个时间步的结果。这种递归性质意味着在训练过程中,我们必须按顺序逐个处理序列中的每个元素,无法同时计算整个序列的所有时间步。对于较长的序列,这种串行计算会导致显著的训练速度降低,因为GPU和其他并行硬件设备无法充分发挥它们并行计算的能力。

相反,Transformer模型抛弃了这种循环依赖的设计,引入了自注意力机制(Self-Attention),使得模型能够一次性对整个序列的所有元素进行并行计算。在自注意力机制中,每个位置的向量都可以直接参考序列中的任何其他位置,而不必等待之前的计算完成。这消除了序列长度对计算时间的影响,从而允许Transformer模型在训练和推理时充分利用并行计算资源(如GPU集群或TPU等),大大提升了处理长序列数据的效率和速度。

 八. Transformer模型的应用

Transformer模型是众多NLP任务的标准架构,包括但不限于机器翻译、文本生成、情感分析、问答系统等,并在此基础上衍生出了BERT、GPT、Transformer-XL等一系列影响力广泛的预训练模型。 

 

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

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

相关文章

人脸聚类原理和算法解释

人脸聚类是指将大量人脸图像根据它们的相似性分组到不同的群集中的过程。人脸聚类通常利用人脸的特征向量表示来度量人脸之间的相似性,并将相似的人脸图像聚集在一起。 以下是人脸聚类的一般原理: 人脸特征提取:对每张人脸图像提取特征向量。…

美摄科技剪同款SDK解决方案全面升级

视频内容已成为企业宣传、品牌塑造和市场营销的重要载体。然而,如何快速、高效地制作出高质量的视频内容,成为摆在众多企业面前的一大难题。针对这一挑战,美摄科技凭借深厚的技术积累和创新能力,推出了全新的剪同款SDK解决方案&am…

亮数据Bright Data,跨境电商一站式解决方案

目录 一、跨境电商的瓶颈1、技术门槛2、语言问题3、网络稳定性4、验证码处理和自动识别5、数据安全6、法律法规 二、机不可失三、动态住宅代理1、网络代理2、动态住宅代理3、动态住宅代理的主要优点 四、动态住宅代理的使用场景五、如何使用亮数据动态代理1、开始使用2、添加新…

上海王梓标准件制造有限公司隆重参加上海紧固件专业展

随着全球工业制造业的高速发展,标准件行业做为基础部件的供应链环节越来越受到重视。标准件,这类微不足道的小零件,在维护工业世界的稳定和发展中是至关重要的。在这样一个紧要关头,上海王梓标准件制造有限公司(下称“…

Linux hook系统调用使你文件无法删除

文章目录 前言一、什么是hook技术二、Linux hook种类三、系统调用表hook3.1 查看删除文件用到系统调用3.2 获取系统调用函数3.3 编写hook函数3.4 替换hook函数3.5 测试 参考资料 前言 hook技术在Linux系统安全领域有着广泛的应用,例如通过hook技术可以劫持删除文件…

多源BFS - 01矩阵

LCR 107. 01 矩阵 到最近的0的距离,对每一个非0的位置进行搜索,找到最短的距离即可,但如果对每一个非0的点都进行一次搜索的话,肯定是会超时的。这里可以考虑,将所有0点想象成一个0点(超级0)。然后找到所有1点到超级0的…

第 6 章 ROS-URDF练习(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 6.3.4 URDF练习 需求描述: 创建一个四轮圆柱状机器人模型,机器人参数如下,底盘为圆柱…

腾讯云优惠券、代金券、折扣券领取方法及使用教程

腾讯云作为国内领先的云计算服务提供商,一直致力于为广大用户提供高效、稳定、安全的云服务。为了吸引用户上云,腾讯云经常推出各种优惠活动,其中就包括腾讯云优惠券。下面小编将详细介绍腾讯云优惠券的相关信息,包括种类、领取入…

链动3+1模式 全新升级 解决小号和断代问题!!!

随着数字经济的蓬勃发展,市场竞争愈演愈烈,传统的商业模式显得捉襟见肘,难以满足企业快速发展的需求。在这种背景下,一种创新的商业模式——“链动31”应运而生,以其独特的玩法和优势,引领着市场发展的新方…

Python面向对象三大特征(封装、继承、多态)

面向对象编程的三大特征:封装、继承和多态。 注意:在python面向对象编程中,子类对象可以传递给父类类型 一、封装 在Python中,封装是面向对象编程中的一种重要概念,它可以帮助我们实现数据隐藏、信息保护和代码复用。…

阻止默认行为 e.preventDefault()搭配passive:false才有效

正确情况 如果想阻止默认行为,那么 e.preventDefault()搭配passive:false才是正解 document.addEventListener(touchmove,(e)>{ e.preventDefault() console.log(123,123);},{passive:false}) 如果搭配 passive:false,则会报警告 e.preventDefault()搭配passive:true会报…

蓝桥杯-礼物-二分查找

题目 思路 --刚开始想到暴力尝试的方法,但是N太大了,第一个测试点都超时。题目中说前k个石头的和还有后k个石头的和要小于s,在这里要能想到开一个数组来求前n个石头的总重,然后求前k个的直接将sum[i]-sum[i-k-1]就行了&#xff0…

软考中高级案例分析通用答题方法

在软考高级信息系统项目管理师和中级系统集成项目管理工程师考试中,案例分析是一个重要的题型。下面分享几种通用答题方法和个人经验,希望能对大家有所帮助。 历年考试中经常考察的内容 首先,范围管理、进度管理、成本管理、质量管理这四大管…

C++ 子序列

目录 最长递增子序列 摆动序列 最长递增子序列的个数 最长数对链 最长定差子序列 最长的斐波那契子序列的长度 最长等差数列 等差数列划分 II - 子序列 最长递增子序列 300. 最长递增子序列 子数组是连续的,子序列可以不连续,那么就要去[0, i - 1]…

【CKA模拟题】掌握Pod日志输出的秘密

题干 For this question, please set this context (In exam, diff cluster name) 对于这个问题,请设置这个上下文(在考试中,diff cluster name) kubectl config use-context kubernetes-adminkubernetes product pod is running. when you access log…

【算法刷题day1】Leetcode:704. 二分查找、27. 移除元素

Leetcode 704:标准二分查找 文档讲解:代码随想录 题目链接:704.二分查找 状态:稳定输出 题目: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 n…

在Linux环境底下 用C语言执行Python程序

在Linux环境底下 用C语言执行Python程序 文章目录 在Linux环境底下 用C语言执行Python程序1、环境安装&检测2、C语言调用Python语句2.1 直接调用python语句2.2 调用无参python函数2.3 调用有参python函数 1、环境安装&检测 通过C语言调用Python代码,需要先安…

springboot企业级抽奖项目业务二(用户模块)

书接上回,梅开二度 开发流程 该业务基于rouyi生成好了mapper和service的代码,现在需要在controller层写接口 实际操作流程: 看接口文档一>controller里定义函数一>看给出的工具类一>补全controller里的函数一>运行测试 接口…

【数据结构】堆和树详解堆和二叉树的实现堆的top-k问题

主页:醋溜马桶圈-CSDN博客 专栏:数据结构_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.树概念及结构 1.1 树的概念 2.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 2.二叉树的概念及结构 2.1 二叉树的概念…

vue前端解析jwt

vue前端解析jwt 我们可以用在线解析看解析的结果:https://www.lddgo.net/encrypt/jwt-decrypt 但是如果在前端需要解析token,拿到其中的权限信息,可以这样解决。 在线的: 完美解决: 代码: function par…