2. Transformer
通俗解读 Transformer 模型:一步步理解编码器和解码器的结构
Transformer 是一种神经网络模型结构,被广泛应用于自然语言处理任务中,比如机器翻译。要理解 Transformer 的工作方式,我们可以把它想象成一个双向的“翻译系统”,将一种语言转换成另一种语言。Transformer 的结构可以分为两部分:编码器(Encoder) 和 解码器(Decoder)。
Transformer 的整体结构:双向的翻译系统
- 编码器:负责将输入句子转换为内部表示,提取出每个词的含义以及词与词之间的关系。
- 解码器:利用编码器的结果生成输出句子,比如翻译后的句子。
编码器(Encoder)结构
编码器的每一层包含两个核心模块:
- 自注意力层(Self-Attention Layer)
- 前馈神经网络层(Feed-Forward Network Layer)
1. 自注意力层(Self-Attention Layer)
自注意力层让每个词“看到”句子里的其他词,计算它们之间的关联度。例如,在句子“我在吃苹果”中,“吃”和“苹果”紧密相关,而“我”也和这两个词有关。自注意力层会将这种关联表示出来。
公式:自注意力机制
在自注意力机制中,模型会计算每个词的 Query、Key 和 Value:
Attention ( Q , K , V ) = softmax ( Q ⋅ K T d k ) ⋅ V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{Q \cdot K^T}{\sqrt{d_k}}\right) \cdot V Attention(Q,K,V)=softmax(dkQ⋅KT)⋅V
其中:
- Q Q Q : Query,当前词的查询向量。
- K K K: Key,其他词的特征表示。
- V V V: Value,当前词的实际信息。
- d k d_k dk: Key 的维度,起到缩放作用,防止数值过大。
自注意力机制通过计算 Query 和 Key 的相似度来生成权重,从而选择最相关的 Value。
图解:自注意力计算流程
在以下图示中,每个词会被表示为一个 Query、Key 和 Value 向量,依次计算它们的相关度:
- 前馈神经网络层(Feed-Forward Layer)
经过自注意力层处理后,每个词的表示会进一步传递到一个独立的前馈神经网络。这个步骤相当于对每个词的特征进行再次加工,提升它的表达能力。
解码器(Decoder)结构
解码器和编码器类似,但增加了一个“编码器-解码器注意力层”,用于生成新的输出。
1. 自注意力层(Self-Attention Layer)
解码器的自注意力层和编码器类似,但加入了 Masking 操作,防止模型看到尚未生成的词。这样做是为了保证模型在生成一个词时,只能参考已生成的部分。
2. 编码器-解码器注意力层(Encoder-Decoder Attention Layer)
这一层让解码器可以关注编码器生成的结果。在翻译任务中,解码器需要依赖原句的词语信息,这一层帮助模型在生成句子时找到原句中的重要部分。
3. 前馈神经网络层(Feed-Forward Layer)
这一层与编码器中的前馈层功能类似,独立处理生成的词语特征。
位置编码(Positional Encoding)
由于注意力机制本质上是“全局”查看所有输入信息的,不会自动考虑词语的顺序,因此 Transformer 需要加入位置编码(Positional Encoding)。位置编码为每个词加上它在句子中的位置信息,帮助模型感知顺序。
公式:位置编码
位置编码的一种实现方式是通过正弦和余弦函数来编码不同位置的信息:
PE ( p o s , 2 i ) = sin ( p o s 1000 0 2 i d model ) \text{PE}{(pos, 2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d{\text{model}}}}}\right) PE(pos,2i)=sin(10000dmodel2ipos)
PE ( p o s , 2 i + 1 ) = cos ( p o s 1000 0 2 i d model ) \text{PE}{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d{\text{model}}}}}\right) PE(pos,2i+1)=cos(10000dmodel2ipos)
其中 p o s pos pos是词在句子中的位置, i i i 表示维度。
类比总结:Transformer 就像一个翻译团队
- 编码器:负责将原文转换为有用的内部表示(向量)。
- 解码器:根据这些向量逐步生成译文。
- 自注意力:帮助模型从句子中找到重要内容。
- 编码器-解码器注意力:让解码器从原句中找到生成译文时需要参考的部分。
通过这些结构和层次的搭配,Transformer 模型能够高效地处理复杂的自然语言任务,如机器翻译和文本生成等。