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

news2024/11/13 8:55:34

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博客

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

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

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

相关文章

Databend db-archiver 数据归档压测报告

Databend db-archiver 数据归档压测报告 背景准备工作Create target databend table启动 small warehouse准备北京区阿里云 ECSdb-archiver 的配置文件准备一亿条源表数据开始压测 背景 本次压测目标为使用 db-archiver 从 MySQL 归档数据到 Databend Cloud, 归档的…

qt 开发笔记 动态链接库应用

1.概要 1.1 需求 库有两种,动态库和静态库,这里说的是动态库;动态库的加载方式有两种,一直是静态的一种是动态的,这里的静态加载是指静态加载动态,是一种加载动态库的方式。也有一种动态加载的方式&#…

衣服、帽子、鞋子相关深度学习数据集大合集(1)

最近收集了一大波关于衣物深度学习数据集,主要有衣服、帽子、鞋子、短裤、短袖、T恤等。 1、运动裤、短裤图片数据集 数据格式:图片 是否标注:已标注 标注格式:yolov8 图片数量:915张 查看地址:https…

# Sharding-JDBC从入门到精通(2)- Sharding-JDBC 介绍

Sharding-JDBC从入门到精通(2)- Sharding-JDBC 介绍 一、概述-分库分表所带来的问题 1、分库分表带来的问题 分库分表能有效的缓解了单机和单库带来的性能瓶颈和压力,突破网络 IO、硬件资源、连接数的瓶颈,同时也带来了一些问题…

容器进程

一、容器进程和宿主机进程的关系 容器在进程空间上和宿主机是隔离的,每创建一个容器,该容器都有一个独属的进程空间简称PID NameSpace。但是容器本质也是一个进程,自然是由其父进程创建的,这个可以使用ps aux命令验证。 | 容器视…

Thinger.io 支持多协议、插件化100%开源 IoT 企业级物联网平台

项目源码,文末联系小编 Thinger.io 是一个开源插件化物联网平台,提供了设备原型、扩展和设备连接管理所需的一切工具。我们的目标是使物联网的使用民主化,使其可供全世界使用,并简化大型物联网项目的开发。 01 Thinger.io 物联网平…

【C++】哈希表 --- 闭散列版本的实现

在无人问津日子里 正是登峰造极的好时机 ——《人民日报》 哈希表 --- 闭散列版本的实现 1 C中的哈希表2 哈希表底层2.1 功能2.1 哈希冲突2.3 开散列与闭散列 3 闭散列版本的实现3.1 框架搭建3.2 仿函数设计3.3 插入函数3.4 查找函数3.5 删除函数 Thanks♪(・ω&a…

windows 10 安装tcping 使用教程

1 官网下载:tcping下载 2 复制tcping 到win10系统目录C:\Windows\System32 3 tcping 网址测试,可以指定端口 4 tcping 测试端口联通 5 tcping http模式

LeetCode 算法: 合并 K 个升序链表 c++

原题链接🔗:合并 K 个升序链表 难度:困难⭐️⭐️⭐️ 题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists […

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer,ZeRO)算法实现,一个来自DeepSpeed,另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来,以供最终用户在训练/微调模型时自主选择其中之…

Python | Leetcode Python题解之第191题位1的个数

题目: 题解: class Solution:def hammingWeight(self, n: int) -> int:ret 0while n:n & n - 1ret 1return ret

PAE:从潮流报告中提炼有效产品属性

本文将介绍PAE,一种用于包含 PDF格式的文本和图像的产品属性提取算法。目前大部分的方法侧重于从标题或产品描述中提取属性,或利用现有产品图像中的视觉信息。与之前的工作相比,PAE从潮流趋势报告的PDF文件中提取属性,提取的属性包…

ISO26262标准

什么是ISO26262? ISO 26262(国际功能安全标准)是一个涵盖整个汽车产品开发过程的汽车功能安全标准。ISO 26262继承或改编自工业自动化行业的安全要求标准IEC61508,但专门为汽车行业量身定制。最新版本是ISO26262-1:2018。 它包括诸如需求分析、安全分析…

一个简单的文件上传功能

代码如下&#xff1a; PostMapping("/upload")public ResponseEntity<String> handleFileUpload(RequestParam(value "uploadDirectory") String uploadDirectory,RequestParam("fileName") MultipartFile fileName) {try {// 确保文件不…

乱扔垃圾自动识别摄像头

如今&#xff0c;随着城市化进程的加快和人们生活水平的提高&#xff0c;环境保护和城市美观成为社会关注的焦点。乱扔垃圾问题长期困扰着城市管理者和居民&#xff0c;给城市环境卫生带来严重挑战。为了有效解决这一问题&#xff0c;乱扔垃圾自动识别摄像头应运而生&#xff0…

nvm-desktop window安装,支持动态切换nodejs版本

一、安装 nvm-desktop 概述 1 、卸载干净笔记的nodejs 和nodejs的环境变量 2、安装 nvm-desktop 软件 3、配置环境变量 4、测试功能 # 此时已安装完成 其他&#xff1a;常见nodejs的问题解决参考&#xff1a;官网 mac 安装教程 https://github.com/1111mp/nvm-desktop/blob/…

大模型微调实战之基于星火大模型的群聊对话分角色要素提取挑战赛:Task01:跑通Baseline

目录 0 背景1 环境配置1.1 下载包1.2 配置密钥1.3 测试模型 2 解决问题2.1 获取数据2.2 设计Prompt2.2 设计处理函数2.3 开始提取 附全流程代码 0 背景 Datawhale AI夏令营第二期开始啦&#xff0c;去年有幸参与过第一期&#xff0c;收获很多&#xff0c;这次也立马参与了第二…

基于Python的求职招聘管理系统【附源码】

摘 要 随着互联网技术的不断发展&#xff0c;人类的生活已经逐渐离不开网络了&#xff0c;在未来的社会中&#xff0c;人类的生活与工作都离不开数字化、网络化、电子化与虚拟化的数字技术。从互联网的发展历史、当前的应用现状和发展趋势来看&#xff0c;我们完全可以肯定&…

AI视界引擎 | ​基于 YOLOv8 和计算机视觉 CV 的实时识别系统!

本文来源公众号“AI视界引擎”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;​基于 YOLOv8 和计算机视觉 CV 的实时识别系统&#xff01; 技术进步和创新正在尽可能地推进作者的日常生活&#xff0c;但仍有很大一部分社会群体因为…

OverTheWire Bandit 靶场通关解析(中)

介绍 OverTheWire Bandit 是一个针对初学者设计的网络安全挑战平台&#xff0c;旨在帮助用户掌握基本的命令行操作和网络安全技能。Bandit 游戏包含一系列的关卡&#xff0c;每个关卡都需要解决特定的任务来获取进入下一关的凭证。通过逐步挑战更复杂的问题&#xff0c;用户可…