Transformer架构详解,一文看懂不是梦!!!

一、概念

1、什么是Transformer?

Transformer 是一种深度学习模型,最早由 Vaswani 等人在 2017 年提出,专门用于处理序列数据(如自然语言、时间序列等)的任务。Transformer 通过引入 自注意力机制(Self-Attention Mechanism) 来捕捉序列中不同位置之间的依赖关系,并通过并行处理大大提高了训练效率。

2、Transformer的提出解决了什么问题?

(1)长距离依赖问题

传统的循环神经网络(RNN)和长短期记忆网络(LSTM)在处理长序列时会面临捕捉长距离依赖的困难。因为这些模型是逐步处理序列的,信息需要通过每个时间步传播,当序列长度较长时,前面输入的信息在后续步骤中容易被淡化或遗失。这导致模型在处理长序列时表现不佳。

Transformer 的自注意力机制可以让每个位置的输入直接与整个序列的所有其他位置建立联系,而无需逐步传递信息。通过这种方式,Transformer有效解决了长距离依赖问题,能够在整个序列中捕捉全局信息。

(2) 并行处理问题

RNN 和 LSTM 等序列模型依赖于顺序计算,必须一步一步地处理序列中的每个元素。这种逐步处理限制了模型的并行计算能力,导致训练速度较慢,尤其是当输入序列很长时。

Transformer 的设计允许模型同时处理输入序列的所有位置,利用矩阵运算来并行计算,从而大幅提高了训练和推理的效率。这一特性使得 Transformer 能够处理大规模数据集,适应更复杂的任务。

(3) 消除长时间依赖的梯度消失和爆炸问题

在 RNN 结构中,长序列训练常常会遇到梯度消失或梯度爆炸的问题,尤其是当输入序列很长时,前面的时间步和后面的时间步之间的梯度可能变得极小或极大,使得模型难以有效训练。

Transformer 的自注意力机制通过全局计算序列中每个位置的依赖关系,避免了通过逐步传递信息的方式,因此消除了在长序列中训练时容易出现的梯度消失或梯度爆炸问题。

(4)捕捉序列中多层次信息

传统的 RNN 和 LSTM 由于顺序处理的限制,往往难以同时捕捉到序列中多个层次或不同粒度的上下文信息。

Transformer 的多头注意力机制(Multi-Head Attention)使得模型可以从不同的子空间同时关注序列中的不同位置,这提高了模型的表达能力,帮助它更好地理解序列中的复杂关系。

(5)处理长序列时的计算成本

在处理长序列时,RNN、LSTM 等模型由于其顺序计算的特点,计算复杂度较高。而全连接注意力机制(如早期的全连接注意力模型)虽然能捕捉到序列中的长距离依赖,但计算复杂度随着序列长度的增加而呈现平方级别的增长。

Transformer 通过引入 分块注意力局部注意力 的改进(如Swin Transformer等),有效降低了处理长序列时的计算复杂度,使其在长序列任务中的计算成本得到控制。

二、整体框架介绍

1、整体结构:

在机器翻译应用中,它输入一种语言,通过一个编码组件和一个解码组件后输出对应的另一种语言。

2、编码组件和解码组件:

其中,编码组件是一堆编码器,解码组件是一堆相同数量的解码器。如下图所示:

3、编码器大框架:

编码器的结构完全相同(但它们不共享权重)。每个编码器分为两个子层:

编码器的输入首先流经自注意力层 - 该层可帮助编码器在编码特定单词时查看输入句子中的其他单词。

自注意力层的输出被馈送到前馈神经网络。完全相同的前馈网络独立应用于每个位置。

每个位置上的单词在编码器中流经自己的路径。在自注意力层中,这些路径之间存在依赖关系。然而,前馈层没有这些依赖关系,因此各种路径可以在流经前馈层时并行执行。

每个位置上的单词都会经过一个自注意力过程。然后,它们会分别经过一个前馈神经网络——完全相同的网络,每个向量都会分别流过它。

4、解码器大框架:

解码器具有编码器的这两个层,但它们之间有一个注意层,可帮助解码器关注输入句子的相关部分。

前馈神经网络的作用:对每个位置的向量进行非线性变换,从而引入更多的非线性能力,提高模型的表达能力。

5、 自注意力机制(Self-Attention Mechanism)

自注意力机制是 Transformer 的核心创新,它允许模型在计算每个位置的表示时,参考输入序列中所有其他位置的信息。这解决了传统 RNN 模型难以捕捉长距离依赖的问题。

计算过程:

  • 查询、键、值矩阵:首先,x1乘以WQ权重矩阵可得出q1,即与该词相关的“查询”向量。我们最终会为输入句子中的每个词创建一个“查询”、“键”和一个“值”投影。
  • 注意力分数:通过计算查询与键的点积,得到每个查询相对于所有键的相似度分数。然后通过 softmax 函数对分数进行归一化,得到注意力权重。
  • 加权求和:使用这些注意力权重对值矩阵 V 进行加权求和,得到当前序列位置的输出表示

Score得分是通过对查询向量与我们要评分的相应单词的键向量进行点积计算得出的。

分数决定了我们在某个位置编码单词时对输入句子其他部分的关注程度。

Divide by 8 (\sqrt{d_{k}})将分数除以 8(论文中使用的关键向量维度的平方根 - 64。这会导致更稳定的梯度。),然后将结果传递给 softmax 运算。

Softmax 对分数进行归一化,使它们全部为正数并加起来为 1

将每个值向量乘以 softmax 分数(准备将它们相加)。这里保持我们想要关注的单词的值不变,并淹没不相关的单词(例如,通过将它们乘以 0.001 这样的小数字)。

加权值向量相加。这将产生该位置(第一个单词)的自注意力层的输出。

计算公式:

6、多头注意力机制(Multi-Head Attention Mechanism)

在自注意力机制的基础上,Transformer 引入了多头注意力机制。具体来说,模型会将输入向量分成多个头(head),每个头独立计算自注意力。通过这种方式,模型可以从多个角度(子空间)关注输入序列的不同部分。

多头注意力的步骤:

1、我们的输入句子

2、对每个单词进行嵌入

* 在除了第0个以外的所有编码器中,我们不需要嵌入。我们直接使用下面的编码器的输出作为输入。

3、分成8个头。我们将 X 或 R 与权重矩阵相乘得

  • Q:查询矩阵
  • K:键矩阵
  • V:值矩阵

4、使用生成的 Q/K/V 矩阵计算注意力

5、将生成的 Z 矩阵拼接起来,然后与权重矩阵 W^0 相乘,生成该层的输出

7、位置编码(Positional Encoding)

Transformer 的自注意力机制是并行的,因此无法像 RNN 那样顺序处理输入,模型本身无法感知输入序列的顺序信息。为了解决这个问题,Transformer 引入了位置编码,它通过正弦和余弦函数将位置信息嵌入到输入表示中,使模型能够感知序列中的位置信息。

8、前馈神经网络(Feed-Forward Network, FFN)

每个编码器和解码器层中都包含一个前馈神经网络,这个神经网络对每个位置的输出进行非线性变换。它通常由两个线性变换和一个激活函数(通常是ReLU)组成。

前馈网络是逐位置的(position-wise),即它对序列中的每个位置独立处理,而不会跨位置进行信息交互。

9、残差连接(Residual Connection)和层归一化(Layer Normalization)

为了避免梯度消失问题,Transformer 在每个自注意力层和前馈神经网络层之后都使用了残差连接,这意味着原始输入会与层的输出相加。这帮助模型更稳定地训练。

同时,LayerNorm 通过标准化神经网络中每一层的输入,从而稳定训练过程,并提高模型的收敛速度和性能。

10、编码器的结构详解(总结):

  • 输入嵌入(Input Embedding):输入序列中的每个元素(如单词、图像块等)会先转换为向量表示,通常通过嵌入层进行。
  • 位置编码(Positional Encoding):由于 Transformer 不能像 RNN 那样通过顺序自然感知位置信息,需要添加额外的位置信息。位置编码可以使用正弦和余弦函数,帮助模型感知序列中每个元素的顺序。
  • 自注意力层(Self-Attention Layer):核心机制,通过查询、键和值三个向量计算自注意力分数,捕捉输入序列中每个位置与其他所有位置的关系。注意力机制可以让模型并行计算并捕获远距离依赖关系。
  • 前馈神经网络(Feed-Forward Network, FFN):每个位置的注意力结果再通过一个前馈神经网络进行非线性变换,增加模型的表达能力。
  • 残差连接(Residual Connection)和层归一化(Layer Normalization):每个自注意力层和前馈神经网络层后面都使用残差连接和层归一化,以确保梯度流动更顺畅,帮助模型更好地训练。

编码器堆叠:通常,编码器由多个相同的编码器层堆叠组成,每层包括自注意力机制和前馈神经网络。每层都处理上一层的输出,逐步生成更深的表示。

11、解码器的结构详解:

  • 输入嵌入和位置编码:与编码器类似,解码器也有输入嵌入层和位置编码层。
  • 掩蔽自注意力层(Masked Self-Attention Layer):与编码器不同,解码器的自注意力层使用掩蔽(masking),以确保模型在生成输出时不能看到未来时刻的词。例如,在机器翻译中,解码器在生成下一个词时,只能看到已生成的词,不能看到未来词语。
  • 编码器-解码器注意力层(Encoder-Decoder Attention Layer):这个层的作用是让解码器能够利用编码器生成的上下文表示。这一层的查询矩阵来自解码器,而键和值矩阵来自编码器的输出。
  • 前馈神经网络和残差连接:与编码器类似,解码器也包含前馈网络、残差连接和层归一化。
  • 编码器首先处理输入序列。然后,顶部编码器的输出被转换为一组注意向量 K V

    每个解码器将在其“编码器-解码器注意”层中使用它们,这有助于解码器将注意力集中在输入序列中的适当位置。

  • 每个步骤的输出都会在下一个时间步骤中馈送到底部解码器,解码器会像编码器一样将其解码结果冒泡。就像我们对编码器输入所做的那样,我们嵌入并添加位置编码到这些解码器输入中,以指示每个单词的位置。

解码器堆叠:与编码器类似,解码器也由多个解码器层堆叠组成,逐步生成目标序列的每个元素。

三、总结:

Transformer 是一种基于自注意力机制的深度学习模型,革新了序列数据处理的方式。它解决了传统 RNN 和 LSTM 模型在处理长序列时的效率低下和长距离依赖难以捕捉的问题。Transformer 通过并行计算、自注意力机制、多头注意力和位置编码等创新设计,使得模型能够高效捕捉全局信息,处理长序列任务,并显著提升了模型训练和推理的速度。

Transformer 的应用不仅限于自然语言处理(如机器翻译、文本生成等),它还被成功扩展到图像处理、语音识别等领域,推动了这些领域的技术进步。其核心优势在于:

  1. 自注意力机制 能够灵活捕捉全局依赖关系。
  2. 并行处理 提高了训练效率。
  3. 多头注意力机制 提供了多角度的上下文信息建模能力。
  4. 位置编码 解决了序列中位置信息的建模问题。

总之,Transformer 是当代深度学习的重要突破,其广泛的应用和高效的架构设计使其成为多个领域中的核心模型。

参考文章:The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值