自注意机制在现在机器学习的Transformer结构中大量使用。
这儿图解的是将4个6维的输入特征值(橙色) 转换为4个3维的注意力加权特征值(蓝色),这里面有来表示组成的矩阵。
1.给定输入值一组 4 个特征向量(6-D),然后都是模型在训练的时候得到的矩阵。

将特征 与线性变换矩阵 相乘,得到查询向量 、键向量 和值向量
这里面的“自”指的是查询和键都源自同一组特征。

复制查询向量,维度为3*4
复制键向量的转置,维度为4*3

将 与 相乘。目的是使用点积作为每个键值对之间“相似度”的估计。注意得到的是一个和输入向量输4一样的方阵。

按 的平方根缩放每个元素,是键向量的维度 ()。目的是标准化 对上述结果的影响。这儿为了简化手工计算,我们将 近似为

对矩阵中的每个元素,计算其。为了简化手工计算,我们将 近似为 。

将每列(每个向量)的每个元素相加

对于每一列,将每个元素除以列总和。目的是标准化每一列,使数字总和为 1。换句话说,每一列都是注意力的概率分布。结果是注意力权重矩阵(黄色)

将值向量与注意力权重矩阵 相乘,结果是注意力加权特征值。这个值会被进一步送到后面的前馈网络中。

实际中会使用多头自注意机制
降维:本练习中的自注意力流程将特征维度从 6 减少到 3 。现在假设我们有两个并行运行的自注意力(两组不同的进行计算),我们将得到两组不同的注意力权重特征(即 2 个蓝色矩阵)。 我们可以将两组注意力权重特征垂直连接起来,使维度回到6。这就是多头注意力的本质。
实际示例:一个注意力头可以将 512 维特征简化为 64 维注意力加权特征。 我们使用 8 个头并将 8 个这样的 64维 注意力加权特征堆叠在一起,以使总维度回到 512维。