问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Transformer模型入门:从提出背景到工作原理详解

创作时间:
作者:
@小白创作中心

Transformer模型入门:从提出背景到工作原理详解

引用
CSDN
1.
https://blog.csdn.net/m0_49963403/article/details/145791457

Transformer模型是自然语言处理领域的重要突破,通过引入自注意力机制,成功解决了传统RNN和CNN在处理长序列时的局限性。本文将从模型的提出背景、架构设计到具体的工作流程,全面解析Transformer的核心原理,帮助读者深入理解这一革命性的神经网络架构。

0. 前言

本文是关于Transformer模型的系列文章的第一篇,将基于"Attention is All You Need"这篇开创性论文,详细阐述Transformer的提出背景、模型架构及推理过程。虽然参考了他人的宝贵见解及成果,但内容可能存在不准确的地方,欢迎批评指正。

1. Transformer的提出背景

传统的序列到序列(Seq2Seq)模型通常使用RNN或CNN来处理输入和输出序列。然而,这些模型在处理长距离依赖关系时存在困难,因为它们的计算复杂度随着序列长度的增加而增加。

  • RNN:RNN通过逐步处理序列中的每个元素来捕捉序列中的依赖关系,但由于其顺序性,难以并行化,且在处理长序列时容易出现梯度消失或梯度爆炸问题。
  • CNN:CNN通过卷积操作并行处理序列中的多个位置,但其计算复杂度仍然与序列长度相关,且需要多层卷积才能捕捉长距离依赖关系。

Transformer模型作为一种创新的解决方案,通过利用自注意力机制而非传统的递归网络,允许模型在不考虑输入或输出序列中依赖关系的距离进行建模。克服了传统递归模型的局限性,从而实现了更高的效率和更好的性能。这对于需要处理大量数据和复杂模式识别的任务尤其重要,如自然语言处理中的文本生成、机器翻译等。

2. 模型架构概览

Transformer模型采用了经典的编码器-解码器(Encoder-Decoder)结构,但与传统的RNN或CNN不同,Transformer完全基于自注意力机制和前馈神经网络。

3. Transformer的工作过程分解

Transformer的工作过程可以分为以下几个步骤:

  1. 输入嵌入(Input Embedding):词嵌入的作用是把每个单词(Token)转换成多维的连续的向量。
  2. 位置编码(Positional Encoding):由于Transformer模型不使用传统的按顺序处理方式,它需要一种方法来理解单词(Token)在句子(Input)中的位置,位置编码就起到了这个作用。
  3. 多头注意力机制(Multi-Head Attention):这是Transformer的核心部分。模型通过多头注意力机制来关注句子中的不同部分。
  4. 加法和归一化(Add & Norm):在多头注意力机制之后,模型的输出会与原始输入相加,并进行归一化处理。这有助于稳定训练过程。
  5. 前馈网络(Feed Forward):每个位置的向量会通过一个前馈神经网络进行进一步处理。这个网络通常由两层全连接层组成,中间有一个激活函数。
  6. 重复层(Nx):上述步骤(多头注意力、加法和归一化、前馈网络)会重复多次(N次),以提取更复杂的特征。
  7. 输出(Outputs):最终,模型的输出会被传递给一个线性层,然后通过Softmax函数生成概率分布。
  8. 输出嵌入(Output Embedding):在生成任务中,输出序列通常需要被嵌入回词汇空间,以便生成最终的文本。

4. 举个例子

假设我们有一个简单的机器翻译任务:

  • 输入序列(Inputs):英文句子"I ate chips"。
  • 目标序列(Outputs):中文句子"我吃了薯片"。

Transformer的整个推理过程可以用下图表示出来:

其中 <SOS> 是Start Of Sentence的意思,因为 I 是第一个输入,没有上一步的参考输出,只能用空位 <SOS> 填充。后续每一步的推理都会参考上一步的输出,即输出右移 (Outputs shifted right)。模型从 <SOS> 开始,逐步生成中文句子。具体推理步骤:

  1. 第一步
  • InputsI
  • Output(shifted right)<SOS>
  • 模型根据 I<SOS> 预测“我”是最佳的输出。
  1. 第二步
  • Inputsate
  • Output(shifted right)<SOS>我
  • 模型根据 ate<SOS>我 预测“吃了”是最佳的输出。
  1. 第三步
  • Inputschips
  • Output(shifted right)<SOS>我吃了
  • 模型根据 chips<SOS>我吃了 预测“薯片”是最佳的输出。

而这里的翻译模型之所以能知道 chips 应该翻译成 薯片 而不是 芯片 或者是 筹码,是因为前面的 ate 引起了 chips 的注意力,模型调整了 chips 的语义。

5. 编码器和解码器堆栈(Encoder and Decoder Stacks)

5.1 编码器

编码器由6个(Nx=6)相同的层堆叠而成,每层包含两个子层

  1. 多头自注意力(Multi-Head Self-Attention):允许模型在处理序列时同时关注序列中的不同位置。
  2. 前馈神经网络(Feed-Forward Network):一个简单的全连接网络,应用于每个位置。

每个子层(sub-layer)后面都使用了残差连接(Residual Connection)和层归一化(Layer Normalization),以帮助模型训练。为了把每个子层都链接起来,从嵌入层(Input Embedding和Output Embedding)开始(包括嵌入层),所有子层的维度d model 都定为512(或者其他常数值)。

5.2 解码器

解码器也由6个(Nx=6)相同的层堆叠而成:

除了编码器中的两个子层外,解码器还增加了第三个子层Masked Multi-Head Attention,它是Transformer解码器中的一种特殊注意力机制,主要用于防止模型在生成序列时“偷看”未来的信息。在计算注意力分数时,未来的位置会被掩码(设置为一个极小的值,如负无穷)。这样,经过Softmax后,这些位置的注意力权重会变为0,模型无法关注未来的词。

6. 前馈神经网络(Position-wise Feed-Forward Networks)

在Transformer模型中,Position-wise Feed-Forward Networks(位置逐点前馈网络)是每个编码器和解码器层中的一个重要组件。它的作用是对每个位置的表示进行非线性变换,进一步增强模型的表达能力。

6.1 前馈神经网络的作用

  • 特征提取:对每个位置的表示(即每个词的向量)进行独立的非线性变换,提取更复杂的特征。
  • 增强表达能力:通过多层感知机(MLP)结构,引入非线性激活函数(如ReLU),增强模型的表达能力。
  • 位置独立性:每个位置的表示独立通过相同的全连接网络,因此称为“位置逐点”(Position-wise)。

6.2 前馈神经网络的结构

Position-wise Feed-Forward Networks 通常由两层全连接层组成:

  1. 第一层:将输入从d model(例如512)维映射到更高的维度(如4 × d model)。
  2. 激活函数:在第一层之后应用非线性激活函数(如ReLU)。
  3. 第二层:将高维表示映射回d model维。

公式表示为:

FFN ( x ) = max ⁡ ( 0 , x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = \max(0, x W_1 + b_1) W_2 + b_2FFN(x)=max(0,xW1 +b1 )W2 +b2

其中W 1 W_1W1 、W 2 W_2W2 是可学习的权重矩阵,b 1 b_1b1 、b 2 b_2b2 是偏置项。

Position-wise Feed-Forward Networks 通常紧跟在多头注意力机制之后。注意力机制负责捕捉序列中词与词之间的关系,而Feed-Forward Networks 则对每个位置的表示进行进一步的非线性变换。两者结合,使得模型既能捕捉全局依赖关系,又能提取局部特征。

7. 总结

以上就是Transformer的整体架构介绍,通过举例说明了Transformer的具体推理过程。Transformer的另外两大重点:注意力和位置编码将在后面单独说明。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号