Translate attention.md into Chinese (#34716)

* try

* tryagain

* tryagggain

* translated

* translated2

* Update docs/source/zh/attention.md

Co-authored-by: Huazhong Ji <hzji210@gmail.com>

---------

Co-authored-by: Huazhong Ji <hzji210@gmail.com>
This commit is contained in:
wwwbai 2024-11-20 02:03:12 +08:00 committed by GitHub
parent befbbf2f98
commit 3033509327
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 0 deletions

View File

@ -86,6 +86,8 @@
title: 🤗Transformers能做什么
- local: tokenizer_summary
title: 分词器的摘要
- local: attention
title: 注意力机制
title: 概念指南
- sections:
- sections:

View File

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