开始
因果自注意力机制是自2017年以来推动人工智能进步的核心机制。在本文中,我将逐步解析其计算过程,希望能更好地理解其工作原理。
从高层次来看,这个函数将一个序列转换为另一个序列。序列是一个由词嵌入组成的列表,形状为 的张量,其中 是输入序列的长度, 是嵌入维度。矩阵的每一行对应一个输入词元,表示为一个 维向量。
那么,为什么 有三个输入呢?这是因为在 Transformer 架构中,输入序列通过三个不同的 线性层进行投影。如果 是输入序列,
其中 是 的矩阵。因此, 只是同一输入序列的不同表示。
让我们一步步计算 。首先,我们计算 ,这是一个 与 的点积,结果是一个 的输出。这有什么作用呢?
的结果是一个标量( 点积 ),它是 和 之间的向量点积。如果我们记得公式
我们可以看到,当 和 之间的夹角 接近 0º 时,点积为正;当夹角为 180º 或它们指向相反方向时,点积为负。我们可以将点积解释为相似性度量,其中正值表示向量相似,负值表示相反。
因此,最终的 矩阵填充了每对 和 词元之间的相似性分数。结果除以 是为了防止嵌入维度较大时方差爆炸。详见附录。
下一步是应用 函数,它将输入矩阵中不在下三角部分的所有值设置为 。
接下来,我们对这个矩阵应用 ,它将矩阵中的每一行值转换为概率分布。该函数定义为从 的映射,其中第 个输出元素由下式给出:
这里需要注意两点:
- 所有输出元素的和为 ,这是概率分布的预期。
- 如果输入元素 为 ,则 。
在对掩码后的相似性分数应用 函数后,我们得到:
其中条目 定义为:
生成的矩阵 具有长度为 的概率分布行。最后一步是通过这些概率分布映射我们的值矩阵 ,从而得到新的序列。
注意, 是一个标量,而 是一个 的嵌入向量。从视觉上看,我们观察到 SelfAttention 选择性地组合 Value 词元,权重由查询和键之间的注意力程度(即较大的内积)生成的概率分布决定。我们还看到,由于之前应用的因果掩码,索引 处的输出词元的权重仅依赖于索引 的输入词元。这是基于因果假设,即输出词元 不依赖于未来的词元,这在训练自回归(即下一个词元预测)模型时是必需的。
希望这篇文章对你有帮助!
## 附录
为什么要按 进行缩放?
我们这样做是为了防止方差随着 的增加而爆炸。
假设 且独立同分布。我们来计算未缩放的 的均值和方差。
均值显然为零:
方差为:
因为
当 时,该项为 (因为 和 是独立同分布的)。当 时,
因为 。
因此,如果我们按 进行缩放,新的方差为
正如我们所期望的。
多头注意力机制
大多数现代系统使用多头注意力机制,它在多个“头”上并行计算 。我们通常令 ,其中 是头的数量。