240629_昇思学习打卡-Day11-Vision Transformer中的self-Attention

240629_昇思学习打卡-Day11-Transformer中的self-Attention

根据昇思课程顺序来看呢,今儿应该看Vision Transformer图像分类这里了,但是大概看了一下官方api,发现我还是太笨了,看不太明白。正巧昨天学SSD的时候不是参考了太阳花的小绿豆-CSDN博客大佬嘛,今儿看不懂就在想,欸,这个网络大佬讲没讲,就去翻了下,结果还真给我找到了,还真讲过,还有b站视频,讲的贼好,简直就是茅厕顿开,这里附大佬的b站首页霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频 (bilibili.com),强烈建议去看,附本期链接Transformer中Self-Attention以及Multi-Head Attention详解_哔哩哔哩_bilibili,记得给大佬三连,有能力的给大佬充充电(本人已充)。

本文就大佬所讲内容、查阅资料、昇思api及结合自己理解进行记录。

前言

在了解Vision Transformer之前,我们需要先了解一下Transformer,Transformer最开始是应用在NLP领域的,拿过来用到Vision中就叫Vision Transformer。而这里要提到的,就是Transformer中的self-Attention(自注意力)和Multiple-Head Attention(多头注意力)。

用在NLP领域中用到的注意力机制举例,一般为Encoder-Decoder框架,比如中英翻译,输入的英文是Source,我们要获取到的是Target(中文翻译),Attention机制就发生在Target的元素Query和Source中的所有元素之间,其同时关注自身和目标值。

而这里说的自注意力机制只关注自身,比如Source中会有一个注意力机制,Target中会有一个注意力机制,他两是没有关系的。

还是用中英翻译举例,注意力机制的查询和键分别来自于英文和中文,通过查询(Query)英文单词,去匹配中文汉字的键(Key),自注意力机制只关注自己一个语言,可以理解为:”我喜欢“后面可以跟”你“,也可以跟”吃饭“。

1)如果查询和键是同一组内的特征,并且相互做注意力机制,则称为自注意力机制或内部注意力机制。
2)多头注意力机制的多头表示对每个Query和所有的Key-Value做多次注意力机制。做两次,就是两头,做三次,就是三头。这样做的意义在于获取每个Query和所有的Key-Value的不同的依赖关系。
3)自注意力机制的优缺点简记为【优点:感受野大。缺点:需要大数据。】

以下是关于这两个自注意力机制的官方公式,很复杂也很难理解,但现在别盯着他不放,先慢慢往下看,这篇就是说明这个公式及其过程:

image-20240629175235197

Self-Attention

self-attention

我们先说明白这里面这些符号都是干啥的,或者求出来用来干啥的,避免看半天还一头雾水:

q代表query,后续会去和每一个k进行匹配

k 代表key,后续会被每个q匹配

v 代表从a中提取得到的信息,后续会和q和k的乘积进行运算

d是k的维度

后续q 和k匹配的过程可以理解成计算两者的相关性,相关性越大对应v的权重也就越大

简单来说,最初的输入向量首先会经过Embedding层映射成Q(Query),K(Key),V(Value)三个向量,由于是并行操作,所以代码中是映射成为dim x 3的向量然后进行分割,换言之,如果你的输入向量为一个向量序列(𝑥1,𝑥2,𝑥3),其中的𝑥1,𝑥2,𝑥3都是一维向量,那么每一个一维向量都会经过Embedding层映射出Q,K,V三个向量,只是Embedding矩阵不同,矩阵参数也是通过学习得到的。这里大家可以认为,Q,K,V三个矩阵是发现向量之间关联信息的一种手段,需要经过学习得到,至于为什么是Q,K,V三个,主要是因为需要两个向量点乘以获得权重,又需要另一个向量来承载权重向加的结果,所以,最少需要3个矩阵。

后续我们要用q*k得到v的权重,然后进行一定缩放(除以根号d),再乘上v,就是第一个公式。

从数值上理解

wk我悟了,用引用的话行内公式不会乱

假设 a 1 = ( 1 , 1 ) a_1=(1,1) a1=(1,1) a 2 = ( 1 , 0 ) a_2=(1,0) a2=(1,0) W q = ( 1     1 0     1 ) W^q=\binom{1 \ \ \ 1}{0 \ \ \ 1} Wq=(0   11   1),那么根据以上的说法,我们可以计算出 q 1 q^1 q1 q 2 q^2 q2
q 1 = ( 1 , 2 ) ( 1     1 0     1 ) = ( 1 , 2 ) , q 2 = ( 1 , 0 ) ( 1     1 0     1 ) = ( 1 , 1 ) q^1=(1,2)\binom{1 \ \ \ 1}{0 \ \ \ 1}=(1,2),q^2=(1,0)\binom{1 \ \ \ 1}{0 \ \ \ 1}=(1,1) q1=(1,2)(0   11   1)=(1,2)q2=(1,0)(0   11   1)=(1,1)
此时可以并行化,就是把 q 1 q^1 q1 q 2 q^2 q2在拼接起来,拼成 ( 1     1 1     0 ) \binom{1 \ \ \ 1}{1 \ \ \ 0} (1   01   1),在与 W q W^q Wq进行运算,结果不会发生改变
( q 1 q 2 ) = ( 1     1 1     0 ) ( 1     1 0     1 ) = ( 1     2 1     1 ) \binom{q^1}{q^2}=\binom{1 \ \ \ 1}{1 \ \ \ 0}\binom{1 \ \ \ 1}{0 \ \ \ 1}=\binom{1 \ \ \ 2}{1 \ \ \ 1} (q2q1)=(1   01   1)(0   11   1)=(1   11   2)
同理可以得到 ( k 1 k 2 ) \binom{k^1}{k^2} (k2k1) ( v 1 v 2 ) \binom{v^1}{v^2} (v2v1),求得的这些数值依次是q(Query),k(Key),v(Value)。接着先拿 q 1 q^1 q1和每个k进行match,点乘操作,接着除以 d \sqrt{d} d ,得到对应的 α \alpha α,,其中 d d d代表向量 k i k^i ki的长度,此时等于2,除以 d \sqrt{d} d 的原因在论文中的解释是“进行点乘后的数值很大,导致通过softmax后梯度变的很小,所以通过除以 d \sqrt{d} d 来进行缩放,比如计算 α 1 , i \alpha_{1,i} α1,i
α 1 , 1 = q 1 ⋅ k 1 d = 1 ∗ 1 + 2 ∗ 0 2 = 0.71 \alpha_{1,1}=\frac{{q^1} \cdot {k^1}}{\sqrt{d}}=\frac{1*1+2*0}{\sqrt2}=0.71 α1,1=d q1k1=2 11+20=0.71

α 1 , 2 = q 1 ⋅ k 2 d = 1 ∗ 0 + 2 ∗ 1 2 = 1.41 \alpha_{1,2}=\frac{{q^1} \cdot {k^2}}{\sqrt{d}}=\frac{1*0+2*1}{\sqrt2}=1.41 α1,2=d q1k2=2 10+21=1.41

同理用 q 2 q^2 q2去匹配所有的k能得到 α 2 , i \alpha_{2,i} α2,i,统一写成矩阵乘法形式:
( α 1 , 1     α 1 , 2 α 2 , 1     α 2 , 2 ) = ( q 1 q 2 ) ( k 1 k 2 ) T d \binom{\alpha_{1,1} \ \ \ \alpha_{1,2}}{\alpha_{2,1} \ \ \ \alpha_{2,2}}=\frac{\binom{q^1}{q^2}{\binom{k^1}{k^2}}^T}{\sqrt{d}} (α2,1   α2,2α1,1   α1,2)=d (q2q1)(k2k1)T
然后对每一行即 ( α 1 , 1 , α 1 , 2 ) (\alpha_{1,1},\alpha_{1,2}) (α1,1,α1,2)分别进行softmax处理得到KaTeX parse error: Expected 'EOF', got '̂' at position 9: (\alpha ̲̂ _{1,1},\alpha …,这里的$\alpha ̂ 相当于计算得到针对每个 相当于计算得到针对每个 相当于计算得到针对每个v 的权重,到这我们就完成了第一个公式( 的权重,到这我们就完成了第一个公式( 的权重,到这我们就完成了第一个公式(Attention(Q,K,V) )中的 )中的 )中的softmax(\frac{QK^T}{\sqrt{d}})$部分

self-attention
为啥这里又乱了。。
在这里插入图片描述

self-attention

self-attention

从维度上进行理解

我们假设载入的 x 1 x_1 x1经过Embedding后变为 a 1 a_1 a1维度为1X4, W q W^q Wq的维度为4X3,两者进行叉乘运算后就得到了维度为1X3的Query,k和v同理

image-20240629194210213

然后我们吧a1和a2并行起来

image-20240629211555129

然后把公式中的式子也换成维度:

图片

整个过程放在一张图上可以这么看:

self-attention

这里暂时不附代码,Multiple-Head Attention下篇记录。

打卡图片:

image-20240629213756082

参考博客:

11.1 Vision Transformer(vit)网络详解_哔哩哔哩_bilibili

详解Transformer中Self-Attention以及Multi-Head Attention_transformer multi head-CSDN博客

Vision Transformer详解-CSDN博客

一文搞定自注意力机制(Self-Attention)-CSDN博客

以上图片均引用自以上大佬博客,如有侵权,请联系删除

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编程开发不能不懂的世界协调时UTC的由来

在各种时间标准出现之前,各地都是根据太阳来进行计时的。把太阳连续2次经过地球同一位置所经历的时间间隔称为真太阳日,然后再把这个太阳日划分为更小的时间单位,例如中国古代使用日晷记录时间,把一个太阳日分为12个时辰。因为地球…

海康+libtorch的血泪教训

一、LibTorch使用, 详见: /INCLUDE:?warp_sizecudaatYAHXZ 二、海康二次开发, 目前选4.31,只能c14。 三、做dll注意:

【MongoDB】分布式数据库入门级学习

SueWakeup 个人主页:SueWakeup 系列专栏:为祖国的科技进步添砖Java 个性签名:保留赤子之心也许是种幸运吧 本文封面由 凯楠📸友情提供 凯楠📸 - 不夜长安 目录 MongoDB 相关 数据库排行榜单 MongoDB 中文官网 菜鸟…

[Open-source tool]Uptime-kuma的簡介和安裝於Ubuntu 22.04系統

[Uptime Kuma]How to Monitor Mqtt Broker and Send Status to Line Notify Uptime-kuma 是一個基於Node.js的開軟軟體,同時也是一套應用於網路監控的開源軟體,其利用瀏覽器呈現直觀的使用者介面,如圖一所示,其讓使用者可監控各種…

【探索Linux】P.35(传输层 —— UDP协议)

阅读导航 引言一、UDP协议端格式二、UDP的特点三、UDP的缓冲区四、基于UDP的应用层协议温馨提示 引言 在上一篇文章中,我们深入探讨了网络协议的应用层,揭示了各种协议如何协同工作以确保信息在网络中正确、高效地传递。从HTTP到FTP,每一层协…

【分布式计算框架 MapReduce】MapReduce 初级编程

目录 一、MapReduce 示例程序的导入并运行测试 二、准备 4 个小文件(文件大小分别为 1.7M,5.1M,3.4M,6.8M) 1. 第一种情况,默认分片:不修改程序代码,直接使用 WordCount 源程序 2…

火了10年的电脑监控软件有哪些?盘点8款热门的电脑监控软件

电脑监控软件领域经历了多年的发展,一些软件因为其稳定的功能、良好的用户体验和不断更新的技术支持,得以在市场上保持长期的热度和用户基础。以下是几款在过去十年里广受好评且持续流行的内网监控软件: 1.安企神:由河北安企神网络…

c++ 子类继承父类

这个是子类继承父类 是否重写从父类那里继承来的函数 这个例子的路径 E盘 demo文件夹 fatherChildfunc

【C++ | 委托构造函数】委托构造函数 详解 及 例子源码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

周边美食小程序系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,美食店铺管理,菜品分类管理,标签管理,菜品信息管理,系统管理 微信端账号功能包括:系统首页,美食店铺&#…

Python 面试【★★★】

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

springboot实习管理系统的设计与实现 LW +PPT+源码+讲解

第三章系统分析与设计 3.1 可行性分析 一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本系统来补充线下实习管理模式中的缺陷,去解决其中的不足等,通过对…

Java基础(五)——ArrayList

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

蓝卓出席“2024C?O大会”,探讨智能工厂建设新路径

6月29日,“2024C?O大会”在金华成功举办。此次大会由浙江省企业信息化促进会主办,与以往CIO峰会不同,“C?O”代表了企业数字化中的核心决策者群体,包括传统的CIO、CEO、CDO等。 本次大会围绕C?O、AIGC与制造业、数据价值、未来…

[NSSCTF]-Reverse:[SWPUCTF 2021 新生赛]easyapp(安卓逆向,异或)

无壳 把后缀名改为zip,找到apk 查看jadx 这里调用了MainActivity的lambda$onCreate$0$MainActivity,然后又调用了Encoder进行异或。 exp: result棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌 key987654321 flag for i in range(len(result)):flagchr(…

算法:链表题目练习

目录 链表的技巧和操作总结 常用技巧: 链表中的常用操作 题目一:反转一个单链表 题目二:链表的中间结点 题目三:返回倒数第k个结点 题目四:合并两个有序链表 题目五:移除链表元素 题目六&#xff…

Flutter TIM 项目实现

目录 1. 服务端API 1.1 生成签名 1.1.1 步骤 第一步:获取签名算法 第二步:查看函数输入输出 第三步:nodejs 实现功能 1.1.2 验证签名 小结 1.2 Rest API 调用 1.2.1 签名介绍 1.2.2 腾讯接口 生成管理员 administrator 签名 包装一个 post 请求函数 查询账号 …

ATL新能源科技薪资待遇及Verify测评语言理解数字推理题型简介

一、走进ATL新能源科技 ATL新能源公司,即东莞新能源科技有限公司,是全球领先的可充式锂离子电池研发、生产和营销企业。成立于2004年,总部位于香港,产品广泛应用于消费电子产品和电动汽车领域。ATL以其技术创新和与苹果等大客户的…

websocket基础使用学习

websocket基础使用学习 一、websocket是什么?二、使用步骤1.websocket服务的安装与启动安装服务连接与发消息 总结 一、websocket是什么? 以前,很多网站为了实现推送技术,所用的技术都是Ajax 轮询。轮询是在特定的的时间间隔&…

RocketMQ源码学习笔记:Broker接受消息和发送消息

这是本人学习的总结,主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、技术亮点2.1、消息写入时的自旋锁和可重入锁2.2、堆外内存机制2.2.1、Overview2.2.2、源码2.2.2.1、开启堆外内存的条件2.2.2.2、堆外内存的初始化2.2.2.3、写消息到堆外内存2…