注意力机制
大多数变压器模型使用全注意力机制,即注意力矩阵是方形的。当你处理长文本时,这可能会成为一个很大的计算瓶颈。Longformer和reformer是试图提高效率的模型,它们使用稀疏版本的注意力矩阵来加速训练。
LSH 注意力
Reformer 使用LSH注意力机制。在softmax(QK^t)中,只有矩阵QK^t中最大的元素(在softmax维度上)会提供有用的贡献。因此,对于Q中的每个查询q,我们只需要考虑K中与q接近的键k。使用哈希函数来确定q和k是否接近。注意力掩码被修改为屏蔽当前令牌(除了第一个位置),因为它会提供一个与键相等的查询(因此彼此非常相似)。由于哈希可能有点随机,实际中会使用多个哈希函数(由n_rounds参数确定),然后将它们的结果取平均。
局部注意力
Longformer 使用局部注意力:通常,局部上下文(例如,左右两个标记是什么?)足以对给定标记采取行动。此外,通过堆叠具有小窗口的注意力层,最后一层将具有不仅仅是窗口内标记的感受野,使它们能够构建整个句子的表示。
一些预选的输入标记也被赋予全局注意力:对于这些少数标记,注意力矩阵可以访问所有标记,并且这个过程是对称的:所有其他标记都可以访问这些特定标记(除了它们本地窗口中的标记)。这在论文的图2d中显示,下面是一个示例注意力掩码:
![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/local_attention_mask.png)
使用那些参数较少的注意力矩阵,使得模型能够处理具有更大序列长度的输入。
其他技巧
轴向位置编码
Reformer 使用轴向位置编码:在传统的变压器模型中,位置编码 E 是一个大小为 乘以 的矩阵, 是序列长度, 是隐藏状态的维度。如果你有很长的文本,这个矩阵可能会非常大,占用 GPU 上太多的空间。为了缓解这个问题,轴向位置编码将这个大的矩阵 E 分解为两个较小的矩阵 E1 和 E2,维度分别为 和,使得 和(对于长度的乘积,这最终会小得多)。时间步 在 E 中的嵌入是通过连接时间步 在 E1 中的嵌入和<!--
< > Update on GitHub