首页 > 其他分享 >Transformer逐层分解

Transformer逐层分解

时间:2024-03-26 20:55:48浏览次数:26  
标签:Transformer 嵌入 解码器 编码器 逐层 堆栈 分解 序列

什么是Transformer?

Transformer架构擅长处理文本数据,这些数据本身是有顺序的。他们将一个文本序列作为输入,并产生另一个文本序列作为输出。例如,讲一个输入的英语句子翻译成西班牙语。

Transformer的核心部分,包含一个编码器层和解码器层的堆栈。

为了避免混淆,我们把单个层称为编码器或解码器,并使用编码器堆栈或解码器堆栈分别表示一组编码器与一组解码器。

在编码器堆栈和解码器堆栈之前,都有对应的嵌入层。而在解码器堆栈后,有一个输出层来生成最终的输出。

编码器堆栈中的每个编码器的结构相同。解码器堆栈也是如此。其各自结构如下:

  1. 编码器:一般有两个子层:包含自注意力层self-attention,用于计算序列中不同词之间的关系;同时包含一个前馈层feed-forward。
  2. 解码器:一般有三个子层:包含自注意力层self-attention,前馈层feed-forward,编码器-解码器注意力层Decoder-Encoder self attention。
  3. 每个编码器和解码器都有独属于本层的一组权重。

注意,编码器与解码器的自注意力层self-attention、前馈层feed-forward,以及解码器中的编码器-解码器注意力层Decoder-Encoder self attention 均有残差连接以及正则化层。

基于Transofrmer的变体有许多。一些Transformer构架甚至没有Decoder结构,而仅仅依赖Encoder。

Transformer训练过程

Transformer的训练和推理有一些细微差别。
首先来看训练。每一条训练数据都包括两部分内容:

  1. 输入序列,或称为“源序列”(例如对于一个翻译问题,“you are welcome” 是一个输入序列)
  2. 输出序列,或称为“目标序列”(上述的翻译问题“De nada”即为"you are welcome"的西班牙语翻译,为输出序列)

而Transformer训练的目标就是,通过对训练数据中源序列与目标序列之间规律的学习,在测试或实际的任务中,给定原序列,生成目标序列。

如上图所示,Transformer在训练过程中,模型对数据的处理过程如下,大体可以分为6个步骤:

  1. 在送入第一个编码器之前,输入序列(src_seq)首先被转换为嵌入(同时带有位置编码),产生词嵌入表示(src_position_embed),之后送入第一个编码器。
  2. 由各编码器组成的编码器堆栈按照顺序对第一步中的输出进行处理,产生输入序列的编码表示(enc_outputs)。
  3. 在右侧的解码器堆栈中,目标序列首先加入一个句首标记,被转换成嵌入(带位置编码),产生词嵌入表示(tgt_position_embed),之后送入第一个解码器。
  4. 右各解码器组成的解码器堆栈,将第三步的词嵌入表示(tgt_position_embed),与编码器堆栈的编码表示(enc_outputs)一起处理,产生目标序列的解码表示(dec_outputs)。
  5. 输出层将其转换为词概率和最终的输出序列(out_seq)。
  6. 损失函数将这个输出序列(out_seq)与训练数据中的目标序列(tgt_seq)进行比较。这个损失被用来产生梯度,在反向传播过程中训练模型。

词嵌入层与位置编码

Transformer的输入需要关注每个词的两个信息:该词的含义和它在序列中的位置。

  • 第一个信息,可通过嵌入层对词的含义进行编码。
  • 第二个信息,可通过位置编码层表示该词的位置。
    Transformer通过添加两个层来完成两种不同的信息编码。

1.嵌入层(Embedding)

Transformer的编码器和解码器各有一个嵌入层(Embedding)。
在编码器中,输入序列被送入编码器的嵌入层,被称为输入嵌入(input Embedding)。

在解码器中,目标序列右移一个位置,然后在第一个位置插入一个Start token后被送入解码器的嵌入层。
注意,在推理过程中,我们没有目标序列,而是循环地将输出序列送入解码器的嵌入层,此过程为输出嵌入(Output Embedding)。

每个文本序列在输入嵌入层之前,都已被映射成词汇表中单词ID的数字序列。
嵌入层再将每个数字序列映射成一个嵌入向量,这是该词含义一个丰富的表示。

2.位置编码层(Position Encoding)

RNN在循环过程中,每个词按顺序输入,因此隐含地知道每个词的位置。
然而,Transformer一个序列中的所有词都是并行输入的。这是其相对于RNN架构的主要优势;但同时也意味着位置信息会丢失,必须单独添加回来。
解码器堆栈和编码器堆栈各有一个位置编码层。

位置编码的计算是独立于输入序列的,是固定值,只取决于序列的最大长度。

  • 第一项是一个常熟代码,表示第一个位置。
  • 第二项是一个表示第二位置的常量代码。


pos是该词在序列中的位置,d_model是编码向量的长度(与嵌入向量相同),i是这个向量的索引值。公式表示的是矩阵第pos行、第2i列和(2i+1)列上的元素。
换句话说:位置编码交织了一系列正弦曲线和一系列余弦曲线,对于每个位置pos,当i为偶数时,使用正弦函数计算;当i为奇数时,使用余弦函数计算。

三、矩阵维度(Matrix Dimensions)

深度学习模型一次梳理一批训练样本。

嵌入层和位置编码层对一批序列样本的矩阵进行操作。
嵌入层接受一个(samples, sequence_length)形状为二位单词ID矩阵,将每个单词ID编成一个单词向量,其大小为embedding_size,从而得到一个(samples, sequence_length, embedding_size)形状的三维输出矩阵。
位置编码使用的编码尺寸等于嵌入尺寸,它产生一个类似矩阵,能添加到嵌入矩阵中。

由于嵌入层和位置编码层产生的(samples, sequence_length, embedding_size)形状在模型中被保留下来,随数据在编码器和解码器堆栈中流动,知道它被最终的输出层改变形状。
[实际上变成了(samples, sequence_length, vocab_size)]
以上对Transformer中的矩阵维度有了一个形象的认识。为了简化可视化,从这里开始,暂时放弃第一个维度(samples维度),并使用单个样本的二维表示。

标签:Transformer,嵌入,解码器,编码器,逐层,堆栈,分解,序列
From: https://www.cnblogs.com/yege/p/18097555

相关文章

  • 重新梳理Attention Is All You Need(Transformer模型): Attention=距离,权重,概率;Multi-He
    Attention并非transformer原创,但是transformer把Attention置为核心地位,取得了巨大的成功!我来尝试理解并介绍一下Attention注意机制。Attention的目的是:提取特征,获得权重。Attention是什么:提取特征(权重)的手段。比如:给定一张图片,人类大脑很快就会把注意力放在最具辨识度的部分......
  • Transformer
    Transformer自注意力机制自注意力机制核心就是计算句子在编码过程中每个位置上的注意力权重,然后再以权重和的方式计算整个句子的隐含向量表示attention核心?self-attention核心公式:\(\text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\)其......
  • 学习人工智能:Attention Is All You Need-3-训练;结果;结论;Transformer模型相当于 E=MC^2
    5训练Training本节描述了我们模型的训练方案。5.1训练数据和批次处理TrainingDataandBatching我们在标准的WMT2014英德数据集上进行了训练,该数据集包含约450万个句子对。句子使用字节对编码[3]进行编码,其共享源-目标词汇表包含约37000个标记。对于英法翻译,我们使用......
  • 谈一谈BEV和Transformer在自动驾驶中的应用
    谈一谈BEV和Transformer在自动驾驶中的应用BEV和Transformer都这么火,这次就聊一聊。结尾有资料连接一BEV有什么用首先,鸟瞰图并不能带来新的功能,对规控也没有什么额外的好处。从鸟瞰图这个名词就可以看出来,本来摄像头等感知到的物体都是3D空间里的的,投影到2D空间,只是信息的......
  • 马斯克开源的 grok-1 底层 Transformer 模型论文 《Attention is All You Need》
    拓展阅读马斯克开源的grok-1底层Transformer模型论文《AttentionisAllYouNeed》马斯克开源的grok-1大模型底层Transformer模型到底是个啥?马斯克开源的grok-1大模型硬核源码第1弹马斯克开源的grok-1大模型硬核源码第2弹马斯克开源的grok-1大模型硬核源......
  • 机器学习算法那些事 | 使用Transformer模型进行时间序列预测实战
    本文来源公众号“机器学习算法那些事”,仅用于学术分享,侵权删,干货满满。原文链接:使用Transformer模型进行时间序列预测实战时间序列预测是一个经久不衰的主题,受自然语言处理领域的成功启发,transformer模型也在时间序列预测有了很大的发展。本文可以作为学习使用Transformer模......
  • 【论文精读】VIT:vision transformer论文
    相关文章【论文精读】Transformer:AttentionIsAllYouNeed文章目录相关文章一、文章概览(一)研究背景(二)核心思路(三)相关工作(三)文章结论二、模型细节(一)组成模块(二)模型的大体流程(三)具体的模型的前向过程(四)transformerencoder的公式表达(五)消融实验1、关于图像分类编码方......
  • 分解质因数
    这段代码是一个简单的C++程序,用于将输入的整数分解为质因数并输出其质因数分解形式。程序的主要流程如下:引入 <bits/stdc++.h> 头文件:这个头文件实际上包含了C++标准库中的几乎所有头文件,因此它可以简化代码,但通常不建议在生产环境中使用,因为它可能导致编译时间增加。......
  • EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融
    EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)目录EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)预测......
  • 政安晨:【深度学习处理实践】(九)—— Transformer架构
    咱们接着这个系列的上一篇文章继续:政安晨:【深度学习处理实践】(八)——表示单词组的两种方法:集合和序列https://blog.csdn.net/snowdenkeke/article/details/136762323Transformer是一种架构,用于在自然语言处理(NLP)和其他任务中进行序列到序列(seq2seq)学习。它于2017年由Vaswani......