目录

一.背景介绍

二. 原理

1 模型整体结构

2 Encoder

2.1输入部分

①Embedding

②位置编码

2.2注意力机制

自注意力(Self-Attention)

多头注意力(Multi-Head Attention)

2.3 ADD&Norm

2.4 前馈神经网络(Feed-Forward Neural Network)

3 Decoder

3.1Muti-Head Attention

①Mask Muti-Head Attention

②交互层

3.2 输出


一.背景介绍

Transformer是一种用于自然语言处理(NLP)和其他任务的深度学习模型,由Vaswani等人在2017年的论文《Attention is All You Need》中首次提出。

它主要通过注意力机制而非传统的循环神经网络(RNN)或卷积神经网络(CNN)来处理序列数据。它完全摒弃循环和卷积,仅靠“自注意力”机制并行捕捉序列任意位置间的依赖,通过“Embedding + 位置编码 → 多头注意力 → 前馈 → 残差&LayerNorm”的积木式堆叠,在同等参数规模下实现更高并行度与更长程建模,由此成为 GPT、BERT、ViT 等几乎所有当今最热 AI 模型的通用骨架。

二. 原理

1 模型整体结构

Transformer由编码器和解码器构成,Encoder 和 Decoder 都包含 6 个 block。编码器由多个相同的编码器层堆叠而成,解码器由多个相同的解码器层堆叠而成,但是它们之间并没有共享参数。

每个编码器层包括一个多头自注意力机制和一个前馈神经网络。解码器层在这些基础上增加了一个用于编码器-解码器之间交互的多头注意力机制。

2 Encoder

Encoder整体由以下三个部分组成:输入部分、注意力机制和前馈神经网络。

2.1输入部分
①Embedding

首先需要对输入进行Embedding,可以是任意形式的词向量,通常使用word2vec等模型,将文字编码为512维度的向量,或者也可以使用随机初始化的方式。当数据量大的时候,使用两种方法进行编码无明显差异。

②位置编码

为什么需要位置编码?

  • Transformer与RNN模型不同,它是并行化的,一句话中的所有单词可以一起处理。而自注意力机制本身不包含序列顺序信息,所以Transformer需要一种机制来引入位置信息,以确保模型能够区分不同位置的输入向量。
  • 在transformer的结构中,Embedding得到的向量和位置编码信息相加作为注意力机制模块的输入。

位置编码的计算公式如下:

{PE}_{(pos, 2i)} = \sin\left(pos / 10000^{2i / d_{\text{model}}}\right)

{PE}_{(pos, 2i+1)} = \cos\left(pos / 10000^{2i / d_{\text{model}}}\right)

{pos}是单词或字的位置,{2i}是偶数位置,{2i+1}是奇数位置,d_{model}表示隐藏层的维度

2.2注意力机制

通俗点来解释的话,注意力机制可以类比为人处理信息的过程,会对重点信息额外关注。在深度学习中,注意力机制的工作原理类似。它帮助模型在大量信息中挑选出最相关的部分进行重点处理,这样模型就能更有效地理解和处理数据。例如,在翻译一个句子时,模型会识别出当前正在处理的词与句子中其他词的关系,从而更准确地翻译每一个词。这种机制让系统能够专注于关键细节,从而在复杂的环境中提高决策和分析的准确性。通过这种方式,注意力机制在处理大量信息时,能显著提升效率和效果。

注意力机制是Transformer模型的核心组件,负责动态地调整输入序列中每个元素的表示,以捕捉输入序列中元素之间的关系。Transformer使用的注意力机制主要是自注意力(Self-Attention)和多头注意力(Multi-Head Attention)。

自注意力(Self-Attention)通过计算每个输入向量的查询(Query)、键(Key)和值(Value)向量,使用缩放点积注意力(Scaled Dot-Product Attention)方法来获得输出。自注意力机制将输入到序列中的每个元素视为一个查询 Q ,同时将序列中的所有元素视为键 K 和值 V ,每个元素都会生成对应的查询、键和值表示。

多头注意力(Multi-Head Attention)通过并行执行多个自注意力操作,提升模型的表示能力和关注不同位置信息的能力。

①自注意力(Self-Attention)

注意力的计算公式为:

 \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

其中 ( Q ) 是查询矩阵,( K ) 是键矩阵,( V ) 是值矩阵,( d_k ) 是键向量的维度。

点乘部分:向量点乘可以理解为在对应向量方向投影的长度,越相似值越大。

除以\sqrt{d_k}的原因:QK点乘后值较大,softmax反向传播时容易发生梯度消失,除以\sqrt{d_k}可以使方差为1。

②多头注意力(Multi-Head Attention)

多头注意力通过并行地执行多个自注意力操作,即使用多套QKV 矩阵,使模型能够关注不同的表示子空间中的信息。

Multi-Head Attention模块最终的输出矩阵 Z 和其输入矩阵  的维度是一致的。

通过自注意力和多头注意力机制,Transformer能够灵活地捕捉输入序列中元素之间的复杂关系,使其在处理长序列和序列依赖任务时表现出色。

2.3 ADD&Norm

在经过多头注意力机制得到矩阵 Z 之后,并没有直接传入全连接神经网络,而是经过了一步Add&Norm。Add & Norm 层由 Add 和 Normalize 两部分组成。

Add,就是在 Z 的基础上加了一个残差块 ,加入残差块的目的是为了防止在深度神经网络的训练过程中发生退化的问题,退化的意思就是深度神经网络通过增加网络的层数,Loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,Loss反而增大。残差层的加入可以确保梯度不为0,防止了梯度消失问题的出现。

Normalize,在Transformer中,使用Layer Normalization进行归一化。

为什么在Transformer中不使用BN(Batch Normalization)进行归一化处理呢?

LN是在同一个样本中不同神经元之间进行归一化,而BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。

在 Transformer 里,归一化目标是单个样本内部的隐藏向量,而不是像 CNN 那样依赖一个 batch 内不同样本的同一通道。LN 直接对每条序列的所有特征求均值方差,与 batch 大小、序列长度无关,天然适配变长文本和自回归解码;BN 则必须凑齐足够样本才估得稳统计量,BN依赖于batch内样本的统计量(均值/方差),而序列长度变化大时,统计量不稳定,并且Transformer处理的是变长序列,每个样本的序列长度可能不同,序列长度一变就容易抖动。

2.4 前馈神经网络(Feed-Forward Neural Network)

每个编码器和解码器层包含一个全连接的前馈神经网络,通常包括两个线性变换和一个非线性激活函数(如ReLU)。这个网络独立应用于每个位置。

3 Decoder

Decoder的结构如图所示,每个Decoder由 3 个子层按固定顺序堆叠而成,且每一步只能看见左侧已生成内容。

3.1Muti-Head Attention
①Mask Muti-Head Attention

Decoder中的第一个Multi-Head Attention 层采用了 Masked 操作。是为了使得 decoder 不能看见未来的信息。因为对于一个序列来说,在预测 time_step 为 t 的时刻时,解码器输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出,因此在Decoder的第一个Multi-Head Attention 层中,添加了一个值为0的上三角矩阵,使得第 t 个时间步只能看到自己和左侧 1…t−1 的信息。

②交互层

Decoder中的第二个Multi-Head Attention 层,它的输入 Q 来自于Masked Multi-Head Attention的输出,K 和 V 来自于Encoder中最后一层的输出。

3.2 输出

Decoder的输出部分如图中所示,首先经过一次线性变换(一个全连接神经网络),然后经过Softmax得到输出的概率分布,从而输出概率最大的对应的单词作为我们的预测输出。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐