Transformer架构包含编码器与解码器。编码器将输入经嵌入和位置编码后,通过多层的多头注意力机制捕捉语义关联,再残差连接与层归一化,经过前馈网络非线性变换,辅以残差连接和层归一化稳定训练,堆叠很多这样的层;解码器比编码器多了一个掩码多头注意力防止信息泄露,其它与编码器相似,堆叠很多这样的层,最后经线性层和Softmax输出预测概率,实现对序列的有效处理与预测。
详解:
这是 Transformer 架构的示意图,Transformer 是一种在自然语言处理等领域广泛应用的模型架构,摒弃了传统的循环神经网络和卷积神经网络结构,完全依靠注意力机制来捕捉序列中的依赖关系。
输入部分
- 输入嵌入(Input Embedding):输入序列(比如文本中的单词序列)首先通过词嵌入层,将每个单词转换为对应的低维稠密向量表示,这个向量包含了单词的语义信息。
- 位置编码(Positional Encoding):由于 Transformer 本身没有对序列顺序的感知能力,位置编码就派上用场。它将位置信息编码成向量并与词嵌入向量相加,这样模型就能区分不同位置的单词。常见位置编码方式是利用正弦和余弦函数生成位置向量。 经过这一步,输入就具备了位置信息和语义信息。
编码器(Encoder)
图左侧部分是编码器,由多个(图中标记为 Nx)相同的编码器层堆叠而成 。每个编码器层包含以下组件:
- 多头注意力机制(Multi - Head Attention):多头注意力机制让模型能从不同子空间捕捉序列中的依赖关系。它把输入线性投影到多个子空间(即多个头),在每个子空间分别计算注意力,然后将结果拼接并线性变换。这样可以并行捕捉多种不同的特征关系,增强模型对序列的理解能力。
- 残差连接与层归一化(Add & Norm):多头注意力机制的输出与输入进行残差连接(相加),然后进行层归一化操作。残差连接有助于梯度传播,防止网络退化;层归一化对每个样本的特征维度进行归一化,稳定训练过程。
- 前馈神经网络(Feed Forward):经过归一化后的输出进入前馈神经网络,该网络由两个线性层组成,中间用 ReLU 激活函数,进一步对特征进行变换和提取,增强模型表达能力。之后同样会进行一次残差连接和层归一化。
解码器(Decoder)
图右侧部分是解码器,同样由多个(图中标记为 Nx)相同的解码器层堆叠而成 。每个解码器层包含以下组件:
- 掩码多头注意力机制(Masked Multi - Head Attention):掩码多头注意力机制与多头注意力机制原理类似,但这里引入了掩码操作。在处理序列生成任务(如机器翻译)时,模型在预测当前位置时不能看到未来位置的信息,掩码操作就是为了屏蔽掉后续位置的信息,保证模型预测的合理性。
- 多头注意力机制(Multi - Head Attention):这一层的多头注意力机制用于建立编码器输出和解码器当前输入之间的关联,让解码器能够利用编码器提取的全局信息。
- 残差连接与层归一化(Add & Norm):和编码器中类似,在掩码多头注意力机制以及多头注意力机制后都分别进行残差连接和层归一化操作,以稳定训练和优化网络。
- 前馈神经网络(Feed Forward):同样是由两个线性层和 ReLU 激活函数构成的前馈神经网络,对特征进一步处理,之后也有残差连接和层归一化。
输出部分
解码器的输出经过一系列处理后得到最终输出:
- 线性变换(Linear):对解码器输出进行线性变换,将其映射到合适的维度,为计算概率做准备。
- Softmax 层:通过 Softmax 函数将线性变换后的结果转换为概率分布,用于预测输出序列(如在机器翻译中预测目标语言的单词)。
输入序列(如文本单词序列)先转化为词向量,与位置编码向量相加得到包含位置信息的输入特征表示。该特征进入多头注意力模块,在不同子空间计算注意力得分,得到多个注意力头的输出,拼接并通过线性变换后进入前馈神经网络。前馈网络输出经过层归一化,作为当前层输出。Transformer 通常堆叠多个这样的层,每一层输出作为下一层输入,最终得到整个 Transformer 的输出。
Transformer 面试常见问题及答案:
- 概念与原理类
- 问题 1:Transformer 的核心原理是什么?
- 答案:Transformer 的核心原理基于注意力机制,摒弃循环神经网络和卷积神经网络结构,实现并行计算。通过多头注意力机制从不同子空间捕捉序列依赖关系,位置编码弥补其对序列顺序的缺失感知,使模型理解单词在序列中的位置信息。编码器负责对输入序列提取特征,解码器利用编码器输出和掩码多头注意力机制实现序列生成任务,各层间通过残差连接和层归一化稳定训练,最终实现高效的特征提取与任务处理。
- 问题 2:Transformer 为什么比传统循环神经网络(RNN)处理序列数据更高效?
- 答案:RNN 处理序列数据时按顺序逐个处理元素,存在时间依赖,难以并行计算,处理长序列易出现梯度消失或梯度爆炸问题;而 Transformer 通过多头注意力机制,可同时关注序列不同位置,实现并行计算,大幅提高训练效率,且位置编码使模型能处理长序列,有效避免 RNN 的长距离依赖难题,因此在处理序列数据上更高效。
- 问题 1:Transformer 的核心原理是什么?
- 架构与组件类
- 问题 1:多头注意力机制的作用是什么?它是如何工作的?
- 答案:多头注意力机制的作用是让模型从多个不同的子空间角度捕捉序列中的依赖关系,增强模型对输入序列的特征提取和理解能力。它首先将输入通过多个不同的线性变换,投影到多个低维子空间,每个子空间独立计算注意力,得到多个注意力头的输出,然后将这些输出拼接起来,再经过一次线性变换得到最终输出。每个注意力头可以关注输入序列的不同方面,例如一些头可能关注局部信息,另一些头可能关注全局信息,从而使模型能够学习到更丰富的特征表示。
- 问题 2:Transformer 中为什么需要位置编码?常见的位置编码方式有哪些?
- 答案:Transformer 架构本身不具备对序列顺序的感知能力,而很多 NLP 任务(如机器翻译、文本生成)依赖单词的顺序信息,因此需要位置编码将位置信息融入输入,使模型区分不同位置的元素。常见的位置编码方式有正弦余弦位置编码,利用正弦和余弦函数的周期性生成不同频率的信号来表示位置,公式为\(PE_{(pos, 2i)} = sin(pos/10000^{2i/d_{model}})\),\(PE_{(pos, 2i + 1)} = cos(pos/10000^{2i/d_{model}})\),其中pos表示位置,i表示维度,\(d_{model}\)是模型维度;还有可学习的位置编码,通过训练让模型自动学习每个位置对应的向量表示。
- 问题 3:Transformer 中编码器和解码器的主要区别是什么?
- 答案:编码器主要负责对输入序列进行特征提取,将输入序列转换为一系列高维特征向量;而解码器除了包含类似编码器的结构外,还使用了掩码多头注意力机制,用于在生成序列时防止模型看到未来的信息,保证生成过程的合理性,同时解码器通过多头注意力机制建立与编码器输出的关联,利用编码器提取的全局信息辅助序列生成。此外,编码器的输出作为解码器的输入之一,解码器最终输出经过线性变换和 Softmax 层转换为概率分布,用于预测输出序列。
- 问题 1:多头注意力机制的作用是什么?它是如何工作的?
- 训练与优化类
- 问题 1:Transformer 在训练过程中如何防止梯度消失或梯度爆炸?
- 答案:Transformer 主要通过以下几种方式防止梯度消失或梯度爆炸。一是使用层归一化(Layer Normalization),对每个层的输入进行归一化处理,使数据分布更加稳定,有助于梯度的稳定传播;二是采用残差连接(Residual Connection),将前一层的输出直接加到后一层的输入上,使得梯度可以直接从后层传播到前层,避免梯度在多层传递过程中逐渐消失;三是合适的初始化策略,合理初始化模型参数,使参数在训练初期处于合适的范围,减少梯度异常的可能性;另外,使用合适的学习率调整策略(如学习率衰减),避免学习率过大导致梯度爆炸,或学习率过小使训练难以收敛。
- 问题 2:Transformer 的预训练和微调过程是怎样的?
- 答案:在预训练阶段,使用大规模的无标注数据,通过自监督学习任务(如掩码语言模型、下一句预测等)训练 Transformer 模型,让模型学习到通用的语言知识和语义表示。例如在掩码语言模型任务中,随机将输入文本中的一些单词用掩码标记替换,模型的任务是根据上下文预测被掩码的单词。经过预训练后,模型已经具备了一定的语言理解能力。在微调阶段,针对具体的下游任务(如文本分类、情感分析、机器翻译等),使用带有标注的少量特定任务数据,在预训练模型的基础上对模型参数进行调整。通常会在预训练模型的基础上添加一些特定任务的层(如分类任务添加全连接层和 Softmax 层),然后通过最小化任务的损失函数来微调模型参数,使模型适应特定任务的需求。
- 问题 1:Transformer 在训练过程中如何防止梯度消失或梯度爆炸?
- 应用与拓展类
- 问题 1:Transformer 在自然语言处理之外还有哪些应用?
- 答案:除自然语言处理外,Transformer 在计算机视觉领域得到广泛应用,如 Vision Transformer(ViT)将图像划分为多个补丁(patch),把每个补丁视为一个 “单词”,通过 Transformer 架构进行图像分类、目标检测、图像分割等任务;在音频处理领域,用于语音识别、音频分类等任务,通过将音频信号转换为合适的序列表示后输入 Transformer 模型;在时间序列分析中,处理金融数据预测、天气预测等问题,利用 Transformer 捕捉时间序列数据中的长距离依赖关系;在推荐系统中,用于建模用户行为序列和物品特征序列,提升推荐的准确性和个性化程度。
- 问题 2:对比 BERT 和 GPT,它们基于 Transformer 的设计有哪些不同?
- 答案:BERT 基于 Transformer 的编码器部分构建,采用双向 Transformer 结构,通过掩码语言模型和下一句预测任务进行预训练,能够同时利用单词的上下文信息,在多项自然语言处理任务(如问答系统、文本分类)中表现出色;GPT 基于 Transformer 的解码器部分,采用单向 Transformer 结构,从左到右自回归生成文本,通过语言建模任务进行预训练,在文本生成任务(如文章续写、对话生成)上有很好的效果。简单来说,BERT 注重双向理解上下文,而 GPT 侧重于单向的文本生成。
- 问题 1:Transformer 在自然语言处理之外还有哪些应用?