Self-attention学习笔记(Self Attention、multi-head self attention)

李宏毅机器学习Transformer

Self Attention学习笔记记录一下几个方面的内容

  • 1、Self Attention解决了什么问题
  • 2、Self Attention 的实现方法以及网络结构
    • Multi-head Self Attention
    • positional encoding
  • 3、Self Attention 方法的应用
  • 4、Self Attention 与CNN以及RNN对比

1、Self Attention解决了什么问题

机器翻译任务输入序列的长度与输出序列的长度可能相同也可能不相同
产品评价预测任务无论输入序列的长度为多少,输出的序列长度都为固定大小
如果序列中每个词的标签为该次对应词性的任务重输出的序列长度与输入的序列长度相同
在这里插入图片描述

(1)使用 Fully Connected网络来处理,

  • 如果每一个出入的向量对应一个Fully Connected网络,每一个向量之间不考虑其他向量之间的上线文关联信息;

(2)可以使用一个window来获取指定范围内向量的上下文信息。

  • 当输入的序列长度不固定时,会出现window长度无法确定的问题;
  • 如果要获取整合序列的信息,而整个序列很长,window覆盖整个序列长度,那么会出现Fully Connected网络中要处理的信息量很大,网络参数多,计算量大的问题。

要结合整个sequence 的信息需要,使用了Self-Attention的方法。
使Self-Attention,实现每一个输出的向量都整合了所有输入向量的信息。
在这里插入图片描述
self attention可以使用多次,在Fully Connected输出层还能再接self attention,因此Self Attention 的输入可以使原始输入 或者 隐藏层

2、Self Attention 的实现方法以及网络结构

self attention的实现通过计算每一个输入向量与其他所有输入向量的相关性α作为attention score,与当前向量点乘操作,得到输出向量。
Alt
计算两个向量相关性的方法为dot-product(点乘)
在这里插入图片描述
Self Attention 的公式如下
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q ⋅ K T d k ) ⋅ V Attention(Q,K,V) = softmax(\frac{Q·K^T}{\sqrt{d_k}} ) ·V Attention(Q,K,V)=softmax(dk QKT)V
其中 q表示Query,k表示Key。
需要计算每一个节点与其他节点的相关性(这些计算是可以同时进行的)。
以长度为4的序列( a1 ,a2 ,a3 ,a4)为例,
Q = W q I Q=W^qI Q=WqI

K = W k I K=W^kI K=WkI

V = W v I V=W^vI V=WvI

对每一个输入向量,分别乘以矩阵Wq、Wk、Wv,得到对应向量q、k、v。
对于第i个向量,计算与其他向量的相关性,则用qi 分别与其他向量的kj 做点乘。
在这里插入图片描述

( k 1 k 2 k 2 k 4 ) ⋅ q 1 = ( α 1 , 1 α 1 , 2 α 1 , 3 α 1 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·q^1=\begin{pmatrix} α_{1,1} \\ α_{1,2}\\α_{1,3}\\α_{1,4} \end{pmatrix} k1k2k2k4 q1= α1,1α1,2α1,3α1,4
( k 1 k 2 k 2 k 4 ) ⋅ q 2 = ( α 2 , 1 α 2 , 2 α 2 , 3 α 2 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·q^2=\begin{pmatrix} α_{2,1} \\ α_{2,2}\\α_{2,3}\\α_{2,4} \end{pmatrix} k1k2k2k4 q2= α2,1α2,2α2,3α2,4
( k 1 k 2 k 2 k 4 ) ⋅ q 3 = ( α 3 , 1 α 3 , 2 α 3 , 3 α 3 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·q^3=\begin{pmatrix} α_{3,1} \\ α_{3,2}\\α_{3,3}\\α_{3,4} \end{pmatrix} k1k2k2k4 q3= α3,1α3,2α3,3α3,4
( k 1 k 2 k 2 k 4 ) ⋅ q 4 = ( α 4 , 1 α 4 , 2 α 4 , 3 α 4 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·q^4=\begin{pmatrix} α_{4,1} \\ α_{4,2}\\α_{4,3}\\α_{4,4} \end{pmatrix} k1k2k2k4 q4= α4,1α4,2α4,3α4,4
( k 1 k 2 k 2 k 4 ) ⋅ ( q 1 , q 2 , q 3 , q 4 ) = ( α 1 , 1 , α 2 , 1 , α 3 , 1 , α 4 , 1 α 1 , 2 , α 2 , 2 , α 3 , 2 , α 4 , 2 α 1 , 3 , α 2 , 3 , α 3 , 3 , α 4 , 3 α 1 , 4 , α 2 , 4 , α 3 , 4 , α 4 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·\begin{pmatrix}q^1,q^2,q^3, q^4\end{pmatrix}=\begin{pmatrix} α_{1,1},α_{2,1},α_{3,1},α_{4,1} \\ α_{1,2},α_{2,2},α_{3,2},α_{4,2}\\α_{1,3},α_{2,3},α_{3,3},α_{4,3}\\α_{1,4},α_{2,4},α_{3,4},α_{4,4} \end{pmatrix} k1k2k2k4 (q1,q2,q3,q4)= α1,1,α2,1,α3,1,α4,1α1,2,α2,2,α3,2,α4,2α1,3,α2,3,α3,3,α4,3α1,4,α2,4,α3,4,α4,4
K T ⋅ Q = A K^T ·Q=A KTQ=A
将α值经过SoftMax,转化为0-1之间的值,且α值之和等于1。
在这里插入图片描述
以第一个向量为例,计算与每一个向量的相关系数α’
α 1 , i ′ = e x p ( α 1 , i ) / ∑ j e x p ( α 1 , j ) α'_{1,i}=exp(α_{1,i})/\sum_{j}exp(α_{1,j}) α1,i=exp(α1,i)/jexp(α1,j)

以上计算的向量结果侧重提取向量与其他向量的attention score,再与向量V点乘,V向量只包含输入向量的信息。
b i = ∑ j α 1 , i ′ ⋅ v i b_i=\sum_{j}α'_{1,i}·v^i bi=jα1,ivi
在这里插入图片描述
最终得到输出向量b。
根据自己理解画了一张self attention 的结构图
在这里插入图片描述
用向量机算来表示self attention的过程如图所示:
在这里插入图片描述
其中Wq 、Wk 、Wv 是可以训练的参数。
对于第一步由输入向量αi 分别与矩阵Wq 、Wk 、Wv做点乘,可以将输入向量的矩阵合并计算:

在这里插入图片描述
第二步将当前向量的query向量Q与其他所有向量的K点乘计算
在这里插入图片描述
可以将转置后的K向量合并后与合并后的Q做点乘运算
在这里插入图片描述
第三步得到α向量后经过softmax后的**α’**与合并后的向量V做点乘

在这里插入图片描述


Multi-head Self Attention

Multi-head Self Attention 多头注意力机制在原Self Attention上增加了不同的q(Query)。
将第一步得到的qi分别与不同的向量点乘操作,生成qi,1,qi,2

q i , 1 = W q , 1 ⋅ q i q^{i,1}=W^{q,1}·q^i qi,1=Wq,1qi

q i , 2 = W q , 2 ⋅ q i q^{i,2}=W^{q,2}·q^i qi,2=Wq,2qi

不同的q负责不同的相关性(问题中有几种不同的相关性,就使用几个head)。
那么生成了多个q,对应也要生成多个k和v;
在这里插入图片描述

计算时,分别取每个q值与对应的第二个下标值相同的k向量做点乘;
经过softmax后与对应下标值相同的v向量做点乘,得到输出向量结果。


positional encoding

在self attention中还需体现向量的位置信息。
在网络中输入向量加入了一个位置向量ei
在这里插入图片描述
向量ei 的值通过手动添加或者在网络中训练得到。

3、Self Attention 方法的应用

  • 语音处理
    对于输入的一段长度为L语音序列,做self attention计算α得到的attention metrix的维度是L×L。当序列过长时,考虑运算速度,使用Truncated Self-attention,只在一个设定的范围内使用Self-attention。
    在这里插入图片描述

  • Self attention应用在图像处理
    将一张图片看做是一系列向量,对于一个三通道的图片,将每一个像素点看做是一个三维的向量
    在这里插入图片描述

4、Self Attention 与CNN以及RNN对比

  • Self Attention与CNN
    CNN对于固定的kernel对应在特征图上是固定大小的receiptive field,而self attention 提取到的是整张图片的信息。self attention的receiptive field大小是通过学习得到的。
    CNN是Self Attention特例情况
  • Self Attention与RNN
    RNN网络只能够看到已经输入到网络中的信息,Self Attention能够使用到所有输入向量的信息。
    RNN计算当前时间点需要依赖于上一个时间点的计算结果,当前向量之前的所有向量的信息都需要存放在内存中。Self Attention当前向量中包含了每一个输入向量的信息。
    Self Attention可以实现并行处理。

对于K、Q、V向量的理解
是由原始输入向量分别与三个向量点乘后获得,这三个向量又是可以学习的参数。
在这里插入图片描述
参数Q和K共同作用,来决定两个向量的相关系数。


感谢:
小白都能看懂的超详细Attention机制详解

https://www.bilibili.com/video/BV1v3411r78R/?p=1&vd_source=91cfed371d5491e2973d221d250b54ae

https://www.bilibili.com/video/BV1Kq4y1H7FL/?spm_id_from=333.999.0.0&vd_source=91cfed371d5491e2973d221d250b54ae

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

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

相关文章

【Java开发岗面试】八股文—Java基础集合多线程

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试…

[Linux]Ubuntu noVNC使用

又到了逛大型程序员交友 网站的时间了,今天你准备好了吗。 今天要推荐的一个有趣的项目是noVNC setup好以后是这个样子的,可以在浏览器登陆vnc,不需要再安装一个vnc client. setup的过程比较简单,分为以下几步: 1. v…

关于时间与空间复杂度的学习

关于时间与空间复杂度的学习 算法时间复杂度定义标准算法度量单位渐近记号1、Θ(big-theta)2、O(big-oh)3、Ω(big-omege) 推导时间复杂度步骤与法则步骤法则 示例1.常数阶2、线性阶3、对数阶4、平方阶5、立…

数据结构 模拟实现LinkedList单向不循环链表

目录 一、链表的简单介绍 二、链表的接口 三、链表的方法实现 (1)display方法 (2)size得到单链表的长度方法 (3)addFirst头插方法 (4)addLast尾插方法 (5&#xf…

SSM图书馆管理系统----计算机毕业设计

项目介绍 基于ssm的图书馆管理系统.主要功能包括:图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。 用户分为两类:读者、图书馆管理员。图书馆管理员可以修改读者信息,修改书目信息,查看所有借还…

C++初阶——基础知识(内联函数)

目录 1.内联函数 内联函数的示例代码 1.内联函数 是一种 C 中的函数定义方式,它告诉编译器在每个调用点上插入函数体的副本,而不是像普通函数那样在调用时跳转到函数体所在的地址执行。这样可以减少函数调用的开销,提高程序的执行效率。 …

婴幼儿家庭护理百科知识,宝宝健康成长育儿实用课程

一、教程描述 本套教程由具有丰富育儿经验的多名专家精心打造而成,也是专门提供给准爸妈们学习的实用课程,可以解决宝宝的日常护理、日常喂养、饮食调理、疾病防治、意外护理等多方面问题。课程不仅可以丰富你的育儿知识,而且能够让你把这些…

中央集成式架构量产时代,openVOC方案将引发软件开发模式变革

2024年,中央计算区域控制架构正式进入规模化量产周期,汽车智能化正式迈入2.0时代,产业生态、应用创新、开发模式都将迎来巨大变革。 同时,随着ChatGPT引发的AIGC领域的爆发式增长,人工智能技术掀起全球万亿级信息化应…

63页!嵩山版Java开发手册分享

作为广受欢迎的编程语言之一,Java在软件开发领域扮演着重要的角色。然而,由于Java的灵活性和广泛应用,很容易出现代码质量低下、可读性差、维护困难等问题。为了解决这些问题,阿里巴巴集团发布了一份权威指南——阿里嵩山版Java开…

揭秘HTTP与HTTPS:保障安全的网页传输协议之争

目录 1、前言 2、HTTP与HTTPS的概念及区别 2.1 HTTP的定义与特点 2.2 HTTPS的定义与特点 2.3 HTTP与HTTPS的区别 3、HTTP的工作原理及安全隐患 3.1 HTTP的工作流程 3.2 HTTP的安全隐患 4、HTTPS的工作原理及优势 4.1 HTTPS的工作流程 4.2 HTTPS的加密算法 4.3 HTTP…

java springboot将接口查询数据放在系统中 一小时系统更新一次 避免用户访问接口查询数据库缓慢

真到了公司 很多数据库表 特别是常用的功能业务对应的 都是几百万条起步的数据 查询会比较缓慢 那么 我们就可以不用每次都真的查询数据库 例如 我这里有一个接口 通过 封装的 IBookService.list 函数去查询数据库 接口返回是这样的 我们先在启动类 条件装配上 这个接口所在的…

Jenkins 系列:Jenkins 安装(Windows、Mac、Centos)和简介

文章目录 简介发展历史应用场景 Jenkins 安装部署先决条件硬件要求软件包下载war 包部署linux 系统部署mac 系统部署windows 系统部署安装后基本配置解锁自定义 jenkins 插件创建用户配置更新站点 配置文件 简介 Jenkins前身是 Hudson,使用 java 语言开发的自动化发…

VS2019+OpenCV4.7.0+OpenCV_contrib4.7.0+CUDA安装+配置视频硬解码保姆级别教程

在算法开发过程中,涉及基于opencv的rtsp流硬解码,这里设计结合当前所有的资料,实现了现有opengl相关的所有跟视频硬解码相关的功能,下面对opencv4.7.0的编译流程进行说明: 一、准备工作 下载opencv :open…

Linux服务器搭建笔记-006:拓展/home目录容量

一、问题说明 Ubuntu服务器在使用过程中创建的新用户,每位用户会在/home目录下生成一个属于其个人的主文件夹。如果不限制各个用户的使用空间,所有的用户都会共用/home所挂载的硬盘。在这种多用户情况下,会很快的填满/home目录,导…

移动应用开发:揭秘内侧APP封装台的高效

在数字化浪席卷下,移应用已经成连接企业与用户纽带。为了抢占市场先机,快速发布高质量的移动应用成为业竞争的关键。侧APP封装平因此而诞生,成为了应开发者的得助手。以下是内侧APP封装台的全面解读,助在应用开发海洋中乘风破浪。…

国产芯片ACL16_S 系列 ,低成本物联网安全,可应用物联网认证、 SIM、防抄板和设备认证等产品上

ACL16_S 芯片是针对物联网认证、 SIM、防抄板和设备认证需求推出的高安全芯片。芯片采用 32 位 ARMCortex™-M0 系列内核,片内集成多种安全密码模块,包括 RSA/ECC DES/TDES、 SHA-1/-256、 AES-128/-192/-256 等国际安全算法,支持真随机数发…

松鼠目标检测数据集VOC格式1400张

松鼠是一种可爱的小型哺乳动物,它们属于啮齿动物目,是广泛分布于全球的一类动物。松鼠的外貌非常特别,有着精巧的身体结构和灵活的动作,是森林和城市公园中常见的动物之一。 松鼠通常有中等大小,头部相对较大&#xf…

告别 2023,迎接 2024

告别 2023,迎接 2024 这是 2023 年的最后一篇博客 时间过得可真快啊,仿佛 2023 才刚刚开始,一晃眼,便又接近尾声了 逝者如斯夫,不舍昼夜 现在我一个人坐在实验室中,回想着 2023 发生的种种事情&#xf…

06|调用模型:使用OpenAI API还是微调开源Llama2/ChatGLM?

06|调用模型:使用OpenAI API还是微调开源Llama2/ChatGLM? 让我们带着下面的问题来开始这一节课的学习。大语言模型,不止 ChatGPT 一种。调用 OpenAI 的 API,当然方便且高效,不过,如果我就是想用…

vue3+ts开发干货笔记

总结一下在vue3中ts的使用。当篇记录部分来自于vue官网&#xff0c;记录一下&#xff0c;算是加深印象吧。 纯干笔记&#xff0c;不断补充&#xff0c;想到什么写什么&#xff0c;水平有限&#xff0c;欢迎评论指正&#xff01; 类型标注 props <script setup lang"…