自注意力机制(self-attention)

news2024/11/12 11:44:23

自注意力机制(self-attention)

在这里插入图片描述之前听过吴恩达老师的课,吴恩达老师CNN那一块讲的特别好,但是后面RNN这一部分我听的不是很明白,今天有看了李宏毅老师attention这部分的课,总结一下笔记。

self-attention

image-20240910185943282

红色框中的这四个向量是考虑了整个sequence后的输出,而且self-attention不仅可以使用一次,

image-20240910190237201

transformer中最重要的就是self-attention

image-20240910191112843

根据 a 1 a^1 a1找到和 a 1 a^1 a1相关的向量,比如如何计算 a 1 a^1 a1 a 4 a^4 a4有多相关

image-20240910191746530

计算有很多不同的方法计算相关度 α \alpha α,但主要是左边这种方法

image-20240910192304824

α \alpha α也叫attention score,实际上通常还要计算和自己的关联性

image-20240910193750547

然后加上一个softmax

image-20240910194104425

你也可以不用softmax

image-20240910194340047

如果关联性比较强,比如 α 1 , 2 ′ {\alpha}'_{1,2} α1,2得分高,那么 b 1 b^1 b1就更接近 v 2 v^2 v2

需要说明的一点是 b 1 , b 2 , b 3 , b 4 b^1,b^2,b^3,b^4 b1b2b3b4不需要依序产生,不需要先算 b 1 b^1 b1,然后再算 b 2 b^2 b2 b 1 , b 2 , b 3 , b 4 b^1,b^2,b^3,b^4 b1b2b3b4是同时得到的

现在计算 b 2 b^2 b2 a 2 a^2 a2×权重参数w得到 q 2 q^2 q2

image-20240910195452601

然后

image-20240910195634997

接下来从矩阵乘法的角度再从新过一遍self-attention

image-20240910200049874

得到qkv后,计算 α {\alpha} α

image-20240910200256491

然后一样的操作

image-20240910200514637

得到 α {\alpha} α矩阵后,进行softmax,使和为1

image-20240910200724613

得到 A ′ A' A

image-20240910201032268

再回顾一下,I是输入,是一排的 α {\alpha} α拼接起来

image-20240910201511237

输入是I,输出是O。虽然self-attention看起来做了很复杂的操作,但实际需要学习的参数只有三个矩阵

image-20240910201622577

self-attention还有一个进阶版本multi-head Self-attention。

我们之前找相关是通过q找相关的k,但是相关有很多不同的形式,

image-20240910203617311

q i q^i qi乘以两个不同的矩阵得到 q i , 1 , q i , 2 q^{i,1},q^{i,2} qi,1,qi,2,q有两个,那么对应的k和v也有两个

image-20240910203823826

具体是怎么计算的呢

image-20240910203946337

q 1 q^1 q1算attention分数的时候只需要管 k 1 k^1 k1不需要管 k 2 k^2 k2

image-20240911094901563

同样的得到attention分数后,只需要乘以 v 1 v^1 v1,得到 b i , 1 b^{i,1} bi,1,这只用到了一个head,另一个head也做一样的事情

image-20240911095530535

接下来把 b i , 1 b^{i,1} bi,1 b i , 2 b^{i,2} bi,2拼在一起,乘以一个矩阵,得到 b i b^i bi传到下一层

image-20240911095720222

这就是multi-head Self-attention。但是现在有个很重要的问题,就是没有位置信息,输入 a 1 , a 2 , a 3 , a 4 a^1,a^2,a^3,a^4 a1,a2,a3,a4是在seq的最前面还是最后面?

虽然我们给它们标了1234,但只是为了方便理解,对于神经网络来说,它并不知道 a 1 , a 2 , a 3 , a 4 a^1,a^2,a^3,a^4 a1,a2,a3,a4哪个在前哪个在后。所以你做Self-attention的时候,如果觉得位置信息是个重要的信息,可以把位置信息加上

image-20240911101431636

每个位置给一个独特的vector 也就是 e i e^i ei,但是这种方法是人为的,人设的vector就有很多的问题,比如vector设到128,但是sequence有129。论文中vector是通过一个sin cos的函数产生的,当然你可以采用其他的方法,位置vector的设置还是一个有待研究的问题,你可以创造新的方法。有篇文章详细的比较了不同的position vector

image-20240911102146058

每一行代表一个vector,a是最原始的,b是学习出来的,c是使用一个神奇的网络,d是通过rnn学习的

self-Attention在NLP的应用,大家耳熟能详

image-20240911102449025

但是self-Attention不只能用在NLP相关领域,也可以用在其他方面,比如做语音的时候,但是在做语音的时候,你可能会对self-Attention有一个小小的改动,因为用vector表示语音信号,向量的长度会非常大,因为用一个向量表示10ms的语音信息,那么1s的语音就有100个vector,5s就是500个vector,随便一句话可能就成千个vector了,

image-20240911102939501

如果长度很大,Attention Matrix就很大,要计算 L 2 L^2 L2,计算量大,而且消耗的内存也大.所以做语音识别的时候,有一个叫Truncated Self-attention。

image-20240911103228603

不需要看整个句子,只需要看一部分即可(人为设定的),但是我们是怎么知道需要一部分就好,那就取决于你对这个问题的理解。

Self-attention还可以被应用在图像上,我们目前讲的Self-attention都是适合在输入是一排向量的时候,但我们也可以把图像看成是vector set

image-20240911104350697

我们可以把图像的每个位置看成一个三维的向量,那么就是一个50个向量的vector set,从这个角度看,图像就是一个vector set,那么就能用Self-attention。已经有人这么做了

image-20240911104611392

比如1这个像素点产生query,0这个像素点产生key,那么我们考虑就是整张图像

image-20240911104750513

这么看的话,CNN更像是简化版的Self-attention,因为CNN只考虑了卷积核范围内的数据

image-20240911105337595

下面这篇文章会用数学严谨的方式告诉你

image-20240911113009909

只要设置合适的参数,Self-attention可以做到和CNN一样的事,可以发现Self-attention比CNN更加灵活,但是更灵活的model需要更多的data,否则容易过拟合,而有限制的模型可能在数据小的时候也不会过拟合。

16×16的patch(图像的一个块),每个patch就看成一个word

image-20240911113706056

最小的数据量是10M,一千万张图

image-20240911113803946

RNN和Self-attention的区别

image-20240911115618239

Self-attention每一个都考虑了整个sequence而,RNN只考虑了左边的vector,不过RNN也可以用双向的。不过把RNN的output和Self-attention的output对比的话,即使使用了bidirectional的RNN,还是有一定差别。

对于RNN的输出,想要考虑最左边的输入,需要存在memory里,一直不能忘记,一直带到最右边,才能在最后一个时间点被考虑,但对Self-attention来说没有这个问题

image-20240911120053081

还有就是RNN没办法平行处理,必须先产生前面的向量

image-20240911144339055

而Self-attention可以同一时间一次性生成这些向量,所以运算效率上,Self-attention比RNN更有效率。想进一步了解RNN和Self-attention可以看下面这篇文章
Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention
最后,Self-attention也可以用在Graph上面

image-20240911145203529

每一个node可以表示为一个vector,因为graph有edge的信息,所以不需要attention去找关联性,所以在计算

image-20240911145604732

Attention Matrix的时候只需要计算有edge相连的node, 根据domain knowledge没有相连的我们直接设置为0

image-20240911145825292

Self-attention也有非常多的变形

image-20240911150356983

Self-attention的最大问题就是运算量非常大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125674.html

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

相关文章

外贸|基于Java+vue的智慧外贸平台系统(源码+数据库+文档)

外贸|智慧外贸平台|外贸服务系统 目录 基于Javavue的智慧外贸平台系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&…

计算机毕业设计选题推荐-项目评审系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

YOLOv5改进 | 模块缝合 | C3 融合RVB + EMA注意力机制【二次融合】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv5入门 改…

内聚性例题

答案:D 知识点: 内聚类型 描述 功能内聚 完成一个单一功能,各个部分协同工作,缺一不可 顺序内聚 处理元素相关,而且必须顺序执行 通信内聚 所有处理元素集中在一个数据结构的区域上 过程内聚 处理元素相关&a…

解决appium ui自动化无法识别悬浮窗问题

事情的起因是在两个项目上,A项目的虚浮窗按钮无法获取 B项目的推荐和看动态无法获取UI元素 通过adb shell dump也是无法获取到,但就一个问题,为啥weditor可以定位到呢? 那奇怪了是什么原因?为什么会突然有这个现象呢&a…

喜报 速程精密牵头编制团体标准《ZR机械手通用技术要求》正式发布

喜报 速程精密牵头编制团体标准《ZR机械手通用技术要求》正式发布 近日,由深圳市速程精密科技有限公司牵头,联合华南理工大学、深圳大学、电子科技大学(深圳)高等研究院、深圳职业技术大学、深圳市创新设计研究院、固高伺创驱动技术(深圳)有限公司、深圳…

TinyWebserver的复现与改进(7):日志系统

本项目中,使用单例模式创建日志系统,对服务器运行状态、错误信息和访问数据进行记录,该系统可以实现按天分类,超行分类功能,为了简单,将使用异步写入的方式。(后续再添加同步写入) …

声音之旅:2024四大必备音乐剪辑软件盘点!

音乐剪辑,作为一种艺术形式,让每个人都能够成为自己音乐故事的导演。今天,我们将探索几款优秀的音乐剪辑工具,它们分别是福昕音频剪辑、Audio Trimmer、Ocenaudio和闪电音频剪辑。 福昕音频剪辑 直达链接:www.pdf365…

去拼多多闭着眼涨薪80%,但。。。

大家好,我是鸭鸭。 如果给你月薪涨 80%,总包涨 35%,但是新工作需要 11116,你会接这个 offer 吗? 起因是鸭鸭今天刷到了这样一个帖子: 楼主表示“吓人啊”,可见这样的涨幅确实超乎预料。 当然…

走进低代码表单开发(二):高效表单设计新利器

前面我们已经介绍了勤研低代码开发平台的报表数据源设计相关的内容,当数据源设计完成后,我们将继续进行表单的页面开发,接下来,我们一起走进勤研低代码开发平台高效便捷的表单设计,来看看勤研低代码平台如何为用户带来…

OJ在线评测系统 前端开发设计优化通用菜单组件 初始化JS全局项目入口

通用菜单组件的开发一 今天完善前端通用项目的模版 我们的前端初始化先用Vue cli脚手架跑页面 然后用arco组件库 我们要完善前端通用项目模版 先改几个bug 优化页面布局 这个footer没有一直处于底部 我们在原生css里去修改 把 position 属性改为 sticky 粘性 #basicLayo…

基于Spring搭建SpringMvc框架

SpringMvc Spring MVC 是 Spring 框架的一部分,它是一个设计用来构建 web 应用的框架。Spring MVC 实现了 Model-View-Controller(MVC)设计模式,帮助开发者将业务逻辑、用户界面以及输入处理等职责分离,从而提高代码的…

论文速读|Neural MP:一种通用神经运动规划器

论文地址:https://mihdalal.github.io/neuralmotionplanner/resources/paper.pdf 这篇论文提出的Neural MP方法通过大规模数据生成、通用神经策略和测试时优化,显著提高了运动规划的效率和成功率。Neural MP在真实世界中的表现优于现有的基于采样、优化和…

transform: rotate 旋转中心在左上角

问题 发现旋转中心在左上角,通过transform-origin修改无效。下面的代码默认一直围绕左上角黑色方块旋转 解决 控制旋转的位置出错了,本来应该是围绕content的中心进行旋转,但是content没有长宽,所以content默认在左上角&#…

华为OD机试 - 寻找最优的路测线路 - Dijkstra算法(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

【GNSS】PPPH软件源码解析

注: 1)本人在学习PPP过程中,对PPPH软件内所有源码进行了注释,相关理论进行了解析,并通过本文记录,由于是学习记录有些地方注释在了源码上,所以部分理论可能不够详细,请见谅。 2&…

Facebook的虚拟现实计划:未来社交的全新视角

随着科技的不断进步,虚拟现实(VR)正逐步成为我们日常生活的一部分。作为全球领先的社交平台,Facebook正在大力投入虚拟现实技术,以重新定义社交互动的方式。本文将深入探讨Facebook的虚拟现实计划,分析其如…

在IDEA中如何创建web项目?——不使用Archetype

二、不使用Archetype 1、创建Maven项目 (1)首先打开Project Structure:File——>Project Structure或者快捷键crtlaltshifts (2)Module——>New Module: (3)在新打开的页面下…

三数之和--力扣15

这里写目录标题 题目思路代码 题目 思路 题目要求三元组不能重复,如果使用哈希表来做,去重很复杂,而且需要额外的空间,我们这里使用双指针法直接针对数组操作。注意题目要求返回的是二维数组! 最重要的是,…

完整指南:CNStream流处理多路并发框架适配到NVIDIA Jetson Orin (四) 运行、调试、各种问题解决

目录 1 调试jetson-mpeg视频解码模块 1.1 修改config.json 1.2 Picture size 0x0 is invalid 1.3 Process(): Send package failed. Maximum number of attempts reached 1.4 Picture size 2239821608x65535 is invalid 1.5 保存h264文件解码之后的测试图片 1.6 保存RTS…