#
注意力机制

大多数 transformer 模型使用完全注意力机制，该机制采用正方形的注意力矩阵。当输入很长的文本时，这将导致巨大的计算瓶颈。Longformer 和 Reformer 是提高注意力机制效率的改进模型，它们使用稀疏化的注意力矩阵来加速训练。

##
局部敏感哈希注意力机制（LSH attention）

Reformer使用LSH（局部敏感哈希）的注意力机制。在计算softmax(QK^t)时，只有矩阵QK^t中的最大元素（在softmax维度上）会做出有用的贡献。所以对于Q中的每个查询q，我们只需要考虑K中与q接近的键k，这里使用了一个哈希函数来确定q和k是否接近。注意力掩码被修改以掩盖当前的词符（token）（除了第一个位置之外），因为这样会使得查询和键相等（因此非常相似）。由于哈希可能会有些随机性，所以在实践中使用多个哈希函数（由n_rounds参数确定）,然后一起求平均。

##
局部注意力机制（Local attention）

Longformer使用局部注意力机制:通常情况下，局部上下文（例如，左边和右边的两个词符是什么？）对于给定词符的操作已经足够了。此外，通过堆叠具有小窗口的注意力层，最后一层将拥有不仅仅是窗口内词符的感受野，这使得它们能构建整个句子的表示。

一些预先选定的输入词符也被赋予全局注意力:对于这些少数词符，注意力矩阵可以访问所有词符（tokens），并且这个过程是对称的:所有其他词符除了它们局部窗口内的词符之外，也可以访问这些特定的词符。这在论文的图2d中有展示，下面是一个样本注意力掩码：

使用参数更少的注意力矩阵，可以让模型处理更长的输入序列。

##
其他技巧

###
轴向位置编码

Reformer模型使用轴向位置编码：在传统的transformer模型中，位置编码矩阵E的大小是\(l\)乘以\(d\)，其中\(l\)是序列长度，\(d\)是隐藏状态的维度。如果你有非常长的文本，这个矩阵可能会非常大，将会占用大量的GPU显存。为了缓解这个问题，轴向位置编码将这个大矩阵E分解成两个较小的矩阵E1和E2，它们的维度分别是\(l{1} \times d{1}\) 和\(l{2} \times d{2}\)，满足\(l{1} \times l{2} = l\)和\(d{1} + d{2} = d\)（通过长度的乘积，最终得到的矩阵要小得多）。在E中，对于时间步\(j\) 的嵌入是通过连接E1中时间步j%l 1 j \% l1 j%l 1 的嵌入和E2中时间步\(j // l1\)的嵌入来获得的。

< > Update on GitHub