论文笔记 - Attention Is All You Need
1. Information
Title: Attention Is All You Need
Link: Transformer
Source: Conference on Neural Information Processing
Systems (NeurIPS)
Date: 2017
2. Summary
本文提出了 Transformer 模型,这是一种用于序列转换任务(特别是机器翻译)的新型深度学习架构。Transformer 的核心创新是自注意力机制,该机制使得模型能够高效地处理序列数据,而不依赖于循环神经网络(RNN)或卷积神经网络(CNN)。该模型在编码和解码阶段均使用自注意力和前馈神经网络,显著提高了并行化能力,减少了训练时间。实验结果表明,Transformer 在机器翻译任务中超越了基于 LSTM 和 GRU 的传统模型,取得了更好的性能。
3. Background
在 Transformer 提出之前,序列到序列任务(如机器翻译)通常由循环神经网络(RNN)及其改进版本(如 LSTM 和 GRU)来处理。这些模型是逐步处理数据,因此存在并行化难度,长依赖关系的处理也存在瓶颈。卷积神经网络(CNN)在某些序列处理任务中也有应用,但它们在捕捉长程依赖关系时的能力较弱。
4. Research Objective
本文的研究目标是提出一种新的模型架构,能够在不依赖循环或卷积层的情况下高效处理序列转换任务,尤其是机器翻译。具体目标包括:
- 设计一个易于并行化的模型,从而提高训练效率。
- 开发一个能够捕捉长程依赖关系的模型,不受传统RNN模型的限制。
- 证明该模型在标准基准任务中超越传统RNN模型的表现。
5. Method
5.1 自注意力机制(Self-Attention)
自注意力机制是 Transformer 的核心创新之一。它允许模型在处理每个输入位置时,对序列中所有位置的其他元素进行加权求和,从而捕捉词语间的依赖关系。自注意力机制通过计算每个词与其他词之间的相似度,来决定其在表示中的重要性。
计算过程
自注意力机制的关键计算过程可以通过以下三个向量来描述:
- Query(查询向量):代表当前词需要从其他词中获取信息的“查询”。
- Key(键向量):表示当前词的特征,用于与查询进行比较。
- Value(值向量):包含关于当前词的实际信息,用于加权求和。
具体公式如下: \[ \operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V \]
- \(Q\) 是查询矩阵,\(K\) 是键矩阵,\(V\) 是值矩阵。
- \(d_k\) 是键向量的维度。
- \(Q K^T\) 计算查询和键之间的点积相似度,然后通过 \(\sqrt{d_k}\) 进行缩放,以防止点积值过大。
- 经过 softmax 操作后,获得的权重矩阵用于对值向量 \(V\) 进行加权求和。
这个公式的核心思想是通过对每个词的查询向量与所有其他词的键向量进行点积,得到一个权重分布,再利用该权重对值向量进行加权和求和,从而得到每个词的新的表示。
5.2 多头注意力机制(Multi-Head Attention)
多头注意力机制是对自注意力的扩展,它通过多个并行的自注意力计算来捕捉输入序列中的不同特征。每个注意力头(head)学习一个不同的投影,从不同的角度来关注输入序列中的各个部分。
具体操作如下:
- 输入的查询、键和值分别被映射到多个不同的子空间,每个子空间对应一个注意力头。
- 每个注意力头独立计算自注意力(如上述公式所示),得到一个加权的表示。
- 最后,将所有头的输出拼接在一起,并通过一个线性变换来得到最终的输出。
多头注意力机制的公式如下: \[ \operatorname{MultiHead}(Q, K, V)=\operatorname{Concat}\left(\operatorname{head}_1, \ldots, \text { head }_h\right) W^O \] 其中,\(\operatorname{head}_i=\operatorname{Attention}\left(Q W_i^Q, K W_i^K, V W_i^V\right)\),表示第 \(i\) 个注意力头的计算过程。
- \(W_i^Q, W_i^K, W_i^V\) 是用于映射查询、键、值的权重矩阵。
- \(W^O\) 是输出映射的权重矩阵。
通过这种方式,模型能够并行地关注输入序列的不同部分,并从多角度提取信息。
5.3 位置编码(Positional Encoding)
由于 Transformer 没有像 RNN 那样的序列顺序处理机制,因此需要引入位置编码来保持序列中每个单词的位置信息。位置编码将每个词的位置映射为一个向量,并加到词嵌入(embedding)中。位置编码的设计保证了每个词的位置信息可以被捕捉到,而不会影响自注意力的计算。
位置编码使用正弦和余弦函数来生成不同频率的编码,公式如下: \[ \begin{gathered} \mathrm{PE}(p o s, 2 i)=\sin \left(\frac{p o s}{10000^{2 i / d_{\text {model }}}}\right) \\ \mathrm{PE}(p o s, 2 i+1)=\cos \left(\frac{p o s}{10000^{2 i / d_{\text {model }}}}\right) \end{gathered} \]
- \(pos\) 是单词的位置,\(i\) 是维度索引,\(d_{\text {model }}\) 是词嵌入的维度。
这种编码方式能够确保对于较远的词,正弦和余弦函数的值会呈现不同的周期性,能够捕捉到不同尺度的位置信息。
5.4 前馈神经网络(Feed-Forward Neural Networks)
Transformer 中的每个层除了自注意力层之外,还包含一个前馈神经网络(Feed-Forward Neural Network)。该网络包含两个线性变换和一个 ReLU 激活函数,公式如下: \[ \operatorname{FFN}(x)=\max \left(0, x W_1+b_1\right) W_2+b_2 \]
- \(W_1, W_2\) 和 \(b_1, b_2\) 是可学习的权重和偏置。
- \(\max (0, x)\) 是 ReLU 激活函数。
前馈网络在每个位置独立地应用,因此它能够进一步增强每个词表示的非线性特征。
5.5 残差连接和层归一化(Residual Connection and Layer Normalization)
为了避免深层网络中的梯度消失问题,Transformer 使用了残差连接(Residual Connection)。每个子层(如注意力层、前馈神经网络层)的输出都会加上其输入,即: \[ \text { output }=\text { LayerNorm }(x+\operatorname{Sublayer}(x)) \] 这里,Sublayer(x) 是该子层的输出,\(x\) 是该子层的输入。残差连接有助于确保信息能够直接流过网络的每一层,避免梯度消失问题,同时层归一化(LayerNorm)有助于加速训练。
6. Evaluation
作者通过以下几个标准数据集对 Transformer 模型进行了评估:
- WMT 2014 英德翻译和英法翻译任务。
- 与传统的基于 RNN 的模型(如 LSTM)和 CNN 模型进行了比较。
主要评估指标包括:
- BLEU(Bilingual Evaluation Understudy)分数,这是衡量机器翻译质量的标准指标。
- 训练时间:由于 Transformer 的高度并行化,训练时间显著低于基于 RNN 的模型。
实验结果表明,Transformer 在翻译质量和训练效率上都显著超越了传统的 RNN 模型。
7. Conclusion
Transformer 模型是序列到序列任务中的一项重大创新,证明了自注意力机制可以取代传统的循环和卷积层。本文的主要结论如下:
- 高效性:Transformer 在性能超越的同时,还具备了高度的并行化能力,显著降低了训练时间。
- 有效性:在机器翻译任务中,Transformer 超越了传统 RNN 模型,能够有效捕捉长程依赖关系。
- 灵活性:Transformer 架构具有很好的通用性,能够应用于其他序列相关任务,之后的 BERT、GPT、T5 等模型也基于Transformer 架构发展而来。
Transformer 为自然语言处理和其他领域的深度学习模型奠定了新的基础。
8. Notes
- Transformer 为什么使用 LN 而不使用 BN?
在 Transformer 模型中,使用层归一化(Layer Normalization,LN)而非批量归一化(Batch Normalization,BN),主要是因为以下几个原因:
序列数据的依赖性
Transformer 是处理序列数据的模型,其中每个输入元素可能与其他元素有复杂的依赖关系。批量归一化(BN)依赖于批次内的统计量(均值和方差),这在卷积神经网络(CNN)中有效,但对于序列数据存在问题:
- 依赖批次数据:BN计算基于批次的统计量,而每个时间步的输入需要独立处理其上下文信息。不同样本的分布可能会干扰每个时间步的计算。
- 小批次问题:Transformer 通常使用小批次处理长序列,BN 在小批次下表现较差,因为统计量不稳定,可能影响训练的稳定性。
训练稳定性:层归一化(LN)可以提高训练过程的稳定性,特别是在深度神经网络中。相比之下,批量归一化(BN)受批次大小的影响,尤其是在小批次情况下,均值和方差的计算可能不准确,从而影响训练稳定性。而LN对每个样本独立归一化,避免了这个问题,因此训练过程更加稳定。
并行计算的要求:Transformer 的一个显著特点是其高度并行化的计算方式,特别是在计算自注意力时。BN 在训练时需要在整个批次上计算均值和方差,这通常是针对整个批次的操作。而 LN 是对单个样本的操作,因此更加适合在训练时进行并行计算,尤其是在 GPU 或 TPU 上训练时,能够更好地加速训练过程。
- Transformer 中前馈神经网络里面的 \(x\) 和 \(W\) 的 shape 分别是多少?
在 Transformer 的前馈神经网络(Feed-Forward Network,FFN)中,输入 \(x\) 和权重矩阵 \(W\) 的形状如下:
- 输入 \(x\) 的形状:
前馈神经网络的输入是自注意力(Self-Attention)层的输出。假设输入的张量 \(x\) 的形状为: \[ x \in \mathbb{R}^{B \times S \times D} \]
- \(B\) 是批次大小(batch size)
- \(S\) 是序列长度(sequence length)
- \(D\) 是每个时间步的特征维度,通常称为模型的隐藏维度(\(d_{\text {model }}\))
- 权重矩阵 \(W\) 的形状:
前馈神经网络通常由两个线性层组成,假设第一个线性层将输入的特征维度 \(D\) 映射到更高的维度 \(d_{\mathrm{ff}}\),然后第二个线性层将其映射回 \(D\)。
第一个线性层的权重矩阵 \(W_1\) 的形状为: \[ W_1 \in \mathbb{R}^{D \times d_{\mathrm{ff}}} \] 这里,\(D\) 是输入特征维度,\(d_{\mathrm{ff}}\) 是前馈网络的隐藏层维度。
第二个线性层的权重矩阵 \(W_2\) 的形状为: \[ W_2 \in \mathbb{R}^{d_{\mathrm{ff}} \times D} \] 这里,\(d_{\mathrm{ff}}\) 是前馈网络的隐藏层维度,\(D\) 是输出的特征维度,通常与输入的特征维度 \(D\) 相同。
在整个计算过程中,前馈神经网络对每个时间步的特征进行独立处理,输入维度 \(D\) 被映射到更高的维度 \(d_{\mathrm{ff}}\),然后再映射回原始维度 \(D\)。