Transformer 中 Decoder 的输入详解
在 Transformer 中,解码器(Decoder)的任务是生成目标序列的输出,通常与编码器(Encoder)配合使用。解码器通过接收来自编码器的上下文信息以及之前生成的输出信息,逐步生成新的输出序列。
解码器的输入可以分为两个主要部分:
- 目标序列的嵌入表示(也叫“目标输入”或“教师强制输入”)
- 编码器的输出(编码器生成的上下文信息)
Transformer 解码器的结构
Transformer 的解码器由多个相同的层堆叠而成,每个解码器层都包括以下几个部分:
- 自注意力机制(Self-Attention Mechanism)
- 编码器-解码器注意力机制(Encoder-Decoder Attention Mechanism)
- 前馈神经网络(Feedforward Neural Network)
- 残差连接(Residual Connection)
- 层归一化(Layer Normalization)
每个解码器层的输入和输出经过这些子层的变换,最终生成目标序列的预测。
Decoder 输入的详细解释
1. 自注意力机制(Masked Self-Attention)
解码器的输入之一是目标序列的嵌入表示(通常用 <sos>
标记开始,后续为真实的目标词或预测的词)。解码器需要逐步生成目标序列中的每个词,并且每次生成时,只能看到当前时刻之前的词,这就是**“遮蔽机制”**(Masked Self-Attention)的由来。
-
为什么要遮蔽?
- 在训练时,解码器的每个位置只应该依赖于前面的词,不能看到未来的词。为了确保这一点,我们在训练过程中“遮蔽”掉了当前词之后的所有词。
- 在推理过程中,生成的每个词也仅依赖于当前生成的词和输入的上下文。
-
计算过程:
- 假设输入的目标序列是
[T1, T2, ..., Tn]
,在每个时间步i
时,解码器仅能看到[T1, T2, ..., Ti]
,并通过 Masked Self-Attention 计算出每个词的表示。
- 假设输入的目标序列是
公式:
Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V Attention(Q,K,V)=softmax(dkQKT)V
- Q: 查询(Query),表示解码器当前正在处理的目标词。
- K: 键(Key),表示目标序列中所有词的表示。
- V: 值(Value),也是目标序列中所有词的表示。
通过这种方式,解码器能够从已生成的目标序列中推断当前词的表示,同时依赖编码器提供的上下文信息。
2. 编码器-解码器注意力机制(Encoder-Decoder Attention)
解码器的第二个输入是 编码器的输出,这就是解码器在生成目标序列时需要借助的上下文信息。编码器生成的 上下文表示 向解码器提供了关于输入序列的信息,帮助解码器理解在生成每个目标词时,应该关注输入序列中的哪些部分。
-
编码器的输出:
- 编码器通过自注意力机制对输入序列进行处理,生成每个词的表示,并将这些表示作为上下文信息传递给解码器。
- 这些上下文表示在解码器中通过 编码器-解码器注意力机制 与解码器的自注意力机制相结合,帮助解码器生成正确的输出。
-
计算过程:
- 在每个解码器层中,编码器的输出作为 Key(K) 和 Value(V) 被输入到 Encoder-Decoder Attention 层,而当前的目标序列表示作为 Query(Q) 输入到该层。
- 这使得解码器能够根据目标词的上下文信息,选择性地关注输入序列中的相关部分。
公式:
Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V Attention(Q,K,V)=softmax(dkQKT)V
- Q: 来自解码器的查询(Query),表示当前目标词的上下文信息。
- K: 来自编码器的键(Key),表示输入序列中每个词的表示。
- V: 来自编码器的值(Value),表示输入序列中每个词的表示。
通过这种方式,解码器不仅利用了目标序列的上下文信息(自注意力),还能够依赖于编码器提供的输入序列的上下文信息,从而生成更加准确的目标序列。
3. 目标序列的嵌入表示(Target Embeddings)
目标序列(如机器翻译中的目标语言句子或文本生成中的下一句话)的嵌入表示是解码器的输入之一。通常,目标序列的每个词都会通过一个 词嵌入层(Embedding Layer)进行映射,转换为一个向量表示。
- 目标序列的输入:在训练时,我们使用 教师强制(Teacher Forcing) 技术,将实际的目标序列作为解码器的输入。即,解码器的输入是目标序列的前一个词(或
<sos>
标记),而不是模型之前的预测结果。 - 推理时的输入:在推理过程中,解码器的输入是当前已生成的目标词,生成一个词后,它会被用作下一个时间步的输入。
Decoder 输入的流程总结
-
目标序列的嵌入表示(Target Embeddings):
- 在训练时,目标序列通过词嵌入层(Embedding Layer)转化为词向量。
- 在推理过程中,生成的词也作为下一个时间步的输入。
-
自注意力机制(Masked Self-Attention):
- 解码器的每一层都包含一个自注意力机制,计算目标序列中每个位置之间的依赖关系。通过掩蔽机制,确保每个时间步只能看到当前生成词之前的词。
-
编码器-解码器注意力机制(Encoder-Decoder Attention):
- 解码器利用来自编码器的输出(上下文信息),通过 注意力机制,决定在哪些地方应更加关注输入序列。
总结
解码器的输入包括目标序列的嵌入表示、编码器的输出和目标序列的自注意力机制。解码器通过 Masked Self-Attention 和 Encoder-Decoder Attention 相结合,生成目标序列的每个词。通过这种方式,解码器不仅能生成一个连贯的输出序列,还能有效地利用输入序列的上下文信息。