【深度学习】李宏毅2021/2022春深度学习课程笔记 - 各式各样神奇的自注意力机制(Self-Attention)变型

news2024/11/8 2:55:11

文章目录

  • 一、Self-Attention 各式各样的变型
  • 二、How to make self-attention efficient?
  • 三、Notice
  • 四、Local Attention / Truncated Attention
  • 五、Stride Attention
  • 六、Global Attention
  • 七、Many Different Choices
  • 八、Can we only focus on Critical Parts?
    • 8.1 Clustering
    • 8.2 Learnable Patterns
  • 九、Do we need full attention matrix?
  • 十、Attention Mechanism is three-matrix Multiplication
  • 十一、Do we need Q and K to compute attention?Synthesizer!
  • 十二、Attention-free?
  • 十三、Summary


在看这篇文章之前,我假设你已经了解了自注意力机制和多头自注意力机制的基本原理,如果你还不了解,可以先看看下面链接:
【深度学习】李宏毅2021/2022春深度学习课程笔记 - (Multi-Head)Self-Attention (多头)自注意力机制 + Pytorch代码实现

一、Self-Attention 各式各样的变型

在这里插入图片描述


二、How to make self-attention efficient?

将Key和Query进行点积,可以得到一个N×N的Attention Matrix,但是,当N比较大时,点积的计算量是我们无法承受的

在这里插入图片描述


三、Notice

  • Self-Attention只是神经网络里的一个Module
  • Self-Attention只有当N较大时,才会Dominates整个神经网络的计算过程,也就是说,只有在N较大时,我们去加速Self-Attention才有用
  • Self-Attention的各种加速技术大多数最早都使用在图像处理上。因为在图像处理里,N往往比较大,假设图片为256×256规格,那么N就是 256*256 = 65536

在这里插入图片描述


四、Local Attention / Truncated Attention

加速Attention计算最直觉的想法就是想办法加速Attention Matrix的计算。
Local Attention / Truncated Attention 的思想是,在计算Attention的时候,不利用整个序列的信息,而是只利用当前位置附近的一些信息进行Attention的计算(如下图,只利用了当前位置左右两边的信息进行Attention的计算)。

在这里插入图片描述


五、Stride Attention

和Local Attention / Truncated Attention,Stride Attention 也是只考虑部分信息计算Attention,但不同点在于 Stride Attention 是根据一定的步长去考虑信息计算Attention

在这里插入图片描述


六、Global Attention

如下图所示,只用其中某两个单位去和整个序列(包括自身)的其他单位进行点积计算

在这里插入图片描述


七、Many Different Choices

那么Local Attention、Stride Attention 和Gloal Attention到底用哪个呢?
答案是:可以都用!之前讲过多头注意力机制,只需要在每个头用不同的Attention就可以了呀

在这里插入图片描述

事实上,的确有人这么做了

在这里插入图片描述


八、Can we only focus on Critical Parts?

上面的方法都是通过人工的力量去确定哪些位置要计算Attention,那我们能不能通过Data Based的方法去确定呢?

8.1 Clustering

将Query和Key拼接为一个序列,然后进行聚类

在这里插入图片描述

然后只对属于相同类别的位置进行Attention的计算

在这里插入图片描述

8.2 Learnable Patterns

可以Learning另外一个神经网络来决定哪些位置要进行Attention的计算

在这里插入图片描述


九、Do we need full attention matrix?

实际上,Attention Matrix通常是Low Rank的,也就是说大部分列之间都是有线性关系的。所以我们可以将原本N×N的Matrix进行缩减,从而降低计算量。

在这里插入图片描述

问:实际上应该怎么做呢?
答:从N个Key和Value中选出K个具有代表性的Key和Value进行Attention的计算

在这里插入图片描述

问:那么怎么选取具有代表性的Key呢?
答:有两个方法。
方法1:对N个Key进行卷积操作,从而达到降维的效果
方法2:将原本的d×N的矩阵乘上一个N×K的矩阵,就可以得到d×K的矩阵,从而实现降维

在这里插入图片描述


十、Attention Mechanism is three-matrix Multiplication

下面回顾一下Attention的计算过程

在这里插入图片描述

假设不考虑SoftMax过程,计算O矩阵的过程可以近似如下

在这里插入图片描述

那么我们可以通过改变矩阵的求解顺序来实现加速

在这里插入图片描述

先来看看原本求解顺序所需要的计算量

在这里插入图片描述

再来看看交换顺序后的求解计算量

在这里插入图片描述

对比一下,由于N是序列的长度,所以往往N会比d大很多,所以通常情况下 ( d + d ′ ) N 2 > 2 d d ′ N (d+d')N^2>2dd'N (d+d)N2>2ddN

在这里插入图片描述


十一、Do we need Q and K to compute attention?Synthesizer!

我们其实可以不用Q和K计算Attention Matrix,而是直接将Attention Matrix替换为可学习的一组参数矩阵!

在这里插入图片描述


十二、Attention-free?

Attention是必须的吗?不用Attention能得到很好的效果吗?下面是对这个问题的一些研究

在这里插入图片描述


十三、Summary

在这里插入图片描述

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

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

相关文章

车牌识别应用搭建(含模型和源码)

车牌识别应用搭建 内容说明 本示例旨在展示如何在 DeepStream SDK 版本不低于 5.0.1 的情况下使用分级模型进行检测和分类。 本例中的模型均为TAO3.0模型。 PGIE(car detection) -> SGIE(car license plate detection) -> SGIE(car license plate recognization) 该流…

Linux系统下的rpm/yum管理

文章目录Linux系统下的rpm管理1.介绍2.rpm包的简单查询指令3.rpm包的其它查询指今4.卸载rpm包5.rpm6.yumLinux系统下的rpm管理 1.介绍 rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager…

Java 集合的介绍和使用

1.什么是集合? 对一些数据的存储就叫做集合,相比于数组,这是一种动态的集合。 1.可以动态的保存任意多个对象 2.提供一些动态操作集合的方法比如:add ,remove ,set ,get 等。 3.使用集合更加方便,提高代码编写效率。…

创建 ASP.NET Core MVC 项目

目录 一、创建ASP.NET Core MVC项目 二、ASP.NET Core MVC目录结构 一、创建ASP.NET Core MVC项目 打开Visual Studio 2022 点击创建新项目 在列表中找到:ASP.NET Core Web应用(模型-试图-控制器):用于创建包含示例ASP.Net Core Mvc视图和控制器的Asp.NET Core应用程序…

Docker如何安装nacos最新版本2.2.0

本文介绍如何在docker容器下安装部署nacos最新版本2.2.0。一、单机本地配置1.1 拉取nacos镜像执行以下命令从docker远端拉取nacos镜像文件。docker pull nacos/nacos-server1.2 启动nacos镜像执行以下命令,以单机模式启动nacos镜像。docker run -d --name nacos -p …

P5594 【XR-4】模拟赛————C++、Python

目录题目【XR-4】模拟赛题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2样例 #3样例输入 #3样例输出 #3提示解题思路C的Code运行结果Python的代码运行结果题目 【XR-4】模拟赛 题目描述 X 校正在进行 CSP 前的校内集训。 一共有 nnn …

人工智能算法模型--Minimax(极大极小)搜索算法学习笔记

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪 (*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &a…

基于MicroPython的ESP32在OLED上实时刷新温湿度

基于MicroPython的ESP32用起来后,做些小扩展功能: 1、通过DHT11获取温湿度; 2、将获取的温湿度显示在OLED上;并通过定时器,定时刷新; 3、OLED可显示中文; 一、DHT11获取温湿度 这个比较简单&a…

Java泛型详细内容讲解

1.什么是泛型 1.1背景: JAVA推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序员明确知道存储每个元素的数据类型,否则很容易引…

mysql中的实现字段或字符串拼接的三种方式

一、CONCAT函数concat函数是将多个字段或字符串拼接为一个字符串;但是字符串之间没有任何分隔。concat函数官方介绍-- CONCAT函数的语法如下: CONCAT(str1,str2,...)1.1、拼接非空字段或字符串SELECT CONCAT(字段1,字段2,字段3,...) from 表名;-- 拼接表…

C#构建Web服务项目实战(一)

概述本文通过VS2017,利用C#语言构建一个Web应用项目(旧的ASP.NETWeb应用,非微软最新的.NETCore),并演示了如何利用Windows的IIS服务发布项目(网站),以及在发布项目(允许用…

C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(三)

C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(三)一、实验目的二、 实验内容2.3、计算存款利息三、 实验步骤3.3、顺序程序设计实验题目3:计算存款利息的实验步骤3.3.1、变量的声明3.3.2、变量的赋值3.3.3、计算…

递归分治时间复杂度主定理法

记录一下以前博客的证明过程,补充一下之前的结论 在算法导论中lgn一般指2为底的对数n,特此说明 以前写的博客记录了一下分治递归时间复杂度的结论,发现少了一个正则条件,而且也不覆盖所有的一般情况 https://blog.csdn.net/qq_1…

乌鸦安全2022年度文章合集

说明 乌鸦安全2022年精选原创文章合集,基本上大部分都是原创,当然还有一部分文章由其他师傅投稿提供,在此感谢各位师傅的投稿和帮助! 乌鸦安全2021年度文章合集 你可以在这里找到我: GitHub:https://gi…

开源的工作流都有哪些特征?

开源的工作流是什么?都有什么样的特征和优势特点?众所周知,随着现代化办公管理的兴起,工作效率高的低代码开发平台涌上前线,成为很多企业实现数字化转型和做好数据管理的重要系统。这篇文章主要是围绕开源的工作流方面…

记一次2022某地HVV中的逆向分析

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。 前言 事情是这样的,国庆前期某地HVV,所以接到了客户通知他们收到了钓鱼邮件想要溯源 直接下载…

云视频会议系统私有化实践

点击上方“LiveVideoStack”关注我们▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息编者按:云视频会议系统支持多服务器动态集群部署,并提供多台高性能服务器,大大提升了会议稳定性、安全性、可用性。视频会议为用户大幅提高沟…

(Java高级教程)第三章Java网络编程-第一节2:网络编程必备网络知识2之网络协议分层

文章目录一:生活中的协议分层(1)生活中的分层1——汉堡包(2)生活中的分层2——打电话二:网络分层(1)OSI七层模型(2)TCP/IP分层模型三:OSI参考模型…

前端基础(六)_流程控制语句(if、if-else、if-else嵌套、switch)

流程控制语句主要分为 : 顺序结构:即按顺序执行代码 ;条件选择结构 ( 分支语句 ):包括 if-else 以及 switch;循环结构:包括 for循环,while,do-while,for-in 等;其他语句: break 和continue。 一、流程控制…

Java学习(23)Java一维数组概述

什么是数组 数组是相同类型的数据按顺序组成的一种引用数据类型。 数据类型分为基本数据类型和引用数据类型,引用数据类型分为类、接口、数组。要学习的内容 一维数组的声明、创建、初始化、元素的引用、长度。数组声明 语法格式: 数据类型[] 数组名; 数…