File tree Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Original file line number Diff line number Diff line change 8686 title : 🤗Transformers能做什么
8787 - local : tokenizer_summary
8888 title : 分词器的摘要
89+ - local : attention
90+ title : 注意力机制
8991 title : 概念指南
9092- sections :
9193 - sections :
Original file line number Diff line number Diff line change 1+ <!-- 版权2023年HuggingFace团队保留所有权利。
2+
3+ 根据Apache许可证第2.0版(“许可证”)许可;除非符合许可证,否则您不得使用此文件。您可以在以下网址获取许可证的副本:
4+
5+ http://www.apache.org/licenses/LICENSE-2.0
6+
7+ 除非适用法律要求或书面同意,否则按“按原样”分发的软件,无论是明示还是暗示的,都没有任何担保或条件。请参阅许可证以了解特定语言下的权限和限制。
8+
9+ ⚠️ 请注意,本文件虽然使用Markdown编写,但包含了特定的语法,适用于我们的doc-builder(类似于MDX),可能无法在您的Markdown查看器中正常渲染。
10+
11+ -->
12+
13+ # 注意力机制
14+
15+ 大多数 transformer 模型使用完全注意力机制,该机制采用正方形的注意力矩阵。当输入很长的文本时,这将导致巨大的计算瓶颈。Longformer 和 Reformer 是提高注意力机制效率的改进模型,它们使用稀疏化的注意力矩阵来加速训练。
16+
17+ ## 局部敏感哈希注意力机制(LSH attention)
18+
19+ [ Reformer] ( model_doc/reformer ) 使用LSH(局部敏感哈希)的注意力机制。在计算softmax(QK^t)时,只有矩阵QK^t中的最大元素(在softmax维度上)会做出有用的贡献。所以对于Q中的每个查询q,我们只需要考虑K中与q接近的键k,这里使用了一个哈希函数来确定q和k是否接近。注意力掩码被修改以掩盖当前的词符(token)(除了第一个位置之外),因为这样会使得查询和键相等(因此非常相似)。由于哈希可能会有些随机性,所以在实践中使用多个哈希函数(由n_rounds参数确定),然后一起求平均。
20+
21+ ## 局部注意力机制(Local attention)
22+ [ Longformer] ( model_doc/longformer ) 使用局部注意力机制:通常情况下,局部上下文(例如,左边和右边的两个词符是什么?)对于给定词符的操作已经足够了。此外,通过堆叠具有小窗口的注意力层,最后一层将拥有不仅仅是窗口内词符的感受野,这使得它们能构建整个句子的表示。
23+
24+ 一些预先选定的输入词符也被赋予全局注意力:对于这些少数词符,注意力矩阵可以访问所有词符(tokens),并且这个过程是对称的:所有其他词符除了它们局部窗口内的词符之外,也可以访问这些特定的词符。这在论文的图2d中有展示,下面是一个样本注意力掩码:
25+
26+ <div class =" flex justify-center " >
27+ <img scale="50 %" align="center" src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/local_attention_mask.png"/>
28+ </div >
29+
30+ 使用参数更少的注意力矩阵,可以让模型处理更长的输入序列。
31+
32+ ## 其他技巧
33+
34+ ### 轴向位置编码
35+
36+ [ Reformer] ( model_doc/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 \% l1\\ ) 的嵌入和E2中时间步\\ (j // l1\\ )的嵌入来获得的。
37+
You can’t perform that action at this time.
0 commit comments