首页 > 其他分享 >注意力机制:深度学习中的关键技术

注意力机制:深度学习中的关键技术

时间:2025-01-14 20:44:01浏览次数:1  
标签:编码器 关键技术 模型 解码器 深度 序列 注意力 输入

LLM架构从基础到精通之注意力机制

本文2w字,阅读时长~~ 看速度
2025年01月14日 晴 零下3度

1. LLM大模型架构专栏|| 从NLP基础谈起
2.LLM大模型架构专栏|| 自然语言处理(NLP)之建模
3. LLM大模型架构之词嵌入(Part1)
4. LLM大模型架构之词嵌入(Part2)
5. LLM大模型架构之词嵌入(Part3)
6. LLM架构从基础到精通之循环神经网络(RNN)
7. LLM架构从基础到精通之LSTM
8. LLM架构从基础到精通之门控循环单元(GRUs)
欢迎关注公众号 柏企科技圈 如果您有任何问题或建议,欢迎在评论区留言交流!

目录

  1. 引言
    • 1.1 概述
    • 1.2 动机
  2. 注意力机制:解决方案
    • 2.1 核心思想
    • 2.2 工作原理
  3. 模型中的注意力机制
  4. 注意力机制的类型
    • 4.1 Bahdanau注意力(加法注意力)
      • 步骤1:兼容性得分计算
      • 步骤2:注意力权重计算
      • 步骤3:上下文向量计算
    • 4.2 Luong注意力(乘法注意力)
    • 4.3 自注意力(缩放点积注意力)
      • 4.3.1 自注意力模块内部结构
      • 4.3.2 自注意力工作原理
        • 步骤1:计算查询、键和值矩阵
        • 步骤2:计算注意力得分
        • 步骤3:缩放得分
        • 步骤4:应用Softmax函数
        • 步骤5:对值进行加权
    • 4.4 多头注意力
      • 步骤1:线性投影
      • 步骤2:缩放点积注意力计算
      • 步骤3:拼接
      • 步骤4:最终线性投影
    • 4.5 交叉注意力
      • 4.5.1 掩码多头注意力
    • 4.6 谷歌神经机器翻译(GNMT)
    • 4.7 全局与局部注意力
    • 4.8 硬注意力与软注意力
  5. LSTM上的注意力机制
  6. 得分函数
  7. 计算机视觉中的注意力机制
    • 7.1 计算机视觉中注意力的类型
    • 7.2 关键应用
    • 7.3 优势

1. 引言

1.1 概述

注意力机制彻底改变了深度学习模型,特别是在处理涉及长距离依赖的复杂任务时,如自然语言处理(NLP)、机器翻译,甚至图像识别。它最初在神经机器翻译的背景下被提出,以解决处理长序列时的局限性,但此后已成为包括Transformer在内的多种现代架构中的基础概念。

在开始解释注意力机制之前,我们必须回顾一下它旨在解决的问题。

1.2 动机

在注意力机制和Transformer出现之前,序列到序列(Seq - 2 - Seq)学习的工作方式大致如下:

基于循环神经网络(RNN)的序列到序列模型(来源:erdem.pl)

只要句子较短,这种解决方案就能很好地工作。编码器完成工作后,我们得到上下文向量c和初始解码器状态s0。这两个向量必须 “总结” 整个输入序列,因为我们要将它们输入到模型的解码器部分。你可以将上下文向量视为在编码序列和解码序列之间传递信息的工具。

对于像T = 100这样的长句子,我们的上下文向量c极有可能无法容纳编码序列中的所有有意义信息。

将第一个句子压缩到上下文向量中比压缩一整段引用要容易得多。我们可以创建越来越长的上下文向量,但由于RNN是顺序处理的,这种方法无法扩展。这就是注意力机制发挥作用的地方。

上下文向量的局限性

在机器翻译等任务中,由于不同语言的句子结构存在差异,逐字翻译往往是不够的。

一个简单的例子:
英语 => 法语
red => rouge
dress => robe
“red dress” => “robe rouge”

注意在英语中red在dress之前,而在法语中rouge在robe之后。

在这里,单词的顺序在不同语言之间发生了变化。为了处理这种情况,传统模型使用上下文向量,这是一种在生成输出之前将整个输入句子编码为固定大小向量的中间表示。

然而,上下文向量的固定大小是一个主要限制。由于它只能容纳有限的信息,其准确表示较长句子的能力会下降。例如,如果在短句子中每个单词都得到相同的关注,那么较长的句子会迫使模型为每个单词分配较少的关注,从而导致信息丢失。结果,输出的质量会下降,尤其是在长序列中。

编码器 - 解码器模型将句子 “she is eating a green apple” 翻译成中文。编码器和解码器的可视化是按时间展开的。

这个问题在早期的Seq2Seq模型中很明显,较长的输入句子会导致模型忘记输入的早期部分。为了克服这个问题,引入了注意力机制,使模型能够动态地关注输入的特定部分,而不是依赖单个上下文向量来存储所有信息。

总结

  1. 处理长距离依赖:像RNN这样的传统模型在处理长序列时遇到困难。注意力机制使模型能够关注序列的任何部分,而不受距离的影响,从而改善了语言翻译等任务。
  2. 并行处理和可扩展性:注意力机制,特别是在Transformer模型中,允许对序列进行并行处理,这与RNN按顺序处理标记不同,从而产生更快、更具可扩展性的模型。
  3. 上下文理解:注意力机制提高了对上下文关系的理解,使模型能够关注重要的单词或区域,从而在机器翻译等任务中提高准确性。
  4. 跨领域灵活性:注意力机制最初用于NLP,现在已应用于各个领域,如计算机视觉,在对象检测等任务中突出显示相关的图像区域。
  5. 可解释性提高:注意力机制通过显示模型关注的内容提供了透明度,有助于在医疗保健等敏感应用中理解决策。
  6. 增强Seq2Seq性能:注意力机制帮助序列到序列模型,如在翻译中,通过动态关注输入的不同部分来避免信息丢失,从而提高性能。

2. 注意力机制:解决方案

2.1 核心思想

其核心思想是在解码器的每个时间步创建一个新的上下文向量,该向量对编码序列的关注方式不同。注意力机制充当编码器和解码器之间的桥梁,使解码器能够访问所有编码器隐藏状态,而不是仅仅依赖于最后一个状态。通过这种机制,模型可以专注于输入序列的相关部分,使其能够将输入段与相应的输出段对齐。这种对齐过程有助于模型更有效地处理长输入序列。

在编码器和解码器之间添加一个注意力层作为接口。在这里,第一个解码器时间步在给出第一个翻译单词之前准备好从编码器接收信息(来源:Raimi Karim)

为了解决 “上下文瓶颈” 问题,Bahdanau等人引入了一种架构,为解码器中的每个时间步创建一个独特的上下文向量。这是通过对所有编码器隐藏状态进行加权聚合来实现的,而不是将序列总结为单个向量。

例如,当将 “I love you” 翻译成西班牙语 “te amo” 时,注意力机制会对齐两种语言中的相关单词。这使得解码器能够在每个解码阶段搜索最相关的编码器时间步,而与输入序列中的时间位置无关。

当模型生成输出序列时,它会不断将当前解码器隐藏状态与所有编码器隐藏状态进行比较,以创建一个新的上下文向量。这种对输入中重要部分的选择性关注就是注意力机制的本质。在构建句子时,模型会识别编码器隐藏状态中包含最相关信息的位置,从而增强其有效处理长序列的能力。

这种对相关区域的选择性关注就是我们所说的 “注意力”。

如需进一步阅读,请查看以下具有变革性的论文:

  1. Bahdanau等人(2014),《通过联合学习对齐和翻译进行神经机器翻译》
  2. Vaswani等人(2017),《注意力就是你所需要的一切》

2.2 工作原理

在了解注意力机制的应用之前,请允许我分享一下使用seq2seq模型进行翻译任务的直觉。

直觉:seq2seq模型

一个翻译人员从前往后阅读德语文本。读完后,他开始逐字将其翻译成英语。如果句子非常长,他可能会忘记文本前面部分的内容。

这就是一个简单的seq2seq模型。接下来我要介绍的注意力层的逐步计算过程是一个seq2seq + 注意力模型。下面是对这个模型的简要直觉解释。

直觉:seq2seq + 注意力模型

一个翻译人员在从前往后阅读德语文本的同时写下关键词,然后开始将其翻译成英语。在翻译每个德语单词时,他会利用自己写下的关键词。

注意力机制通过为每个单词分配一个分数,对不同的单词给予不同的关注。然后,使用经过Softmax处理的分数,通过对编码器隐藏状态进行加权求和来聚合编码器隐藏状态,从而得到上下文向量。

注意力层的实现可以分为4个步骤。

步骤0:准备隐藏状态

首先,我们准备所有可用的编码器隐藏状态(绿色)和第一个解码器隐藏状态(红色)。在我们的例子中,我们有4个编码器隐藏状态和当前的解码器隐藏状态。(注意:最后一个整合的编码器隐藏状态作为输入被馈送到解码器的第一个时间步。解码器第一个时间步的输出被称为第一个解码器隐藏状态,如下所示。)

步骤1:为每个编码器隐藏状态获取一个分数

通过一个分数函数(也称为对齐分数函数或对齐模型)获得一个分数(标量)。在这个例子中,分数函数是解码器和编码器隐藏状态之间的点积。

decoder_hidden = [10, 5, 10]
encoder_hidden  score
---------------------
[0, 1, 1]     15 (= 10×0 + 5×1 + 10×1, 点积)
[5, 0, 1]     60
[1, 1, 0]     15
[0, 5, 1]     35

在上面的例子中,我们为编码器隐藏状态[5, 0, 1]获得了一个较高的注意力分数60。这意味着下一个单词(解码器的下一个输出)将受到这个编码器隐藏状态的严重影响。

步骤2:将所有分数通过Softmax层

我们将分数输入到Softmax层,使得经过Softmax处理的分数(标量)之和为1。这些经过Softmax处理的分数代表了注意力分布。

encoder_hidden  score  score^
-----------------------------
[0, 1, 1]     15       0
[5, 0, 1]     60       1
[1, 1, 0]     15       0
[0, 5, 1]     35       0

注意,根据经过Softmax处理的分数score^,注意力分布只集中在[5, 0, 1]上,这与预期一致。在实际情况中,这些数字不是二进制的,而是介于0和1之间的浮点数。

步骤3:将每个编码器隐藏状态乘以其Softmax分数

通过将每个编码器隐藏状态与其Softmax分数(标量)相乘,我们得到对齐向量或注释向量。这正是对齐发生的机制。

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:对对齐向量求和

对齐向量被求和以产生上下文向量。上下文向量是前一步中对齐向量的聚合信息。

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:将上下文向量输入到解码器

具体的输入方式取决于架构设计。稍后我们将在示例中看到架构如何在解码器中使用上下文向量。

训练和推理

在推理过程中,每个解码器时间步t的输入是解码器时间步t - 1的预测输出。

在训练过程中,每个解码器时间步t的输入是我们的解码器时间步t - 1的真实输出。

直觉:注意力机制究竟是如何工作的?

答案:反向传播,这并不意外。反向传播会采取一切措施确保输出接近真实值。这是通过改变RNN中的权重和分数函数(如果有的话)来实现的。这些权重将影响编码器隐藏状态和解码器隐藏状态,进而影响注意力分数。

3. 模型中的注意力机制

注意力机制在模型中的典型运作方式如下:

  1. 输入序列表示:模型处理输入数据,并为序列中的每个标记(或部分)生成隐藏状态(表示)。这些隐藏状态捕获了每个标记相对于整个输入的上下文。
  2. 注意力评分:在每个解码步骤中,模型为输入序列中的每个标记生成一个注意力分数。该分数决定了一个标记对于生成当前输出的相关性或重要性。这通常是通过使用点积或学习到的变换将当前解码器状态与编码器隐藏状态进行比较来计算的。分数使用Softmax函数进行归一化,得到的注意力权重之和为1。
  3. 加权求和:注意力机制然后通过对编码器的隐藏状态进行加权求和来计算上下文向量。每个隐藏状态对上下文向量的贡献由其注意力权重决定。上下文向量现在包含了输入的聚焦表示,强调了生成当前输出标记最相关的部分。
  4. 解码:解码器使用这个上下文向量以及它自己的隐藏状态来生成输出序列中的下一个标记。这个过程对于输出序列中的每个标记都重复进行,使模型能够在每个步骤中自适应地关注输入的不同部分。

注意力机制试图通过允许解码器模型在预测每个输出时访问所有隐藏状态,而不是依赖于由编码器的最后一个隐藏状态构建的单个向量(即中间状态),来克服中间状态的信息瓶颈。

计算解码器模型的下一个隐藏状态。

解码器中一个单元的输入现在包含以下值:

  1. 解码器模型的前一个隐藏状态$H_{k-1}$。
  2. 解码器模型的前一个输出$Y_{k-1}$。
  3. 一个上下文向量$C_{k}$ —— 所有编码器隐藏状态($h_{j}$’s)的加权和,也称为注释。(新增内容)

4. 注意力机制的类型

在现代深度学习中,已经开发出了各种类型的注意力机制,每种机制都针对序列建模的不同方面,并增强了模型聚焦相关信息的能力。以下是最广泛使用的几种类型:

4.1 Bahdanau注意力(加法注意力)

  • 提出者:Dzmitry·Bahdanau(Dzmitry Bahdanau)等人(2014年)
    Bahdanau注意力,也称为加法注意力,是一种在序列到序列模型中计算注意力权重值的方法。它由Dzmitry·Bahdanau、具云根(Kyunghyun Cho)和约书亚·本吉奥(Yoshua Bengio)在2014年发表的论文《通过联合学习对齐和翻译进行神经机器翻译》中提出。

  • 基于Bahdanau等人的神经机器翻译模型:编码器是双向门控循环单元(BiGRU),解码器是门控循环单元(GRU)。
  • 工作原理:它通过学习解码器隐藏状态和编码器隐藏状态之间的对齐分数来计算注意力权重。这些分数随后通过Softmax函数进行归一化,转换为概率。每个注意力权重代表每个输入标记与当前输出标记的相关性。最终的上下文向量是基于这些注意力权重对编码器隐藏状态的加权求和。
    下面详细解释Bahdanau注意力的工作方式:
    • 步骤1:兼容性得分计算:在每个解码时间步,Bahdanau注意力计算解码器的前一个隐藏状态($s_{i - 1}$)和每个编码器隐藏状态($h_j$)之间的兼容性得分。这个兼容性得分通常使用一个前馈神经网络(通常是一个单层神经网络)来计算,该网络将$s_{i - 1}$和$h_j$作为输入。从数学上讲,编码器隐藏状态$h_j$和解码器隐藏状态$s_{i - 1}$的兼容性得分$e_{ij}$计算如下:

  • 步骤2:注意力权重计算:一旦计算出兼容性得分,它们将通过另一个神经网络(通常是一个单层神经网络,后面跟着一个Softmax激活函数)来获得注意力权重。从数学上讲,在解码时间步$i$时,编码器隐藏状态$h_j$的注意力权重$\alpha_{ij}$计算如下:

  • 步骤3:上下文向量计算:计算出注意力权重后,通过对编码器隐藏状态进行加权求和,得到当前解码时间步$i$的上下文向量$c_i$,其中权重由注意力权重给出。从数学上讲,上下文向量$c_i$计算如下:

  • 数学基础:分数是使用一个学习到的前馈网络计算的:

    ,其中$S_t$是解码器隐藏状态,$h_i$是编码器隐藏状态,$W_s$、$W_h$、$v$是学习到的参数。
    作者在WMT’14英法数据集上获得了26.75的BLEU分数。

  • 直观理解:带有双向编码器 + 注意力的seq2seq模型。假设有译者A和译者B,译者A阅读德语文本并写下关键词,译者B(因其具有额外的从后向前翻译句子的能力而承担更重要角色)从最后一个单词到第一个单词阅读相同的德语文本并同时记录关键词。他们两人会定期讨论到目前为止读到的每个单词。读完德语文本后,译者B根据讨论内容和两人共同记录的关键词,逐个单词地将德语句子翻译成英语。在这里,译者A相当于正向RNN,译者B相当于反向RNN。

  • 优点:Bahdanau注意力提高了模型处理长序列的能力,并帮助解码器在生成输出的每个步骤中决定关注输入的哪一部分。

4.2 Luong注意力(乘法注意力)

  • 提出者: Luong)等人(2015年)
    Luong注意力,也称为乘法注意力,是另一种注意力机制,其在对齐分数的计算方式上有所不同。它基于Bahdanau注意力,但通过利用点积使用了一种更简单、更高效的评分方法。

  • 基于 Luong等人的神经机器翻译模型:编码器是一个2层LSTM,解码器同样如此。
  • 工作原理: Luong注意力不是学习一个单独的前馈层,而是使用解码器隐藏状态和编码器隐藏状态之间的点积来计算注意力得分。有三种类型的评分函数:
    • 点积

    • 通用

    • 拼接:与Bahdanau注意力类似,但使用输入的拼接。

  • 公式(点积)

    ,其中$h_i$是编码器隐藏状态,$s_t$是解码器隐藏状态。
    在 Luong注意力中,与Bahdanau注意力的第一个区别是, Luong注意力使用解码器当前时间戳的隐藏状态值,而不是解码器上一个隐藏状态值。第二个区别在于计算注意力权重($\alpha$)值的方法: Luong注意力利用解码器当前时间戳的隐藏状态($s_i$)与每个编码器隐藏状态($h_i$)之间的点积。最后一个区别是,在 Luong注意力中,上下文向量$c_i$直接被传递到LSTM单元的输出中,这与Bahdanau注意力中上下文向量与LSTM单元的输入进行拼接的方法不同。这种将上下文向量直接整合到LSTM单元输出的方式简化了解码过程,并增强了模型生成准确输出的能力。
    该模型在WMT’15英德数据集上获得了25.9的BLEU分数。
  • 直观理解:带有2层堆叠编码器 + 注意力的seq2seq模型。假设有译者A和译者B,译者A阅读德语文本并写下关键词,译者B(比译者A更资深)同样阅读相同的德语文本并记录关键词。注意,初级译者A在阅读每个单词时都要向译者B报告。阅读完成后,他们两人根据共同记录的关键词一起逐个单词地将句子翻译成英语。
  • 优点:由于使用简单的点积, Luong注意力在计算上更高效,对于大型模型来说,它更快且更具可扩展性。

4.3 自注意力(缩放点积注意力)

  • 提出者:瓦斯瓦尼(Vaswani)等人(2017年)在Transformer中提出

自注意力使模型能够关注同一输入序列的不同部分。这一机制是Transformer的关键,它使序列中的每个标记都能关注其他所有标记,从而学习序列中的全局依赖关系。

  • 工作原理:每个输入标记都被表示为一个查询(Q)、键(K)和值(V)向量。注意力分数通过计算一个标记的查询向量与序列中所有其他标记的键向量之间的点积来计算。结果通过Softmax进行归一化,最终输出是值向量的加权求和,其中权重来自注意力分数。
    传统的深度学习模型在从顺序数据中有效捕捉长距离依赖和上下文信息方面存在困难。除了这个问题,你是否想过 “构建任何自然语言处理(NLP)应用最重要的要求是什么?” 答案是将单词转换为数字,即向量化。
    早期,输入序列通常被表示为一组向量,其中每个向量代表语料库中的一个标记,通过独热编码、词袋模型、TF - IDF等方法生成,这些方法严重依赖单词频率。但这些方法难以捕捉像 “She visited the money bank, near the river bank.” 这样的句子中 “money bank” 和 “river bank” 短语所传达的重要含义。
    为了克服这个问题,人们使用了 “词嵌入”,它能够强大到捕捉单词的语义含义,以找到标记之间的相似性,由一个维度向量$d_m$(可以是512、256甚至64维)表示。但词嵌入的问题在于它们是静态嵌入。这意味着,这些向量是通过在大型文本语料库上进行训练创建的,然后在各种NLP任务中使用。因此,无论单词出现在什么上下文中,它们都只能捕捉标记的平均含义。例如,单词 “bank” 无论是用于金融机构的语境还是河岸的语境,其向量表示都是相同的。
    因此人们使用 “自注意力” 机制,以 “静态嵌入” 为输入生成合理的 “上下文嵌入”。它能够根据周围的单词,在任何NLP任务中动态理解上下文。

  • 自注意力模块内部结构:注意力机制对三个输入进行操作:

    • 查询(Q):这个矩阵是当前正在关注的单词。
    • 键(K):这个矩阵代表文档中与查询进行比较的所有单词。
    • 值(V):这个矩阵保存输入文档中每个单词的实际上下文。
      这些是自注意力机制背后的重要组成部分。它们使模型能够查看一个单词(查询),然后将其与其他每个单词(键)进行比较,最后决定对每个单词给予多少关注(值)。自注意力只处理一种类型的输入序列。
  • 自注意力工作原理

    • 步骤1:计算查询、键和值矩阵:首先,将句子中的每个标记转换为三个不同的向量Q、K和V。查询、键和值矩阵是通过输入矩阵X与权重矩阵W(一个可学习的参数)的矩阵乘法计算得到的。

    • 步骤2:计算注意力得分:接下来,计算每个单词应该对其他每个单词给予多少关注。这是通过计算查询矩阵和键矩阵的点积来完成的。这个输出矩阵表示两个输入向量之间的相似性(或简单地说兼容性)。

    • 步骤3:缩放得分:在处理高维矩阵时,点积会导致非常大的方差,这可能会导致模型不稳定。在反向传播过程中,对于较大的点积值,Softmax函数会产生极大的梯度。由于梯度较小,在训练过程中较小的点积值的更新会变得微不足道,从而导致模型出现梯度消失问题。因此,为了缓解这个问题,点积会除以键向量维度的平方根,即$\sqrt{d_k}$。这就是为什么它被称为缩放点积注意力。

    • 步骤4:应用Softmax函数:然后将这些缩放后的得分通过Softmax函数,将值归一化到0到1之间。这是为了确保兼容性得分遵循概率分布,每个标记的权重之和为1或100%,这被称为注意力权重矩阵。缩放点积注意力公式为:

      ,这些概率值代表序列中的每个标记应该得到多少关注,表明它们对最终上下文向量的重要性和贡献。

    • 步骤5:对值进行加权:这些概率用于计算与值矩阵的加权乘法。最后,得到特定文本的上下文输出嵌入。

  • 优点

    • 自注意力比RNN和LSTM更有效地捕捉序列中的长距离依赖关系。
    • 它允许并行计算,从而实现更快的训练。
      已经了解了自注意力以及它如何使模型关注输入序列的不同部分。但如果可以从不同的视角多次进行这样的操作会怎样呢?例如,对于句子 “The bank can be a lifesaver.”,这里的 “bank” 指的是金融机构还是河岸呢?这就是多头注意力发挥作用的地方。

4.4 多头注意力

  • 提出者:瓦斯瓦尼等人(2017年)在Transformer中提出
    多头注意力是自注意力的扩展,用于Transformer模型中。它不是使用单一的注意力得分集合,而是并行应用多个注意力机制,使模型能够同时关注输入序列的不同部分。

  • 工作原理:输入被线性投影到多组查询、键和值中。对于每个头,独立应用自注意力,然后将结果连接起来并进行线性变换,以产生最终输出。这使模型能够并行捕捉序列的不同方面(例如,位置依赖关系、语义关系)。
    在多头注意力中,上述过程会对查询、键和值矩阵进行不同的线性投影,并重复多次。下面从数学角度详细说明:

    • 步骤1:线性投影:对于每个头,使用学习到的权重矩阵将输入序列线性投影到查询、键和值中:

    • 步骤2:缩放点积注意力计算:每组查询、键和值矩阵独立地进行缩放点积注意力机制的计算:

    • 步骤3:拼接:现在,将所有注意力头的输出进行拼接:

    • 步骤4:最终线性投影:最后,使用另一个学习到的权重矩阵对拼接后的输出进行投影,以产生最终输出:

使用多个头意味着每个头可以同时关注输入序列的不同部分。一个头可能会捕捉句子的整体结构,而另一个头则同时关注特定的细节。当将所有这些视角结合起来时,就会对输入序列有更全面的理解。

  • 优点
    • 多头注意力使模型能够捕捉序列中的多种关系,提高了它关注数据不同部分的能力。
    • 它能够更好地表示复杂的依赖关系和上下文。

4.5 交叉注意力

  • 应用场景:Transformer编码器 - 解码器架构
    交叉注意力是一种用于序列到序列模型的机制,例如Transformer的编码器 - 解码器结构。与自注意力在同一输入序列内工作不同,交叉注意力使解码器能够关注编码器的输出,这在机器翻译等任务中至关重要。
  • 工作原理:解码器在生成输出序列中的每个标记时,使用交叉注意力来关注编码器的输出序列(而不是它自己的序列)。解码器从自己的隐藏状态生成查询,键和值则从编码器的输出状态生成。这使解码器能够有选择地关注输入句子的不同部分。自注意力处理单个输入序列,而交叉注意力涉及两个不同的输入序列,这是它们唯一的区别。
    这在机器翻译等任务中至关重要,因为在这些任务中需要处理源语言(如英语)和目标语言(如法语)。交叉注意力在Transformer模型中充当编码器和解码器之间的桥梁,具体工作方式如下:
    • 多头注意力层利用交叉注意力机制
      • 编码器输出:编码器处理源语言(英语)并生成一组编码表示。
      • 解码器输入:解码器接收目标语言(法语)的输入序列。
      • 交叉注意力:编码器的输出(编码表示)在交叉注意力机制中用作键和值,而查询来自前一层解码器的多头注意力输出。
        通过使用交叉注意力机制,解码器的每个部分都可以关注输入序列的任何部分。这使模型能够学习两个序列之间不同的语言转换模式,从而实现更准确、流畅的翻译。
        已经讨论过多头注意力,那么掩码多头注意力是什么呢?在语言建模和文本生成等任务中,掩码多头注意力变得尤为有趣。
  • 掩码多头注意力:它是一种主要用于Transformer架构解码器部分的多头注意力。它的设计目的是确保在训练期间,模型在预测序列中的下一个标记时,不会 “作弊” 查看未来的标记。
    掩码多头注意力的工作方式如下:在掩码多头注意力中,引入一个掩码,防止每个标记关注任何未来的标记。这通常是通过在应用Softmax函数之前,将这些未来标记的注意力得分设置为一个非常大的负数(或负无穷)来实现的,从而有效地消除它们的影响。掩码注意力机制可以表示为:(此处缺少具体公式,原文未给出)。与常规的多头注意力一样,掩码注意力也可以应用于多个头。每个头独立操作,学习输入的不同方面,然后将结果连接起来并进行线性投影,以形成最终输出。
    掩码多头注意力很重要,因为它使模型能够生成连贯且上下文准确的序列(一次生成一个标记),而不会窥视未来的信息,从而保持顺序数据处理的完整性。这就是Transformer架构中使用的三种自注意力机制,它们彻底改变了NLP领域。

4.6 谷歌神经机器翻译(GNMT)

我们大多数人都或多或少使用过谷歌翻译,因此很有必要聊聊谷歌在2016年实现的神经机器翻译(GNMT)技术。GNMT结合了我们之前提到的两种注意力机制。

它的编码器由8个LSTM堆叠而成,其中第一个LSTM是双向的(其输出会被拼接起来),并且从第3层开始,连续层的输出之间存在残差连接。解码器则是由8个单向LSTM组成的单独堆栈。使用的评分函数是加法/拼接函数。

同样,下一个解码器步骤的输入是前一个解码器时间步的输出(粉色)与当前时间步的上下文向量(深绿色)的连接。

该模型在WMT’14英法翻译任务中BLEU得分为38.95,在WMT’14英德翻译任务中BLEU得分为24.17。

直观理解:GNMT可看作是具有8层堆叠编码器(含双向结构与残差连接)和注意力机制的序列到序列模型。假设有8位译者A、B、…、H从上到下排成一列。每位译者都阅读同一德语句子。阅读每个单词时,译者A会与译者B分享自己的见解,译者B改进后再分享给译者C,如此重复,直至信息传递到译者H。同时,译者H在阅读德语句子时,会依据自身理解和所接收的信息写下相关关键词 。

所有人读完英语句子后,译者A被要求翻译第一个单词。首先,他尝试回忆,然后将答案分享给译者B,译者B改进答案后分享给译者C,重复此过程直至译者H。译者H依据自己写下的关键词和得到的答案,写出第一个翻译单词。重复这个过程,直到完成整句翻译。

4.7 全局与局部注意力

除了乘法注意力, Luong等人在2015年的论文中还介绍了全局和局部注意力。

  • 全局注意力
    • 在全局注意力中,模型在计算注意力分数时会考虑整个输入序列,当输入的所有部分都可能对输出产生影响时,这种方式很有用。
    • 这在翻译等任务中很常见,在输出的不同阶段,整个句子中的单词或短语都可能与之相关。
  • 局部注意力
    • 在局部注意力中,模型将其关注点限制在当前标记周围的一个小的预定义窗口内。在只有附近标记可能影响输出的情况下,这种方法效率更高。
    • 它减少了计算开销,但可能会忽略长距离依赖关系。

4.8 硬注意力与软注意力

在论文《展示、关注与讲述》中,徐等人引入了硬注意力和软注意力的概念,这在图像描述任务中尤为重要。

  • 硬注意力
    • 随机注意力:模型选择特定区域进行关注。
    • 优点:通过仅关注选定区域来降低计算复杂度。
    • 缺点:需要使用强化学习进行训练,优化难度较大。
  • 软注意力
    • 确定性注意力:对所有输入特征进行加权平均。
    • 优点:使用标准反向传播更容易训练。
    • 缺点:对输入的所有部分都给予关注,可能导致关注点不够集中。

5. LSTM上的注意力机制

在 Jianpeng Cheng2016年发表的论文《Long Short-Term Memory-Networks for Machine Reading》中,关键贡献是将注意力机制与LSTM网络相结合应用于机器阅读任务。具体来说,论文引入了LSTM上的注意力机制,以提高模型在理解文本段落并回答相关问题时的性能,这对于机器阅读理解等任务至关重要。

该论文的主要亮点如下:

  • LSTM中的注意力机制:程引入了一种注意力机制,使LSTM模型在回答特定问题时能够关注文本的不同部分。这种注意力机制使模型能够根据输入的问题,动态地“关注”更相关的单词或段落。这是注意力机制与LSTM网络早期结合使用的案例之一,通过关注输入序列中最重要的部分,使模型在机器阅读任务上表现更出色。
  • 机器阅读任务:论文主要聚焦于系统阅读文本段落并回答相关问题的任务。注意力机制帮助模型在较长的文本段落中定位相关信息。
  • 与自注意力的区别:这里引入的注意力机制存在于输入序列的不同部分与外部上下文(例如所提出的问题)之间,而不是像自注意力那样关注同一序列的不同部分。该论文中的注意力机制更类似于早期序列到序列模型中的编码器 - 解码器注意力,而非2017年Transformer中引入的自注意力机制。因此,尽管程的论文为展示循环网络(LSTM)上注意力机制的强大作用奠定了重要基础,但并未引入自注意力,自注意力在瓦斯瓦尼等人2017年的Transformer论文中才得以充分实现。

6. 评分函数

以下是Lilian Weng整理的一些评分函数。本文中已经提到了加法/拼接和点积这两种评分函数。涉及点积运算(点积、余弦相似度等)的评分函数,其核心思想是衡量两个向量之间的相似性。对于前馈神经网络评分函数,其思路是让模型在进行翻译的同时学习对齐权重。

7. 计算机视觉中的注意力机制

注意力机制最初在自然语言处理(NLP)领域取得了成功,在计算机视觉领域也展现出了可观的成果。在图像分类、目标检测和语义分割等任务中,它能帮助模型聚焦于图像的特定区域或特征。

7.1 计算机视觉中注意力的类型

  • 空间注意力:模型通过为图像的不同区域分配注意力分数,学会聚焦于图像的重要区域。这些分数对每个区域的特征进行加权,帮助模型优先处理图像中相关部分。
    • 参考:Wang等人(2017年)的《用于图像分类的残差注意力网络》。
  • 通道注意力:专注于选择最具信息性的特征通道。为特征图中的每个通道计算注意力分数,使模型能够优先考虑重要通道。
    • 参考:Hu等人(2017年)的《挤压与激励网络》。
  • 自注意力:也称为非局部操作,自注意力计算图像中任意位置的响应,将其作为所有位置特征的加权和,使模型能够捕捉卷积层所处理的局部区域之外的全局上下文。
    • 参考:Wang等人(2018年)的《非局部神经网络》。

7.2 关键应用

  • 目标检测与分割:空间注意力帮助模型聚焦于目标区域,忽略背景噪声,从而提高检测和分割的准确性。
    • 参考:Bellemare等人(2016年)的《基于深度强化学习和注意力机制的目标检测》。
  • 图像描述:在生成图像描述的每个步骤中,注意力引导模型关注图像的不同区域,从而生成更准确、更具描述性的描述。
    • 参考:Xu等人(2015年)的《展示、关注与讲述:基于视觉注意力的神经图像描述生成》。
  • 视觉问答(VQA):在VQA任务中,注意力根据问题引导模型关注图像的相关部分,提高生成答案的准确性。
    • 参考:Anderson等人(2017年)的《自下而上和自上而下的注意力用于视觉问答》。
  • 视觉Transformer:视觉Transformer(ViT)将图像视为一系列图像块,应用自注意力机制,类似于Transformer在NLP中处理标记的方式。这种方法在多个视觉任务中取得了成功。
    • 参考:Dosovitskiy等人(2020年)的《一张图像就像16x16个单词:大规模图像识别的Transformer》。

7.3 优势

注意力机制使计算机视觉模型能够动态分配计算资源,聚焦于图像或特征图中最重要的部分。这在复杂的视觉任务中提高了模型的性能。

8. 结论

注意力机制从根本上改变了深度学习的格局,尤其是在处理涉及顺序数据的复杂任务时。从最初作为克服RNN和LSTM等传统模型局限性的解决方案被引入,注意力机制使模型能够动态地聚焦于输入序列中最相关的部分,而不受序列长度或结构的限制。这在机器翻译、文本摘要和图像描述等任务中尤为关键,因为在这些任务中,元素之间的上下文和关系至关重要。

在本文中,我们探讨了注意力机制背后的核心思想,详细剖析了其工作原理,比如兼容性分数、注意力权重和上下文向量是如何计算的。我们深入研究了各种类型的注意力机制,从Bahdanau注意力和 Luong注意力,到更先进的自注意力和多头注意力,这些机制构成了Transformer等现代架构的基础。

注意力机制的应用范围不仅限于基于文本的应用,它在计算机视觉任务中的使用越来越多,帮助模型聚焦于图像的特定区域,从而在目标检测和图像分类等任务中提高性能。

总之,注意力机制不仅通过改善对长距离依赖的处理提高了模型性能,还为模型增加了可解释性和可扩展性。随着人工智能领域的不断发展,注意力机制很可能继续处于前沿地位,影响新架构的设计,并在不同领域扩展其应用范围。

9. 知识测试!

  1. 如何在PyTorch中实现一个基本的自注意力机制?涉及哪些关键步骤和组件?
    • 预期答案:实现过程包括将输入进行线性变换以计算查询、键和值,接着使用点积计算注意力分数,应用softmax函数对这些分数进行归一化,然后计算值的加权和。最后,将此输出通过另一个线性层。
  2. 你能解释Transformer模型中位置编码的作用吗?如何在代码中实现它?
    • 预期答案:位置编码为模型提供标记在序列中的位置信息,因为Transformer本身没有内置的顺序概念。在代码中,通常使用正弦函数生成固定表示,然后将其添加到输入嵌入中。
  3. 缩放点积注意力与常规点积注意力有何不同?缩放因子为何重要?
    • 预期答案:缩放点积注意力包含一个缩放因子(通常是查询和键维度的平方根),以防止点积过大,从而避免在训练期间产生过小的梯度。这种缩放有助于保持稳定的梯度,实现高效训练。
  4. 如何修改Transformer的架构以处理非常长的序列?这会涉及哪些权衡?
    • 预期答案:可以使用稀疏注意力、内存高效注意力或对序列进行分段并独立处理片段等技术来处理长序列。权衡通常涉及在模型性能、计算效率和内存使用之间进行平衡。
  5. 如果注意力权重似乎均匀地分布在所有输入标记上,你将如何调试Transformer模型?
    • 预期答案:可能的调试步骤包括检查注意力层中权重的初始化,确保softmax函数正确应用,验证输入数据,并确认模型是否正确学习位置编码或有效地处理输入序列。
  6. 注意力机制如何融入现有的架构,如LSTM或CNN?它们能带来什么好处?
    • 预期答案:在LSTM中,注意力可以添加到序列中的特定时间步,以提高对长期依赖的处理能力。在CNN中,注意力可用于突出图像的重要区域,增强模型检测对象或特征的能力。好处包括提高性能和可解释性。
  7. 你能解释全局注意力和局部注意力机制之间的区别吗?何时更倾向于使用其中一种?
    • 预期答案:全局注意力在生成注意力权重时考虑输入序列中的所有位置,适用于整个上下文至关重要的任务。局部注意力则将关注点限制在输入的一个子集上,降低了计算成本,更适合较长的序列,因为在这些序列中只有附近的位置是相关的。
  8. 什么是自注意力?为什么它在Transformer模型中很重要?
    • 预期答案:自注意力允许序列中的每个元素关注所有其他元素,捕获依赖关系而不受序列中距离的限制。这对于Transformer中的并行化和有效处理长距离依赖至关重要。
  9. 描述一个多头注意力特别有益的场景。
    • 预期答案:多头注意力使模型能够同时关注输入的不同方面,这在机器翻译等任务中非常有益,因为句子的不同部分可能对应输出中的不同上下文或含义。
  10. 注意力的概念与序列到序列模型中的对齐有何关系?
    • 预期答案:在序列到序列模型中,注意力在输入和输出序列之间提供了一种软对齐,帮助模型为每个输出标记聚焦于输入序列的相关部分。
  11. 何时可能选择使用加法注意力而不是点积注意力?
    • 预期答案:当你希望在评分函数中获得更大的灵活性,特别是在查询和键向量之间的关系并非纯粹线性的任务中,通常会使用加法注意力,而点积注意力计算效率高,在许多场景中效果良好。
  12. 注意力机制如何帮助解决RNN中的梯度消失问题?
    • 预期答案:注意力通过允许输出与相关输入状态之间建立直接连接,避免了信息通过许多循环步骤传播,从而缓解了梯度消失问题,因为信息通过许多循环步骤传播是导致梯度消失的常见原因。
  13. 你能解释全局注意力和局部注意力机制之间的区别吗?何时更倾向于使用其中一种?
    • 预期答案:全局注意力在生成注意力权重时考虑输入序列中的所有位置,适用于整个上下文至关重要的任务。局部注意力则将关注点限制在输入的一个子集上,降低了计算成本,更适合较长的序列,因为在这些序列中只有附近的位置是相关的。
  14. 什么是自注意力?为什么它在Transformer模型中很重要?
    • 预期答案:自注意力允许序列中的每个元素关注所有其他元素,捕获依赖关系而不受序列中距离的限制。这对于Transformer中的并行化和有效处理长距离依赖至关重要。
  15. 描述一个多头注意力特别有益的场景。
    • 预期答案:多头注意力使模型能够同时关注输入的不同方面,这在机器翻译等任务中非常有益,因为句子的不同部分可能对应输出中的不同上下文或含义。
  16. 注意力的概念与序列到序列模型中的对齐有何关系?
    • 预期答案:在序列到序列模型中,注意力在输入和输出序列之间提供了一种软对齐,帮助模型为每个输出标记聚焦于输入序列的相关部分。
  17. 何时可能选择使用加法注意力而不是点积注意力?
    • 预期答案:当你希望在评分函数中获得更大的灵活性,特别是在查询和键向量之间的关系并非纯粹线性的任务中,通常会使用加法注意力,而点积注意力计算效率高,在许多场景中效果良好。
  18. 注意力机制如何帮助解决RNN中的梯度消失问题?
    • 预期答案:注意力通过允许输出与相关输入状态之间建立直接连接,避免了信息通过许多循环步骤传播,从而缓解了梯度消失问题,因为信息通过许多循环步骤传播是导致梯度消失的常见原因。
  19. 在一个包含10个标记的分词词典中,在标准大语言模型里有标记A和B,如果A是argmax函数的输出,那么标记B的预测概率是多少?
    • 预期答案:P(B|A)=1。如果标记A是argmax函数的输出,这意味着在其上下文中A是最有可能的标记,概率为1(100%)。因此,在这种确定性场景中,如果B是A之后的下一个标记,那么给定A时标记B的预测概率也将为1(100%),假设模型在这种上下文中总是预测B跟随A。
  20. Transformer架构中的自注意力机制使模型能够做什么?
    • 预期答案:自注意力机制使模型能够根据序列中每个单词与其他单词的相关性,动态地为其分配不同的重要性。这种机制使模型能够捕获单词之间的依赖关系,而不受文本中距离的限制。它增强了模型理解文本中的上下文和关系的能力,使其在翻译、摘要和问答等任务中更有效。
  21. 为什么自注意力被称为“自”注意力?
    • 预期答案:自注意力被称为“自”,是因为它允许模型通过将每个元素与同一序列中的其他元素相关联,聚焦于输入序列的不同部分,而不依赖外部信息。“自”在自注意力中指的是该机制能够捕获输入序列本身内部的关系和依赖。
  22. 自注意力与Bahdanau注意力或 Luong注意力有何相似之处?
    • 预期答案:
      • 相似点
        • 动态加权输入:这三种机制都动态计算注意力分数,以聚焦于输入序列的相关部分,这意味着它们根据生成的输出为不同的输入标记分配不同的权重。
        • 创建上下文向量:在所有机制中,注意力分数都用于创建输入标记的加权和(称为“上下文向量”),该向量在每个步骤影响输出。
        • 基于相关性的表示:这三种机制的核心思想都是捕获输入中最相关的部分,更多地关注最重要的标记,并减少来自不相关标记的干扰。
      • 不同点:自注意力允许每个标记关注同一序列中的每个其他标记,增强了长距离依赖关系和并行性。Bahdanau注意力和 Luong注意力用于基于RNN的编码器 - 解码器模型中,在顺序解码期间对齐并聚焦于输入序列的最相关部分,但它们是逐步操作的,在处理长序列时效率较低。
        注意力机制

本文2w字,阅读时长~~ 看速度
2025年01月14日 晴 零下3度

1. LLM大模型架构专栏|| 从NLP基础谈起
2.LLM大模型架构专栏|| 自然语言处理(NLP)之建模
3. LLM大模型架构之词嵌入(Part1)
4. LLM大模型架构之词嵌入(Part2)
5. LLM大模型架构之词嵌入(Part3)
6. LLM架构从基础到精通之循环神经网络(RNN)
7. LLM架构从基础到精通之LSTM
8. LLM架构从基础到精通之门控循环单元(GRUs)
欢迎关注公众号 柏企科技圈 如果您有任何问题或建议,欢迎在评论区留言交流!

本文由mdnice多平台发布

标签:编码器,关键技术,模型,解码器,深度,序列,注意力,输入
From: https://www.cnblogs.com/tunancbq/p/18671556

相关文章

  • 深度剖析RabbitMQ:从基础组件到管理页面详解
    文章目录一、简介二、Overview2.1Overview->Totals2.2Overview->Nodesbroker的属性2.3Overview->Churnstatistics2.4Overview->Portsandcontexts2.5Overview->Exportdefinitions2.6Overview->Importdefinitions三、Connections连接的属性四、Channels通道的......
  • iutils.dll会影响什么?关于iutils.dll丢失的深度分析及应对丢失策略解析
    在计算机系统的世界里,动态链接库(DLL)文件起着至关重要的作用,它们是许多应用程序能够正常运行的基石。其中,iutils.dll就是这样一个具有重要意义的文件。iutils.dll会影响什么?关于iutils.dll丢失的深度分析及应对丢失策略解析。一、你了解iutils.dll吗?——基本情况揭秘iutils.d......
  • 基于深度学习的手写文本识别系统
    文章目录前言一、准备二、(0-9)数字识别模型代码1.引入库2.读入数据3.模型训练4.模型测试5.模型权重保存(不用重复训练)6.交互式界面三、结果展示四、jupyter代码下载前言用chatgpt"实现基于深度学习的手写文本识别系统|Python,PyTorch":设计并实现了基于卷积神......
  • 【一看就会】路径规划算法【一】——广度优先,深度优先,Dijkstra、A*、D*
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、输入输出1.输入环境约束条件目标其他2.输出二、广度优先搜索——BFS三、深度优先搜索——DFS四、Dijkstra五、A*六、D*1.初始路径规划(环境未变化)2.环境变化3.动态调整1.受影响节点标记2......
  • WPF命令模式深度解析:从RelayCommand到命令自动刷新机制
    引言 在WPF应用程序开发中,命令模式是一个非常重要的设计模式,它帮助我们将UI交互与业务逻辑解耦。本文将深入探讨WPF命令模式的实现机制,特别是通过RelayCommand的实现来理解命令模式的核心概念。 1.命令的基础概念1.1什么是命令?命令是将用户操作(如按钮点击)转换为具体行为......
  • 基于正弦图域的深度学习重建
    基于正弦图域的深度学习重建是计算机断层扫描(CT)图像重建领域的一种前沿技术。以下是对该技术的详细阐述:一、概念及背景正弦图(Sinogram)是CT扫描中物体周围投影数据的可视化表示,是图像重建的关键输入。在CT成像过程中,物体被X射线源围绕旋转,并在不同角度下采集投影数据,这些数据构成......
  • 混合域的深度学习重建
    混合域的深度学习重建是一个复杂的任务,它涉及多个领域和技术的融合。以下是对混合域的深度学习重建的详细分析:一、概念与背景混合域的深度学习重建是指利用深度学习技术,在多个不同的数据域(如图像、视频、音频、文本等)之间进行信息提取、融合和重建的过程。这种重建技术可以应用......
  • 深度学习重建
    深度学习重建(DeepLearningReconstruction,DLR)是一种新兴的医学影像重建技术,它利用深度神经网络的强大学习能力,从原始数据中提取特征并重建高质量的图像。以下是对深度学习重建的详细解释:一、基本原理深度学习重建基于深度神经网络(DeepNeuralNetwork,DNN),该网络包含多个隐藏......
  • 基于图像域的深度学习重建
    基于图像域的深度学习重建是一种先进的图像处理技术,它利用深度学习的强大能力来改进或重建图像。以下是对该技术的详细阐述:一、基本原理基于图像域的深度学习重建技术主要依赖于深度神经网络(DNN)来学习和提取图像特征。通过向DNN提供大量的匹配数据(如低质量图像与对应的高质量图......
  • 深度学习入门之手写数字识别
    模型定义我们使用CNN和MLP来定义模型:importtorch.nnasnnclassModel(nn.Module):def__init__(self):"""定义模型结构输入维度为1*28*28(C,H,W)"""super(Model,self).__init__()#卷积......