AIGC算法3:Attention及其变体

news2025/1/16 5:34:31

1.Attention

Attention是Transformer的核心部分,Attention机制帮助模型进行信息筛选,通过Q,K,V,对信息进行加工

1.1 attention计算公式

Attention ⁡ ( Q , K , V ) = softmax ⁡ ( Q K T d k ) V \operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V Attention(Q,K,V)=softmax(dk QKT)V

1.2 attention计算流程

在这里插入图片描述

1.3 Softmax attention

Self-attention的Q,K,V同源,都是输入序列X的线性变化,在实际生产过程中K与V相同。
F为token维度,DM为投影维度
Q = x W Q , W Q ∈ R F × D K = x W K , W K ∈ R F × D V = x W V , W V ∈ R F × M \begin{aligned} & Q=x W_Q, W_Q \in \mathbb{R}^{F \times D} \\ & K=x W_K, W_K \in \mathbb{R}^{F \times D} \\ & V=x W_V, W_V \in \mathbb{R}^{F \times M} \end{aligned} Q=xWQ,WQRF×DK=xWK,WKRF×DV=xWV,WVRF×M
其中
Q ∈ R N × D K ∈ R N × D V ∈ R N × M \begin{aligned} & Q \in \mathbb{R}^{N \times D} \\ & K \in \mathbb{R}^{N \times D} \\ & V \in \mathbb{R}^{N \times M} \end{aligned} QRN×DKRN×DVRN×M
S A ( x ) = softmax ⁡ ( Q K T D ) V S A(x)=\operatorname{softmax}\left(\frac{Q K^T}{\sqrt{D}}\right) V SA(x)=softmax(D QKT)V
向量a是词嵌入向量,三个W矩阵是对a的线性变化

1.3.1 图解 Softmax Attention

仅考虑Decoder
在这里插入图片描述
行和列都表示位置;蓝色表示当前token,绿色表示参与当前token计算的其它token的位置。
Transformer中Decoder采用的方式:只能看当前token左边的token。

1.3.2 复杂度计算

对于矩 A ∈ R ( N , M ) A \in \mathbb{R}^{(N, M)} AR(N,M) B ∈ R ( M , L ) B \in \mathbb{R}^{(M, L)} BR(M,L),它们的矩阵乘法共需要 N × L × M N \times L \times M N×L×M次乘法运算。总复杂度 O ( N L M ) O(N L M) O(NLM)

回到Transformer的复杂度问题上,前面提到Softmax Attention的计算主要包含两次矩阵乘法操作。
第一次矩阵乘法是 Q × K T Q \times K^T Q×KT,结合上文关于矩阵乘法复杂度的结论和这两个矩阵的大小,可知
Q × K T Q \times K^T Q×KT的复杂度为 O ( N 2 D ) O\left(N^2 D\right) O(N2D)

第二次矩阵乘法是softmax的结果与 V V V 的乘积。 softmax输出的矩阵大小为 N × N N \times N N×N ,矩阵 V V V的大小为 N × D N \times D N×D,所以这一次矩阵乘法的复杂度为 O ( N 2 D ) O\left(N^2 D\right) O(N2D)

因为这两次矩阵乘法是顺序执行的,所以总的复杂度为它们各自复杂度之和。因为这两个复杂度相等,相加只是引入了一个常数项,所以可以忽略,因此Softmax Attention总的复杂度就为 O ( N 2 D ) O\left(N^2 D\right) O(N2D)

当我们只关心复杂度与序列长度 N N N之间的关系时,可以忽略 D D D并将其写为 O ( N 2 ) O\left(N^2 \right) O(N2)

这就是通常说的Transformer计算复杂度随序列长度呈二次方增长的由来。容易看到,Transformer的空间复杂随序列长度也呈二次方增长,即空间复杂度也为 O ( N 2 ) O\left(N^2 \right) O(N2)

1.4 attention的问题与优化

传统attention存在上下文长度的约束问题,且速度慢,内存占用大

优化方向:1. 上下文 2. 内存

Attention和FFN的复杂度:长序列难题,对于base版来说,当序列长度不超过1536时,Transformer的复杂度都是近乎线性的;当序列长度超过1536时,Transformer的计算量逐渐以Attention为主,复杂度慢慢趋于二次方,直到长度超过4608,才真正以二次项为主。

2. Attention 变种

2.1 稀疏 attention(Sparse Attention)

核心在于减少每个token需要attend的token数量。

2.1.1 Factorized Self-Attention (Sparse Transformer)

Paper:Generating Long Sequences with Sparse Transformers (2019)

提出了两种稀疏Attention方法:Strided AttentionFixed Attention。这二者均可将Transformer的
O ( N 2 ) O(N^2) O(N2)复杂度降低至 O ( N N ) O(N\sqrt{N}) O(NN )

Factorized Self-Attention的一个基础假设是:在Softmax Attention中,真正为目标token提供信息的attended token非常少。

图片和自然语言领域,临近词语,像素又理论上的更高相关性,此时的Attention Weights很像CNN,卷积神经网络仅考虑临近像素之间的

Strided Attention (跨步注意力)

SA1:每个token只能Attend它左边相邻的L个token。
在这里插入图片描述

SA2:每个token只能Attend它左边部分token,这些attened token用如下方法选出:从自己开始往左边数,每隔L就会有一个token可以attend
在这里插入图片描述
使用方式:

  1. 每个Transformer Block 交替使用
  2. SA1 与 SA2在一次Attend中 联合使用
  3. 基于trm的多头机制,对不同的SA 多头使用
Fixed Attention 固定注意力

在这里插入图片描述

先看FA2,如图中橙色区域。橙色区域的位置是固定的,即从左往右数,每隔L个位置,选中一个token。

理解了FA2,FA1的选择方式就会容易理解了。对于每个当前token(蓝色),往它左边遍历(绿色),直到遇到第一个FA2选中的token(橙色)。

Fixed Attention的使用方法和上文介绍的Strided Attention的三种方法一致(交替使用、联合使用、多头使用)

Strided Attention适用于图像、音频;Fixed Attention适用于文本。
Strided Attention在attended token的位置上做了强假设:哪些位置的token应该被attened,与当前token位置强相关。作者们认为这种适合图像、音频这类数据。而在文本上这类假设不成立。所以在Fixed Attention中,哪些位置的token应该被attened,与当前token位置无关。图像、音频的局部信息很重要;而文本全局信息更重要。

2.1.2 Blockwise Self-Attention

Paper:Blockwise Self-Attention for Long Document Understanding (2019)
核心: 通过分块来降低Softmax Attention的计算复杂度,方法简单,且实验效果较好。

并非全量匹配,而是分块匹配
原则为shifting one position
例如:
Index ⁡ ( Q ) = [ 2 , 3 , 1 ] \operatorname{Index}(Q)=[2,3,1] Index(Q)=[2,3,1]
很简单, Q 1 Q_1 Q1选择 K 2 K_2 K2 V 2 V_2 V2 Q 2 Q_2 Q2选择 K 3 K_3 K3 V 3 V_3 V3 Q 3 Q_3 Q3选择 K 1 K_1 K1 V 1 V_1 V1

2.1.3 Longformer

paper:Longformer: The Long-Document Transformer (2020)
Key Contribution:设计了多种不同的Local Attention和Global Attention方法。

分为三个部分:

Sliding Window based Attention(SW-Attention)

同 SW-1

Dilated Sliding Window based Attention(DSW-Attention)

同 SW-2

Global Attention(G-Attention)

在这里插入图片描述
绿色token是SW-Attention会attend到的token。橙色token是在G-Attention中额外选中的token。以第五行的当前token为例(橙色),因为它是被额外选中的token,所以它会attend它左边的所有token。图中用黄色标出了相对于SW-Attention之外的额外被attended的token。此外,其它所有token也需要attend到第五个token,参见图中最后四行中的靠左黄色列。

2.1.4 Local attention and Memory-compressed attention

Paper: Generating wikipedia by summarizing long sequences (2018)

Key Contribution: 提出了Local Attention和Memory-compressed attention。Local Attention的计算复杂度随序列长度增长呈线性增长;Memory-compressed attention可以将计算复杂度减少固定常数倍(超参控制)。

Local attention

控制分块大小,每个token仅仅attend固定分块
在这里插入图片描述
与前文 Blockwise Self-Attention 不同,前者为固定分块大小,后者为固定分块数量

Memory-compressed Attention

核心思路:使用额外的卷积来降低K和V的序列长度
在这里插入图片描述
计算复杂度从 O ( N 2 ) O(N^2) O(N2)降低到 O ( N L ) O(NL) O(NL)

2.2 Reformer

paper: Reformer: the efficient Transformer(2020)
Key contribution: 1)提出了LSH-attention,能够将Transformer的复杂度由 O ( N 2 ) O(N^2) O(N2)降低至 O ( N l o g N ) O(NlogN) O(NlogN);2)将Transformer中的跳跃连接改为了“可逆跳跃连接”,这样在网络的前向过程中不用为后续的梯度计算存储激活值,能够极大降低训练过程的存储开销。

核心:降低基于Transformer的模型在训练阶段的存储开销。

空间开销估算

0.5BTRM为例,64K序列长度,1K embedding, batch size 8

  1. TRM参数量 0.5B * 4 Byte = 2G
  2. self-attention激活值 64K * 1K * 8 * 4 Byte = 2G
  3. 两个FFN,一个是激活值的4倍,一个是一倍,总共10G
  4. 矩阵计算,64K*64K,16G
Locality-Sensitive Hashing Attention(LSH-attention)

核心思路,找到权重较大的token,不需要所有token参与计算
即在不做向量点积运算的前提下,粗略估算两向量的余弦相似度。
在这里插入图片描述
步骤:

  1. 将两个向量投影在单位超球面上(二范数为1)
  2. 对超球面施加若干次随机转动
  3. 记录下每次转动后的区块,(argmax实现,扩展成2*N的向量(x,y,-x,-y),最大值所在维度)
  4. 多次转动后,每个token可获得一个hash值
  5. 根据hash值对token重排序,然后分块attend
    在这里插入图片描述
    可以将复杂度降低至 O ( N l o g N ) O(NlogN) O(NlogN)
Reversible Transformer

使用可逆网络的思想,减少中间激活值存储,
在attention+FFN架构中,已知前一层 X 1 , X 2 X_1, X_2 X1,X2,计算下一层 Y 1 , Y 2 Y_1, Y_2 Y1,Y2
Y 1 = X 1 + Attention ⁡ ( X 2 ) Y 2 = X 2 + FeedForward ⁡ ( Y 1 ) \begin{aligned} & Y_1=X_1+\operatorname{Attention}\left(X_2\right) \\ & Y_2=X_2+\operatorname{FeedForward}\left(Y_1\right) \end{aligned} Y1=X1+Attention(X2)Y2=X2+FeedForward(Y1)
则可以在已知 Y 1 , Y 2 Y_1, Y_2 Y1,Y2的情况下,恢复一层 X 1 , X 2 X_1, X_2 X1,X2
代价多计算一次attention和FFN
X 2 = Y 2 − FeedForward ⁡ ( Y 1 ) X 1 = Y 1 − Attention ⁡ ( X 2 ) \begin{aligned} & X_2=Y_2-\operatorname{FeedForward}\left(Y_1\right) \\ & X_1=Y_1-\operatorname{Attention}\left(X_2\right) \end{aligned} X2=Y2FeedForward(Y1)X1=Y1Attention(X2)
唯一需要考虑的是激活函数是否可逆,Relu和Gelu不可逆,需要注意

2.3 Adaptive Attention

paper:Adaptive Attention Span in Transformers
Key contribution: 提出了一种对不同attention head自适应选择attention长度的方法。

对于权重计算公式的改进:
a i j = exp ⁡ ( q i ⋅ k j ) ∑ m = 0 i exp ⁡ ( q i ⋅ k m ) a_{i j}=\frac{\exp \left(q_i \cdot k_j\right)}{\sum_{m=0}^i \exp \left(q_i \cdot k_m\right)} aij=m=0iexp(qikm)exp(qikj)
改进为:
a i j = d ( i − j ) ⋅ exp ⁡ ( q i ⋅ k j ) ∑ m = 0 i d ( i − m ) ⋅ exp ⁡ ( q i ⋅ k m ) a_{i j}=\frac{d(i-j) \cdot \exp \left(q_i \cdot k_j\right)}{\sum_{m=0}^i d(i-m) \cdot \exp \left(q_i \cdot k_m\right)} aij=m=0id(im)exp(qikm)d(ij)exp(qikj)
函数d定义:
d ( x ) = min ⁡ [ max ⁡ [ 1 R ( R + z − x ) , 0 ] , 1 ] d(x)=\min \left[\max \left[\frac{1}{R}(R+z-x), 0\right], 1\right] d(x)=min[max[R1(R+zx),0],1]
其中R为超参数,z是需要学习的参数
函数图像为:
在这里插入图片描述

有效距离内,完美attaend,有效举例外衰减,类似lasso

参考

https://zhuanlan.zhihu.com/p/634406691

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

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

相关文章

Fisher 准则分类

目录 一、什么是Fisher 准则 二、具体实例 三、代码实现 四、结果 一、什么是Fisher 准则 Fisher准则,即Fisher判别准则(Fisher Discriminant Criterion),是统计学和机器学习中常用的一种分类方法,由统计学家罗纳…

【golang学习之旅】Go 的基本数据类型

系列文章 【golang学习之旅】报错:a declared but not used 目录 系列文章总览布尔型(bool)字符串型(string)整数型(int、uint、byte、rune)浮点型(float32、float64)复…

网络安全之防范钓鱼邮件

随着互联网的快速发展,新的网络攻击形式“网络钓鱼”呈现逐年上升的趋势,利用网络钓鱼进行欺骗的行为越来越猖獗,对互联网的安全威胁越来越大。网络钓鱼最常见的欺骗方式就是向目标群体发送钓鱼邮件,而邮件标题和内容,…

类的六个构造函数相关干货

构造函数 特点 1.名字与类名相同 2.无返回值 3.对象实例化的时候编译器自动调用这个函数 4.构造函数可以重载(无参构造函数,拷贝构造等) 5.如果类中没有显式定义构造函数(深拷贝),则编译器会自动生成一个…

OpenSPG v0.0.3 发布,新增大模型统一知识抽取图谱可视化

基于非结构化文档的知识构建一直是知识图谱大规模落地的关键难题之一,4 月 23 日,OpenSPG 发布 v0.0.3 版本,正式发布了大模型统一知识抽取功能,可大幅降低领域知识图谱的构建成本。还可用于增强大模型缓解幻觉并提升稳定性&#…

Spring Boot中判断轨迹数据是否经过设置的打卡点,且在PGSQL中把点拼接成线,判断某个点是否在线上或在线的50米范围内

问题描述 轨迹数据判断是否经过打卡点,轨迹数据太多,循环判断的话非常消耗内存。解决办法只需要把所有轨迹数据点拼成了一条线,然后只需要循环打卡点即可,打卡点不多,一般不会超过100个,如果多的话&#x…

C++高级特性:异常概念与处理机制(十四)

1、异常的基本概念 异常:是指在程序运行的过程中发生的一些异常事件(如:除数为0,数组下标越界,栈溢出,访问非法内存等) C的异常机制相比C语言的异常处理: 函数的返回值可以忽略&…

C++ | Leetcode C++题解之第41题缺失的第一个正数

题目&#xff1a; 题解&#xff1a; class Solution { public:int firstMissingPositive(vector<int>& nums) {int n nums.size();for (int i 0; i < n; i) {while (nums[i] > 0 && nums[i] < n && nums[nums[i] - 1] ! nums[i]) {swap(…

助力实现更可持续未来的智能解决方案:AI如何改变世界

人工智能已然成为今年的热门话题。由于生成式AI应用的快速采用&#xff0c;新闻头条充斥着有关AI如何彻底改变我们的政策制定、就业和经济走向的预测。您知道AI也是我们应对各种可持续发展挑战的先锋吗&#xff1f;AI通过分析大量数据&#xff0c;并提供有用的见解和工具&#…

Python | Leetcode Python题解之第44题通配符匹配

题目&#xff1a; 题解&#xff1a; class Solution:def isMatch(self, s: str, p: str) -> bool:def allStars(st: str, left: int, right: int) -> bool:return all(st[i] * for i in range(left, right))def charMatch(u: str, v: str) -> bool:return u v or v…

半波整流220V转正5V负-5V100mA恒压WT5101A

半波整流220V转正5V负-5V100mA恒压WT5101A WT5101A 是一款专为 Buck 和 Buck-Boost 拓扑而设计的高效、具有成本优势的离线恒压稳压器&#xff0c;内嵌有500V MOSFET。在降低系统成本的同时&#xff0c;这款稳压器只需少量的外部元件就能输出默认的5V电压。在轻负载条件下&…

30kw 直流回馈老化测试负载箱的优点

直流回馈老化测试负载箱是一种专门用于对电源设备进行老化测试的设备&#xff0c;其主要优点如下&#xff1a; 直流回馈老化测试负载箱采用了先进的直流回馈技术&#xff0c;能够将测试过程中产生的电能回馈到电网中&#xff0c;大大提高了能源的利用效率。这种技术不仅能够节…

水电气能耗管理云平台

安科瑞薛瑶瑶18701709087/17343930412 能耗管理云平台采用泛在物联、云计算、大数据、移动通讯、智能传感器等技术手段可为用户提供能源数据采集、统计分析、能效分析、用能预警、设备管理等服务&#xff0c;平台可以广泛应用于多种领域。

微信小程序按钮点击时的样式hover-class=“hover“

小程序的button组件很好用&#xff0c;按钮点击的时候会显示点击状态&#xff0c;默认的就是颜色加深 但是我们改变了button的背景色之后&#xff0c;就看不出点击效果了&#xff0c;解决起来也很简单 关键代码就是小程序的 hover-class 属性&#xff0c;需要注意的是&#xff…

【java】27:java绘图

坐标体系 - 介绍&#xff1a; 下图说明了Java坐标系。坐标原点位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标&#xff0c;表示当前位置为水平方向&#xff0c;距离坐标原点个像素&#xff1b;第二个是y坐标&#xff0c;表示当前位置为垂直方向…

APP自动化测试-Android SDK SDK Manager.exe或者uiautomatorviewer.bat打不开,点击就一闪而已的原因

原因是找不到Java.exe的路径&#xff0c; 如果是uiautomatorviewer.bat打不开&#xff0c;则使用文本编辑器打开它&#xff0c;然后添加java安装路径 set java_exeC:\Program Files\Java\jdk1.8.0_321\bin\java.exe 同理&#xff1a; 如果是SDK Manager.exe和AVD Manager.ex…

2024全新Java学习路线图一条龙(视频+课件+源码资料)

前言 互联网浩瀚无际,你能来到这里,是机遇也是缘分,机遇,就像我的标题一样,你找到了一份Java 360度无死角的 Java 学习路线,而缘分让我们相遇,注定给你的学习之路搭上一把手,送你一程。 整条线路除了拥有后端整个技术体系外,还涵盖了前端、大数据、云计算、运维等各…

【telnet 命令安装】centos8 linux下安装telnet命令

在CentOS 8上安装Telnet服务&#xff0c;您需要分别安装Telnet客户端和服务器端。以下是安装步骤的概述&#xff1a; 检查是否已安装Telnet&#xff1a; 您可以使用rpm命令来检查系统是否已经安装了Telnet客户端或服务器端。例如&#xff1a; rpm -qa | grep telnet-client rpm…

OWASP发布十大开源软件安全风险及应对指南

​ 最近爆发的XZ后门事件&#xff0c;尽管未酿成Log4j那样的灾难性后果&#xff0c;但它再次敲响了警钟&#xff1a;软件供应链严重依赖开源软件&#xff0c;导致现代数字生态系统极其脆弱。面对层出不穷的安全漏洞&#xff0c;我们需要关注开源软件 (OSS)风险 &#xff0c;改进…

Web前端笔记1.0【Html详解,CSS详解】【Js待完善】

Web前端 html5 html5是构建web前端内容的一种语言描述方式 标签 标签分类 单标签&#xff1a;<input type text"> 双标签语法规范&#xff1a;<标签名> <标签名> 内容 </标签名></标签名> (可相互嵌套&#xff09; 常用标签 标题标…