Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >快看!Transformer中的自注意力机制(Self-attention)竟有这么多变体

快看!Transformer中的自注意力机制(Self-attention)竟有这么多变体

作者头像
ShuYini
发布于 2022-12-06 07:28:52
发布于 2022-12-06 07:28:52
1.3K0
举报

作者 | 谢博士 整理 | PaperWeekly

总结下关于李宏毅老师在 2022 年春季机器学习课程中关于各种注意力机制介绍的主要内容,也是相对于 2021 年课程的补充内容。参考视频见:

https://www.bilibili.com/video/BV1Wv411h7kN/?p=51&vd_source=eaef25ec79a284858ac2a990307e06ae

在 2021 年课程的 transformer 视频中,李老师详细介绍了部分 self-attention 内容,但是 self-attention 其实还有各种各样的变化形式:

先简单复习下之前的 self-attention。假设输入序列(query)长度是 N,为了捕捉每个 value 或者 token 之间的关系,需要对应产生 N 个 key 与之对应,并将 query 与 key 之间做 dot-product,就可以产生一个 Attention Matrix(注意力矩阵),维度 N*N。这种方式最大的问题就是当序列长度太长的时候,对应的 Attention Matrix 维度太大,会给计算带来麻烦。

对于 transformer 来说,self-attention 只是大的网络架构中的一个 module。由上述分析我们知道,对于 self-attention 的运算量是跟 N 的平方成正比的。当 N 很小的时候,单纯增加 self-attention 的运算效率可能并不会对整个网络的计算效率有太大的影响。因此,提高 self-attention 的计算效率从而大幅度提高整个网络的效率的前提是 N 特别大的时候,比如做图像识别(影像辨识、image processing)。

如何加快 self-attention 的求解速度呢?根据上述分析可以知道,影响 self-attention 效率最大的一个问题就是 Attention Matrix 的计算。如果我们可以根据一些人类的知识或经验,选择性的计算 Attention Matrix 中的某些数值或者某些数值不需要计算就可以知道数值,理论上可以减小计算量,提高计算效率。

举个例子,比如我们在做文本翻译的时候,有时候在翻译当前的 token 时不需要给出整个 sequence,其实只需要知道这个 token 两边的邻居,就可以翻译的很准,也就是做局部的 attention(local attention)。这样可以大大提升运算效率,但是缺点就是只关注周围局部的值,这样做法其实跟 CNN 就没有太大的区别了。

如果觉得上述这种 local attention 不好,也可以换一种思路,就是在翻译当前 token 的时候,给它空一定间隔(stride)的左右邻居,从而捕获当前与过去和未来的关系。当然stride的数值可以自己确定。

还有一种 global attention 的方式,就是选择 sequence 中的某些 token 作为 special token(比如标点符号),或者在原始的 sequence 中增加 special token。让 special token 与序列产生全局的关系,但是其他不是 special token 的 token 之间没有 attention。以在原始 sequence 前面增加两个 special token 为例:

到底哪种 attention 最好呢?小孩子才做选择...对于一个网络,有的 head 可以做 local attention,有的 head 可以做 global attention... 这样就不需要做选择了。看下面几个例子:

  • Longformer 就是组合了上面的三种 attention
  • Big Bird 就是在 Longformer 基础上随机选择 attention 赋值,进一步提高计算效率

上面集中方法都是人为设定的哪些地方需要算 attention,哪些地方不需要算 attention,但是这样算是最好的方法吗?并不一定。对于 Attention Matrix 来说,如果某些位置值非常小,我们可以直接把这些位置置 0,这样对实际预测的结果也不会有太大的影响。也就是说我们只需要找出 Attention Matrix 中 attention 的值相对较大的值。但是如何找出哪些位置的值非常小/非常大呢?

下面这两个文献中给出一种 Clustering(聚类)的方案,即先对 query 和 key 进行聚类。属于同一类的 query 和 key 来计算 attention,不属于同一类的就不参与计算,这样就可以加快 Attention Matrix 的计算。比如下面这个例子中,分为 4 类:1(红框)、2(紫框)、3(绿框)、4(黄框)。在下面两个文献中介绍了可以快速粗略聚类的方法。

有没有一种将要不要算 attention 的事情用 learn 的方式学习出来呢?有可能的。我们再训练一个网络,输入是 input sequence,输出是相同长度的 weight sequence。将所有 weight sequence 拼接起来,再经过转换,就可以得到一个哪些地方需要算 attention,哪些地方不需要算 attention 的矩阵。有一个细节是:某些不同的 sequence 可能经过 NN 输出同一个 weight sequence,这样可以大大减小计算量。

上述我们所讲的都是 N*N 的 Matrix,但是实际来说,这样的 Matrix 通常来说并不是满秩的,也就是说我们可以对原始 N*N 的矩阵降维,将重复的 column 去掉,得到一个比较小的 Matrix。

具体来说,从 N 个 key 中选出 K 个具有代表的 key,每个 key 对应一个 value,然后跟 query 做点乘。然后做 gradient-decent,更新 value。

为什么选有代表性的 key 不选有代表性的 query 呢?因为 query 跟 output 是对应的,这样会 output 就会缩短从而损失信息。

怎么选出有代表性的 key 呢?这里介绍两种方法,一种是直接对 key 做卷积(conv),一种是对 key 跟一个矩阵做矩阵乘法。

回顾一下注意力机制的计算过程,其中 I 为输入矩阵,O 为输出矩阵。

先忽略 softmax,那么可以化成如下表示形式:

上述过程是可以加速的。如果先 V*K^T 再乘 Q 的话相比于 K^T*Q 再乘 V 结果是相同的,但是计算量会大幅度减少。

附:线性代数关于这部分的说明

还是对上面的例子进行说明。如果 K^T*Q,会执行 N*d*N 次乘法。V*A,会再执行 d'*N*N 次乘法,那么一共需要执行的计算量是(d+d')N^2。

如果 V*K^T,会执行 d'*N*d 次乘法。再乘以 Q,会执行 d'*d*N 次乘法,所以总共需要执行的计算量是 2*d'*d*N。

而(d+d')N^2>>2*d'*d*N,所以通过改变运算顺序就可以大幅度提升运算效率。

现在我们把 softmax 拿回来。原来的 self-attention 是这个样子,以计算b1为例:

如果我们可以将 exp(q*k) 转换成两个映射相乘的形式,那么可以对上式进行进一步简化:

▲ 分母部分化简

▲ 分子化简

将括号里面的东西当做一个向量,M 个向量组成 M 维的矩阵,在乘以 φ(q1),得到分子。

用图形化表示如下:

由上面可以看出蓝色的 vector 和黄色的 vector 其实跟 b1 中的 1 是没有关系的。也就是说,当我们算 b2、b3... 时,蓝色的 vector 和黄色的 vector 不需要再重复计算。

self-attention 还可以用另一种方法来看待。这个计算的方法跟原来的 self-attention 计算出的结果几乎一样,但是运算量会大幅度减少。简单来说,先找到一个转换的方式 φ(),首先将 k 进行转换,然后跟 v 做 dot-product 得到 M 维的 vector。再对 q 做转换,跟 M 对应维度相乘。其中 M 维的 vector 只需要计算一次。

b1 计算如下:

b2 计算如下:

可以这样去理解,将 φ(k) 跟 v 计算的 vector 当做一个 template,然后通过 φ(q) 去寻找哪个 template 是最重要的,并进行矩阵的运算,得到输出 b。

那么 φ 到底如何选择呢?不同的文献有不同的做法:

在计算 self-attention 的时候一定需要 q 和 k 吗?不一定。在 Synthesizer 文献里面,对于 attention matrix 不是通过 q 和 k 得到的,而是作为网络参数学习得到。虽然不同的 input sequence 对应的 attention weight 是一样的,但是 performance 不会变差太多。其实这也引发一个思考,attention 的价值到底是什么?

处理 sequence 一定要用 attention 吗?可不可以尝试把 attention 丢掉?有没有 attention-free 的方法?下面有几个用 mlp 的方法用于代替 attention 来处理 sequence。

最后这页图为今天所有讲述的方法的总结。下图中,纵轴的 LRA score 数值越大,网络表现越好;横轴表示每秒可以处理多少 sequence,越往右速度越快;圈圈越大,代表用到的 memory 越多(计算量越大)。

以上就是关于李老师对于《各种各样神奇的自注意力机制(Self-attention)变形》这节课总结的全部内容。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AINLPer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
注意力机制:GPT等大模型的基石
人类观察事物,能快速判断一种事物,是因为大脑能很快把注意力放在事物最具辨识度的部分从而作出判断,而非从头到尾一览无遗观察一遍才能有判断。基于这样的观察实践,产生了注意力机制(Attention Mechanism)。
JavaEdge
2025/03/18
2710
自注意力机制(Self-attention)
最近,学了好多东西,今天看了一下李飞飞老师讲解的自注意力机制,因此在这记录一下,以供日后复习,同时自己学习消化知识也好。
卡伊德
2022/09/13
1.5K0
自注意力机制(Self-attention)
一文搞懂 Transformer 工作原理 !!
本文将从单头Attention工作原理、多头Attention工作原理、全连接网络工作原理三个方面,实现一文搞懂Transformer的工作原理。
JOYCE_Leo16
2024/03/19
3K0
一文搞懂 Transformer 工作原理 !!
Self Attention 自注意力机制
在谈论self attention之前我们首先认识一下以KQV模型来解释的Attention机制。
Steve Wang
2020/03/18
12.4K0
Self Attention 自注意力机制
从Seq2seq到Attention模型到Self Attention(二)
系列一介绍了Seq2seq和 Attention model。这篇文章将重点摆在Google於2017年发表论文“Attention is all you need”中提出的 “”The transformer模型。”The transformer”模型中主要的概念有2项:1. Self attention 2. Multi-head,此外,模型更解决了传统attention model中无法平行化的缺点,并带来优异的成效。
量化投资与机器学习微信公众号
2018/10/25
2.4K0
从Seq2seq到Attention模型到Self Attention(二)
图解transformer中的自注意力机制
在整个注意力过程中,模型会学习了三个权重:查询、键和值。查询、键和值的思想来源于信息检索系统。所以我们先理解数据库查询的思想。
deephub
2023/08/30
9660
图解transformer中的自注意力机制
图解自注意力机制(Self-Attention)
传统的Attention机制发生在Target的元素和Source中的所有元素之间。
机器学习AI算法工程
2024/04/11
1.9K0
图解自注意力机制(Self-Attention)
注意力机制到底在做什么,Q/K/V怎么来的?一文读懂Attention注意力机制
Transformer[^1]论文中使用了注意力Attention机制,注意力Attention机制的最核心的公式为:
PP鲁
2022/09/20
15.9K0
注意力机制到底在做什么,Q/K/V怎么来的?一文读懂Attention注意力机制
【调研】详解Transformer结构——Attention Is All You Need
        Transformer是一个完全依赖自注意力的面向sequence to sequence任务的NLP模型,由谷歌大脑在17年的论文《Attention is all you need》中首次提出。它抛弃了传统的CNN和RNN神经网络,整个网络结构完全由Attention机制以及前馈神经网络组成,它解决了RNN长期依赖和无法并行化以及CNN缺失全局特征等问题。(尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。)
小锋学长生活大爆炸
2022/10/28
1.3K0
自注意力机制(Self-Attention)
普通自注意力(Self-Attention)的工作原理主要是让模型能够关注输入序列中不同位置的信息,并根据这些信息来生成当前位置的输出。它是Transformer模型中的一个关键组件,尤其在处理序列数据(如文本、语音等)时表现出色。
jack.yang
2025/04/05
2000
自注意力机制(Self-Attention)
注意力机制详解
我们观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的), 是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果. 正是基于这样的理论,就产生了注意力机制。
@小森
2024/06/02
4240
注意力机制详解
[深度学习概念]·谷歌transformer论文解读(转)
这篇博客的主要内容是对谷歌提出的transformer 进行论文解读,包含算法复杂度的分析。对应的论文是 “Attention is all you need", 链接如下 https://arxiv.org/pdf/1706.03762.pdf 。
小宋是呢
2019/06/27
1.8K0
[深度学习概念]·谷歌transformer论文解读(转)
深入剖析Transformer架构中的多头注意力机制
多头注意力(Multi-Head Attention)是一种在Transformer模型中被广泛采用的注意力机制扩展形式,它通过并行地运行多个独立的注意力机制来获取输入序列的不同子空间的注意力分布,从而更全面地捕获序列中潜在的多种语义关联。
zhouzhou的奇妙编程
2025/01/31
2K0
如何理解attention中的Q,K,V?
注意,这里的query, key, value只是一种操作(线性变换)的名称,实际的Q/K/V是它们三个的输出
数据STUDIO
2024/06/17
3700
如何理解attention中的Q,K,V?
Transformer长大了,它的兄弟姐妹们呢?(含Transformers超细节知识点)
最近复旦放出了一篇各种Transformer的变体的综述(重心放在对Transformer结构(模块级别和架构级别)改良模型的介绍),打算在空闲时间把这篇文章梳理一下:
AI部落联盟
2021/07/19
1.7K0
Transformer自下而上理解(4) Attention without RNN
在介绍Transformer之前,我们首先回顾一下Attention机制。我们要知道Attention的提出的目的是为了解决句子太长而出现的遗忘问题。
marsggbo
2021/06/08
3900
Transformer自下而上理解(4) Attention without RNN
Transformer (Attention is all you need) 详解
在之前的博客中有简单讲到Transformer,这篇博客将会专门详细的一起看看内部的计算与实现。
大鹅
2021/08/26
2.6K1
Transformer+self-attention超详解(亦个人心得)
链接|https://zhuanlan.zhihu.com/p/432814387
zenRRan
2021/12/09
6K2
Transformer+self-attention超详解(亦个人心得)
解析广泛应用于NLP的自注意力机制(附论文、源码)
本文基于深度学习的注意力(Attention)机制与你分享一些学习总结。 近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理各个任务中,之前我对早期注意力机制进行过一些学习总结 [1]。 随着注意力机制的深入研究,各式各样的 Attention 被研究者们提出。在 2017年 6 月 Google 机器翻译团队在 arXiv 上放出的 Attention is All You Need [2] 论文受到了大家广泛关注,自注意力(self-attention)机制开始成为神经网络
数据派THU
2018/06/12
1.3K0
搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了
本文对Vision Transformer的原理和代码进行了非常全面详细的解读,一切从Self-attention开始、Transformer的实现和代码以及Transformer+Detection:引入视觉领域的首创DETR。
AI算法与图像处理
2021/01/20
8K0
搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了
推荐阅读
相关推荐
注意力机制:GPT等大模型的基石
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档