Press "Enter" to skip to content

使用多头注意力机制理解注意力机制

介绍

深入了解Transformer模型的好方法是学习注意机制。在这方面,特别是在学习其他类型的注意机制之前学习多头注意力也是一个不错的选择。这是因为这个概念往往比较容易理解。

注意机制可以被视为可以添加到常规深度学习模型中的神经网络层。其目的是使模型专注于使用分配的权重来关注输入的特定部分,从而权衡它们的价值。我们将进一步详细了解注意机制,使用多头注意力机制。

使用多头注意力机制理解注意力机制 四海 第1张

学习目标

  • 注意机制的概念
  • 多头注意力的含义
  • Transformer中多头注意力的架构
  • 其他类型的注意机制简介

本文是数据科学博客马拉松的一部分。

了解注意机制

我们可以从人类心理学的角度开始看这个概念。在心理学中,注意力是集中意识在某些事件上,以便排除其他刺激的影响。这意味着即使有其他干扰,我们仍然会专注于我们选择的事物。注意力有选择地集中在整体的一个离散部分。

这个概念是Transformer中使用的。它们能够集中精力关注其输入的目标部分,并忽略其余部分。这可以使它们以非常有效的方式行动。

什么是多头注意力?

多头注意力是Transformer中的一个中心机制,类似于ResNet50架构中的跳跃连接。有时需要关注序列中的多个其他点。使用找到整体平均值的方法将不会使权重分布,因此不会给予多样化的值作为权重,这就引出了创建多个独立的注意机制以形成多个注意力机制的扩展的想法。现在的实现在单个特征上呈现多个不同的查询-键-值三元组。

Source: Pngwing.com

计算是这样进行的,注意模块在多次迭代中执行,组织成称为注意头的并行层。每个独立的头独立处理输入序列和相关输出序列元素。每个头部的累积分数然后组合以获得最终的注意分数,其中包含输入序列的每个细节。

数学表达式

具体而言,如果我们有一个关键字和一个值矩阵,我们可以将值转换为ℎ个子查询,子关键字和子值,这些将独立地通过注意力传递。连接将给出一个头,并使用最终的权重矩阵将它们组合起来。

使用多头注意力机制理解注意力机制 四海 第3张

可学习的参数是分配给各个头部的注意力中的值,其中各种参数称为多头注意力层。下面的图示说明了这个过程。

使用多头注意力机制理解注意力机制 四海 第4张

让我们简要地看一下这些变量。其中X的值是单词嵌入矩阵的连接。

矩阵解释

查询:它是一个特征向量,提供有关序列中目标的洞察力。它在序列上提出请求,需要关注哪些部分。

关键字:这是描述元素中包含的内容的特征向量。它突出显示提供元素的身份,并通过查询提供注意力。

值:处理输入序列,每个输入元素使用一个值来知道提供平均值的内容。

评分函数:创建评分函数时,我们将查询和关键字指定为其输出的权重,称为查询-关键字对。

我们可以通过下面的图示进一步理解该概念,其中Q:表示查询,K:表示关键字,V:表示值。

使用多头注意力机制理解注意力机制 四海 第5张

查询令牌的注意权重由多头注意力决定。每个关键字的令牌及其对应的值相乘。在确定查询和关键字之间的关系或注意权重之后,它乘以与每个关键字关联的值。

最后,多头注意力使我们能够以各种方式处理各种输入序列段。由于每个头将单独关注不同的输入元素,因此模型更好地捕获位置细节。因此,我们的表示更强大。

多头注意力的Python实现

现在让我们看一下多头注意力机制的实际实现。我们将使用Python实现此机制。我们将连续的权重矩阵转换为相对于查询、关键字和值的特征。

class MultiheadAttention(nn.Module):

    def __init__(self, input_dim, embed_dim, num_heads):
        super().__init__()
        assert embed_dim % num_heads == 0, "嵌入维数必须是头数的0模。"

        self.embed_dim = embed_dim
        self.num_heads = num_heads
        self.head_dim = embed_dim // num_heads

        # 将所有权重矩阵1...h堆叠在一起以提高效率
        # 注意,许多实现中看到的“偏差=False”是可选的
        self.qkv_proj = nn.Linear(input_dim, 3*embed_dim)
        self.o_proj = nn.Linear(embed_dim, embed_dim)

        self._reset_parameters()

    def _reset_parameters(self):
        # 原始Transformer初始化,请参见PyTorch文档
        nn.init.xavier_uniform_(self.qkv_proj.weight)
        self.qkv_proj.bias.data.fill_(0)
        nn.init.xavier_uniform_(self.o_proj.weight)
        self.o_proj.bias.data.fill_(0)

    def forward(self, x, mask=None, return_attention=False):
        batch_size, seq_length, _ = x.size()
        if mask is not None:
            mask = expand_mask(mask)
        qkv = self.qkv_proj(x)

        # 从线性输出中分离Q、K、V
        qkv = qkv.reshape(batch_size, seq_length, self.num_heads, 3*self.head_dim)
        qkv = qkv.permute(0, 2, 1, 3) # [Batch, Head, SeqLen, Dims]
        q, k, v = qkv.chunk(3, dim=-1)

        # 确定值输出
        values, attention = scaled_dot_product(q, k, v, mask=mask)
        values = values.permute(0, 2, 1, 3) # [Batch, SeqLen, Head, Dims]
        values = values.reshape(batch_size, seq_length, self.embed_dim)
        o = self.o_proj(values)

        if return_attention:
            return o, attention
        else:
            return o

在此处查找更多详细信息。

变压器中多头注意力的体系结构

变压器体系结构最初设计用于机器翻译,具有编码器-解码器结构。编码器生成基于注意力的表示,而解码器则关注编码信息并按自回归方式生成翻译后的句子。这种结构对于具有自回归解码的序列到序列任务非常有用。本教程重点介绍编码器部分,这是实现的一个小步骤。

使用多头注意力机制理解注意力机制 四海 第6张

编码器使用相同的块按顺序应用,通过多头注意力块、残差连接和层归一化将输入传递。它计算输入和注意力层的输入,确保变压器体系结构中的重要残差连接。

变压器可以有超过24个编码器块,需要残差连接以实现平滑的梯度流。没有残差连接,原始序列的信息会丢失,而多头注意力层学习基本输入特征。删除残差连接将导致在初始化后丢失信息,所有输出向量表示相似的信息。

其他类型的注意力机制有哪些?

在总结之前,值得注意的是,除了多头之外还有其他类型的注意力机制,种类繁多,它们只是基于一些调整而有所不同。以下是这些类型:

  1. 全局注意力/Loung机制:Luong模型可以关注所有源单词或预测目标句子,因此只关注较小的单词集合。虽然全局和局部注意力模型同样有效,但它们根据具体实现使用不同的上下文向量。
  2. 广义注意力:广义注意力模型验证输入序列并将其与输出序列进行比较,捕捉并比较它们。然后,该机制选择要关注的单词或图像的部分。
  3. 加性注意力/Bahdanau:Bahdanau注意力机制在神经网络中使用对齐分数,在不同点计算,确保输入和输出序列单词之间存在关联,并考虑隐藏状态。最终得分是这些分数的总和。
  4. 自注意力/内部注意力:自注意机制,也称为内部注意力,捡起输入序列中的部分,并随时间计算初始输出组合,而不考虑输出序列,因为没有手动数据输入过程。

结论

注意力机制在自然语言处理任务等应用中产生了最先进的结果。它为GPT-2和BERT等突破性算法做出了贡献。变压器是一种网络,从注意力中获益匪浅。注意力是朝着实现真正的自然语言理解的最好努力之一,可以改变商业环境并推动人工智能解决方案的发展。

主要观点

  • 要深入了解变压器模型,了解注意力机制尤为重要,特别是多头注意力。
  • 所采用的方法允许多个注意力机制,在单个输入特征上呈现多个查询-键-值三元组。
  • 变压器需要残差连接以实现平滑的梯度流,防止原始序列信息的丢失,并基于输入特征进行学习。

常见问题(FAQ)

  • Tutorial 6: Transformers and Multi-Head Attention – UvA DL Notebooks v1.2 documentationJAX+Flax version: In this tutorial, we will discuss one of the most impactful architectures of the last 2 years: the…uvadlc-notebooks.readthedocs.io
  • Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention Is All You Need. ArXiv. /abs/1706.03762
  • https://d2l.ai/chapter_attention-mechanisms-and-transformers/multihead-attention.html
  • https://w7.pngwing.com/pngs/400/754/png-transparent-comic-book-comics-pop-art-attention-miscellaneous-text-photography-thumbnail.png
  • https://w7.pngwing.com/pngs/682/32/png-transparent-attention-psychology-homo-sapiens-graphy-information-attention-hand-photography-words-phrases-thumbnail.png
  • https://upload.wikimedia.org/wikipedia/commons/8/8f/The-Transformer-model-architecture.png

本文中显示的媒体不归Analytics Vidhya所有,由作者自行使用。

Leave a Reply

Your email address will not be published. Required fields are marked *