欢迎大家来到IT世界,在知识的湖畔探索吧!
1. 简介1. 简介
1.1 概述
注意力机制彻底改变了深度学习模型,尤其是在处理涉及长距离依赖关系的复杂任务方面,例如自然语言处理 (NLP)、机器翻译甚至图像识别。它最初是在神经机器翻译的背景下引入的,以解决处理长序列的局限性,但后来成为包括Transformers在内的多种现代架构的基础概念。
在开始解释注意力机制之前,我们必须回过头来看看注意力机制要解决的问题。
1.2 动机
在注意力机制和 transformers 出现之前,序列到序列 ( Seq-2-Seq ) 的学习原理基本如下:
欢迎大家来到IT世界,在知识的湖畔探索吧!
使用 RNN 进行序列到序列 (来源:erdem.pl )
只要句子很短,这个解决方案就很好用。编码器完成工作后,我们剩下上下文向量c 和初始解码器状态 s0。这两个向量必须“总结”整个输入序列,因为我们要将它们输入到模型的解码器部分。您可以将上下文向量视为在编码序列和解码序列之间传输信息的东西。
对于长句子,比如T=100 ,我们的上下文向量c很可能无法保存编码序列中的所有有意义的信息。
将第一个句子压缩为上下文向量比对整个引文进行压缩要容易得多。我们可以创建越来越长的上下文向量,但由于 RNN 是连续的,因此无法扩展。这就是注意力机制的作用所在。
上下文向量的局限性
在机器翻译等任务中,由于不同语言的句子结构存在差异,逐字翻译很少能满足需要。
一个简单的例子:
English => French red => rouge dress => robe “red dress” => “robe rouge” Notice how red is before dress in English but rouge is after robe.
欢迎大家来到IT世界,在知识的湖畔探索吧!
在这里,单词的顺序在不同语言之间会发生变化。为了解决这个问题,传统模型使用上下文向量,这是一种中间表示,在生成输出之前将整个输入句子编码为固定大小的向量。
图片来源:Ria Kulshrestha
然而,上下文向量的固定大小是一个主要限制。由于它只能容纳有限量的信息,因此其准确表示较长句子的能力会下降。例如,如果短句中的每个单词都得到同等的关注,那么较长的句子会迫使模型对每个单词分配较少的关注,从而导致信息丢失。结果,输出质量会下降,尤其是在长序列中。
编码器-解码器模型将句子“她正在吃青苹果”翻译成中文。编码器和解码器的可视化随时间展开。| 图片来源:lilianweng
这个问题在早期的Seq2Seq 模型中很明显,较长的输入句子导致模型忘记输入的早期部分。为了解决这个问题,引入了注意力机制,允许模型动态地关注输入的特定部分,而不是依赖单个上下文向量来存储所有信息。
总结
- 处理长距离依赖关系:RNN 等传统模型难以处理长序列。注意力机制使模型能够关注序列的任何部分,而不受距离限制,从而改善语言翻译等任务。
- 并行处理和可扩展性:注意力机制(尤其是在 Transformer 模型中)允许对序列进行并行处理,这与按顺序处理标记的 RNN 不同,从而可以实现更快、更具可扩展性的模型。
- 上下文理解:注意力机制可以提高对上下文关系的理解,使得模型能够聚焦于重要的单词或区域,从而提高机器翻译等任务的准确性。
- 跨领域的灵活性:注意力机制最初用于 NLP,现在已用于计算机视觉等各个领域,它可以突出显示与对象检测等任务相关的图像区域。
- 提高可解释性:注意力通过展示模型关注的内容来提供透明度,有助于理解医疗保健等敏感应用中的决策。
- 增强的 Seq2Seq 性能:注意力机制有助于序列到序列模型(例如在翻译中)通过动态关注输入的不同部分来避免信息丢失,从而提高性能。
2. 注意力机制:一种解决方案
2.1 理念
这个想法是在解码器的每个时间步骤中创建一个新的上下文向量,该向量以不同的方式关注编码序列。注意力机制充当编码器和解码器之间的桥梁,使解码器能够访问所有编码器隐藏状态,而不是仅仅依赖于最终状态。借助这种机制,模型可以专注于输入序列的相关部分,从而使其能够将输入段与其相应的输出段对齐。此对齐过程有助于模型更有效地处理长输入序列。
添加注意层作为编码器和解码器之间的接口。在这里,第一个解码器时间步骤是在给出第一个翻译单词之前准备从编码器接收信息 | 图片来源:Raimi Karim
为了解决“上下文瓶颈”,Bahdanau 等人引入了一种架构,该架构为解码器中的每个时间步骤创建唯一的上下文向量。这是通过计算所有编码器隐藏状态的加权聚合来实现的,而不是将序列汇总为单个向量。
例如,当将“我爱你”翻译成西班牙语“te amo”时,注意力机制会将两种语言中的相关单词对齐。这使得解码器能够在每个解码阶段搜索最相关的编码器时间步骤,而不受输入序列中时间位置的影响。
当模型生成输出序列时,它会不断将当前解码器隐藏状态与所有编码器隐藏状态进行比较,以创建新的上下文向量。这种对输入中重要部分的选择性关注是注意力的本质。在构造句子时,模型会识别编码器隐藏状态中包含最相关信息的位置,从而增强其有效处理长序列的能力。
这种对相关领域的选择性关注就是我们所说的“注意力”。
欲进一步了解,请查看变革性论文:
Bahdanau 等人(2014 年),“通过联合学习对齐和翻译实现神经机器翻译”
Vaswani 等人(2017 年),“注意力就是你所需要的一切”
2.2 注意力机制如何发挥作用?
在我们了解如何使用注意力之前,请允许我分享使用 seq2seq 模型的翻译任务背后的直觉。
这就是一个简单的 seq2seq 模型。我即将介绍的注意力层的逐步计算是一个 seq2seq+注意力模型。下面是这个模型的快速直观图。
直觉:seq2seq + Attention
译者一边阅读德语文本,一边从头到尾记下关键词,然后开始翻译成英文,在翻译每个德语单词时,他都会用到自己记下的关键词。
注意力机制通过为每个单词分配一个分数,将不同的焦点放在不同的单词上。然后,使用 softmax 分数,我们使用编码器隐藏状态的加权和来聚合编码器隐藏状态,以获得上下文向量。
使用 RNN 进行序列到序列(带注意)(来源:erdem.pl)
注意力层的实现可以分为4个步骤。
步骤 0:准备隐藏状态。
首先,我们准备所有可用的编码器隐藏状态(绿色)和第一个解码器隐藏状态(红色)。在我们的示例中,我们有 4 个编码器隐藏状态和当前解码器隐藏状态。(注意:最后一个合并的编码器隐藏状态作为输入输入到解码器的第一个时间步。解码器的第一个时间步的输出称为第一个解码器隐藏状态,如下所示。)
做好准备关注此事 | 图片来源:Raimi Karim
步骤1:获取每个编码器隐藏状态的分数。
分数(标量)由分数函数(也称为对齐分数函数或对齐模型)获得。在此示例中,分数函数是解码器和编码器隐藏状态之间的点积。
获取分数 | 致谢:Raimi Karim
欢迎大家来到IT世界,在知识的湖畔探索吧!decoder_hidden = [10, 5, 10] encoder_hidden score --------------------- [0, 1, 1] 15 (= 10×0 + 5×1 + 10×1, the dot product) [5, 0, 1] 60 [1, 1, 0] 15 [0, 5, 1] 35
在上面的例子中,我们获得了编码器隐藏状态[5, 0, 1]的高注意力分数60。这意味着下一个词(解码器的下一个输出)将受到该编码器隐藏状态的严重影响。
第 2 步:将所有分数通过 softmax 层运行。
我们将分数放入 softmax 层,以便 softmax 分数(标量)加起来为 1。这些 softmax 分数代表注意力分布。
获取 softmax 分数 | 图片来源:Raimi Karim
encoder_hidden score score^ ----------------------------- [0, 1, 1] 15 0 [5, 0, 1] 60 1 [1, 1, 0] 15 0 [0, 5, 1] 35 0
请注意,基于softmaxed分数score^,注意力的分布仅按[5, 0, 1]预期进行。实际上,这些数字不是二进制的,而是0到1之间的浮点数。
步骤 3:将每个编码器隐藏状态乘以其softmax分数。
通过将每个编码器隐藏状态与其 softmax 分数(标量)相乘,我们得到对齐向量或注释向量。这正是对齐发生的机制。
获取对齐向量 | 来源:Raimi Karim
欢迎大家来到IT世界,在知识的湖畔探索吧!encoder score score^ alignment --------------------------------- [0, 1, 1] 15 0 [0, 0, 0] [5, 0, 1] 60 1 [5, 0, 1] [1, 1, 0] 15 0 [0, 0, 0] [0, 5, 1] 35 0 [0, 0, 0]
这里我们看到,由于注意力得分低,除[5, 0, 1] 之外的所有编码器隐藏状态的对齐都降低为 0。这意味着我们可以预期第一个翻译的单词应该与带有[5, 0, 1]嵌入的输入单词相匹配。
步骤4:对对齐向量求和。
将对齐向量相加以产生上下文向量。上下文向量是上一步中对齐向量的聚合信息。
获取上下文向量 | 来源:Raimi Karim
encoder score score^ alignment --------------------------------- [0, 1, 1] 15 0 [0, 0, 0] [5, 0, 1] 60 1 [5, 0, 1] [1, 1, 0] 15 0 [0, 0, 0] [0, 5, 1] 35 0 [0, 0, 0]context = [0+5+0+0, 0+0+0+0, 0+1+0+0] = [5, 0, 1]
步骤5:将上下文向量输入解码器。
实现方式取决于架构设计。稍后我们将在示例中看到架构如何利用上下文向量进行解码器。
将上下文向量输入到解码器 | 来源:Raimi Karim
就是这样!以下是整个动画:
注意 | 致谢:Raimi Karim
训练和推理
在推理过程中,每个解码器时间步骤 t 的输入都是解码器时间步骤 t-1 的预测输出。
在训练过程中,每个解码器时间步骤 t 的输入都是解码器时间步骤 t-1 的
真实输出。直觉:注意力究竟是如何起作用的?
答案:反向传播,令人惊讶。反向传播将尽一切努力确保输出接近真实值。这是通过改变 RNN 中的权重和得分函数(如果有)来实现的。这些权重将影响编码器隐藏状态和解码器隐藏状态,进而影响注意力得分。
3. 模型中的注意力机制
以下是注意力在模型中的典型运作方式:
- 输入序列表示:
- 该模型处理输入数据并为序列的每个标记(或部分)生成隐藏状态(表示)。
- 这些隐藏状态捕获与整个输入相关的每个标记的上下文。
2.注意力评分:
- 在每个解码步骤中,模型都会为输入序列中的每个标记生成一个注意力分数。
- 分数决定了 token 对于生成当前输出的相关性或重要性。这通常是通过使用点积或学习变换将当前解码器状态与编码器隐藏状态进行比较来计算的。
- 使用 softmax 函数对分数进行标准化,从而得到总和为 1 的注意力权重。
3.加权总和:
- 然后,注意力机制通过对编码器隐藏状态进行加权和来计算上下文向量。每个隐藏状态对上下文向量的贡献由其注意力权重决定。
- 上下文向量现在包含输入的聚焦表示,强调与生成当前输出标记最相关的部分。
4.解码:
- 解码器使用这个上下文向量以及它自己的隐藏状态来生成输出序列中的下一个标记。
- 对输出序列中的每个标记重复此过程,从而允许模型在每个步骤中自适应地关注输入的不同部分。
图片来源:Ria Kulshrestha
注意力机制试图通过允许解码器模型访问所有隐藏状态(而不是由编码器的最后一个隐藏状态构建的单个向量(又称中间状态))来克服中间状态的信息瓶颈,同时预测每个输出。
计算解码器模型的下一个隐藏状态。
解码器中单元的输入现在获得以下值:
- 解码器模型的先前隐藏状态 Hₖ – ₁。
- 解码器模型的先前输出Yₖ – ₁。
- 上下文向量 Cₖ ——所有编码器隐藏状态 (hⱼ )的加权和,又称注释。(新增)
4.注意力机制的类型
在现代深度学习中,已经开发了各种类型的注意力机制,每种机制都针对序列建模的不同方面,并增强模型关注相关信息的能力。以下是最广泛使用的类型:
鸣谢:lilianweng
4.1 Bahdanau 注意力(加性注意力)
提出者:Dzmitry Bahdanau 等人(2014 年)
Bahdanau Attention,也称为Additive Attention,是一种在序列到序列模型中计算注意力权重值的方法。它由 Dzmitry Bahdanau、Kyunghyun Cho 和 Yoshua Bengio 于 2014 年在他们的论文“通过联合学习对齐和翻译的神经机器翻译”中提出。
Bahdanau 等人的 NMT。编码器是 BiGRU,解码器是 GRU。
工作原理:
- 它通过学习解码器的隐藏状态和编码器的隐藏状态之间的对齐分数来计算注意力权重。然后这些分数通过 softmax 函数将其归一化为概率。
- 每个注意权重表示每个输入标记与当前输出标记的相关性。
- 最终的上下文向量是基于这些注意力权重的编码器隐藏状态的加权和。
以下是 Bahdanau 注意力机制的详细解释:
步骤 1:兼容性分数计算
- 在每个解码时间步,Bahdanau 注意力机制都会计算解码器的前一个隐藏状态 ( si −1) 和每个编码器隐藏状态 ( hj )之间的兼容性分数。
- 该兼容性分数通常使用以si −1 和hj 作为输入的前馈神经网络(通常是单层神经网络)来计算。
- 从数学上来说,编码器隐藏状态hj 和解码器隐藏状态si −1 的兼容性分数eij 计算如下:
第 2 步:注意力权重
- 一旦计算出兼容性分数,它们就会通过另一个神经网络(通常是单层神经网络,然后是 softmax 激活)来获得注意力权重。
- 从数学上来说,解码时间步i处编码器隐藏状态hj 的注意力权重αij 计算如下:
步骤3:上下文向量
- 通过计算注意力权重,对编码器隐藏状态进行加权和可以得到当前解码时间步长i的上下文向量ci ,其中权重由注意力权重给出。
- 从数学上来说,上下文向量ci 的计算方法如下:
数学基础:使用学习的前馈网络计算分数:
其中St是解码器隐藏状态,hi 是编码器隐藏状态,Ws、Wh、v是学习到的参数。
作者在 WMT’14 英语到法语数据集上获得了26.75的 BLEU 分数。
直觉:具有双向编码器 + 注意力机制的 seq2seq
译员 A 一边阅读德语文本,一边记下关键词。译员 B(由于具有从后往前翻译句子的额外能力,因此担任高级职务)一边从最后一个单词到第一个单词阅读同一篇德语文本,一边记下关键词。两人定期讨论到目前为止阅读的每一个单词。阅读完这篇德语文本后,译员 B 的任务是,根据讨论和两人都掌握的综合关键词,将德语句子逐字逐句地翻译成英语。
翻译器A是前向RNN,翻译器B是后向RNN。
优点:Bahdanau Attention 提高了模型处理长序列的能力,并帮助解码器决定在输出生成的每个步骤中要关注输入的哪部分。
4.2 Luong Attention(乘法注意力)
介绍人:Minh-Thang Luong 等人。 (2015)
Luong Attention,也称为乘法注意力,是另一种注意力机制,其不同之处在于对齐分数的计算方式。它以 Bahdanau Attention 为基础,但通过利用点积,使用了一种更简单、更高效的评分方法。
Luong 等人的 NMT。编码器是一个 2 层 LSTM,解码器也是如此。
工作原理:
- Luong Attention 不是学习单独的前馈层,而是使用解码器隐藏状态和编码器隐藏状态之间的点积来计算注意力分数。
- 评分函数有三种类型:
- 点积:
2. 一般规定:
3. 连接:与Bahdanau类似,但包含输入的连接。
公式(点积):
其中hi是编码器隐藏状态,st 是解码器隐藏状态。
在 Luong 注意力机制中,与 Bahdanau 注意力机制的第一个区别在于,Luong 注意力机制不考虑解码器端的先前隐藏状态值,而是结合了解码器的当前时间戳隐藏状态值。
第二个区别在于计算注意力权重(α )值的方法:Luong 注意力利用解码器当前时间戳隐藏状态( si)与每个编码器隐藏状态(hi )之间的点积。
在 Luong 注意力机制中,最后一个区别是上下文向量ci 直接传递到 LSTM 单元的输出中,这与 Bahdanau 注意力机制中将上下文向量与 LSTM 单元的输入连接在一起的方法形成对比。这种将上下文向量简化到 LSTM 单元输出中的集成简化了解码过程,并增强了模型生成准确输出的能力。图表确实可以帮助直观地理解这些概念。
在 WMT’15 英语到德语的翻译中,该模型取得了25.9的 BLEU 分数。
直觉:带有 2 层堆叠编码器 + 注意力机制的 seq2seq
译者 A 一边阅读德语文本,一边记下关键词。同样,译者 B(比译者 A 资历高)也一边阅读德语文本,一边记下关键词。请注意,初级译者 A 必须向译者 B 汇报他们读到的每个单词。读完后,他们两人根据各自掌握的综合关键词,一起将句子逐字逐句地翻译成英文。
优点:由于使用简单的点积,Luong Attention 在计算上效率更高,这使得它对于大型模型来说速度更快、更具可扩展性。
4.3 自注意力(尺度点积注意力)
提出者:Vaswani 等人(2017 年)在 Transformer 中
自注意力机制允许模型关注同一输入序列的不同部分。此机制是Transformers的关键,它使序列中的每个标记能够关注其他每个标记,从而学习序列中的全局依赖关系。
工作原理:
- 每个输入标记表示为查询(Q)、键(K)和值(V)向量。
- 注意力分数是通过一个标记的查询向量与序列中所有其他标记的关键向量之间的点积来计算的。
- 使用softmax对结果进行归一化,最终输出是值向量的加权和,其中权重来自注意力分数。
好吧,我们已经讨论过,传统的深度学习模型很难从序列数据中有效地捕获长期依赖关系和上下文信息。
但除此之外,您是否想过,“构建任何自然语言处理 (NLP) 应用程序的最重要的要求是什么?”
我希望你猜对了!这是将单词转换为数字,称为矢量化。
以前,输入序列通常表示为一组向量,其中每个向量代表语料库中的一个标记,通过独热编码、词袋、TF-IDF等方法生成,这些方法严重依赖于词频。
但是这些方法很难捕捉到同一句子中使用“钱库”和“河岸”等短语所传达的重要含义,例如“她参观了河岸附近的钱库”。
为了解决这个问题,我们使用了“词嵌入”,它足够强大,可以捕捉单词的语义,以找到标记之间的相似性,用维向量 dₘ表示 (可以是 512、256 甚至 64 维)。
但问题是它们是静态嵌入。这意味着,这些向量是通过对大量文本进行训练而创建的,然后将它们用于各种 NLP 任务。这样,它们就只能捕获 token 的平均含义,而不管该词出现在什么上下文中。
例如,“银行”一词无论是在金融机构还是河边的语境中使用,都会具有相同的向量。
这就是为什么我们使用“自我注意力”机制,使用“静态嵌入”作为输入来生成合理的“上下文嵌入”。
它允许根据周围的词语动态理解任何 NLP 任务中的上下文。
4.3.1 自注意力模块里面有什么?
注意力机制基于三个输入进行运作:
- 查询(Q):这个矩阵是我们当前关注的词。
- 键(K):这个矩阵代表我们正在与查询进行比较的文档中的所有单词。
- 值(V):该矩阵保存输入文档中每个单词的实际上下文。
致谢:你只需要关注
这些是自注意力机制背后的重要组成部分。因为它们允许模型查看一个单词(查询),然后将它与其他每个单词(键)进行比较,最后决定对每个单词给予多少关注(值)。
现在,您已经了解了自注意力机制仅处理一种类型的输入序列。但这到底意味着什么呢?让我们深入探讨一下。
4.3.2 自注意力机制如何发挥作用?
让我们一步一步地解开它。
步骤 1:计算查询、键和值矩阵
首先,我们将句子的每个标记转换为三个不同的向量Q、K和V。
Query、Key和Value矩阵是通过输入矩阵X和权重矩阵W(可学习参数)的矩阵乘法来计算的。
第 2 步:计算注意力分数
接下来,我们计算每个单词应该对其他单词的关注程度。这是通过对查询和关键字矩阵进行点积来实现的。
该输出矩阵表示两个输入向量之间的相似性(或简称兼容性)。
步骤 3:调整分数
(重要)处理高维矩阵时,点积会导致非常大的方差。这会导致模型不稳定。
原因如下:
在反向传播过程中,对于较大的点积值,softmax 函数会产生极大的梯度。由于梯度较小,这会导致在训练过程中对较小点积值的更新可以忽略不计,从而导致模型陷入梯度消失问题。
因此,为了缓解这个问题,点积会根据关键向量维数的平方根进行缩放,即√dₖ。
这就是为什么它被称为比例点积注意力机制。
步骤 4:应用 Softmax 函数
然后,我们将这些缩放分数通过 softmax 函数来将值标准化为0到1之间。
这是为了确保兼容性分数遵循概率分布,每个标记的权重总和为1或100%,称为注意力权重矩阵。
比例点积注意力公式
而从我之前的文章中我们知道,这些概率值代表了序列中每个token应该得到多少关注,表明了它们对最终的上下文向量的重要性和贡献。
第 5 步:衡量价值
这些概率用于计算与值 矩阵的加权乘法。
最后,这将为我们提供特定于文本的 上下文输出嵌入。
优点:
- 与 RNN 和 LSTM 相比,自注意力机制 (Self-Attention) 能够更有效地捕获序列中的长程依赖关系。
- 它允许并行计算,从而实现更快的训练。
好了,我们已经讨论了自注意力机制以及它如何让模型关注输入序列的不同部分。但如果我们可以从不同的角度多次执行此操作,会怎么样?
考虑一下这句话,“银行可以成为救星。 ”
这是指金融机构,还是河边?
这就是多头注意力机制发挥作用的地方。
4.4 多头注意力
提出者:Vaswani 等人(2017 年)在 Transformer 中
多头注意力机制是自注意力机制的扩展,用于Transformer模型。多头注意力机制不使用单一的注意力分数集,而是并行应用多种注意力机制,让模型能够同时关注输入序列的不同部分。
工作原理:
- 输入被线性投影到多组查询、键和值中。
- 对于每个头部,独立应用自我注意力,并将结果连接并线性变换以产生最终输出。
- 这使得模型可以并行捕获序列的不同方面(例如,位置依赖性、语义关系)。
多头注意力机制
在多头注意力机制中,上述过程通过查询、键和值矩阵的不同线性投影重复多次。
这有点数学化,但请听我说:
步骤 1:线性投影
对于每个头,使用学习到的权重矩阵将输入序列线性投影到查询、键和值中:
第二步:缩放点积注意力机制
每组查询、键和值矩阵都独立地经过缩放的点积注意机制:
步骤 3:连接
现在,所有注意力头的输出被连接起来:
步骤 4:最终线性投影
最后,使用另一个学习到的权重矩阵对连接的输出进行投影,以产生最终输出:
多头注意力公式
因此,使用多个头部意味着每个头部可以同时关注输入序列的不同部分。一个头部可能会关注句子的整体结构,而另一个头部则同时关注具体细节。
当你把所有这些观点结合起来时,你将对输入序列有更全面的理解(就像我们人类一样)。
优点:
- 多头注意力机制使模型能够捕捉序列内的多种关系,提高其关注数据不同部分的能力。
- 它可以更好地表示复杂的依赖关系和上下文。
4.5 交叉注意力
用途:Transformer 编码器-解码器架构
交叉注意力机制是序列到序列模型中使用的一种机制,例如 Transformer 的编码器-解码器结构。与在同一输入序列中起作用的自注意力机制不同,交叉注意力机制允许解码器关注编码器的输出,这在机器翻译等任务中至关重要。
工作原理:
- 解码器在生成输出序列中的每个 token 时,使用交叉注意力来关注编码器的输出序列(而不是它自己的序列)。
- 解码器从其自身的隐藏状态生成查询,而键和值则从编码器的输出状态生成。这使得解码器能够选择性地关注输入句子的不同部分。
自注意力处理单个输入序列,而交叉注意力涉及两个不同的输入序列。
简单地说,这就是唯一的区别。
这对于机器翻译等任务至关重要,因为您需要处理源语言(如英语)和目标语言(如法语)[1]。
交叉注意力机制在 Transformer 模型中充当编码器和解码器之间的桥梁。其工作原理如下:
利用交叉注意机制的多头注意层
- 编码器输出:编码器处理源语言(英语)并产生一组编码表示。
- 解码器输入:解码器采用目标语言(法语)输入序列。
- 交叉注意 (Cross-Attention):编码器的输出(编码表示)用作交叉注意机制中的Key和Value ,而Query则来自前一个解码器的层,以实现多头注意 (Multi-Head Attention)。
那么,为什么这很重要?
通过使用交叉注意机制,解码器的每个部分都可以关注输入序列的任意部分。这使得模型能够学习两个序列之间不同的语言转换模式,从而实现更准确、更流畅的翻译。
我们已经讨论了多头注意力。但是,掩蔽多头注意力又如何呢?
事情变得更加有趣,特别是当涉及到语言建模和文本生成等任务时。
4.5.1 掩蔽多头注意力
它是一种多头注意力机制,主要用于 Transformer 架构的解码器部分。它旨在确保在训练过程中,模型在预测序列中的下一个标记时不会通过查看未来的标记来“作弊” 。
掩蔽多头注意力机制如何工作?
好吧,让我们分解一下“掩盖未来代币”的过程:
在掩蔽多头注意力机制中,我们只需引入一个掩蔽,防止每个标记关注任何未来的标记。
掩蔽多头注意力机制
这通常是通过在应用 softmax 函数之前将这些未来标记的注意力分数设置为非常大的负数(或负无穷大)来有效地消除它们的影响。
Masked-Attention机制可以表示为:
就像常规的多头注意力一样,掩蔽注意力也可以应用于多个头。
每个头部独立运行,学习输入的不同方面,然后将结果连接起来并线性投影以形成最终输出。
这为何重要?
因为它允许模型生成连贯且上下文准确的序列(一次一个标记),而无需窥视未来的信息,以保持顺序数据处理的完整性。
就是这样!这些就是Transformer 架构中使用的 3 种自注意力机制,它们彻底改变了 NLP 的世界。
4.6 谷歌的神经机器翻译(GNMT)
因为我们大多数人一定都以某种方式使用过谷歌翻译,所以必须谈谈谷歌的 NMT,它于 2016 年实施。GNMT 是我们之前见过的 2 个例子的组合。
- 编码器由 8 个 LSTM 堆栈组成,其中第一个是双向的(其输出是串联的),并且连续层的输出之间存在残差连接(从第 3 层开始)。解码器是8 个单向 LSTM 的单独堆栈。
- 使用的评分函数是加法/连接。
- 同样,下一个解码器步骤的输入是前一个解码器时间步骤的输出(粉色)与当前时间步骤的上下文向量(深绿色)之间的连接。
Google 的 Google 翻译 NMT。跳过连接用弯曲箭头表示。*请注意,LSTM 单元仅显示隐藏状态和输入;它不显示单元状态输入。
该模型在 WMT’14 英语到法语的翻译中取得了38.95 BLEU,在 WMT’14 英语到德语的翻译中取得了24.17 BLEU。
直觉:GNMT——带有 8 堆叠编码器的 seq2seq(+双向+残差连接)+注意力
8 位译者从下往上排成一列,从译者 A、B、……、H 开始。每位译者阅读同一篇德语文本。每读完一个字,译者 A 都会将自己的发现告诉译者 B,而译者 B 则会改进它,然后再告诉译者 C — — 如此反复,直到译者 H。同时,译者 H 在阅读德语文本时,会根据自己所了解的内容和所获得的信息,写下相关的关键词。
当每个人都读完这篇英文文本后,翻译 A 被要求翻译第一个单词。首先,他试着回忆,然后他与翻译 B 分享他的答案,翻译 B 改进答案并与翻译 C 分享——重复这个过程,直到我们到达翻译 H。然后,翻译 H 根据他写的关键词和他得到的答案写出第一个翻译单词。重复这个过程,直到我们得到翻译。
4.7 全局和局部注意力
图片来源:TheAISummer
除了乘性注意力之外,Luong 等人还在2015 年的论文中引入了全局注意力和局部注意力。
全局注意力:
1. 在全局注意力中,模型在计算注意力分数时会考虑整个输入序列,当输入的所有部分都可能对输出有所贡献时,这很有用。
2. 这通常用于翻译之类的任务,其中整个句子中的单词或短语与输出的不同点相关。
局部注意力:
1. 在局部注意力中,模型将焦点限制在当前标记周围的一个小型预定义窗口中。在只有附近的标记可能影响输出的情况下,这种方法可能更有效。
2. 它减少了计算开销,但可能会错过长距离依赖关系。
[徐2015 ]
4.8 硬注意力和软注意力
[徐2015;梁2015 ]
在他们的论文《Show, Attend, and Tell》中,徐等人引入了硬注意力和软注意力的概念,特别是针对图像字幕任务。
硬注意力:
– 随机注意力:模型选择要关注的特定区域。
– 优点:通过仅关注选定的区域来降低计算复杂度。
– 缺点:需要强化学习进行训练,因此更难优化。
软注意力:
– 确定性注意力:对所有输入特征应用加权平均值。
– 优点:使用标准反向传播更容易训练。
– 缺点:关注输入的所有部分,但可能不太集中。
5. LSTM 上的注意力机制
由程先生于 2016 年推出
程建鹏在 2016 年发表的论文《用于机器阅读的长短期记忆网络》中,主要贡献是将注意力机制与LSTM 网络结合用于机器阅读任务。具体来说,该论文在 LSTM 上引入了注意力机制,以提高模型理解和回答文本段落问题的性能,这对于机器阅读理解等任务至关重要。
2016 年论文的主要亮点:
- LSTM 中的注意力机制:
- Cheng 引入了一种注意力机制,让 LSTM 模型在回答特定问题时能够关注文本的不同部分。这种注意力机制使模型能够根据输入问题动态地“关注”更相关的单词或段落。
- 这是注意力机制与 LSTM 网络结合的早期用途之一,通过关注输入序列中最重要的部分,使模型在机器阅读任务中表现更好。
2.机器阅读任务:
- 这篇论文主要关注系统阅读一段文本并回答相关问题的任务。注意力机制帮助模型在较长的文本段落中找到相关信息。
3.与自我注意力的区别:
- 这里引入的注意力机制是在输入序列的不同部分和外部上下文(例如,被问到的问题)之间,而不是像Self-Attention那样关注同一序列的不同部分。
- 这篇论文中的注意力机制更加符合早期序列到序列模型中见到的编码器-解码器注意力机制,而不是 Transformer 在 2017 年后期引入的自注意力机制。
因此,虽然 Cheng 的论文为展示注意力机制对循环网络 (LSTM) 的威力奠定了重要基础,但它并没有引入自注意力机制 (Self-Attention ) ,而自注意力机制在 Vaswani 等人 2017 年的 Transformer 论文中得到了充分实现。
6. 评分函数
以下是 Lilian Weng 整理的一些评分函数。本文中提到了评分函数加法/连接和点积。涉及点积运算(点积、余弦相似度等)的评分函数背后的思想是测量两个向量之间的相似度。对于前馈神经网络评分函数,其思想是让模型在学习翻译的同时学习对齐权重。
评分函数总结
得分函数总结。h 表示编码器隐藏状态,s 表示解码器隐藏状态。(图片来源)
7.计算机视觉中的注意力机制
注意力机制最初在自然语言处理 (NLP) 领域取得成功,它在计算机视觉领域也表现出良好的效果,它可以帮助模型在图像分类、对象检测和语义分割等任务中关注图像中的特定区域或特征。
7.1 计算机视觉中的注意力类型
空间注意力:模型通过为不同区域分配注意力分数来学习关注图像的重要区域。这些分数对每个区域的特征进行加权,帮助模型对图像的相关部分进行优先排序。
参考文献:Wang 等人的《
用于图像分类的残差注意力网络》 (2017 年)
通道注意力:专注于选择信息量最大的特征通道。计算特征图中的每个通道的注意力分数,使模型能够优先考虑重要通道。
参考文献:Hu 等人的
挤压和激励网络(2017 年)
自注意力:自注意力也称为非局部操作,它将图像中任意位置的响应计算为所有位置特征的加权和,从而使模型能够捕捉卷积层处理的局部区域之外的全局上下文。
参考文献:Wang 等人的
《非局部神经网络》 (2018 年)
7.2 主要应用
物体检测和分割:空间注意力帮助模型聚焦于物体区域,忽略背景噪音,从而提高检测和分割的准确性。
参考文献:Bellemare 等人的《
使用深度强化学习和注意力机制进行物体检测》(2016 年)
图像字幕:注意力机制引导模型在字幕生成的每个步骤中关注不同的图像区域,从而生成更准确、更具描述性的字幕。
参考文献:Xu 等人的《展示、注意和讲述:利用视觉注意力的神经图像字幕生成》 (2015 年)
视觉问答 (VQA):在 VQA 任务中,注意力机制根据问题将模型引导至图像的相关部分,从而提高生成答案的准确性。
参考文献:Anderson 等人的《自下而上和自上而下的视觉问答注意力机制》 (2017 年)
视觉中的 Transformers:视觉 Transformers (ViTs) 将图像视为块序列,应用自注意力机制,类似于 Transformers 在 NLP 中处理标记的方式。这种方法已在多个视觉任务中取得成功。
参考文献:
《一张图片胜过 16×16 个单词:用于大规模图像识别的 Transformers》,作者:Dosovitskiy 等人 (2020)
7.3 优点
注意力机制允许计算机视觉模型动态分配计算资源,重点关注图像或特征图中最重要的部分。这可以提高复杂视觉任务的性能。
8. 结论
注意力机制从根本上改变了深度学习的格局,特别是在处理涉及顺序数据的复杂任务时。注意力机制最初是为了克服 RNN 和 LSTM 等传统模型的局限性而引入的,它允许模型动态地关注输入序列中最相关的部分,而不管其长度或结构如何。这在机器翻译、文本摘要和图像字幕等任务中尤其重要,因为这些任务中的元素之间的上下文和关系至关重要。
在本篇博文中,我们探讨了注意力机制背后的核心思想,分解了其工作原理,例如如何计算兼容性分数、注意力权重和上下文向量。我们深入研究了各种类型的注意力机制,从Bahdanau和Luong Attention到更先进的方法,如自注意力和多头注意力,它们构成了Transformers等现代架构的基础。
注意力机制的多功能性不仅限于基于文本的应用程序,它在计算机视觉任务中的应用也越来越广泛,它可以帮助模型聚焦于图像的特定区域,从而提高对象检测和图像分类等任务的性能。
总之,注意力机制不仅通过改进对长距离依赖关系的处理来提高模型性能,而且还增加了模型的可解释性和可扩展性。随着人工智能领域的不断发展,注意力机制很可能仍将处于最前沿,影响新架构的设计并扩大其在不同领域的应用范围。
参考:
https://medium.com/@vipra_singh/llm-architectures-explained-attention-part-5-495bbe3d278e
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/89461.html