Transformer 是一种基于自注意力机制(Self-Attention Mechanism)的深度学习模型,最初由 Vaswani 等人在 2017 年的论文《Attention is All You Need》中提出。Transformer 在自然语言处理(NLP)任务中取得了显著的成果,特别是在机器翻译、文本生成和问答系统等领域。
Transformer 的计算流程
Transformer 的计算流程可以分为以下几个主要步骤:
- 输入嵌入(Input Embedding)
- 位置编码(Positional Encoding)
- 编码器(Encoder)
- 解码器(Decoder)
- 输出层(Output Layer)
1. 输入嵌入(Input Embedding)
- 词嵌入(Word Embedding):将输入的单词转换为固定维度的向量。例如,如果词汇表大小为 V,嵌入维度为 d,那么词嵌入矩阵的形状为 (V, d)。
- 公式:
[
X = W_E \cdot I
]
其中,(X) 是嵌入后的向量,(W_E) 是词嵌入矩阵,(I) 是输入的单词索引。
2. 位置编码(Positional Encoding)
- 目的:由于 Transformer 模型没有循环结构,需要一种方式来引入顺序信息。位置编码通过添加一个与位置相关的向量来实现这一点。
公式:
[
PE{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right)
]
[
PE{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
]
其中,(pos) 是位置,(i) 是维度,(d) 是嵌入维度。操作:将位置编码向量与词嵌入向量相加:
[
X’ = X + PE
]
3. 编码器(Encoder)
结构:编码器由多个相同的层堆叠而成,每层包含两个子层:
- 多头自注意力机制(Multi-Head Self-Attention)
- 前馈神经网络(Feed-Forward Neural Network)
多头自注意力机制:
- 线性变换:将输入向量 (X’) 通过三个不同的线性变换(权重矩阵 (W_Q), (W_K), (W_V))得到查询向量 (Q)、键向量 (K) 和值向量 (V)。
- 公式:
[
Q = X’ \cdot W_Q, \quad K = X’ \cdot W_K, \quad V = X’ \cdot W_V
] - 自注意力计算:
[
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) \cdot V
]
其中,(d_k) 是键向量的维度。 - 多头机制:将自注意力机制分为多个头,每个头独立计算,然后将结果拼接起来,再通过一个线性变换:
[
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h) \cdot W_O
]
其中,(h) 是头的数量,(W_O) 是最终的线性变换矩阵。
残差连接和层归一化:
- 残差连接:将输入直接加到输出上,以缓解梯度消失问题。
- 层归一化:对每一层的输出进行归一化,以稳定训练过程。
- 公式:
[
\text{LayerNorm}(X + \text{Sublayer}(X))
]
前馈神经网络:
- 结构:两层全连接网络,中间有激活函数(如 ReLU)。
- 公式:
[
\text{FFN}(X) = \text{Linear}(\text{ReLU}(\text{Linear}(X)))
] - 残差连接和层归一化:
[
\text{LayerNorm}(X + \text{FFN}(X))
]
4. 解码器(Decoder)
结构:解码器也由多个相同的层堆叠而成,每层包含三个子层:
- 掩码多头自注意力机制(Masked Multi-Head Self-Attention)
- 多头注意力机制(Multi-Head Attention)
- 前馈神经网络(Feed-Forward Neural Network)
掩码多头自注意力机制:
- 目的:在生成输出时,防止当前位置看到未来的信息。
- 掩码:在自注意力计算中,使用掩码矩阵 (M),使得当前位置不能看到未来的位置。
- 公式:
[
\text{MaskedAttention}(Q, K, V) = \text{softmax}\left(\frac{QK^T + M}{\sqrt{d_k}}\right) \cdot V
]
多头注意力机制:
- 目的:允许解码器关注编码器的输出。
- 公式:
[
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) \cdot V
]
其中,(Q) 来自解码器,(K) 和 (V) 来自编码器。
前馈神经网络:
- 结构:与编码器中的前馈神经网络相同。
- 公式:
[
\text{FFN}(X) = \text{Linear}(\text{ReLU}(\text{Linear}(X)))
]
残差连接和层归一化:
- 公式:
[
\text{LayerNorm}(X + \text{Sublayer}(X))
]
- 公式:
5. 输出层(Output Layer)
- 线性变换:将解码器的输出通过一个线性变换,映射到词汇表的大小。
- 公式:
[
Y = \text{Linear}(X)
] - softmax:将线性变换的结果通过 softmax 函数,得到每个词的概率分布。
- 公式:
[
P = \text{softmax}(Y)
]
总结
Transformer 的计算流程包括输入嵌入、位置编码、编码器、解码器和输出层。通过多头自注意力机制和前馈神经网络,Transformer 能够有效地捕捉长距离依赖关系,并在多种 NLP 任务中取得优异的性能。希望这些解释能帮助你更好地理解 Transformer 的计算流程。如果有更多问题或需要进一步的解释,请告诉我。
references
https://zhuanlan.zhihu.com/p/77307258
https://zhuanlan.zhihu.com/p/47812375