在自注意力机制的训练过程中,缩放点积注意力(Scaled Dot-Product Attention)机制是其中非常核心的一部分。在该机制中,模型首先计算 Q 向量和 K 向量之间的相似度,然后通过Softmax函数将相似度转换为注意力权重,最后将注意力权重与 V 向量相乘,得到最终的输出。
如何训练 Q 、 K 的权重矩阵?首先来看一下缩放点积注意力机制的计算公式:
缩放点积注意力的计算如图2-11所示,处理流程包括4个步骤。
图2-11 缩放点积注意力的计算
1)词嵌入向量。首先将输入的词转换成词嵌入向量,然后加上位置编码。
2) Q 、 K 、 V 权重矩阵。将词嵌入向量分别乘以权重矩阵 Q 、 K 、 V ,得到查询( Q )、键( K )和值( V )。
3)注意力权重的计算。计算查询( Q )与键( K )之间的相似性,然后通过Softmax函数得到注意力权重。
4)加权和。将注意力权重与值( V )相乘,然后求和,得到注意力输出。
在Transformer中,变换矩阵通过训练 Q 、 K 的权重矩阵获得。具体而言,训练过程如下:
1)初始化。随机初始化 Q 、 K 的权重矩阵。
2)前向传播。
❑ 将输入序列中的词语映射为词嵌入向量。
❑ 对 K 向量和 Q 向量进行线性变换,得到新的 K 向量和 Q 向量。
❑ 计算 K 向量和 Q 向量之间的相似度。
❑ 对相似度进行Softmax归一化,得到注意力权重。
❑ 根据注意力权重对 V 向量进行加权求和,得到最终的输出。
3)后向传播。
❑ 计算损失函数。
❑ 根据损失函数对 Q 、 K 的权重矩阵进行更新。
4)重复步骤2)和3),直到训练完成。
该训练的目标是让Transformer模型能够学习到不同语境下词语之间的相似度关系。例如,在“苹果手机”这句话中,Transformer模型应该能够学习到“苹果”与“手机”之间的相似度更高。在注意力机制的计算过程中, Q 向量和 K 向量都需要经过线性变换。线性变换的权重矩阵是共享的,也就是说,所有词共用同一个权重矩阵。共享权重矩阵的行数等于词库的大小,词库中包含多少个词,共享权重矩阵就有多少行。共享权重矩阵的列数等于词嵌入向量的维度。词嵌入向量的维度决定了词语语义信息的表达能力。在实际应用中,共享权重矩阵的大小可能会受到计算资源的限制。可以使用一些技术来减少共享权重矩阵的大小,例如参数剪枝和知识蒸馏的技术。
其中,缩放点积注意力机制的核心原理可在如下场景中进行解释。
1)比较句子中每个词与其他词的相似性。该过程通过计算每个词的 Q 向量与其他词的 K 向量之间的点积实现。点积结果表示两个向量之间的相似度,数值越大,表示相似度越高。该过程可以看作在句子内部建立一个词语之间的相似度矩阵。
相似度计算效果如图2-12所示。
图2-12左侧灰色框区域描述的是公式中的缩放点积计算过程。右侧图通过二维空间向量的夹角表示两个词之间的相似度。二维向量空间在训练过程中通过深度学习进行不同的空间变换。
图2-12 基于缩放点积注意力的相似度计算示例(一)
2)经过放缩、掩码和Softmax处理,得到注意力权重。在计算相似度后,模型对相似度进行放缩处理,以避免数值过大或过小。然后,模型对注意力权重进行掩码处理,以确保模型不会“看到”尚未预测的词。最后,模型对放缩后的相似度进行Softmax处理,得到注意力权重。此过程可视为在句子内部建立一个词语间的注意力权重矩阵,识别句子中相似度的关键方向,以更好捕捉句子的语义信息,效果如图2-13所示。
图2-13 基于缩放点积注意力的相似度计算示例(二)
3)计算加权和,得到最终输出。计算完注意力权重后,模型将注意力权重与值( V )向量相乘并求和,得到最终输出。此过程对词嵌入向量进行加权处理,使其与其他词组的分组更加明显,效果如图2-14所示。
图2-14 基于缩放点积注意力的相似度计算示例(三)
第三步的向量空间变换结果与前两步存在显著差异。在相似度计算阶段,我们期望词嵌入的向量空间能够尽可能将不同意义的词语分离开来;而在加权求和阶段,我们希望相似的词语能够聚集在一起,以更好地预测下一个词的概率。这样设计的原因是什么?还记得Transformer模型的初衷吗?它的目标是预测下一个词的概率,这与当前我们使用的大语言模型的目标一致。模型不断尝试预测下一个词,并根据预测结果调整模型参数,以更好地预测下一个词。
自注意力机制的输出(即加权的值)通常作为序列处理任务中的中间表示,这些表示经过后续网络层处理以预测下一个词或执行其他任务。因此,自注意力机制提供了一种灵活的内部表示,为序列中的每个元素提供了综合整个序列信息的上下文表示。在Transformer模型的设计中嵌套了多层相同的处理流程。通过多级数据处理,自注意力机制能够捕获不同层次的表示,例如从单个词或字符的表示到更复杂的语义概念和关系。每一层可以从前一层的输出中学习更加抽象的信息表示。这种多层次处理有助于模型理解语言的复杂结构,包括句法和语义信息。通过多级数据处理,模型不仅进行信息的蒸馏提取,还能进行信息的融合和重新编码,从而生成更加丰富和复杂的表示。该过程涉及从序列的不同部分捕获和整合信息,以支持复杂的推理和理解任务。