Transformers 文档

注意力机制

注意力机制

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

LSH 注意力

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

局部注意力

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

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

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

其他技巧

轴向位置编码

Reformer 使用轴向位置编码:在传统的变压器模型中,位置编码 E 是一个大小为ll 乘以dd 的矩阵,ll 是序列长度,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<!--

< > Update on GitHub