自注意力机制(Self-Attention)的基本知识

简介: 自注意力机制(Self-Attention)的基本知识

Transformers是机器学习(ML)中一个令人兴奋的(相对)新的部分,但是在理解它们之前,有很多概念需要分解。这里我们关注的是基本的Self-Attention机制是如何工作的,这是Transformers模型的第一层。本质上,对于每个输入向量,Self-Attention产生一个向量,该向量在其邻近向量上加权求和,其中权重由单词之间的关系或连通性决定。

内容列表

  • 介绍
  • 自我关注-数学
  • 引用文章

介绍

Transformers是一种ML架构,已经成功地应用于各种NLP任务,尤其是序列到序列(seq2seq)任务,如机器翻译和文本生成。在seq2seq任务中,目标是获取一组输入(例如英语单词)并产生一组理想的输出(德语中的相同单词)。自2017年发布以来,他们已经占领了seq2seq的主流架构(LSTMs),几乎无所不在地出现在任何关于NLP突破的新闻中(比如OpenAI的GPT-2甚至出现在主流媒体上!)。

640.png

图1:机器翻译 英->德

本篇将作为一个非常温和、渐进的介绍Transformer架构背后的数学、代码和概念。没有比注意力机制更好的开始了,因为:

最基本的transformers 完全依赖于注意力机制

Self-Attention的数学表示

我们需要一个ML系统来学习单词之间的重要关系,就像人类理解句子中的单词一样。在图2.1中,你我都知道“The”指的是“animal”,因此应该与这个词有很强的联系。如图中的颜色编码所示,该系统知道“animal”、“cross”、“street”和“the”之间存在某种联系,因为它们都与句子的主语“animal”有关。这是通过Self-Attention来实现的

640.png

图2.1:“The”注意力集中在了哪些词?

在最基本的层面上,Self-Attention是一个过程,其中一个向量序列x被编码成另一个向量序列z(图2.2)。每一个原始向量只是一个代表一个单词的数字块。它对应的z向量既表示原始单词,也表示它与周围其他单词的关系。

640.png

图2.2:把一系列的输入向量变成另一个长向量序列

向量表示空间中的某种事物,如海洋中的水粒子流或地球周围任何点的重力效应。你可以把单词看作是整个单词空间中的向量。每个词向量的方向都有意义。向量之间的相似性和差异性对应于单词本身的相似性和差异性。

让我们先看前三个向量,特别是向量x2,我们的“cat”向量,是如何变成z2的。对于每个输入向量,将重复所有这些步骤。

首先,我们将向量x2乘以一个序列中的所有向量,包括它本身。我们将对每个向量和x2的转置(对角翻转)做一个乘积(图2.3)。这和做点积是一样的,你可以把两个向量的点积看作是衡量它们有多相似。

640.png

图2.3 转置乘法(上标“T”=“转置”)

两个向量的点积与它们之间夹角的余弦成正比(图2.4),因此它们在方向上越接近,点积就越大。如果它们指向同一个方向,那么角A为0⁰,余弦为0⁰等于1。如果它们指向相反的方向(因此A=180⁰),那么余弦值为-1。

640.png

图2.4 向量点积

如果你想要一个更直观的观点,Bloem的文章(地址参看引用段)讨论了自我关注如何类似于推荐系统决定电影或用户的相似性。

所以我们一次只关注一个词,然后根据它周围的词来确定它的输出。这里我们只看前面和后面的单词,但我们可以选择在将来拓宽这个窗口。

640.png

图2.5-每个j-th向量的原始权重

如果我们关注的单词是“cat”,那么我们要复习的单词序列是“the”,“cat”,“sat”。我们要问的是“cat”这个词应该分别关注“the”、“cat”和“sat”(与图2.1所示类似)。

将关注的单词向量的转置和它周围的单词序列相乘将得到一组3个原始权重(图2.5)。两个词的权重是如何成比例的。我们需要对它们进行规范化,以便它们更易于使用。我们将使用softmax公式(图2.6)来实现这一点。这将数字序列转换为0,1的范围内,其中每个输出与输入数字的指数成比例。这使得我们的权重更容易使用和解释。


640.png


图2.6:通过softmax函数将原始权重标准化

现在我们取归一化的权重(j序列中每个向量对应一个),分别将它们与x输入向量相乘,将它们的乘积相加,结果就完成了!我们有一个输出z向量,(图2.5)!当然,这只是x2的输出向量(“cat”)——这个操作将对x中的每个输入向量重复,直到我们得到图2.2中所说的输出序列。

640.png

图2.7:最终得到新的向量序列z的操作

这种解释到目前为止可能引发了一些问题:

我们计算的权重不是很大程度上依赖于我们如何确定原始输入向量吗?

为什么我们要依赖向量的相似性?如果我们想在两个“不相似”的单词之间找到联系,比如“the cat sit on the matt”的宾语和主语,该怎么办?

在后面的文章中,我们将讨论这些问题。我们将根据每个向量的不同用法对其进行转换,从而更精确地定义单词之间的关系,这样我们就可以得到如图2.8所示的输出。

640.png

图2.8 -橙色栏中的“cross”和粉色栏中的“cross”关注的是哪个单词?

引用

  1. Alammar J. The Illustrated Transformer. (2018) https://jalammar.github.io/illustrated-transformer/ [accessed 27th June 2020]
  2. Bloem P. Transformers from Scratch. (2019) http://www.peterbloem.nl/blog/transformers .[accessed 27th June 2020]
  3. Vaswani A. et al. Dec 2017. Attention is all you need. 31st Conference on Neural Information Processing Systems (NIPS 2017), Long Beach, CA, USA. https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf [accessed 27th June 2020]. arXiv:1706.03762
  4. Vaswani A. et al. Mar 2018 arXiv:1803.07416 .
目录
相关文章
|
4月前
|
机器学习/深度学习 计算机视觉
【YOLOv10改进-注意力机制】 MSDA:多尺度空洞注意力 (论文笔记+引入代码)
YOLO目标检测专栏探讨了ViT的改进,提出DilateFormer,它结合多尺度扩张注意力(MSDA)来平衡计算效率和关注域大小。MSDA利用局部稀疏交互减少冗余,通过不同头部的扩张率捕获多尺度特征。DilateFormer在保持高性能的同时,计算成本降低70%,在ImageNet-1K、COCO和ADE20K任务上取得领先结果。YOLOv8引入了MultiDilatelocalAttention模块,用于实现膨胀注意力。更多详情及配置见相关链接。
|
4月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv10改进-注意力机制】Polarized Self-Attention: 极化自注意力,双重注意力机制
YOLOv10引入了极化自注意(PSA)块,结合通道和空间注意力,降低信息损失。PSA通过极化过滤保持高分辨率,并用增强处理非线性分布。在2D姿态估计和分割任务上提升1-2点精度,相比基线提升2-4点。代码示例展示了PSA模块如何集成到模型中。更多配置详情见相关链接。
|
5月前
|
机器学习/深度学习 编解码 PyTorch
【YOLOv8改进】HAT(Hybrid Attention Transformer,)混合注意力机制 (论文笔记+引入代码)
YOLO目标检测专栏介绍了YOLO系列的改进方法和实战应用,包括卷积、主干网络、注意力机制和检测头的创新。提出的Hybrid Attention Transformer (HAT)结合通道注意力和窗口自注意力,激活更多像素以提升图像超分辨率效果。通过交叉窗口信息聚合和同任务预训练策略,HAT优化了Transformer在低级视觉任务中的性能。实验显示,HAT在图像超分辨率任务上显著优于现有方法。模型结构包含浅层和深层特征提取以及图像重建阶段。此外,提供了HAT模型的PyTorch实现代码。更多详细配置和任务说明可参考相关链接。
|
6月前
|
机器学习/深度学习 自然语言处理 算法
注意力机制(四)(多头注意力机制)
在上一篇注意力机制(三)(不同注意力机制对比)-CSDN博客,重点讲了针对QKV来源不同制造的注意力机制的一些变体,包括交叉注意力、自注意力等。这里再对注意力机制理解中的核心要点进行归纳整理
|
6月前
|
机器学习/深度学习 自然语言处理 并行计算
一文搞懂Transformer架构的三种注意力机制
一文搞懂Transformer架构的三种注意力机制
612 1
|
5月前
|
机器学习/深度学习 计算机视觉
【保姆级教程|YOLOv8添加注意力机制】【2】在C2f结构中添加ShuffleAttention注意力机制并训练
【保姆级教程|YOLOv8添加注意力机制】【2】在C2f结构中添加ShuffleAttention注意力机制并训练
|
6月前
|
机器学习/深度学习
注意力机制(二)(自注意力机制)
看一个物体的时候,我们倾向于一些重点,把我们的焦点放到更重要的信息上
注意力机制(二)(自注意力机制)
|
6月前
|
机器学习/深度学习 算法 计算机视觉
YOLOv8改进 | 注意力机制 | 添加全局注意力机制 GcNet【附代码+小白必备】
本文介绍了如何在YOLOv8中集成GcNet,以增强网络对全局上下文的捕获能力。GcNet通过全局上下文模块、通道和空间注意力机制提升CNN对全局信息的利用。教程详细阐述了GcNet的原理,并提供了将GcNet添加到YOLOv8的代码实现步骤,包括创建ContextBlock类、修改init.py、task.py以及配置yaml文件。此外,还提供了训练和运行示例代码。完整代码和更多进阶内容可在作者的博客中找到。
|
6月前
|
机器学习/深度学习 算法 计算机视觉
YOLOv8改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附完整代码+小白必备】
在这个教程中,作者介绍了如何在YOLOv8图像识别模型中集成DoubleAttention模块,以提升模型捕捉长距离关系的效率。DoubleAttention通过全局和局部注意力模块捕获图像的全局和局部信息。教程详细阐述了DoubleAttention的工作原理,并提供了相应的代码实现。读者将学习到如何在YOLOv8的网络结构中添加这一组件,并给出了完整的代码示例。此外,还分享了GFLOPs的计算,以及鼓励读者尝试在不同位置添加注意力机制作为进阶练习。完整代码和更多详情可在提供的链接中获取。
|
6月前
|
机器学习/深度学习
注意力机制(三)(不同注意力机制对比)
主要介绍了注意力机制的基本思想,以及注意力机制中一个常见的类型——自注意力机制。前面两篇文章为了帮助大家理解注意力机制的思想用了非常多的类比,以及联系生活实际。 然而,不管类比和联系多么恰当,这些做法多多少少都会让事物本身的特性被类比、联系后的事物所掩盖。