Transformer相关介绍

news2025/1/21 9:27:31

1 Transformer 介绍

Transformer的本质上是一个Encoder-Decoder的结构。
在这里插入图片描述

1.1 编码器

在Transformer模型中,编码器(Encoder) 的主要作用是将输入序列(例如文本、语音等)转换为隐藏表示(或者称为特征表示)。这些隐藏表示可以被Transformer模型的解码器使用,以生成目标序列(如翻译文本或生成文本)。

具体来说,编码器在Transformer中执行以下几个关键步骤和功能:

  • 嵌入输入表示(Input Embedding)
    首先,输入的单词或符号会经过嵌入层(embedding layer),将其转换为高维度的词嵌入(word embeddings)。这些嵌入向量不仅仅是简单的词向量,而是包含了位置编码(Positional Encoding),用于表示单词在序列中的位置信息。
  • 多层自注意力机制(Multi-Head Self-Attention)
    编码器由多层堆叠的自注意力层组成。自注意力机制能够帮助模型在处理每个输入位置时,同时关注到序列中的其他位置,从而更好地捕捉上下文信息。每个自注意力层都会对输入序列进行线性变换,然后计算注意力权重并应用到序列上,以获取加权的表示。
  • 前馈神经网络(Feedforward Neural Networks)
    在每个自注意力层之后,还有一个前馈神经网络。该网络由两个全连接层组成,之间通过ReLU激活函数连接。这一层的作用是对每个位置的特征进行非线性变换和映射。
  • 残差连接和层归一化(Residual Connections and Layer Normalization)
    在每个子层(自注意力层和前馈神经网络层)之间,都有残差连接和层归一化操作。残差连接允许信息直接在不同层之间流通,有助于避免梯度消失和加速训练。层归一化则有助于稳定训练过程,使得每层的输入分布保持在较小的范围内。
  • 输出隐藏表示(Output Representation)
    最终,编码器将经过多层处理的输入序列转换为一系列高维度的隐藏表示。这些表示不仅包含了输入序列的语义信息,还包括了序列中每个位置的上下文信息。
    总体而言,Transformer编码器的作用是将输入序列转换为上下文感知的隐藏表示,这些表示能够包含输入序列的语义和语境信息,为解码器生成输出序列提供必要的信息基础。
    在这里插入图片描述

在Transformer的encoder中,数据首先会经过一个叫做self-attention的模块得到一个加权之后的特征向量 Attention(Q,K,V)。
在这里插入图片描述
得到特征向量之后,它会被送到encoder的下一个模块,即Feed Forward Neural Network。

1.2 解码器

在Transformer模型中,解码器(Decoder) 负责生成目标序列(如翻译文本或生成文本),它通过编码器生成的隐藏表示来理解输入序列,并逐步生成输出序列。

以下是Transformer解码器的主要作用和功能:

  • 嵌入目标表示(Target Embedding)
    与编码器类似,解码器也会经过一个嵌入层,将目标序列(如翻译任务中的目标语言单词序列)转换为高维度的词嵌入。这些嵌入向量同样包含位置编码,以保留目标序列中单词的位置信息。
  • 多层自注意力机制和编码器-解码器注意力机制
    解码器中的每一层都包含自注意力机制和编码器-解码器注意力机制(Encoder-Decoder Attention)。自注意力机制帮助解码器关注到目标序列内部的不同位置,而编码器-解码器注意力机制则帮助解码器在生成每个单词时,将注意力集中在编码器输出的不同位置上,以获取输入序列的相关信息。
  • 前馈神经网络
    与编码器类似,解码器中也包含前馈神经网络层,用于对每个位置的特征进行非线性变换和映射。
  • 残差连接和层归一化
    解码器中的每个子层之间也存在残差连接和层归一化操作,以促进信息流动和训练稳定性。
  • 生成输出序列
    在每个解码器层中,经过多次自注意力机制和编码器-解码器注意力机制的处理后,最终将得到一系列的隐藏表示。解码器通过这些隐藏表示,结合一个额外的线性变换和softmax操作,以概率分布的形式生成每个位置上可能的输出单词。
  • 输出序列的生成和调整
    解码器通过逐步生成输出序列的每个单词,并在每个时间步骤上更新其内部状态,直到生成整个目标序列或者达到终止条件(如生成特定的结束标记)为止。
    总体来说,Transformer解码器的主要作用是利用编码器生成的输入序列的隐藏表示,结合自注意力机制和编码器-解码器注意力机制,生成目标序列的概率分布,从而实现机器翻译、文本生成等任务。
    在这里插入图片描述

2 输入编码

输入数据后,我们首先通过Word2Vec等词嵌入方法将输入语料转化成特征向量。
在这里插入图片描述
然后直接将X作为输入,输入到transformer中,得到具有上下文关系的向量。
在这里插入图片描述

3 Self-Attention

Self-attention(自注意力)是Transformer模型中的关键组成部分,用于处理输入序列内部的依赖关系和长距离依赖。它是一种机制,允许模型在处理序列中的每个位置时,能够同时关注序列中其他不同位置的信息,而无需通过逐步处理序列来实现。
具体来说,self-attention的作用是将序列中的每个元素(如词语或时间步中的特征)与序列中所有其他元素进行关联,以便在表征时捕捉全局的语义信息和依赖关系。这种关联是通过计算注意力权重来实现的,注意力权重决定了一个位置上的输出应该受到其他位置信息的多大影响。

自注意力机制通常包括以下几个步骤:
计算注意力分数:
对于输入序列中的每个位置 ( i ),通过线性变换(通常是矩阵乘法)将输入向量转换为三种不同的向量:查询向量(Query),键向量(Key),和数值向量(Value)。这些向量通过学习得到,并且在每个位置上都是独立计算的。
查询向量(Query)用于查询序列中其他所有位置的信息。
键向量(Key)和数值向量(Value)用于提供序列中其他位置的信息。

query向量类比于询问。 某个token问:“其余的token都和我有多大程度的相关呀?”
key向量类比于索引。 某个token说:“我把每个询问内容的回答都压缩了下装在我的key里”
value向量类比于回答。 某个token说:“我把我自身涵盖的信息又抽取了一层装在我的value里
在这里插入图片描述

  1. 如上文,将输入单词转化成嵌入向量
  2. 根据嵌入向量得到 Q,K,V三个向量
  3. 为每个向量计算一个score:score=q*k
  4. 为了梯度的稳定,Transformer使用了score归一化,即除以 Dk^0.5
  5. 对score施以softmax激活函数
  6. softmax点乘Value值 v,得到加权的每个输入向量的评分
  7. 相加之后得到最终的输出结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
Self-attention v.s. RNN
在这里插入图片描述
1. 并行性
Self-attention: Self-attention 允许模型在处理输入序列时并行计算每个位置的注意力权重。这意味着,不同位置之间的计算可以同时进行,使得模型在处理长序列时能够更高效地进行学习和推理。每个位置的输出只依赖于所有位置的加权平均,而不需要像RNN那样按照顺序逐步计算。
RNN: 循环神经网络需要按照时间步顺序依次处理输入序列。每个时间步的隐藏状态依赖于前一个时间步的隐藏状态,因此无法并行计算所有时间步的隐藏状态。这种串行处理限制了RNN在长序列上的效率,尤其是对于长期依赖关系的建模会有挑战。

2. 距离依赖性
Self-attention: Self-attention 在计算注意力权重时,可以同时关注序列中任意两个位置之间的关系,而不受距离的限制。这使得模型能够捕捉长距离依赖关系.
RNN: RNN 的隐藏状态通过循环连接,每一步的隐藏状态主要依赖于前一步的隐藏状态。

总结
Self-attention 和 RNN 在处理序列数据时有显著的区别。Self-attention 通过并行计算和全局关注机制提高了处理长序列的效率和能力,并且能够有效地捕捉长距离依赖关系。相比之下,RNN 需要按时间顺序逐步计算,其处理效率和能力受到长期依赖和梯度问题的限制。

4 Multi-head Self-attention

Multi-head self-attention 是 Transformer 模型中自注意力机制的一种扩展形式,它允许模型同时考虑来自不同表示空间的多组注意力表示,以增强模型对输入序列的表示能力和表征能力。

主要组成部分:
线性变换:
在每个注意力头中,输入序列的每个位置都会经过三种线性变换来形成 Query、Key 和 Value 向量。这些变换是通过学习的权重矩阵实现的,分别是 ( W_Q )、( W_K ) 和 ( W_V )。
注意力计算:
每个注意力头都会独立计算注意力权重。对于每个位置 ( i ),首先计算 Query 向量 ( Q_i ),然后与所有位置的 Key 向量 ( K_j ) 计算点积,得到注意力分数。这些分数经过 softmax 函数归一化,得到每个位置对于当前位置的注意力权重。使用这些注意力权重对所有位置的 Value 向量 ( V_j ) 进行加权求和,得到该头的自注意力输出。
在这里插入图片描述

多头机制:
Transformer 模型通常会使用多个注意力头(通常是8或16个),每个头都是独立计算的。每个头产生的注意力输出会被拼接在一起,然后经过一个线性变换 ( W_O ),以产生最终的多头注意力输出。
在这里插入图片描述
在这里插入图片描述

总体而言,Multi-head Self-attention 是 Transformer 模型成功的关键因素之一,它使得模型能够有效地捕捉长距离依赖和复杂语义信息,适用于各种自然语言处理任务,如机器翻译、文本生成和语言理解。

5 位置编码

位置编码(Positional Encoding)是在Transformer模型中使用的一种技术,在Transformer模型中,由于自注意力机制并不包含序列顺序信息,因此需要通过其他方式将位置信息引入模型。位置编码的目的是为了确保模型在处理输入序列时能够考虑到每个词语的位置顺序,而不仅仅是它们的内容。

为了解决这个问题,论文中在编码词向量时引入了位置编码(Position Embedding)的特征。具体地说,位置编码会在词向量中加入了单词的位置信息,这样Transformer就能区分不同位置的单词了。
在这里插入图片描述

6 输出编码

6.1 自注意力与交叉注意力

在这里插入图片描述
自注意力(Self-Attention):
自注意力机制是Transformer中的核心组件之一,用于在单个序列内部建立长距离依赖关系。 它的基本思想是:
**输入和输出: ** 自注意力接收一个输入序列,通常是由词嵌入向量组成的。对于每个输入位置,自注意力会计算该位置与序列中其他所有位置的相关性。
**计算过程: ** 相关性的计算通常是通过将输入序列经过线性变换(乘以权重矩阵)得到查询(Query)、键(Key)、值(Value)来完成的。然后通过计算Query和Key之间的点积,再经过Softmax归一化得到注意力权重,最后将权重与对应的值向量相乘并求和,得到输出表示。
**作用: ** 自注意力使得每个位置能够同时关注到序列中所有其他位置的信息,从而更好地捕捉全局依赖关系,有利于各种任务中的上下文理解和长距离依赖建模。

交叉注意力(Cross-Attention):
交叉注意力是Transformer中用于处理两个不同输入序列之间关系的注意力机制,一般用于编码器-解码器结构中的解码器部分。其主要思想是:
输入和输出: 交叉注意力接收两个不同的输入序列,通常分别用作查询序列(Q)和键序列(K),并使用值序列(V)来生成输出序列。
计算过程: 对于解码器中的每个位置,交叉注意力会计算该位置与编码器输出序列中所有位置的相关性。然后使用编码器输出序列的值向量和注意力权重来计算加权和,作为解码器当前位置的输出表示。
在这里插入图片描述

Self-attention(Mask)
自注意力中的mask机制是Transformer模型中的一个重要组成部分,特别是在处理序列任务时,用于控制模型在预测未来位置时的行为。
在推理时,解码器的输入是依次进行的,需要控制模型不能使用未来位置

**作用: ** 交叉注意力允许解码器在生成序列时通过查询序列与编码器的输出序列建立联系,以便更好地集成编码器的信息并生成符合上下文的输出序列。这对于机器翻译等任务中的解码过程至关重要。

总结:
自注意力用于建模单个序列内部的依赖关系,允许每个位置同时关注到整个序列的信息,适合于捕捉局部和全局的依赖关系。
交叉注意力用于处理两个不同输入序列之间的关系,例如编码器-解码器结构中,允许解码器根据编码器的输出来生成上下文相关的输出序列。

6.2 解码器推理模式

编码器输入"好久不见",转换为含有相关关系的向量,解码器最初传入"开始",经过自注意力模块也转换为相应向量,在解码器的交叉注意力模块计算并经过一系列操作输出概率最大的字,并把该向量当作下一次预测解码器的输入,以此类推,直至解码器输出BOS 结束符。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.3 解码器训练模式

“好久不见”输入到解码器与“Long time no see” 输入到解码器,按照各自的transformer计算运行,然后编码器结果传入交叉注意力层进行计算(过程见6.1 交叉注意力部分),得到向量互相匹配,得到一个损失函数,通过损失函数得到损失值进行反向传播修改模型参数,最终达到编码器与解码器的词向量对应成功。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

24军dui文职联勤保障部报名照规格要求

24军dui文职联勤保障部报名照规格要求 #军队文职 #文职 #文职备考 #联勤保障部队 #文职考试 #文职上岸 #2024军队文职

python-查找元素3(赛氪OJ)

[题目描述] 有n个不同的数&#xff0c;从小到大排成一列。现在告诉你其中的一个数x&#xff0c;x不一定是原先数列中的数。你需要输出最后一个<x的数在此数组中的下标。输入&#xff1a; 输入共两行第一行为两个整数n、x。第二行为n个整数&#xff0c;代表a[i]。输出&#x…

练习2.30

2.29题目没有理解,暂时没有做出来,先把2.30做了 上代码 (defn square [x](* x x)) ;第一版,直接定义 (defn square-tree[tree](cond (not (seq? tree)) (square tree)(empty? tree) nil:else (cons (square-tree (first tree)) (square-tree (rest tree)))) ) ;使用map …

LeetCode刷题笔记 | 283 | 移动零 | 双指针 |Java | 详细注释

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 原地移除元素2 LeetCode链接&#xff1a;283. 移动零 1.题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元…

Nextjs——国际化那些事儿

背景&#xff1a; 某一天&#xff0c;产品经理跟我说&#xff0c;我们的产品需要搞国际化 国际化的需求说白了就是把项目中的文案翻译成不同的语言&#xff0c;用户想用啥语言来浏览网页就用啥语言&#xff0c;虽然说英语是通用语言&#xff0c;但国际化了嘛&#xff0c;产品才…

学习编程的第二十天,加油!

3&#xff1a;递归与迭送&#xff08;循环是一种迭代&#xff09; &#xff01;&#xff01;&#xff01;递归算有些东西时计算量会很大导致运行时间过久&#xff0c;而使用循环会大大节省时间&#xff0c;但需要注意溢出的情况。 递归的练习&#xff0c;第一张呢不符合我们的…

刷题——不同路径的数目

不同路径的数目(一)_牛客题霸_牛客网 我第一眼&#xff0c;觉得是没有思路的&#xff0c;我也是看别人代码反应过来&#xff0c; 画图可以看出来 外边沿的只有一种到达方式&#xff0c;全部赋值1&#xff0c; 如果有两个方块相接&#xff0c;那就让此方块的左邻和右邻相加&…

线程池ThreadPoolExecutor使用

文章目录 一、基础-Java中线程创建的方式1.1、继承Thread类创建线程1.2、实现Runnable接口创建线程1.3、实现Calable接口创建线程1.4、使用线程池创建线程二、概念-线程池基本概念2.1、并发和井行的主要区别2.1.1、处理任务不同2.1.2、存在不同2.1.3、CPU资源不同2.2、什么是线…

网页保护用户 小tips

在使用创建web开发的过程中&#xff0c;直接使用用户名url&#xff0c;容易造成用户信息的被攻击&#xff0c;例如对方直接访问 ../../.../username 的网页&#xff0c;可以窃取用户信息&#xff0c;然而把usename变成一堆乱码就安全的多 效果&#xff1a; 代码&#xff1a;…

一个 .NET 开源的地图组件库 - Mapsui

前言 今天大姚给大家分享一个.NET开源&#xff08;MIT License&#xff09;、免费、同时支持多平台框架&#xff08;MAUI、WPF、Avalonia、Uno、Blazor、WinUI、Eto、.NET Android 和 .NET iOS&#xff09;地图组件库&#xff1a;Mapsui。 项目源代码 支持的UI框架的NuGet包 …

JavaFX布局-TabPane

JavaFX布局-TabPane 常用属性paddingsidetabClosingPolicytabDragPolicy 实现方式Java实现fxml实现 组织一组tab的容器&#xff0c;可以设置关闭&#xff0c;拖拽等每个tab内容可以设置不同容器数据 常用属性 padding 内边距&#xff0c;可以单独设置上、下、左、右的内边距 …

webfunny埋点系统如何进行部署?

hello 大家webfunny埋点系统做了不少功能更新&#xff0c;平常给大家分享比较多的是**webfunny前端监控系统**&#xff0c;最近有不少技术同学来了解webfunny埋点系统&#xff0c;今天主要给大家分享下webfunny埋点系统部署&#xff0c;分为本地部署和线上部署。 还没有试用和…

翻译: 可视化深度学习反向传播原理一

本期我们来讲反向传播 也就是神经网络学习的核心算法 稍微回顾一下我们之前讲到哪里之后 首先我要撇开公式不提 直观地过一遍 这个算法到底在做什么 然后如果你们有人想认真看里头的数学 下一期影片我会解释这一切背后的微积分 如果你看了前两期影片 或者你已经有足够背景知…

【文件系统】磁盘的物理结构 | 存储结构

目录 0.前言 1.磁盘的物理结构 1.1什么是二进制&#xff08;0/1&#xff09; 1.2磁盘的存放位置 1.3磁盘的结构 2.磁盘的存储结构 2.1❓数据是怎样在磁盘上存储 2.2❓读写的基本单位是什么 2.3❓如何找到一个指定位置的扇区 2.4❓为什么磁盘的机械结构是这样的 0.前…

Audio Spectrogram Transformer (AST)工作介绍

Audio Spectrogram Transformer (AST)&#xff0c;是一种基于 Transformer 模型的音频分类方法。AST 利用了 Transformer 模型在捕获全局特征方面的优势&#xff0c;将音频信号转换为频谱图进行处理。下面是对 AST 及其相关研究工作的详细介绍&#xff1a; 1.研究背景 传统的音…

SpringAOP-底层实现源码解析

目录 1. Spring AOP原理流程图 2. 动态代理 3. ProxyFactory 4. Advice的分类 5. Advisor的理解 6. 创建代理对象的方式 ProxyFactoryBean BeanNameAutoProxyCreator DefaultAdvisorAutoProxyCreator 7. 对Spring AOP的理解 8. AOP中的概念 9. Advice在Spring AOP中…

文心智能体【MBTI速测小精灵】:趣味速测,精准解析你的性格密码!

文章目录 一、文心智能体平台是什么&#xff1f;二、创建文心智能体智能体创建智能体调试分析智能体基础配置智能体高级配置智能体高级调试 三、文心智能体发布四、文心智能体体验总结 一、文心智能体平台是什么&#xff1f; AgentBuilder文心智能体平台是基于文心大模型的智能…

饮料加速稳定性试验

饮料加速稳定性试验概览 饮料加速稳定性试验是一种通过模拟加速条件来预测饮料在市场销售期间稳定性的测试方法。这种测试对于确保饮料产品在整个保质期内的质量和安全性至关重要。它可以帮助生产企业优化产品配方、改进包装材料、调整储存和运输条件&#xff0c;从而确保产品在…

苍穹外面day13(day10)---订单状态定时处理、来单提醒和客户催单

Spring Task 同学们可以看我这篇文章 Spring Task初学-CSDN博客 订单状态定时处理 新建OrderTask /*** 定时任务类&#xff0c;定时处理订单状态*/ Component Slf4j public class OrderTask {Autowiredprivate OrderMapper orderMapper;/*** 处理超时订单的方法*/Scheduled(c…

【嵌入式之RTOS】什么是消息队列

目录 一、FreeRTOS消息队列的基本概念 二、FreeRTOS消息队列的工作原理 三、FreeRTOS消息队列的特点 四、FreeRTOS消息队列的应用 五、示例 消息队列是一种用于任务间通信的机制&#xff0c;它允许一个任务&#xff08;生产者&#xff09;向消息队列发送消息&#xff0c;而…