要点:
(1)解码器接收来自编码器的输出(向量)作为上下文信息(向量)
(2)在解码器的"编码器-解码器注意力"子层之前,编码器的输出向量会被线性变换(通常通过两个不同的权重矩阵)分别转换为键(Keys, K)和值(Values, V)。这一变换帮助模型学习如何有效地利用这些向量来指导解码过程中的注意力分配
(3)解码器在每个时间步也会生成自己的向量,称为查询(Query, Q),这代表了解码器当前状态下的注意力焦点或意图。
1.Transformer 训练的反馈机制
Transformer 训练的反馈机制:
-
前向传播:输入数据通过 Transformer 模型的编码器和解码器进行处理,生成最终的输出。
-
计算损失:模型的输出与真实的目标值之间的差异通过损失函数(如交叉熵损失)来计算损失值。
-
反向传播:损失值利用反向传播算法在整个网络中传播,计算每个参数的梯度。
-
参数更新:利用梯度下降算法或其变种(如 AdamW 优化器)根据梯度来更新模型的参数,包括编码器和解码器中的所有权重矩阵。
-
迭代优化:通过多次迭代的前向传播、损失计算、反向传播和参数更新,模型逐渐学习到最优的参数设置,以最小化损失函数并提高预测的准确性。
在整个训练过程中,Transformer 模型的参数不断更新,以更好地捕捉输入数据的特征,并提高对目标任务的性能。
2.Transformer中通过训练所优化的参数
在 Transformer 架构中,需要训练的参数主要包括以下几个部分:
参数 | |
---|---|
自注意力机制(Self-Attention Mechanism)参数 | 查询(Query, Q): 将输入映射到查询表示的权重矩阵。键(Key, K): 将输入映射到键表示的权重矩阵。 |
前馈神经网络(Feed-Forward Network, FFN)参数 | 通常包含两个线性变换,它们都有对应的权重矩阵和偏置项。 |
层归一化(Layer Normalization)参数 | 对每个子层(自注意力子层和输出子层)的输出进行归一化处理的参数。 |
残差连接(Residual Connection) | 虽然残差连接本身不包含可训练的参数,但是它在训练过程中起到了重要作用,帮助缓解深层网络中的梯度消失问题。 |
词汇嵌入(Word Embeddings) | 输入词的嵌入表示,通常在训练开始前初始化,并在训练过程中更新。 |
位置编码(Positional Encoding) | 给每个输入词添加一个唯一的位置编码,以提供序列中词汇的位置信息。 |
输出层(Output Layer) | 在模型的最后一层,有一个线性层将 Transformer 的输出映射到最终的任务上,如分类标签或下一个词的概率分布。 |
掩码(Mask) | 在处理序列数据时,如在机器翻译或文本生成任务中,需要使用掩码来防止信息泄露,尽管掩码本身不是参数,但生成掩码的逻辑是模型的一部分。 |
其他特定任务的参数 | 根据具体任务的需要,可能还会有其他一些参数,如用于分类的softmax层参数,或者用于生成任务的解码器参数等。 |
在预训练和微调阶段,这些参数会根据任务的损失函数进行优化和更新。Transformer 模型的一个关键特点是它的自注意力机制,这使得模型能够捕捉序列中任意两个位置之间的依赖关系,而不仅仅是相邻元素之间的关系。
3.解码器的输入和输出
在Transformer模型中,解码器的设计旨在处理序列到序列(Seq2Seq)任务,如机器翻译,其工作流程可以概括如下:
解码器的输入:
-
开始符号(BOS,Begin of Sequence):在预测阶段或生成模式下,解码器的初始输入通常是一个特殊的开始符号(BOS token)。这标志着序列的起始。
-
前一时间步的输出:之后的每一个时间步,解码器的输入会是前一个时间步解码器的输出。这意味着解码过程是自回归的,即每个词的预测依赖于前面已预测的所有词。
-
编码器的输出:解码器还接收来自编码器的输出作为上下文信息。这些信息经过处理(例如,转换为键K和值V的向量),并在解码器的“编码器-解码器注意力”(encoder-decoder attention)子层中使用,帮助解码器关注输入序列的适当部分。
解码器的输出:
解码器的每个时间步输出是一个向量,代表了到目前为止生成序列的下一个最可能的词的概率分布。这个输出向量会通过一个线性层(通常是全连接层)加上softmax函数,转化为词汇表中每个词的概率分布。最高概率的词被选为该时间步的输出词,然后送入解码器的下一个时间步,如此循环直至产生一个结束符号(EOS,End of Sequence)或达到预设的最大长度。
总结来说,解码器以开始符号和先前生成的词为输入,逐步生成目标序列,同时利用编码器提供的源序列上下文信息,最终输出是一个序列的概率分布序列,指导整个翻译或生成过程。
4.编码器的输出与解码器的输入
在Transformer模型的解码器部分,来自编码器的输出扮演着至关重要的角色。具体来说,这个过程可以分解为以下几个步骤:
-
编码器输出准备:编码器处理完输入序列后,会为每个输入位置生成一个高维向量,这些向量综合了该位置及其上下文的信息。这些向量合在一起构成了编码器的输出序列。
-
键(K)和值(V)的生成:在解码器的"编码器-解码器注意力"子层之前,编码器的输出向量会被线性变换(通常通过两个不同的权重矩阵)分别转换为键(Keys, K)和值(Values, V)。这一变换帮助模型学习如何有效地利用这些向量来指导解码过程中的注意力分配。
-
查询(Q)的生成:与此同时,解码器在每个时间步也会生成自己的向量,称为查询(Query, Q),这代表了解码器当前状态下的注意力焦点或意图。查询同样通过一个线性变换从解码器的前一层输出得到。
-
编码器-解码器注意力机制:接下来,在"编码器-解码器注意力"子层中,解码器的查询(Q)与编码器产生的键(K)进行比较,以确定在编码器输出中哪些部分(即哪些值V)与当前解码步骤最为相关。(解码思想)。这个过程通过计算注意力分数并应用softmax函数来加权值V,从而生成一个上下文向量,这个向量综合了编码器输出中对当前解码步骤最有用的信息。
-
信息整合与传递:得到的上下文向量随后会与解码器内部的其他组件(如自注意力层、前馈神经网络层等)的输出相结合,进一步提炼并生成下一个时间步的输出(the next token生成的原理)。这一系列操作允许解码器在生成目标序列时,能够灵活地参考和利用源序列的全局上下文信息。
这个机制是Transformer模型能够高效执行序列到序列任务的关键所在,特别是在需要深入理解输入序列并生成连贯、准确的输出序列时。
5.解码器的查询Q,键K和值V向量的来源和意义
在 Transformer 模型中,解码器中使用的查询(Query, Q),从解码器的前一层输出得到;键(Key, K)和值(Value, V)向量都来源于编码器的输出。这些向量在自注意力机制中扮演着不同的角色,并且是通过不同的权重矩阵进行线性变换得到的。以下是它们的来源和意义:
查询(Query, Q)的来源和意义:
-
来源:在解码器的自注意力机制中,查询向量 𝑄通常是从解码器的前一层输出得到的,即解码器的隐藏状态。对于解码器的第一层,查询向量可以来自一个可学习的嵌入层或者是一个特定的起始符号(如 <start&gt; 标记)的嵌入。
-
意义:查询向量代表了解码器在生成当前输出时的“关注点”。在自注意力机制中,它会与所有键向量 𝐾 计算相似度得分,以确定每个输入元素在生成当前输出时的重要性。
键(Key, K)和值(Value, V)向量的来源和意义:
-
来源:键向量 𝐾和值向量 𝑉 都是从编码器的输出得到的。每个编码器输出向量分别通过与键和值的权重矩阵 和 相乘来生成对应的键和值向量。
-
意义:
-
键(Key, K):键向量用于与查询向量 𝑄 计算相似度得分,以确定输入序列中每个元素对当前查询的相关性。
-
值(Value, V):值向量包含了输入序列中每个元素的具体内容信息,它们会被用来计算加权和,生成最终的上下文向量,这个向量会传递到解码器的下一层或者用于生成输出。