Transformers 文档

注意力机制

Hugging Face's logo
加入Hugging Face社区

并获得增强的文档体验

开始使用

注意力机制

大多数 Transformer 模型使用完全注意力,即注意力矩阵是方形的。当处理长文本时,这可能成为一个巨大的计算瓶颈。Longformer 和 Reformer 是试图提高效率的模型,它们使用注意力矩阵的稀疏版本来加速训练。

LSH 注意力

Reformer 使用 LSH 注意力。在 softmax(QK^t) 中,只有矩阵 QK^t 中最大的元素(在 softmax 维度上)才会产生有用的贡献。因此,对于 Q 中的每个查询 q,我们只需要考虑 K 中接近 q 的键 k。哈希函数用于确定 q 和 k 是否接近。注意力掩码被修改以掩盖当前标记(除了第一个位置),因为它会产生查询和键相等(因此非常相似)。由于哈希可能有点随机,因此在实践中使用多个哈希函数(由 n_rounds 参数确定),然后将它们平均起来。

局部注意力

Longformer 使用局部注意力:通常,局部上下文(例如,左右两个标记是什么?)足以对给定标记采取行动。此外,通过堆叠具有较小窗口的注意力层,最后一层将具有超过窗口中标记的感受野,从而使它们能够构建整个句子的表示。

一些预选的输入标记也被赋予全局注意力:对于这些少数标记,注意力矩阵可以访问所有标记,并且此过程是对称的:所有其他标记都可以访问这些特定标记(在其局部窗口中的标记之上)。这在论文的图 2d 中有显示,请参见下面的示例注意力掩码。

使用这些参数较少的注意力矩阵,使模型能够具有更大的序列长度的输入。

其他技巧

轴向位置编码

Reformer 使用轴向位置编码:在传统的 Transformer 模型中,位置编码 E 是一个大小为ll乘以dd,ll的矩阵,其中 l 是序列长度,dd是隐藏状态的维度。如果处理非常长的文本,这个矩阵可能非常大,并在 GPU 上占用太多空间。为了缓解这种情况,轴向位置编码包括将这个大的矩阵 E 分解成两个较小的矩阵 E1 和 E2,它们的维度为l1×d1l_{1} \times d_{1}l2×d2l_{2} \times d_{2},使得l1×l2=ll_{1} \times l_{2} = ld1+d2=dd_{1} + d_{2} = d(通过长度的乘积,最终会小得多)。时间步长的嵌入jj在 E 中是通过连接时间步长的嵌入得到的j%l1j \% l1在 E1 中和j//l1j // l1在 E2 中。

< > 在 GitHub 上更新