【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

article/2025/9/16 9:16:39

目录

  • 前言
  • 一、注意力机制:Attention
  • 二、自注意力机制:Self-Attention
  • 三、多头注意力机制:Multi-Head Self-Attention
  • 四、位置编码:Positional Encoding
  • Reference

前言

最近在学DETR,看源码的时候,发现自己对位置编码的理解很肤浅,只知道公式是这样的,但是深入的一些原理完全不懂。所以打算重新学习一下transformer相关的理论。然后推荐一个b站up: 去钓鱼的程序猿,和他的个人博客: 二十三岁的有德,他讲transformer讲的太好了。

这一节从头梳理一下Attention、Self-Attention、Muti-Head Self-Attention、Positional Encoding的原理。

一、注意力机制:Attention

人体视觉注意力:人眼的视野是比较开阔的,但是我们关注的焦点只有一个小范围,通常会更关注于更重要的区域,更感兴趣的区域;
注意力机制:让模型去关注在图片中的更重要的区域,忽略更不重要的区域;

不同角度理解注意力机制:

从概念角度:从大量信息中,有选择的筛选出少量重要信息,并聚焦到这些少量重要信息上,忽略大多不重要的信息。
从模型角度:通过Q去查询K当中哪些是比较重要的,得到相应的权重矩阵,再乘以V,让V去关注更重要的信息,忽略更不重要的信息。
从相似度角度:其实求取重要性的过程就是求取相似度的过程(相似度匹配),相似度越大说明重要性越高,越关注这部分。

如何做注意力:

  1. 输入Query、Key、Value;
  2. 根据Query和Key计算两者之间的相关性/相似性(常见方法点乘、余弦相似度,一般用点乘),得到注意力得分;
  3. 对注意力得分进行缩放scale(除以维度的根号),再softmax归一化,再得到权重系数;
  4. 根据权重系数对Value值进行加权求和,得到Attention Value(此时的V是具有一些注意力信息的,更重要的信息更关注,不重要的信息被忽视了);

在这里插入图片描述

一些需要注意的点:

  1. 为什么softmax前要缩放?为什么是除以维度的根号?
    缩放是因为softmax归一化是有问题的,当缩放前的某个元素非常大的时候,softmax会把大部分的概率分给这个大的元素,这就会产生一个类似one-hot的向量,softmax反向传播会导致梯度消失。所以在softmax前缩放,缓解这种问题。
    除以维度的根号因为我们希望输入softmax的数据是均值为0,方差为1。
  2. 一般K和V是相同的,或者是存在一定的联系的。
  3. 新的向量Attention Value表示了Key 和Value(Key 一般和Value相同),而且Attention Value还暗含了Q的信息。总结下:通过查询遍历Key找出Key里面的关键点,然后再和Value组合成一个新的向量去表示Key。
  4. 为什么不能用Key和Key自乘得到相似度,而要新建一个Q?
    如果Key自乘得到相似度,这个时候得到的其实是一个对称矩阵,相当于把Key投影到同一个空间中,泛化能力弱。

二、自注意力机制:Self-Attention

Self-Attention 的关键点在于,Q、K、V是同一个东西,或者三者来源于同一个X,三者同源
通过X找到X里面的关键点,从而更关注X的关键信息,忽略X的不重要信息。

Attention和Self-Attention的区别:

  1. Attention中K和V往往是同源的(也可以不同源),而Q没有任何要求,所以attention其实是一个很宽泛的概念,没有规定Q、K、V是怎么来的,只要满足QKV相乘计算相似度这种流程的都是注意力机制(所以才有通道注意力机制、空间注意力机制);
  2. Self-Attention属于Attention,要求QKV必须同源,依然代表X,本质上可以看作是相等的,只是对同一个词向量X乘上了参数矩阵,作了空间上的变换;

如何做自注意力:
3. 通过共享参数 W Q W_Q WQ W K W_K WK W V W_V WV和X运算得带Q、K、V;
4. 接下来和注意力机制一模一样;

在这里插入图片描述
如上是对Thinking Machines这句话进行自注意力的全过程,最终得到 z 1 z_1 z1 z 2 z_2 z2两个新向量。其中 z 1 z_1 z1表示的是thinking这个词向量的新的向量表示(通过thinking这个词向量,去查询和thinking machine这句话里面每个单词和thinking之间的相似度),也就是说 z 1 z_1 z1这个新的向量表示其实还是thinking这个词向量表示,还是有联系的,只不过它还包含thinking machine这句话对thinking而言哪个词向量更重要/更相关的信息。

自注意力机制的意义?
在这里插入图片描述
如上图,如果不做自注意力机制,its词向量就是单纯的its词向量,没有任何附加信息。而做了自注意力信息,its就有了law和application这层意思,可以包含law的信息,挖掘潜在意思,翻译起来就更加准确。

总结:self-attention整个过程
在这里插入图片描述
Z本质上还是X向量,只不过包含了一些新的信息:包含X中每个向量和所有向量之间的相似度,让x1/x2…去关注更重要的词向量

Self-Attention和RNN、LSTM的比较

RNN在这里插入图片描述
梯度消失:RNN梯度=近距离梯度+远距离梯度。而RNN远距离梯度可能会消失,导致梯度被近距离梯度主导。所以RNN无法做长序列,所以有长序列依赖问题。

无法并行,只能串行。

LSTM

在这里插入图片描述
通过引入门机制,来控制特征的流通和流失,解决RNN的长期依赖问题和梯度消失问题。

Self-Attention

解决长序列依赖问题:self-attention可以计算句子中每个词向量和所有词向量的相关性,再长的单词也没关系(一般50个左右的单词最好 因为太长的话计算量过大)。
解决并行问题:矩阵计算,可以同时计算所有单词和其他所有单词的相关性。
self-attention得到的新的词向量具有语法特征(如making -> more/difficult)和语义特征(如its -> law/application),对词向量的表征更完善。

缺点:计算量变大了。位置编码问题。

三、多头注意力机制:Multi-Head Self-Attention

Multi-Head Self-Attention得到的新的词向量可以比Self-Attention得到的词向量有进一步提升。

什么是多头?(一般是使用8头)

在这里插入图片描述
理论做法:

  1. 输入X;
  2. 对应8个single head,对应8组 W Q W_Q WQ W K W_K WK W V W_V WV,再分别进行self-attention,得到 Z 0 Z_0 Z0 - Z 7 Z_7 Z7
  3. 再把 Z 0 Z_0 Z0 - Z 7 Z_7 Z7拼接concat起来;
  4. 再做一次线性变换(降维)得到 Z

源码:

  1. 输入X;
  2. 根据 W Q W_Q WQ W K W_K WK W V W_V WV,生成Q、K、V;
  3. 再把Q拆分成 q 1 q_1 q1 q 7 q_7 q7,K拆分成 k 1 k_1 k1 k 7 , k_7, k7V拆分成 v 1 v_1 v1 v 7 v_7 v7
  4. 8个头分别做自注意力机制;
  5. 再把 Z 0 Z_0 Z0 - Z 7 Z_7 Z7拼接concat起来;
  6. 再做一次线性变换(降维)得到 Z

为什么多头?有什么作用?

机器学习的本质:y = σ ( w x + b ) \sigma(wx+b) σ(wx+b),其实就是在做非线性变换。把数据x(它是不合理的),通过非线性变换,变成数据y(合理)。

非线性变换的本质:空间变换,改变空间上的位置坐标。

self-attention本质,通过非线性变换,把原始数据空间上的X点位置映射到新空间上的点Z上。

muti-head self-attention:把输入数据X,再把X通过非线性变换,映射到8个不同的子空间上,然后通过这8个不同的子空间去找最终的新空间上的点Z。这样可以捕捉更加丰富的特征信息,效果更好。

四、位置编码:Positional Encoding

为什么需要位置编码?
之前提到,self-attention可以解决长序列依赖问题,并且可以并行。但是并行就意味着它是可以同时计算每个位置和其他位置的相关性的,也就是说词与词之间是不存在顺序关系的。所以如果打乱一句话,那么这句话里的词向量依然不变,即无位置关系。

总结:self-attention不像RNN那样有先后顺序,可以找到每个序列的位置,self-attention只是负责计算每个位置和其他位置的相关性。为了解决这个问题,就提出了位置编码。

怎么做位置编码?
在这里插入图片描述

  1. 对词向量进行编码生成embedding x1(shape1);
  2. 生成相应的位置编码 positional emcoding t1(shape1),如上t1包含x1和x2,x1和x3的位置关系;
  3. 两者相加add(embedding +positional emcoding),生成最终的输入特征 Embedding with time signal(shape1);

位置编码的生成方式

1、正余弦生成
在这里插入图片描述
位置编码底层解释
在这里插入图片描述
前面我们知道位置编码其实就是让t1知道x1和x2,x1和x3的位置关系。从公式角度理解为什么?

sin(pos+k) = sin(pos)*cos(k) + cos(pos)*sin(k)  # sin 表示的是偶数维度
cos(pos+k) = cos(pos)*cos(k) - sin(pos)*sin(k)  # cos 表示的是奇数维度这个公式告诉我们:位置pos + k 是 位置pos 和 位置k 的线性组合
即当我知道 位置pos+k 那内部就会暗含 位置pos 和 位置k 的信息
所以,此时即使打乱了词的位置关系,位置编码也会发生改变 这就解决了transformer的问题

2、自学习生成
这种方式比较简单,就直接随机初始化和x1一样shape的随机变量,然后训练网络的时候自动学习即可。

Reference

b站: 09 Transformer 之什么是注意力机制(Attention)

b站: 10 Transformer 之 Self-Attention(自注意力机制)

b站: 10 Attention 和 Self-Attention 的区别(还不能区分我就真的无能为力了)

b站: 11 Self-Attention 相比较 RNN 和 LSTM 的优缺点

b站: 13 Transformer的多头注意力,Multi-Head Self-Attention(从空间角度解释为什么做多头)

b站: 14 位置编码公式详细理解补充

b站: 14 Transformer之位置编码Positional Encoding (为什么 Self-Attention 需要位置编码)

b站: 躺懂Transformer !学不会来打我(doge)

个人网站: Transformer、GPT、BERT,预训练语言模型的前世今生(目录) _


http://chatgpt.dhexx.cn/article/4JWSDJ3w.shtml

相关文章

注意力机制详解系列(一):注意力机制概述

👨‍💻作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。公众号: GoAI的学习小屋,免费分享书籍、简历、导图等资料,更有交流群分享AI和大数据,加群方式公众号回复“加群”或➡️点击链接。 🎉专栏推荐: 目…

注意力机制详解

注意力机制详解 Attention机制由来Attention定义Encoder-Decoder框架Attenion机制的引入Attention机制的类别Hard AttentionSoft AttentionGlobal AttentionLocal AttentionSelf AttentionMulti-head Attention Attention机制的应用自然语言处理领域计算机视觉领域语音识别领域…

【深度学习】(1) CNN中的注意力机制(SE、ECA、CBAM),附Pytorch完整代码

大家好,今天和各位分享一下如何使用 Pytorch 构建卷积神经网络中的各种注意力机制,如:SENet,ECANet,CBAM。 注意力机制的原理 和 TensorFlow2 的实现方式可以看我下面两篇博文: SENet、ECANet&#xff1a…

注意力机制详述

学习本部分默认大家对RNN神经网络已经深入理解了,这是基础,同时理解什么是时间序列,尤其RNN的常用展开形式进行画图,这个必须理解了。 这篇文章整理有关注意力机制(Attention Mechanism )的知识&#xff0c…

手把手带你YOLOv5/v7 添加注意力机制(并附上30多种顶会Attention原理图)2023/6/15更新

🌟想了解YOLO系列算法更多教程欢迎订阅我的专栏🌟 对于基础薄弱的同学来说,推荐阅读《目标检测蓝皮书》📘,里面涵盖了丰富的目标检测实用知识,是你迅速掌握目标检测的理想选择! 如果想了解 YO…

量化交易python入门书籍_张杨飞《Python量化交易入门》PDF下载

张杨飞《Python量化交易入门》PDF下载 首页 > 计算机类 字号:小 中 大 评论:0 条 评论:0 条 Python量化交易入门 【作 者】张杨飞 【形态项】 402 【出版项】 北京:电子工业出版社 , 2019.04 【ISBN号】978-7-121-36140-1 【中图法分类号】F830.91 【原书…

Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一位初三的以编程为兴趣的女生、…

2019年Python入门书籍推荐

大概是一时改变不了之前的学习习惯,所以很多Python小白都来问我有什么适合的Python入门书籍推荐。接下来我就为大家推荐几本经典的:(请大家根据自己以下六种情况对号入座,挑选适合自己的 Python 入门书籍)一&#xff0…

Python入门书籍,百万读者都选择!

从0到100万 Python入门神书 如果你是程序员,或者是 Python 爱好者,那你一定听说过一本书:《Python编程 从入门到实践》。作为国内首批 Python 图书之一,蟒蛇书首版自2016年问世以来就狂销70余万册;2020年10月第2版出版…

斯坦福大学教授,极力推荐5本python入门书籍,入门最快基础最好

为什么要选择python Python是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎。 如果你正处于想学习python或者正在python入门阶段,推荐5套python电子学习书籍,对于没有接触过编程,或者基础薄弱者来说…

0基础学Python入门书籍应该看什么?

0基础学Python入门书籍应该看什么?Python 对不少人来说是谜一样的东西不知道如何下手、从何处下手,找了很多资源几个月过去了学习陷入换乱,没没能入门Python开发。出现这种情况大多是因为没有充分做好学习前的准备。 0基础学习Python建议读一…

Python入门书籍推荐——《笨办法学Python》

很多小伙伴在学习Python的道路上,觉得越来越难。今天为小伙伴推荐一本非常适合Python小白的书籍《笨办法学Python》第三版。 在豆瓣有7.8的评分,学习Python的小伙伴千万不要错过了呀。 《笨办法学Python》是一本关于Python的入门书籍,即使是…

python入门书籍(爬虫方面)有哪些推荐?

关于爬虫,应该没有人不知道了吧,其抓取速度快和数据质量优的两大特点而受到越来越多的人追捧,互联网时代,有爬虫技术的加持对于职场人来说无疑是锦上添花。 随着爬虫技术的流行,网上的资源层出不穷,但对于…

python新手入门.pdf_所有Python入门书籍的整理,初学者必看,附赠所有电子版(一)...

原标题:所有Python入门书籍的整理,初学者必看,附赠所有电子版(一) 这从来都是我的观点,学习Python编程,看书是最好的方式之一。 所以,今天一姐想对自己日积月累收集的部分入门书籍做一个汇总,当然,大家也可以看看哪本书比较适合现在的自己,然后文章尾部有免费找我…

必读的Python入门书籍,你都看过吗?(内有福利)

今天小编为大家准备了4本Python入门书籍,让大家在python的学习路上少走弯路。 1.Python基础教程 《Python基础教程》是经典的Python入门教程书籍,本书层次鲜明,结构严谨,特别是在最后几章中,作者将前面讲述的内容应用到项目中,并以模板的形式介绍了项目的开发过程,手把…

4本Python必读的入门书籍

Python入门书籍不用看太多,看一本就够。重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析、机器学习,也可以用来做后端开发、还可以做Web开…

推荐大家6本Python入门书籍

前言 我在逛各大媒体的时候,发现大家都有一个问题,就是不知道入门看什么书籍好,总是在问答上要大家推荐书籍,这些人推荐的质量都是参差不齐, 本节为大家推荐6本高效率的书籍(总有一本适合你)&a…

python零基础入门书籍-零基础python入门书籍推荐读哪些书?

零基础python入门书籍推荐读哪些书?很多Python 初学者都希望有经验的资深人士能推荐一些入门书籍,于是你就会搜到有网友推荐的超长的入门书单,然而这简直跟没推荐一样。这些书籍并不适合初学者,对于零基础学员看到各种代码就已经头…

最好的Python入门书籍:《Python编程:从入门到实践》

Python的入门很简单,网上有很多资料,但他们大部分都集中在Python语言的用法上,加上学习一些脚本写法,对语法思维和设计理念都是泛泛而谈,所以尽管有所实践,但是无法由浅入深去阐述一个概念,总是…

python入门书籍(爬虫方面)

python入门书籍(爬虫方面) 可以选以下几本书(个人看法): 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或…