Transformer 动画讲解:单头注意力和多头注意力

暑期实习基本结束了,校招即将开启。

不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。提前准备才是完全之策。

最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。

总结链接如下:


Transformer的起源:Google Brain 翻译团队通过论文《Attention is all you need》提出了一种全新的简单网络架构——Transformer,它完全基于注意力机制,摒弃了循环和卷积操作。

图片

注意力机制是全部所需

正如论文标题所言“注意力机制是全部所需”,强调了注意力机制是Transformer架构的核心要素,就如同人的心脏一样,充当着发动机的作用。

那么单头注意力和多头注意力到底是什么?它们两者有哪些联系和区别?让我们一起跟着动画来解读吧。

图片

单头注意力

通过生成查询、键和值向量,计算并归一化注意力分数,最终对值向量进行加权求和,从而得到输入序列中每个位置的加权表示。

图片

单头注意力机制的工作流程如下:

  1. 生成查询、键和值:接收一个由嵌入向量组成的输入序列。使用三个不同的线性变换(或称为全连接层)将输入序列分别映射为查询(Q)、键(K)和值(V)向量。

  2. 计算注意力分数:计算查询向量与所有键向量之间的点积,得到注意力分数矩阵。这些分数反映了查询与序列中每个位置的相关性。

  3. 缩放注意力分数:为防止点积结果过大导致softmax进入饱和区,可以将注意力分数除以一个缩放因子(通常是键向量维度的平方根)。

  4. 归一化注意力分数:应用softmax函数对注意力分数矩阵进行归一化,得到注意力权重矩阵。归一化后的权重矩阵每行之和为1,表示序列中每个位置的注意力权重。

  5. 加权求和:使用归一化后的注意力权重对值向量进行加权求和。加权求和的结果是自注意力机制的输出,它包含了根据注意力权重对输入序列中所有位置信息的加权整合。

图片

单头注意力工作流程

多头注意力:

通过将输入的查询、键和值矩阵分割成多个头,并在每个头中独立计算注意力,再将这些头的输出拼接并线性变换,从而实现在不同表示子空间中同时捕获和整合多种交互信息,提升模型的表达能力。

多头注意力机制工作流程如下:

  1. 初始化参数:首先,初始化查询(Q)、键(K)、值(V)矩阵的权重以及多头注意力中的头数(h)。这些权重将用于后续的线性变换。

  2. 线性变换:对输入的查询、键和值矩阵进行线性变换,生成各自的变换矩阵。这些变换是通过将输入矩阵与相应的权重矩阵相乘来实现的。

  3. 分割:将线性变换后的查询、键和值矩阵沿着深度(通常是最后一个维度)分割成多个头(h个)。每个头都会得到自己独立的查询、键和值矩阵。

  4. 多头并行计算:在每个头中独立地执行注意力得分来计算加权求和。

  5. 拼接:将所有头的输出矩阵沿着深度维度拼接在一起,形成一个大的输出矩阵。

  6. 最终线性变换:对拼接后的输出矩阵进行线性变换,得到多头注意力的最终输出。这个线性变换通常包括一个可学习的权重矩阵和一个偏置项。

  7. 残差连接与层归一化:多头注意力模块通常会与残差连接和层归一化一起使用,以提高模型的训练稳定性和性能。

图片

多头注意力工作流程

两者的联系和区别

两者在基本原理和目的上是相似的,但在注意力头的数量、信息捕捉与表达能力、计算复杂度与训练难度以及输出结果等方面存在显著的差异。

这些差异使得多头注意力在处理复杂任务时通常具有更好的性能。

两者的联系

  1. 基本原理:两者都基于注意力机制,通过计算查询(Query)、键(Key)和值(Value)之间的相似度来确定输入的加权表示。

  2. 目的:都是为了让模型能够关注到输入序列中重要的信息,从而提高模型的性能。

两者的区别

  1. 注意力头的数量:
  • 单头注意力:只有一个注意力头,即只计算一次查询、键和值之间的相似度。

  • 多头注意力:拥有多个独立的注意力头,每个头都会独立地计算查询、键和值之间的相似度。这允许模型同时关注输入序列的不同部分。

  1. 信息捕捉与表达能力:
  • 单头注意力:只能关注一个方面,信息捕捉能力有限。

  • 多头注意力:通过多个头的并行处理,能够捕捉到更多样化的特征,提高了模型的表达能力和泛化性能。这种机制使得多头注意力能够关注到句子更多层面的信息,例如罕见词、多义词、反义词等。

  1. 计算复杂度与训练难度:
  • 单头注意力:计算复杂度相对较低,训练也较为简单。

  • 多头注意力:虽然增加了计算复杂度,但通常可以通过并行计算来优化。同时,它也需要更多的训练数据和计算资源来优化模型。然而,这些额外的投入通常能够带来模型性能的显著提升。

  1. 输出结果:
  • 单头注意力:直接输出一个加权表示。

  • 多头注意力:每个头都会输出一个加权表示,然后将这些表示拼接在一起,并经过一个额外的线性变换,得到最终的输出。

图片

单头注意力和多头注意力

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 11:12:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 11:12:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 11:12:04       82 阅读
  4. Python语言-面向对象

    2024-06-08 11:12:04       91 阅读

热门阅读

  1. Linux关闭SSH延迟连接和超时自动注销

    2024-06-08 11:12:04       28 阅读
  2. 力扣76.最小覆盖子串

    2024-06-08 11:12:04       29 阅读
  3. 物联网的应用——医疗健康

    2024-06-08 11:12:04       26 阅读
  4. 【Redis】Redis集群脑裂的原因及解决方案

    2024-06-08 11:12:04       34 阅读
  5. 树状数组详解

    2024-06-08 11:12:04       25 阅读
  6. git子模块

    2024-06-08 11:12:04       23 阅读
  7. 尝试用 GPT-4o 写 2024高考语文作文

    2024-06-08 11:12:04       21 阅读
  8. 浅谈一下实例化

    2024-06-08 11:12:04       25 阅读
  9. Unreal Engine项目结构与关卡设置详解

    2024-06-08 11:12:04       30 阅读
  10. 介绍建造者模式

    2024-06-08 11:12:04       26 阅读
  11. android studio开发时提示 TLS 握手错误解决办法

    2024-06-08 11:12:04       23 阅读