type
status
date
slug
summary
tags
category
icon
password
comment
引言
加州长滩——2017年,一篇名为《Attention Is All You Need》的论文在神经信息处理系统大会(NIPS,现称为NeurIPS)上发表,首次提出了Transformer模型,为人工智能领域,特别是自然语言处理(NLP)带来了革命性的变革。
这篇具有里程碑意义的论文由谷歌公司的研究人员Ashish Vaswani、Noam Shazeer、Niki Parmar、Jakob Uszkoreit、Llion Jones、Aidan N. Gomez、Łukasz Kaiser和Illia Polosukhin共同撰写。他们提出了一种全新的架构,完全摒弃了以往在序列到序列(sequence-to-sequence)模型中占主导地位的循环神经网络(RNN)和卷积神经网络(CNN)结构。
Transformer模型的核心创新在于其“自注意力机制”(self-attention mechanism)。该机制允许模型在处理输入序列时,能够同时权衡序列中所有单词的重要性,从而更有效地捕捉长距离依赖关系。与RNN一次处理一个单词的顺序方式不同,Transformer的并行处理能力极大地提高了训练效率,并使其能够处理更长的文本序列。
论文的摘要精辟地指出了其贡献:“我们提出了一种新的简单网络架构——Transformer,它完全基于注意力机制,完全摒弃了循环和卷积。” 实验结果表明,该模型在机器翻译任务上不仅取得了更优的翻译质量,而且训练时间显著缩短,并行化程度更高。
自提出以来,Transformer架构已成为现代NLP领域几乎所有顶尖模型的基础,包括著名的GPT(Generative Pre-trained Transformer)系列、BERT(Bidirectional Encoder Representations from Transformers)以及当今众多大型语言模型(LLM)。其影响力已远远超出了最初的机器翻译领域,广泛应用于文本摘要、问答系统、代码生成等多种任务,深刻地塑造了人工智能技术的发展轨迹。本文主要目的就是介绍Transformer架构
概述Transformer架构位置编码解读Encoder架构输入部分注意力机制基本注意力机制Transformer中的注意力机制注意力机制 (Attention Mechanism)多头注意力机制 (Multi-Head Attention)总结:注意力 vs. 多头注意力残差和Laynorm残差连接 (Residual Connection)层归一化 (Layer Normalization)作用与优势Add & Norm: 两者的结合Batch Normal批归一化 (Batch Normalization, BN)层归一化 (Layer Normalization, LN)总结对比Decoder架构Transformer 解码器的整体结构解码器各子层详解解码器的整体工作流程(自回归生成过程)总结
概述Transformer架构
- Transformer到底在做一件什么事情?

从一个输入
我爱你
,经过transformer这样一个黑盒,翻译成输出I LOVE YOU
- 打开黑盒
- 第一步:
- 第二步:

transformer拆成编码-解码结构,结构类似于seq2seq结构

Encoders和Decoders中包含多个Encoder和Decoder。每个Encoder架构相同,但参数不同,训练时候都在训练;每个Decoder架构相同,但参数不同,训练时候都在训练
- Transformer原始架构
- 注意Encoder和Decoder都是的,说明有个Encoder和Decoder
- Encode和Decoder架构是不同的
- Decoder比Encoder多了一个掩盖的多头注意力机制

位置编码解读
Encoder架构

输入部分
- Embedding
- 输入句子为我爱你……(12个字),按照字切分,每个字对应一个512维字向量,可以用word2vec/随机初始化

- 位置嵌入
- 这里引入RNN:
- 引入位置编码
- 偶数位置使用sin,奇数位置使用cos得到位置编码
- 位置编码与Embedding相加得到最终编码作为transformer的输入
为什么需要位置编码?

RNN结构图中左侧
U、V、W
是一套参数,右图予以展示,这些U、V、W
共享一套参数。处理是有先后顺序的,而transformer可以并行处理,但是缺少了前后关系
为什么位置嵌入会有用?

问题:RNN梯度消失有什么不同?
- 不同点
- 普通神经网络(如MLP):梯度消失意味着在深层网络中,靠近输入层的网络层的梯度会变得非常小,几乎为零。这导致这些层的参数无法得到有效的更新,整个网络的训练都会非常困难。可以说,整个梯度都消失了。
- 循环神经网络(RNN):RNN的梯度消失具有其特殊性,它指的是远距离的梯度消失,而近距离的梯度并不会消失。RNN的梯度是由每个时间步的梯度累加而成的。在反向传播过程中,梯度会随着时间步的推移而连乘。对于距离当前时间步较远的过去状态,梯度会因为连乘效应而变得非常小,几乎消失。但是,对于距离当前时间步较近的过去状态,其梯度是存在的,并且会主导总的梯度。
关键点:RNN的总梯度并不会完全消失,而是被“近距离梯度”所主导,导致模型难以学习到“远距离依赖”关系。模型只能“记住”最近发生的事情,而忘记了很久以前的信息。
- 原因
- 普通神经网络:梯度消失通常是由于网络深度过深以及激活函数(如Sigmoid)的导数小于1所导致的。在反向传播过程中,梯度会经过多个小于1的数连乘,导致梯度呈指数级衰减。
- 循环神经网络:RNN梯度消失的根本原因在于其参数共享的特性和时间序列上的连乘效应。RNN在所有时间步都使用同一套权重矩阵。在反向传播计算梯度时,涉及到对这个共享权重矩阵的多次连乘。如果这个权重矩阵的范数小于1,那么随着时间步的增加,梯度就会迅速衰减。
- 影响的差异
- 普通神经网络:梯度消失会导致整个网络训练停滞,模型无法收敛。
- 循环神经网络:梯度消失主要影响模型捕捉长期依赖的能力。模型可以很好地处理短序列任务,但在需要理解和记忆长序列中早期信息的任务上表现不佳。例如,在处理一篇长文章时,模型可能无法将文章开头的信息与结尾的内容联系起来。
特征 普通神经网络(如MLP) 循环神经网络(RNN) 梯度消失含义 整个梯度趋近于零 远距离梯度消失,近距离梯度正常,总梯度被近距离主导 根本原因 网络深度过深、激活函数导数小于1 参数共享机制下,时间序列上的连乘效应 主要影响 整个网络训练困难,无法收敛 难以学习长距离依赖,只能处理短序列
注意力机制
基本注意力机制
当我们用深度 CNN 模型识别图像时,一般是通过卷积核去提取图像的局部信息,然而,每个局部信息对图像能否被正确识别的影响力是不同的,如何让模型知道图像中不同局部信息的重要性呢?答案就是注意力机制。

视觉注意力机制是人类大脑的一种天生的能力。当我们看到一幅图片时,先是快速扫过图片,然后锁定需要重点关注的目标区域。比如当我们观察上述图片时,注意力很容易就集中在了人脸、文章标题和文章首句等位置。
试想,如果每个局部信息都不放过,那么必然耗费很多精力,不利于人类的生存进化。同样地,在深度学习网络中引入类似的机制,可以简化模型,加速计算。
另外,利用循环神经网络去处理 NLP 任务时,长距离“记忆”能力一直是个大难题,而引入“注意力机制”也能有效缓解这一问题。
Transformer中的注意力机制
注意力机制 (Attention Mechanism)
在 Transformer 的背景下,我们通常讨论的是其内部使用的 “缩放点积注意力”(Scaled Dot-Product Attention),这是一种自注意力机制。
- 核心思想
- 想象一下你在阅读一个句子:“The animal didn't cross the street because it was too tired.”为了理解代词 “it” 指的是什么,你的大脑会自然地将注意力更多地放在 “animal” 上,而不是 “street”。自注意力机制就是模仿这种行为,让模型在处理一个单词时,能够评估句子中所有其他单词对它的“重要性”或“相关性”,并根据这些重要性得分来更好地理解当前单词的含义。
- 它通过三个关键的角色来实现这一点,这三个角色都是从每个单词的输入嵌入向量(embedding)生成的:
- 查询(Query, ): 代表当前正在处理的单词。可以看作是这个单词发出的一个“提问”,比如:“句子里的哪些词和我最相关?”
- 键(Key, ): 代表句子中所有可以被“查询”的单词。可以看作是每个单词的“标签”或“索引”,用来和查询进行匹配。
- 值(Value, ): 代表每个单词本身所包含的真正信息。一旦查询()通过与键()匹配找到了相关单词,我们就从这些相关单词的值()中提取信息。
- 公式:
- 计算过程
自注意力的计算过程可以分为三个步骤:
- 计算注意力分数(Attention Score)
为了确定每个单词对当前单词的重要性,我们将当前单词的查询向量()与句子中所有单词的键向量()进行点积运算。这个分数衡量了查询和键之间的相似度。 和 的维度通常是相同的,我们称之为 。
- 缩放与归一化
点积的结果可能会变得非常大,导致梯度在反向传播时过小,不利于训练。因此,论文作者提出将其除以一个缩放因子,即键向量维度 的平方根 。
然后,将缩放后的分数通过一个 函数,将其转换为总和为 1 的概率分布。这些概率就是注意力权重(Attention Weights),代表了在当前查询下,应该给每个单词的值()分配多少注意力。
- 加权求和
最后,将每个单词的值向量()与其对应的注意力权重相乘,然后将所有加权后的值向量相加。结果就是当前单词的新的、融合了全局上下文信息的表示。
- 在只有单词向量的情况下如何获取

多头注意力机制 (Multi-Head Attention)
虽然单个自注意力机制很强大,但它可能只学会关注一种类型的相关性。例如,在处理 “The animal didn't cross the street because it was too tired” 时,一个注意力机制可能学会了关注指代关系("it" -> "animal"),但可能忽略了其他类型的关系。
- 核心思想
- 多头注意力机制通过并行运行多个独立的注意力“头”(Head)来解决这个问题。这好比让多位专家从不同的角度独立审视同一个句子,然后综合所有专家的意见,得到一个更全面、更丰富的理解。
- 每个“头”都学习关注输入序列的不同方面。例如:
- 一个头可能关注语法结构。
- 另一个头可能关注动词和主语之间的关系。
- 还有一个头可能关注长距离的依赖关系。
- 计算过程
多头注意力的计算过程如下:
第一步:线性投影
将原始的查询()、键()和值()矩阵分别通过多个独立的线性变换(即乘以不同的权重矩阵),为每一个“头”生成一套专属的、维度更小的 ''、''、''。例如,如果有 8 个头,那么原始的 会被分别投影 8 次。
第二步:并行计算注意力
让每一个“头”都在其专属的 '', '', '' 上独立地执行一次“缩放点积注意力”计算。由于这些计算是并行的,所以不会增加太多计算时间。每个头都会输出一个结果矩阵。
第三步:拼接与再次投影
将所有头的输出结果拼接(Concatenate)在一起。然后,将这个拼接后的大矩阵再通过一次线性变换(乘以一个最终的权重矩阵 ),将其投影回模型期望的原始维度。这一步融合了所有头学到的不同信息。
其公式可以表示为:
其中,每个头是:
这里, 和 都是在训练过程中学习到的参数矩阵。
公式来源: "Attention Is All You Need" 论文
总结:注意力 vs. 多头注意力
特性 | 注意力机制 (单头) | 多头注意力机制 |
关注点 | 学习一种单一的相关性模式。 | 同时学习多种不同的相关性模式。 |
表示能力 | 对不同类型的信息进行平均,可能会丢失细微差别。 | 允许模型在不同的“表示子空间”中捕捉信息,能力更强,表示更丰富。 |
实现方式 | 直接在完整的Q, K, V上计算。 | 将Q, K, V拆分到多个“头”,并行计算后,再将结果融合。 |
鲁棒性 | 如果单一的注意力模式学习得不好,会影响整体性能。 | 多个头并行工作,降低了对任何单个头的依赖,模型更加鲁棒。 |
残差和Laynorm

残差连接 (Residual Connection)
残差连接,也称为“捷径连接”(Shortcut Connection),最早由 Kaiming He 等人在其著名的论文《Deep Residual Learning for Image Recognition》(ResNet) 中提出。
- 核心思想
想象一下,你正在训练一个非常深的网络。理论上,更深的网络应该能学习到更复杂的特征,效果也应该更好。但实践中却出现了“网络退化”(Degradation)问题:当网络层数增加到一定程度后,模型的准确率反而会下降。
残差连接的核心思想是:与其让一个网络层直接学习一个复杂的目标映射 ,不如让它学习这个映射与输入 之间的差异,即残差 。
这样,原始的目标映射就变成了 。这个 的操作就是残差连接。
来源: ResNet 论文
- 作用与优势
- 解决梯度消失/爆炸问题:在反向传播时,梯度需要穿过很多层才能回到浅层。在没有残差连接的情况下,每经过一层,梯度都可能因乘以一个小于1的权重而逐渐变小(梯度消失),或大于1而变大(梯度爆炸)。残差连接中的 操作为梯度提供了一条“高速公路”。梯度可以直接通过这个恒等连接(identity path)从深层传到浅层,而不会在经过非线性激活函数时被削弱,极大地缓解了梯度消失问题。
- 解决网络退化问题:残差连接使得模型学习变得更容易。在最坏的情况下,如果增加的层没有任何作用,模型只需要将残差部分 的权重学成 0,那么这一层就变成了恒等映射(),输出与输入完全相同。这意味着增加新的层至少不会让网络性能变差,从而解决了网络退化问题。
- 简化学习过程:模型不再需要从零开始学习一个完整的映射,而是在一个已有特征(输入 )的基础上,学习如何对它进行“微调”或“修正”(残差 ),这通常比学习一个全新的复杂函数要简单得多。
层归一化 (Layer Normalization)
层归一化是由 Jimmy Lei Ba 等人提出的,旨在解决批归一化(Batch Normalization)在某些场景下的局限性,特别是在循环神经网络(RNN)和 Transformer 这类变长序列模型中。
- 核心思想
归一化的基本目标是将网络中每一层的数据分布调整为均值为0、方差为1的标准正态分布,从而稳定训练过程。与批归一化(Batch Normalization)在批次维度上计算均值和方差不同,层归一化是在单个样本的特征维度上进行计算。
具体来说,对于一个样本的特征向量(例如 Transformer 中一个 token 的 embedding 向量),LayerNorm 会计算这个向量内部所有元素的均值和方差,然后用它们来归一化这个向量。
- 计算过程
对于单个样本的输入向量 ,LayerNorm 的计算如下:
计算均值 () 和方差 ():在特征维度上计算
归一化:
其中 是一个很小的常数,防止分母为零。
缩放与平移:为了保持模型的表达能力,引入两个可学习的参数:增益(gain) 和偏置(bias)
和 在训练过程中被学习,允许网络自行决定归一化后的数据应该处于什么样的分布,甚至可以将被归一化的数据还原回原始状态(如果模型发现这才是最优的)。
作用与优势
- 稳定训练过程:通过将每层输入调整到稳定的分布,可以平滑损失函数的“地形”,使得梯度下降更加容易,从而加速模型收敛。
- 对批次大小不敏感:LayerNorm 的计算完全在单个样本内部进行,不依赖于批次中的其他样本。因此,它在批次大小很小(例如为1)或者在测试阶段都表现稳定。这对于处理长度不一的序列数据的 Transformer 至关重要。
- 天然适用于序列数据:在 Transformer 中,每个 token 的 embedding 向量在经过自注意力或前馈网络后,其尺度可能会发生剧烈变化。LayerNorm 可以独立地对每个 token 的输出向量进行归一化,使其保持稳定。
Add & Norm: 两者的结合
在 Transformer 中,残差连接和层归一化总是成对出现,构成一个 "Add & Norm" 模块。这个模块的结构如下:
这里的 指的是一个子层,例如多头注意力层(Multi-Head Attention)或前馈神经网络(Feed-Forward Network)。
来源: "Attention Is All You Need" 论文
这个组合的强大之处在于:
- Add (残差连接):保证了信息和梯度能够顺畅地在深层网络中流动,让模型专注于学习对输入的“增量修改”。
- Norm (层归一化):在残差连接之后立即对结果进行归一化,可以稳定经过加法操作后可能变得“杂乱”的数据分布,为下一个子层的计算提供一个“干净”、规范化的输入。
这种 “先加后归一” (Post-LN) 的结构是原始 Transformer 论文中的设计。后来也有研究提出了 “先归一后加” (Pre-LN) 的结构(),它被认为能进一步稳定训练,尤其是在训练非常深的模型时。但无论哪种结构,残差连接和层归一化的协同作用都是 Transformer 能够成功训练深层结构的关键。
Batch Normal
在自然语言处理(NLP)领域,批归一化 (Batch Normalization, BN) 和 层归一化 (Layer Normalization, LN) 都是用来稳定和加速深度神经网络训练的关键技术。它们的核心目标是解决“内部协变量偏移”(Internal Covariate Shift)问题,即在训练过程中,网络各层输入的分布会不断变化,导致模型训练困难。
然而,由于NLP任务(尤其是基于RNN和Transformer的模型)的数据特性,层归一化(LN)的应用远比批归一化(BN)更为普遍和成功。
下面详细解释这两种技术及其在NLP中的应用和区别。
批归一化 (Batch Normalization, BN)
- 工作原理
- 计算维度:对于一个形状为
[批次大小 N, 序列长度 L, 特征维度 D]
的张量,BN 会在N
这个维度上计算均值和方差。它会为L * D
个特征中的每一个都计算出一个均值和方差。 - 优点:在计算机视觉(CV)领域,BN 效果卓越,能够极大地加速模型收敛,并允许使用更高的学习率。
- 依赖性:BN 的计算强依赖于批次数据。它假设批次内的样本是独立同分布的,并且批次大小足够大,以便计算出的均值和方差能够近似代表整个数据集的分布。
BN 在批次(Batch)维度上进行归一化。对于一个批次的数据,BN会计算每一个特征(或神经元)在该批次中所有样本的均值和方差,然后用这两个值来对该特征进行归一化。
- 在NLP中的困境
- 对可变长度序列不友好:NLP任务的输入通常是长度不一的句子。为了组成一个批次,需要对短句进行填充(Padding)。BN在计算均值和方差时,如果包含了这些无意义的填充符,会引入噪声,影响归一化效果。
- 对小批次大小敏感:由于GPU显存的限制,大型NLP模型(如Transformer)的批次大小(Batch Size)通常设置得很小。在小批次上计算的均值和方差波动很大,无法稳定地代表全体数据的分布,导致模型性能下降。
- 训练和推理的不一致:BN在训练时使用当前批次的统计量,而在推理时使用在整个训练集上估算的全局统计量(通过移动平均计算)。这种不一致性,尤其是在分布变化剧烈的NLP任务中,会损害模型的泛化能力。
尽管BN在CV领域大获成功,但在NLP中却遇到了几个关键问题:
层归一化 (Layer Normalization, LN)
- 工作原理
- 计算维度:对于一个形状为
[N, L, D]
的张量,LN 会在D
这个维度上计算均值和方差。也就是说,对于每一个样本(句子中的每一个词),LN都会独立地计算其所有特征的均值和方差,并进行归一化。 - 优点:计算独立于批次大小,对可变长度序列友好。
- 核心应用:LN是Transformer模型架构的标配。在每个子层(如多头注意力和前馈网络)之后,都会有一个“Add & Norm”模块,其中的“Norm”就是指Layer Normalization。
为了解决BN在NLP中的问题,LN应运而生。它在特征(Feature)维度上进行归一化,完全不依赖于批次中的其他样本。
- 在NLP中的优势
- 独立于批次大小:无论批次大小是1还是100,LN的计算方式都完全一样,性能稳定。这对于需要小批次训练的大型Transformer模型至关重要。
- 对可变长度序列友好:由于归一化是在单个词向量内部进行的,因此句子的不同长度和填充符不会对归一化过程产生负面影响。
- 训练和推理行为一致:LN在训练和推理时都使用当前输入样本自身的统计量,不存在不一致的问题,使得模型表现更加稳定。
- 稳定训练过程:通过对每一层的输出进行归一化,LN确保了数据在深层网络中传递时不会出现剧烈变化,从而稳定了训练过程,使得训练非常深的模型成为可能。
LN完美地契合了NLP任务的需求:
总结对比
特性 | 批归一化 (Batch Normalization, BN) | 层归一化 (Layer Normalization, LN) |
归一化维度 | 批次维度 (Batch) | 特征维度 (Feature/Layer) |
计算依赖 | 依赖批次内所有样本 | 仅依赖单个样本 |
对批次大小 | 敏感,小批次下性能下降 | 不敏感,在任何批次大小下都稳定 |
对序列长度 | 对可变长度和填充符敏感 | 不受序列长度和填充符影响 |
训练/推理 | 行为不一致 | 行为一致 |
主要应用领域 | 计算机视觉 (CV) | 自然语言处理 (NLP),尤其是Transformer |
Decoder架构

好的,我们来详细讲解一下 Transformer 模型中负责生成最终输出的解码器(Decoder)模块。
如果说编码器(Encoder)的任务是理解输入(比如,阅读并理解一个英文句子),那么解码器的任务就是生成输出(比如,将理解后的内容翻译成中文)。解码器是一个自回归(Auto-regressive)的结构,这意味着它一次只生成一个词(token),并将已生成的词作为下一步生成的基础。
Transformer 解码器的整体结构
一个完整的解码器由 N 个相同的解码器层(Decoder Layer)堆叠而成。每个解码器层都包含三个核心子层,以及包裹它们的残差连接和层归一化(Add & Norm)。
这三个核心子层是:
- 带掩码的自注意力层(Masked Multi-Head Self-Attention)
- 编码器-解码器注意力层(Encoder-Decoder Cross-Attention)
- 前馈神经网络层(Feed-Forward Network)
解码器各子层详解
- 带掩码的多头自注意力层 (Masked Multi-Head Self-Attention)
这个层的功能与编码器中的自注意力层非常相似,都是为了让序列中的每个词能够关注到序列中的其他词,从而更好地理解上下文。但它有一个至关重要的区别:引入了掩码(Masking)。
- 为什么需要掩码?
解码器是用来生成序列的。在生成第 t 个词时,模型只能看到第 1 到 t-1 个已经生成的词,而不能看到未来的第 t+1 个及以后的词。如果模型在训练时能够“偷看”到完整的答案,它就会简单地学会复制,而无法真正学习到如何根据已有信息进行预测。
- 如何实现掩码?
掩码是一个上三角矩阵,通常对角线以上的位置为 True 或一个极大的负数(如 ),其他位置为 False 或 0。在计算注意力分数(Softmax之前)时,这个掩码会被应用到注意力得分矩阵上。被掩盖的位置在经过 Softmax 运算后,其权重会趋近于 0,从而确保了在计算任意位置的输出时,都不会包含来自未来的信息。
举例:在预测 "我 爱 你" 中的 "你" 时,模型只能关注 "我" 和 "爱",而不能关注到 "你" 自己或其后的任何信息。
- 编码器-解码器注意力层 (Encoder-Decoder Cross-Attention)
这是连接编码器和解码器的桥梁,也是解码器获取输入信息并进行“翻译”或“回答”的关键所在。
- 工作原理:
- 查询 ():来自解码器前一个子层(即带掩码的自注意力层)的输出。这个查询可以被理解为解码器在问:“根据我已经生成的部分内容,我现在应该关注输入句子的哪些部分?”
- 键 () 和 值 ():均来自编码器的最终输出。这代表了编码器对整个输入序列的完整理解。
与自注意力(Self-Attention)不同,交叉注意力(Cross-Attention)的查询(Query, )、键(Key, )和值(Value, )来自不同的源头:
- 作用:
通过这个机制,解码器在生成每个词时,都能够动态地将注意力集中在输入序列中最相关的部分。
举例:在将 "The cat sat on the mat" 翻译成 "猫坐在垫子上" 的过程中,当解码器准备生成 "猫" 时,它的查询向量会与编码器输出的 "The" 和 "cat" 的键向量计算出较高的相似度,从而更多地从这两个词的值向量中提取信息来生成 "猫"。
- 前馈神经网络层 (Feed-Forward Network)
这个子层与编码器中的前馈网络完全相同。它由两个线性变换和一个 ReLU 激活函数组成。它的作用是对注意力层输出的信息进行进一步的非线性加工和提炼,增强模型的表达能力。
解码器的整体工作流程(自回归生成过程)
解码器生成输出是一个逐词(token-by-token)的迭代过程:
- 起始输入:在生成过程的开始(第1步),解码器的输入通常是一个特殊的起始符(如
<BOS>
或<SOS>
)。
- 第一步生成:
<BOS>
符经过嵌入层和位置编码,输入到第一个解码器层。- 在带掩码的自注意力层中,由于只有一个输入,它能做的事情有限。
- 在编码器-解码器注意力层中,
<BOS>
的向量作为查询(),去关注编码器输出的 K 和 ,找到与开始生成最相关的输入信息。 - 经过前馈网络层后,最终的输出通过一个线性层 (Linear) 和一个 Softmax 层,预测出整个词汇表中每个词的概率。
- 概率最高的词(或通过采样选择的词)被选为第一个生成的词,例如“猫”。
- 后续步骤:
- 在第2步,解码器的输入是
<BOS>
和上一步生成的“猫”。 - 这两个词的序列会再次经过解码器。在带掩码的自注意力层中,“猫”可以关注到
<BOS>
,“猫”和<BOS>
都可以更新自己的表示。 - 在编码器-解码器注意力层中,更新后的“猫”和
<BOS>
的向量作为查询(Q),再次去关注编码器的输出,寻找下一步生成所需的信息。 - 经过后续层,模型预测出第二个词,例如“坐”。
- 循环与终止:这个过程不断重复,直到解码器生成一个特殊的结束符(如
<EOS>
),或者达到预设的最大长度,标志着序列生成完毕。
总结
Transformer 的解码器模块通过一个精巧的三层结构,实现了强大的序列生成能力:
- 带掩码的自注意力:让解码器理解已经生成的内容的内部依赖关系,同时保证生成过程的因果性(不看未来)。
- 编码器-解码器注意力:充当翻译的桥梁,让解码器能够根据原始输入和已生成内容,决定下一步应该生成什么。
- 前馈网络:对信息进行深度加工和提炼。
- 作者:Samuel Hu
- 链接:http://www.hjw-aihub.cn/technology/transformer
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。