注意力机制
大多数 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 是一个大小为乘以,的矩阵,其中 l 是序列长度,是隐藏状态的维度。如果处理非常长的文本,这个矩阵可能非常大,并在 GPU 上占用太多空间。为了缓解这种情况,轴向位置编码包括将这个大的矩阵 E 分解成两个较小的矩阵 E1 和 E2,它们的维度为和,使得和(通过长度的乘积,最终会小得多)。时间步长的嵌入在 E 中是通过连接时间步长的嵌入得到的在 E1 中和在 E2 中。
< > 在 GitHub 上更新