Josep Ferrer 2024-01-09
深入探索 Transformer 的架构,这种模型通过自注意力机制彻底改变了数据处理方式。
概述
- 文章类型:深度学习架构指南
- 主题:Transformer 模型的工作原理
- 受众:数据科学家、机器学习工程师、NLP 从业者
- 内容涵盖:Transformer 架构的核心组件,包括自注意力机制、编码器–解码器设计、位置编码和多头注意力
- 关键概念:注意力机制、嵌入(embeddings)、残差连接、归一化、前馈层以及解码器工作流程
- 讨论的模型:BERT、GPT、LaMDA 等基于 Transformer 的模型
- 学习成果:你将理解 Transformer 的内部机制,掌握注意力机制如何处理序列数据,并了解这些模型如何驱动当今的人工智能系统。
理解 Transformer 架构,包括自注意力、编码器–解码器设计和多头注意力机制,以及它如何为 OpenAI 的 GPT 系列等模型提供动力。
深度学习领域正经历一场地震式的变革,这要归功于 Transformer 模型的出现及其快速演进。
这些开创性的架构不仅重新定义了自然语言处理(NLP)领域的标准,还将其影响力扩展到人工智能的众多方面。
凭借其独特的注意力机制和并行处理能力,Transformer 模型成为在理解和生成人类语言方面实现前所未有的准确性和效率的典范。
Transformer 架构最早于 2017 年由 Google 在论文《Attention is All You Need》中提出,如今已成为 ChatGPT 等突破性模型的核心,引发了 AI 社区的新一轮热潮。它们在 OpenAI 的尖端语言模型中发挥了关键作用,也在 DeepMind 的 AlphaStar 中扮演了重要角色。
在这个 AI 转型的时代,对于有志于从事数据科学和 NLP 的从业者而言,理解 Transformer 模型的重要性不言而喻。
作为推动最新技术飞跃的核心领域之一,本文旨在揭开这些模型背后的秘密。
什么是 Transformer?
Transformer 最初是为解决序列转导(sequence transduction)问题而开发的,即神经机器翻译——将一个输入序列转换为输出序列。因此得名“Transformer”(变换器)。
但让我们从头开始。
什么是 Transformer 模型?
Transformer 模型是一种神经网络,能够学习序列数据的上下文并据此生成新数据。
简单来说:
Transformer 是一种人工智能模型,通过分析大量文本数据中的模式,学会理解和生成类人文本。
Transformer 是当前最先进的 NLP 模型,被视为编码器–解码器架构的演进版本。然而,传统编码器–解码器架构主要依赖循环神经网络(RNN)来提取序列信息,而 Transformer 完全摒弃了循环结构。
那么,它是如何做到的呢?
Transformer 专门设计用于通过分析不同元素之间的关系来理解上下文和语义,几乎完全依赖一种称为注意力(attention)的数学技术来实现这一目标。
下图展示了 Transformer 架构的黑盒视图。
作者绘图
历史背景
Transformer 模型起源于 Google 于 2017 年发表的一篇研究论文,是机器学习领域最新且最具影响力的进展之一。首个 Transformer 模型在具有里程碑意义的论文《Attention is All You Need》中被详细阐述。
这一开创性概念不仅具有理论价值,也迅速实现了工程落地。例如,TensorFlow 的 Tensor2Tensor 包就提供了其实现。此外,哈佛大学 NLP 小组还为该论文提供了带注释的解读,并附带 PyTorch 实现。
Transformer 的引入在该领域引发了显著的浪潮,常被称为“Transformer AI”。这一革命性模型为后续大型语言模型(如 BERT)的突破奠定了基础。到 2018 年,这些进展已被誉为 NLP 领域的分水岭时刻。
2020 年,OpenAI 研究人员宣布推出 GPT-3。短短几周内,人们就用它创作诗歌、编写程序、谱写歌曲、搭建网站等,其多功能性迅速俘获了全球用户的想象力。
2021 年,斯坦福学者在一篇论文中恰当地将这些创新称为基础模型(foundation models),强调了它们在重塑 AI 方面的基础性作用。他们的研究指出,Transformer 模型不仅革新了该领域,还拓展了人工智能的边界,开启了一个充满可能性的新时代。
从 RNN(如 LSTM)到 Transformer 的转变
在 Transformer 模型问世时,RNN 是处理序列数据(即输入具有特定顺序的数据)的首选方法。
RNN 的工作方式类似于前馈神经网络,但按顺序逐个处理输入元素。
Transformer 受到了 RNN 中编码器–解码器架构的启发。然而,与使用循环不同,Transformer 模型完全基于注意力机制。
除了提升 RNN 的性能外,Transformer 还提供了一种新架构,可用于解决许多其他任务,如文本摘要、图像描述生成和语音识别。
那么,RNN 的主要问题是什么?它们在 NLP 任务中效率低下,主要有两个原因:
- 顺序处理:RNN 逐个处理输入数据。这种循环过程无法充分利用现代图形处理器(GPU)——GPU 专为并行计算而设计——因此训练这类模型非常缓慢。
- 长距离依赖问题:当序列中元素相距较远时,RNN 效果很差。这是因为信息在每一步传递,链条越长,信息越容易在传递过程中丢失。
从 RNN(如 LSTM)向 Transformer 的转变,正是由这两个核心问题驱动的。而 Transformer 通过注意力机制的改进,有效解决了这些问题:
- 能够关注任意距离的特定词语;
- 显著提升训练速度。
因此,Transformer 成为了 RNN 的自然进化。
接下来,让我们深入探讨 Transformer 的工作机制。
Transformer 架构
概览
Transformer 最初是为序列转导(即神经机器翻译)而设计的,擅长将输入序列转换为输出序列。它是首个完全依赖自注意力(self-attention)来计算输入和输出表示的转导模型,无需使用序列对齐的 RNN 或卷积。
Transformer 架构的核心特征是保留了编码器–解码器模型。
如果我们把用于语言翻译的 Transformer 视为一个黑盒,它会接收一句英文(例如“How are you?”)作为输入,并输出其西班牙语翻译(“¿Cómo estás?”)。
作者绘图:用于英译西的 Transformer 黑盒
进一步拆解,我们会发现这个黑盒由两个主要部分组成:
- 编码器(Encoder):接收输入并输出该输入的矩阵表示(例如英文句子“How are you?”);
- 解码器(Decoder):接收该编码表示,并迭代生成输出(例如翻译后的句子“¿Cómo estás?”)。
作者绘图:编码器–解码器通用模块
实际上,编码器和解码器都是由多个相同结构的层堆叠而成(原始架构中各有 6 层,但我们可以复制任意数量的层,假设为 N 层)。
作者绘图:多层编码器–解码器结构
现在我们对整体架构有了基本了解,接下来分别深入编码器和解码器的工作流程。
编码器工作流程
编码器是 Transformer 架构的基础组件,其主要功能是将输入 token 转换为上下文化表示。与早期独立处理 token 的模型不同,Transformer 编码器能捕捉每个 token 在整个序列中的上下文。
其结构如下:
作者绘图:编码器架构
我们将工作流程分解为以下基本步骤:
步骤 1:输入嵌入(Input Embeddings)
嵌入仅发生在最底层的编码器中。编码器首先通过嵌入层将输入 token(词或子词)转换为向量。这些嵌入捕捉了 token 的语义含义,并将其转换为数值向量。
所有编码器都接收一个向量列表,每个向量大小固定为 512。在最底层编码器中,这是词嵌入;在其他编码器中,则是下方编码器的输出。
作者绘图:编码器工作流程——输入嵌入
步骤 2:位置编码(Positional Encoding)
由于 Transformer 没有 RNN 那样的循环机制,因此通过在输入嵌入上添加位置编码来提供每个 token 在序列中的位置信息。这使其能够理解句子中每个词的位置。
研究人员建议使用正弦和余弦函数的组合来创建位置向量,从而支持任意长度的句子。
在此方法中,每个维度由不同频率和偏移的波形表示,值域为 -1 到 1,有效表示每个位置。
作者绘图:编码器工作流程——位置编码
步骤 3:编码器层堆栈
Transformer 编码器由多个相同层堆叠而成(原始模型中为 6 层)。
每一层的作用是将整个输入序列转换为连续的抽象表示,该表示封装了从整个序列中学到的信息。每层包含两个子模块:
- 多头注意力机制(Multi-headed attention mechanism)
- 全连接前馈网络(Fully connected network)
此外,每个子层周围都有残差连接(residual connections),随后进行层归一化(layer normalization)。
作者绘图:编码器工作流程——编码器层堆栈
步骤 3.1:多头自注意力机制(Multi-Headed Self-Attention Mechanism)
在编码器中,多头注意力使用一种称为自注意力(self-attention)的特殊机制。该机制使模型能够将输入中的每个词与其他词关联起来。例如,在句子中,模型可能学会将“are”与“you”联系起来。
该机制允许编码器在处理每个 token 时关注输入序列的不同部分。它基于以下三个向量计算注意力分数:
- 查询(Query):表示注意力机制中输入序列中某个特定词或 token 的向量;
- 键(Key):对应输入序列中每个词或 token 的向量;
- 值(Value):与键相关联,用于构建注意力层的输出。当查询与键匹配良好(即注意力分数高)时,对应的值会在输出中被强调。
这种自注意力模块使模型能够从整个序列中捕获上下文信息。
具体流程如下:

矩阵乘法(MatMul)——查询与键的点积
查询、键和值向量经过线性层后,对查询和键进行点积矩阵乘法,生成得分矩阵。
该得分矩阵决定了每个词应对其它词给予多少关注。因此,每个词都会相对于序列中的其他词获得一个分数。分数越高,关注度越大。
此过程有效地将查询映射到对应的键。
作者绘图:注意力机制——矩阵乘法
缩放注意力得分
为确保梯度稳定,将得分除以查询和键向量维度的平方根。这是因为点积可能导致数值过大,影响训练稳定性。
作者绘图:注意力机制——缩放得分
对调整后的得分应用 Softmax
随后,对缩放后的得分应用 Softmax 函数,得到注意力权重。结果是介于 0 到 1 之间的概率值。Softmax 会放大高分、抑制低分,从而帮助模型更有效地判断哪些词应获得更多关注。
作者绘图:注意力机制——Softmax 调整得分
将 Softmax 结果与值向量结合
注意力机制的下一步是将 Softmax 得到的权重与值向量相乘,生成输出向量。
在此过程中,只有高 Softmax 分数的词会被保留。最终,该输出向量会送入一个线性层进行进一步处理。
作者绘图:注意力机制——Softmax 与值向量结合
至此,我们得到了注意力机制的输出!
那么,为什么叫多头注意力(Multi-Head Attention)呢?
回想一下,在整个过程开始前,我们将查询、键和值分别投影 h 次。这种自注意力过程在每个“头”(head)中独立进行。每个头独立生成一个输出向量。
这些输出向量通过一个最终的线性层融合,就像一个滤波器,微调它们的集体表现。其优势在于每个头可以学习不同的注意力模式,从而赋予编码器更丰富、多维的理解能力。
步骤 3.2:归一化与残差连接
编码器层中的每个子层(包括多头注意力和前馈网络)之后都进行归一化,并将子层输出与其输入相加(残差连接),以缓解梯度消失问题,支持更深的模型。
作者绘图:多头注意力后的归一化与残差连接
步骤 3.3:前馈神经网络(Feed-Forward Neural Network)
归一化后的残差输出进入一个逐位置前馈网络(pointwise feed-forward network),这是进一步精炼的关键阶段。
该网络由两个线性层组成,中间夹着一个 ReLU 激活函数。处理完成后,输出再次与前馈网络的输入相加(残差连接),然后进行第二次归一化,为下一步做好准备。
作者绘图:前馈神经网络子层
步骤 4:编码器输出
最终编码器层的输出是一组向量,每个向量都包含了对输入序列的丰富上下文理解。该输出将作为解码器的输入。
这种精心的编码为解码器指明方向,使其在解码时能关注输入中的正确词汇。
可以将编码器想象成一座塔,你可以堆叠 N 层。每一层都有机会探索和学习不同的注意力特征,就像知识的层层积累。这不仅丰富了理解,还可能显著提升 Transformer 网络的预测能力。
解码器工作流程
解码器的核心任务是生成文本序列。它与编码器结构相似,也包含类似的子层:两个多头注意力层、一个逐位置前馈层,并在每个子层后加入残差连接和层归一化。
作者绘图:解码器全局结构
这些组件的功能与编码器类似,但有两个关键区别:解码器中的每个多头注意力层都有其独特使命。
解码器流程的最后是一个线性层(充当分类器),再接一个 Softmax 函数,用于计算不同词的概率。
Transformer 解码器的结构专为逐步解码编码信息而设计。
需要注意的是,解码器以自回归(autoregressive)方式运行:它从一个起始 token 开始,巧妙地将先前生成的输出列表作为输入,同时结合来自编码器的富含注意力信息的输出。
这种解码过程持续进行,直到解码器生成一个表示输出结束的特殊 token。
步骤 1:输出嵌入(Output Embeddings)
解码器的起点与编码器类似:输入首先通过嵌入层。
步骤 2:位置编码(Positional Encoding)
嵌入之后,同样如编码器一样,输入经过位置编码层,生成位置嵌入。
这些位置嵌入随后送入解码器的第一个多头注意力层,用于计算解码器输入特有的注意力得分。
步骤 3:解码器层堆栈
解码器由多个相同层堆叠而成(原始模型中为 6 层)。每层包含三个主要子组件:
步骤 3.1:掩码自注意力机制(Masked Self-Attention Mechanism)
这与编码器中的自注意力机制类似,但有一个关键区别:它阻止当前位置关注后续位置,即序列中的每个词不会受到未来 token 的影响。
例如,在计算“are”的注意力得分时,必须确保“are”无法“看到”后面的“you”。
作者绘图:解码器第一层多头注意力的掩码
这种掩码确保某个位置的预测仅依赖于该位置之前已知的输出。
步骤 3.2:编码器–解码器多头注意力(或交叉注意力,Cross Attention)
在解码器的第二个多头注意力层中,编码器和解码器组件之间产生独特互动:编码器的输出作为键和值,而解码器第一层的输出作为查询。
这种设置有效对齐了编码器输入与解码器状态,使解码器能够识别并强调编码器输入中最相关的部分。
随后,该层的输出通过逐位置前馈层进一步精炼。
作者绘图:编码器–解码器注意力
在此子层中,查询来自前一层解码器,键和值来自编码器输出。这使得解码器的每个位置都能关注输入序列的所有位置,有效融合编码器与解码器的信息。
步骤 3.3:前馈神经网络
与编码器类似,每个解码器层都包含一个全连接前馈网络,对每个位置独立且相同地应用。
步骤 4:线性分类器与 Softmax 生成输出概率
数据在 Transformer 模型中的旅程最终通过一个线性层(充当分类器)完成。
该分类器的大小等于类别总数(即词汇表中的词数)。例如,若有 1000 个词,输出就是一个 1000 维的数组。
该输出随后送入 Softmax 层,转换为 0 到 1 之间的概率分数。概率最高的词即为模型预测的下一个词。
作者绘图:Transformer 最终输出
归一化与残差连接
每个子层(掩码自注意力、编码器–解码器注意力、前馈网络)后都进行归一化,并包含围绕子层的残差连接。
解码器输出
最后一层的输出被转换为预测序列,通常通过线性层加 Softmax 生成词汇表上的概率分布。
在运行过程中,解码器将新生成的输出加入其输入列表,继续解码过程。该循环重复进行,直到模型预测出表示结束的特殊 token(如 <EOS>)。
同样,解码器不限于单层。它可以由 N 层组成,每层都基于编码器输出和前一层的输出构建。这种分层架构使模型能够多样化其注意力焦点,在不同注意力头中提取不同的模式。
这种多层方法可显著增强模型的预测能力,因为它能更细致地理解各种注意力组合。
最终的完整架构如下图所示(源自原始论文):
作者绘图:原始 Transformer 结构
真实世界的 Transformer 模型
BERT
Google 于 2018 年发布的 BERT(Bidirectional Encoder Representations from Transformers)是一个开源 NLP 框架,通过其独特的双向训练彻底改变了 NLP。这使模型能从词的前后文全面理解上下文,从而更准确地预测下一个词。
BERT 在问答、歧义消解等任务上超越了以往模型。其核心使用 Transformer,动态连接每个输入和输出元素。
BERT 在 Wikipedia 上预训练后,在多种 NLP 任务中表现出色,促使 Google 将其集成到搜索引擎中,以更好地处理自然语言查询。这一创新引发了开发更先进语言模型的竞赛,极大推动了复杂语言理解能力的发展。
LaMDA
LaMDA(Language Model for Dialogue Applications)是 Google 开发的基于 Transformer 的模型,专为对话任务设计,于 2021 年 Google I/O 大会上发布。它旨在生成更自然、上下文相关的回复,提升各类应用中的用户体验。
LaMDA 的设计使其能理解并回应广泛的主题和用户意图,非常适合聊天机器人、虚拟助手等需要动态对话的交互式 AI 系统。
这种对对话理解和响应的专注,标志着 LaMDA 在 NLP 和 AI 驱动通信领域的重要进步。
GPT 与 ChatGPT
GPT 和 ChatGPT 由 OpenAI 开发,是先进的生成式模型,以生成连贯且上下文相关的文本而闻名。GPT-1 于 2018 年 6 月首次发布,而 GPT-3 于 2020 年推出,是最具影响力的模型之一。
这些模型擅长多种任务,包括内容创作、对话、语言翻译等。GPT 的架构使其生成的文本高度接近人类写作,在创意写作、客户服务甚至编程辅助等领域大有用武之地。ChatGPT 是针对对话场景优化的变体,在生成类人对话方面尤为出色,广泛应用于聊天机器人和虚拟助手。
其他变体
基础模型(尤其是 Transformer 模型)的生态正在迅速扩张。一项研究识别出超过 50 个重要的 Transformer 模型,而斯坦福团队评估了其中 30 个,承认该领域的快速发展。NLP Cloud(一家 NVIDIA Inception 计划成员的初创公司)在航空、制药等行业商业化使用约 25 个大型语言模型。
越来越多的模型走向开源,Hugging Face 的模型中心引领了这一趋势。此外,大量针对不同 NLP 任务的 Transformer 变体已被开发出来,展示了该模型在多样化应用中的灵活性和高效性。
基准测试与性能评估
对 NLP 中的 Transformer 模型进行基准测试和性能评估,需要系统化的方法来衡量其有效性与效率。
根据任务类型,评估方式有所不同:
机器翻译任务
在机器翻译任务中,可使用标准数据集如 WMT(Workshop on Machine Translation),其中包含多种语言对,各具挑战。
BLEU、METEOR、TER 和 chrF 等指标用于衡量准确性和流畅度。
此外,在新闻、文学、技术文本等不同领域测试,可确保翻译系统的适应性和通用性。
问答(QA)基准
评估 QA 模型时,使用专门的问答数据集,如 SQuAD(Stanford Question Answering Dataset)、Natural Questions 或 TriviaQA。
SQuAD 要求从给定文本中找出答案,而其他数据集更像开放式问答。
评估指标包括精确率(Precision)、召回率(Recall)、F1 分数,有时还包括精确匹配(Exact Match)分数。
自然语言推理(NLI)基准
在 NLI 任务中,使用 SNLI(Stanford Natural Language Inference)、MultiNLI 和 ANLI 等数据集。
这些数据集包含大量语言变体和棘手案例,用于测试模型是否能判断两个句子是蕴含、矛盾还是无关。
还需考察模型对代词指代、否定词(如“not”)、量化词(如“all”、“some”)等复杂语言现象的理解能力。
与其他架构的比较
在神经网络世界中,有两种主流结构常与 Transformer 比较:循环层(Recurrent Layers)和卷积层(Convolutional Layers)。它们各有优劣,适用于不同类型的数据处理。
循环层(Recurrent Layers)
循环层是 RNN 的核心,擅长处理序列数据。其优势在于能执行顺序操作,对语言处理或时间序列分析至关重要。在循环层中,前一步的输出会作为下一步的输入,形成循环机制,使网络能记住历史信息,这对理解序列上下文至关重要。
然而,如前所述,顺序处理带来两大问题:
- 训练时间长,因每步依赖前一步,难以并行;
- 存在梯度消失问题,难以学习长距离依赖。
Transformer 与使用循环层的架构有本质区别:它完全无循环。如前所述,Transformer 的注意力机制有效解决了上述问题,使其成为 NLP 应用中 RNN 的自然进化。
卷积层(Convolutional Layers)
卷积层是 CNN 的基础,以高效处理空间数据(如图像)著称。
这些层使用卷积核(滤波器)扫描输入数据以提取特征。通过调整卷积核宽度,网络可聚焦于不同尺度的特征。
虽然卷积层在捕捉空间层次结构和模式方面非常出色,但在处理长距离依赖时存在挑战。它们本身不考虑序列顺序,因此不适合需要理解序列上下文的任务。
因此,CNN 和 Transformer 适用于不同类型的数据和任务:CNN 主导计算机视觉领域,而 Transformer 是复杂序列任务(尤其是 NLP)的首选。
结论
总之,Transformer 已成为人工智能和 NLP 领域的一项里程碑式突破。
通过其独特的自注意力机制高效处理序列数据,这些模型已超越传统 RNN。它们能更高效地处理长序列,并通过并行化显著加速训练。
Google 的 BERT 和 OpenAI 的 GPT 系列等先驱模型,充分展示了 Transformer 在增强搜索引擎和生成类人文本方面的变革性影响。
因此,Transformer 已成为现代机器学习不可或缺的组成部分,不断推动 AI 边界,开启技术进步的新篇章。