Transformers documentation

注意力机制

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.46.3).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

注意力机制

大多数 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%l1j \% l1 的嵌入和E2中时间步\(j // l1\)的嵌入来获得的。

< > Update on GitHub