上一篇博客,我介绍了一下Transformer整体架构,接下来我来深入分析一下 Transformer 中各个子模块的作用及其在整个模型中的关键功能。Transformer 模型的成功依赖于它的各个子模块协同工作,下面详细解释每个模块的角色及其实现的功能。
1. 输入嵌入层(Input Embedding Layer)
作用:
-
将输入序列中的每个单词或符号映射到一个高维的稠密向量空间中。每个词或符号会被转换为一个固定维度的向量,这样模型就能够操作这些数字化的表示。
-
这一步通过查找词嵌入矩阵(Embedding Matrix)完成。
细节:
-
输入嵌入层的维度通常是一个超参数,决定了每个词的表示维度(例如 512、1024 维等)。它使得离散的词汇(例如英语的词汇)能够在一个连续的向量空间中表示,从而便于进行计算和训练。
2. 位置编码(Positional Encoding)
作用:
-
Transformer 本身并没有显式的顺序信息,因为它完全基于并行计算的自注意力机制(Self-Attention),而并行计算不依赖于时间步顺序。因此,必须通过 位置编码 来让模型了解输入序列中词语的位置或顺序。
细节:
-
位置编码 是一种向量,表示词汇在输入序列中的位置。通常使用正弦和余弦函数来生成这些编码,它们具有不同的周期性,可以捕捉词汇在序列中的相对和绝对位置。
-
这些位置编码与输入的词嵌入加和,成为最终的输入表示。由于编码是可训练的,它让模型能够灵活地捕捉到每个词的相对顺序。
数学形式:
其中,pospos 是位置索引,ii 是嵌入维度的索引,dd 是嵌入的维度。
3. 自注意力机制(Self-Attention)
作用:
-
自注意力机制 是 Transformer 的核心创新之一,它能够让模型在处理每个词时,动态地关注输入序列中其它所有位置的信息。这种机制使得模型能够捕捉到全局的上下文信息。
细节:
-
在自注意力机制中,输入的每个词被转换为三个向量:查询(Query)、键(Key)、值(Value)。
-
每个词的查询向量会与其它所有词的键向量进行点积运算,得到一个注意力分数,然后用这个分数对值向量加权求和,得到每个词的新的表示。
计算步骤:
-
查询(Query)、键(Key)和值(Value) 由输入嵌入向量生成,通过乘以训练的权重矩阵得到。
-
计算 注意力得分,即查询与所有键的相似度,通常通过点积来实现。
-
对注意力得分进行 softmax 操作,使得得分值成为一个概率分布(归一化)。
-
使用归一化后的注意力得分加权值向量,从而得到输出向量。
公式:
其中 Q, K, V 分别是查询、键和值,dk是键的维度。
多头注意力(Multi-Head Attention):
-
多头注意力 将查询、键、值向量分成多个不同的“头”,并行计算多个注意力表示,然后将这些结果拼接起来。这样做的好处是,模型可以从不同的子空间中提取出更多样化的特征信息。
4. 前馈神经网络(Feed-Forward Network)
作用:
-
在每个编码器和解码器的层中,注意力层的输出会通过一个前馈神经网络(FFN)。FFN 是由两个全连接层组成的网络,帮助模型引入非线性映射能力。
细节:
-
前馈神经网络通常包括:
-
一个全连接层将输入维度扩展(例如将 512 维嵌入扩展到 2048 维)。
-
一个 ReLU 激活函数 使得网络能够引入非线性。
-
第二个全连接层将维度压缩回原始维度(例如从 2048 维压缩回 512 维)。
-
-
该过程使得每个位置的表示能够进行进一步的转换和增强,从而为下一层提供更丰富的特征。
5. 层归一化(Layer Normalization)与残差连接(Residual Connection)
作用:
-
为了避免梯度消失或爆炸问题并加速训练,Transformer 在每个子模块(自注意力层、前馈网络)之后都使用了 残差连接 和 层归一化。
细节:
-
残差连接:每个子模块的输出加上输入本身(即跳过该层的计算),确保信息的流动不会因为多层网络而丢失。
-
层归一化:对每一层的输出进行归一化,确保每一层的输出具有相似的均值和方差,这有助于稳定训练过程。
公式:
其中,Sublayer(x)是当前子模块的输出。
6. 解码器中的编码器-解码器注意力(Encoder-Decoder Attention)
作用:
-
在解码器中,除了自注意力和前馈网络外,还有一个重要的部分,即 编码器-解码器注意力。
-
该模块的作用是让解码器在生成每个词时,能够关注编码器生成的上下文信息,确保解码器的每个输出都能够依据输入序列中的相关部分进行生成。
细节:
-
在这个模块中,解码器的查询向量与编码器的键值对进行计算,获取编码器输出的信息。
-
这种跨层的注意力机制使得解码器能够在生成每个词时,参考整个输入序列的表示。
7. 输出层(Output Layer)
作用:
-
最终,解码器输出经过一个线性变换层,转换为词汇表大小的向量。
-
然后,经过 softmax 层进行归一化,生成每个词汇的概率分布。
细节:
-
该层的作用是将解码器输出的高维表示映射到目标词汇空间,用于进行分类或生成任务。
总结:
-
输入嵌入 和 位置编码 为模型提供了初步的表示。
-
自注意力机制 是 Transformer 的核心,允许模型在处理每个词时关注整个序列的信息。
-
前馈神经网络 提供了非线性变换能力,帮助模型增强表示能力。
-
层归一化 和 残差连接 使得模型训练更加稳定。
-
解码器中的编码器-解码器注意力 使得解码器能够根据编码器的输出进行合理的生成。
各子模块的协作使得 Transformer 能够有效捕捉长范围依赖、并行处理、以及灵活的任务适应能力,这也是它在 NLP 和其它领域中成功应用的原因。