李宏毅深度学习self-attentin学习笔记

news2024/12/23 23:41:11

self-attention

  • 一、self-attention的起源
  • 二、self-attention网络架构
  • 三、multi-head self-attention
  • 四、positional encoding
  • 五、pytorch实现

一、self-attention的起源

self-attention初始也是用于解决seq2seq的问题。即input是一堆序列,而output也是一段长度固定或者不固定的序列值。和RNN比较类似。多说一句,从2022年开始李宏毅老师的机器学习课程中已经删除了有关RNN和LSTM的相关内容,因为self-attention完全可以替代RNN,且效果更好。

二、self-attention网络架构

在这里插入图片描述
注意力的本质思想就是说,考虑上下文的输入对当前的输入的影响,然后就和人的注意力一样,将重点放在部分输入上,值得被注意的、更为相关的输入会被分配更大的权重,也意味着更被重视。
如上图所示,注意力要做的类似于上图一样,假设有4个输入,则将4个输入都都进去,然后得到4个输出b1,b2,b3,b4。这4个输出则为考虑了上下文关系之后的4个全新的向量。
当然,这里的输入也可以不是输入向量,而是中间层的隐藏向量。
在说下,这里的上下文并不是指前后2个或4个输入,而是整个sequence的信息。这里为了方便,只展示了4个输入。
在这里插入图片描述
我们需要重点关注如何由a得到b。如何考虑输入和上下文之后的关系呢,可以用一个相关系数 α \alpha α来表征。
在这里插入图片描述
接下来,我们自然会思考,在self-attention中,如何自动决定两个向量之间的相关系数为多少呢,如何自动决定2个变量之间的关联性呢。
我们需要这样一个计算两个变量之间相关性的函数,如上图所示的2个黑色方框里面包围的部分。输入为2个向量,输出为2个向量之间的相关系数 α \alpha α。通常使用最多的是左侧的方法,叫做Dot-product
Dot-product是如何运作的呢,首先分别将两个输入向量和两个向量Wq,Wk进行相乘,相乘之后得到2个向量q,k。之后便可由这2个向量进行点乘dot-product得到相关系数 α \alpha α
我们看来下向量维度的变化。
输入:[N,1],一个列向量
Wq:[M,N],要与输入相乘,则其中一个维度必须对应
q:[M,1]
α \alpha α:一个实数scalar
在这里插入图片描述
点乘的计算公式如图所示。
在这里插入图片描述
具体来说,如何分别计算出第1个与第2个向量之间的系数 α 1 , 2 \alpha_{1,2} α1,2,以及其他相关系数 α 1 , 3 , α 1 , 4 \alpha_{1,3},\alpha_{1,4} α1,3,α1,4呢。
首先,使用Wq乘以a1,再使用Wk分别乘上a2,a3,a4。这样分别得到q1,k2,k3,k4。分别进行点乘dot-production便可得到相关系数。当然,这里
其中q有个名字叫做query,而k有个名字叫做keya1,2称为attention score
另外,a1也可以计算自己与自己的关联性,得到 α 1 , 1 \alpha_{1,1} α1,1
在这里插入图片描述
计算出所有的相关系数 a l p h a alpha alpha之后,便使用softmax函数进行归一化,重新得到新的 α ′ \alpha' α。这里除了用softmax,也可以用其他的方法。用softmax只是为了系数之和为1,方便一些而已。
在这里插入图片描述
而得到了 α ′ \alpha' α之后,便根据 α ′ \alpha' α去提取出整个sequence中比较重要的信息。具体如何抽取呢?
首先,我们把a1,a2,a3,a4左侧分别都统一再乘一个向量Wv,得到v1,v2,v3,v4。之后再乘以各自对应的 α ′ \alpha' α,便得到了对饮的b1
讲到这里,很多人包括我自己一开始都是很懵逼的,没事为啥要搞出3个向量Wq,Wk,Wv出来呢?要计算相关系数很容易啊,直接将两个输入向量直接做dot-production也行啊,也可以直接得到相关系数啊。另外,直接将 α ′ \alpha' α分别乘以输入a1-a4得到b1多好,非得搞个Wv出来增加复杂度,这样操作有什么意义吗?
答案在于复杂化可以包容更好的结果。这是我当前的理解。
计算相关系数确实可以直接将2个输入直接做dot-production,但是,先乘上Wq Wk之后再做dot-production显然已经包含了直接做dot-production的情况,将其设为乘上单位矩阵就行。Wv也是同样的道理,设为单位矩阵后便成了我们想的那种最简单的方式。
用最简单的方式固然也好,但是这样,方法就已经固定了。
使用复杂的方式的原因在于,方法不固定,就可以利用计算结果,利用梯度下降法求出比最简单的方式可能效果更好的一种方法。更容易匹配我们的训练数据。

在这里插入图片描述
同样,要计算出b2也是一样的道理。需要额外值得说明额是,b1,b2,b3,b4并不是先计算b1,再计算b2这种。而是一次性同时被算出来的。
在这里插入图片描述
我们如果从矩阵运算的角度来理解self-attention,每个输入a都会生成qkv三个向量,统一起来如上图所示。
Wq,Wk,Wv的系数都是被learning出来的。其中I表示由4个输入拼接而成的矩阵。
在这里插入图片描述
qkinner product/dot production的过程也可以看作是矩阵的乘法。
在这里插入图片描述
在这里插入图片描述

整个self-attention的过程如上图所示,本质上就是一系列的矩阵乘法运算。其中A'也叫做attention matrix.整个过程的输入是a1,a2,a3,a4,输出是b1,b2,b3,b4,而整个过程中需要学习的参数只有Wq,Wk,Wv

三、multi-head self-attention

为什么会有multi-head self-attention呢?因为前面有说过,相关其实有很多种情况都是相关,不能只有一种形式。因此在NN中,可以在多个地方定义相关的类型。
在这里插入图片描述
其中,qi分别乘上2个矩阵得到qi1和qi2。区分出1和2类别后,1类的分别做self-attention得到bi1,2类的再一起做self-attention得到bi2
在这里插入图片描述
得到bi1bi2之后可以再将其接起来,得到新的bi

四、positional encoding

上面讲述了self-attention之后,我们可以看下对于a1而言,a2,a4有任何关于位置上的差别吗?没有,把a2,a4调换位置好像也没有所谓。
问题在于,我们前面讲述的模型其实是缺了一个信息的,这个信息就是位置信息。上面的可以概括为天涯若比领,所有位置上的输入位置关系是一模一样远的。
这样做可能会存在一些问题。解决的方法叫做positional encoding
在这里插入图片描述
解决的方法就是为每个位置设定一个vector,ei。等于告诉self-attention位置信息,可以清楚知道哪个输入属于哪个位置。
positional encoding可以根据data学习出来,也可以人工设定,目前仍然是一个尚待研究的问题。

五、pytorch实现

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

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

相关文章

【LeetCode: 210. 课程表 II:拓扑排序+图】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【C++】map值自定义key,value排序(含ccfcsp第四次认证第二题演示和map遍历方法)

如何自定义map排序 sort仅仅支持pair&#xff0c;vector&#xff0c;数组等排序&#xff0c;不支持对map的排序 所以如果想用sort对map排序的话&#xff0c;只需要把map转换为vector即可&#xff1a; map<int,int>res; res[1]1,res[2]2,res[3]3; vector<pair<in…

laravel部署api项目遇到问题总结

laravel线上部署问题 一、Ubuntu远程Mysql 61“Connection refused”二、Ubuntu更新php8三、线上部署Permission denied3.1、部署完之后访问域名出现报错&#xff1a;3.2、The /bootstrap/cache directory must be present and writable. 四、图片访问404五、git部署线上文件 一…

如何在linux系统下快速上手调试器gdb

1.什么是调试器&#xff1f; 调试器是一种帮助开发人员查看和修复程序错误的工具 2.gdb的作用和特点&#xff1f; gdb的作用 帮助开发人员寻找错误&#xff0c;并且提供了一系列的功能和工具进行调试 gdb的特点 源代码级调试多平台支持强大的调试功能拓展性强 3.gdb的基…

项目(智慧教室)第四部分,页面交互功能,WebServer建立与使用,

一。页面构思 1.标题栏 大标题&#xff1a;智慧教室管理系统 小标题&#xff1a;灯光&#xff0c;报警&#xff0c;风扇&#xff0c;温度&#xff0c;湿度&#xff0c;光照 2.样式设计 背景设置。字体设置&#xff08;字体大小&#xff0c;格式&#xff0c;颜色&#xff09; 3.…

多线程与高并发——并发编程(6)

文章目录 六、并发集合1 ConcurrentHashMap1.1 存储结构1.2 存储操作1.2.1 put方法1.2.2 putVal方法-散列算法1.2.3 putVal方法-添加数据到数组&初始化数组1.2.4 putVal方法-添加数据到链表1.3 扩容操作1.3.1 treeifyBin方法触发扩容1.3.2 tryPresize方法-针对putAll的初始…

VMware17 下载以及 配置虚拟机 一条龙全教程

前言&#xff1a;在网络安全相关方面的学习时&#xff0c;我们难免要使用虚拟机来模拟实现网络攻击或者防御&#xff0c;在这里&#xff0c;笔者就给大家分享 VMware 17 虚拟机下载安装使用的保姆级教程 目录 虚拟性软件版本推荐 下载 VMware 下载镜像 配置虚拟机 虚拟性软…

系统软件启动过程

实验一&#xff1a;系统软件启动过程 参考 重要文件 调用顺序 1. boot/bootasm.S | bootasm.asm&#xff08;修改了名字&#xff0c;以便于彩色显示&#xff09;a. 开启A20 16位地址线 实现 20位地址访问 芯片版本兼容通过写 键盘控制器8042 的 64h端口 与 60h端口。b.…

数学的魅力

数学的魅力 数学的历史古代数学古希腊数学中世纪数学文艺复兴数学 数学的分支1. 代数学2. 几何学3. 微积分学4. 概率论与统计学5. 数论 数学的重要性1. 科学和技术2. 经济学和金融3. 医学和生物学4. 社会科学5. 环境科学 数学的未来1. 人工智能2. 网络安全3. 空间探索 结论 数学…

Spring与Docker:如何容器化你的Spring应用

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

BI技巧丨Window应用之移动平均

Window函数白茶之前介绍过&#xff0c;可以用来处理同环比问题&#xff0c;因为其函数内部特性&#xff0c;我们还可以用其来处理移动平均问题。 先来看看本期的案例数据&#xff1a; 案例数据非常的简单&#xff0c;随机模拟一下销售挂蛋的情况即可。 将其导入到PowerBI中&…

YOLO目标检测——棉花病虫害数据集+已标注txt格式标签下载分享

实际项目应用&#xff1a;目标检测棉花病虫害数据集的应用场景涵盖了棉花病虫害的识别与监测、研究与防治策略制定、农业智能决策支持以及农业教育和培训等领域。这些应用场景可以帮助农业从业者更好地管理棉花病虫害&#xff0c;提高棉花产量和质量&#xff0c;推动农业的可持…

医院信息化、数字医学影像、DICOM、PACS源码

PACS系统适合卫生院、民营医院、二甲或以下公立医院的放射科、超声科使用。功能强大且简洁&#xff0c;性能优异&#xff0c;具备MPR&#xff08;三维重建&#xff09;、VR&#xff08;容积重建&#xff09;、胶片打印功能&#xff0c;能够快速部署。 PACS系统支持DR、CT、磁共…

SpringCloud-Config配置中心

接上文 SpringCloud-GetWay 路由网关 针对每个模块都要配置一个配置文件&#xff0c;例如当进行数据库修改时候&#xff0c;又有很多服务&#xff0c;则需要一个一个去修改。因此需要一种集中化的配置文件管理工具&#xff0c;集中得对配置文件进行配置。 1.部署配置中心服务…

PS基础-新建窗口工作区(保存合适自己的窗口布局)

保存自己的工作区 一&#xff0c;打开自己需要的窗口 2,打开的窗口拖拽到边&#xff0c;就可放置 3&#xff0c;保存自己习惯的工作区分布 下次打开时&#xff0c;点击保存时的图标就会看到自己命名的工作区

Shape Completion Enabled Robotic Grasping

摘要-这项工作提供了一个架构&#xff0c;使机器人能够通过形状完成抓取规划。形状完成是通过使用3D卷积神经网络(CNN)来完成的。该网络是在我们自己的新的开源数据集上训练的&#xff0c;该数据集包含了从不同视角捕获的超过44万个3D样本。运行时&#xff0c;从单个视角捕获的…

8.Xaml Border控件

1.运行图片 2.运行源码 <Grid Name="Grid1"><!--Border 里面只能有一个子元素--><!--BorderBrush="Red" 边框颜色-->

Nginx配置踩坑:一定注意location和proxy_pass的是否以“/”结尾

Nginx是开源、高性能、高可靠的Web和反向代理服务器&#xff0c;而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启动&#xff0c;还能在不间断服务的情况下对软件版本进行热更新。性能是Nginx最重要的考量&#xff0c;其…

数据库的内连接和外连接的区别

内连接&#xff1a; 指连接结果仅包含符合连接条件的行&#xff0c;参与连接的两个表都应该符合连接条件。 1.等值连接 依据两个表中相同内容的字段进行连接 表TESTA,TESTB,TESTC&#xff0c;各有A, B两列。 内连接 内连接&#xff0c;即最常见的等值连接&#xff0c;例&…