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

news2024/12/26 11:55:54

目录

  • 前言
  • 一、注意力机制: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://www.coloradmin.cn/o/1009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【码上掘金编程挑战赛】- 前端可冲【简历加分项】

【码上掘金编程挑战赛】1.比赛报名2. 比赛介绍赛题一:码上游戏赛题二:码上创意赛题三:码上文言文赛题四:码上10243.报名4.提交作品1.比赛报名 比赛报名链接 https://juejin.cn/challenge/1?utm_source3169 2. 比赛介绍 赛题一…

Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】

Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码讲解 【上篇】 Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码讲解 【下篇】 以上两篇采用的是注解开发形式xml配置…

自己动手写操作系统系列第3篇,实现时钟和键盘中断

对应labOS版本1.3 程序源码可以私聊我 picirq.h int 0x20~0x2f接收中断信号IRQ0~15,因为int 0x00~0x1f不能用于IRQ。 picirq.c pic0_mask0xfb即1111 1011;PIC1以外全部禁止。pic1_mask0xff即1111 1111;禁止所有中断 pic_enable函数就是将…

【Linux下安装jdk】Linux下安装jdk

Linux下安装jdk 1、-RPM安装 1.1、检查系统是否安装过jdk java -version 检查是否有安装包 rpm -qa | grep java 1.2、安装jdk 查看服务器版本: uname -a 下载jdk对应rpm包: https://www.oracle.com/java/technologies/downloads/#java8 上传安装包至任意目录下&…

用户登录权限校验 JWT【详解】

JWT (json web token)是当前最流行的用户登录权限校验(用户认证鉴权)方案。 官网 https://jwt.io/ JWT 的工作流程 客户端填写账号密码访问登录接口 login,将账号密码传给服务端服务端验证账号密码是否正确&#xff0c…

职言 | 校招面试有感,一个面试官的几点建议

职言: 最近一直在校招,我(作者)和同事说等这段时间结束,我不想再参与面试了,快面吐了。从校招开始,我团队前前后后陆续进了500多封学生简历,我经常一整天排满了面试,聊到…

【电子通识】芯片资料(数据手册/规格书)查询常用网站和方法

目录 1.AlldataSheet 网站(建议使用) 2.ICpdf 网站 3.CIC中国IC网 网站 4.datasheet(不建议使用) 5.半导小芯 (建议使用) 6.立创商城 (建议使用) 在做硬件的芯片选型、产品维修…

生物信息学笔记02 -- 研究的一般方法

生物信息学概述 以基因组DNA序列信息为源头,识别基因组序列中代表蛋白质和RNA基因的编码区,阐明非编码区的信息特征,破译隐藏在DNA序列中的遗传语言规律 生物信息学研究的内容与方法 研究主要内容 ⚫ 生物学数据的收集、存储、管理与提供 …

C++:继承

文章目录前言一、继承的概念及定义1.继承的概念2.继承的定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员总结前言 本文介绍C中的继承。 一、继承的概念及定义 1.继承的概念 继承机制是面向对象程序设计使代码可…

厨电智能化趋势下,究竟什么才是真正的“用户思维”?

文|智能相对论 作者|佘凯文 近期2022年前三季度的各项经济数据在陆续发布,大环境依然承压,各个行业都在负重前行。 厨电行业在房地产下滑、疫情反复等因素影响下,前三季度同样一直承受着不小的压力,AVC数据显示,202…

【面试官说实现一个顺序表,但听到要求后我沉默了】

在很多人心里,顺序表是数据结构最基础最简单的东西了,如果面试让我们手撕一道顺序表,相信大家心里早就乐开了花,但是面试官真的会出这么简单的题吗? 答案是:当然会,哈哈。 我们来看看面试官的要…

【精选】ARMv8/ARMv9架构入门到精通-[前言]

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 想不想一夜暴富&#xf…

python基于PHP+MySQL的高校公选课管理信息系统

随着我国教育质量提高,在校大学生的数量也在不断的增长。相对应的如何让学生根据自己的兴趣爱好进行在线选课,从而有目的的对学生进行培养,也是当前很多高校教务人员所关心的问题。能够让更多的大学生进行在线自主选课,选择自己所喜欢的课程和教师,我们开发了高校公选课管理系统…

强化学习论文分析3---蜂窝网络联合频谱和功率分配的深度强化学习--《Deep Reinforcement Learning for ......》

目录一、研究内容概述二、系统目标与约束1.系统描述2.系统目标三、DQN、DDPG网络设计四、性能表征本文是对论文《Deep Reinforcement Learning for Joint Spectrum and Power Allocation in Cellular Networks》的分析,若需下载原文请依据前方标题搜索,第…

深入理解java线程池+源码解读

文章目录一.线程池简介1. 什么是线程池2. 线程池的优点3. 线程池中核心关系继承4.对线程池的理解①框架的两极调度模型②核心线程和非核心线程的本质区别二. 线程池核心概念1. 线程池核心参数2.两种常见的线程池①newCachedThreadPool②newFixedThreadPool③newSingleThreadExc…

基于STM32F469 discovery kit 开发板的开发3

目录基于STM32F469 discovery kit 开发板的开发3软件项目架构1. 应用层:2. Drivers层3. Middlewares层软件工作流程main函数入口LED等初始化配置外部中断基于STM32F469 discovery kit 开发板的开发3 前文我们已经实现了第一个例程在discovery 开发板上的运行&#…

virtio机制简介

What is VirtIO VirtIO是virtual input & output的缩写,是在host device之上的一层抽象层,提供给虚拟机使用。VM虚机一般是通过virtio device来使用host devices设备的,所以一个VirtIO device的主要作用其实就是充当VM与host device har…

Arduino UNO 可视化GT-24工业级无线透传

Arduino UNO 可视化GT-24工业级无线透传一、前言二、硬件要求三、参数基础四、原理剖析五、透传思路六、程序概要七、arduino使用接线八、成果展示一、前言 无线透传市面上较为常见的是基于蓝牙、esp的多种透传模块,今天介绍的则是用NRF24L01芯片构成的电路。&…

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

RocketMQ5.0主备自动切换模式下消息的不丢失方案如何进行部署?下面就来看一下 1. 下载RocketMQ5.0 首先我们去官网将RocketMQ5.0的版本下载下来。 $ wget https://dlcdn.apache.org/rocketmq/5.0.0/rocketmq-all-5.0.0-bin-release.zip 复制代码 下载完成后解压到…

Spring常用注解——@Autowired自动装配的作用和原理

一. 认识Autowired 当我们在Spring框架中配置Bean时&#xff0c;常见的有三种办法&#xff1a;①使用xml ②使用注解 ③使用javeconfig。由于第一种方法需要在application.xml配置文件中使用大量<bean>标签来进行注入&#xff0c;就衍生了注解&#xff0c;我们只要使用A…