[从0开始AIGC][Transformer相关]:算法的时间和空间复杂度

一、算法的时间和空间复杂度

文章目录

算法是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是过程中消耗的资源和时间却会有很大区别。

那么如何衡量不同算法之间的优劣?

主要还是从算法所占用的时间和空间两个维度去考量。

  • 时间维度:是指执行当前算法所消耗的时间,通常用时间复杂度来描述
  • 空间维度:是指执行当前算法需要占用多少内存空间,通常用空间复杂度来描述

1、时间复杂度

想要知道算法的时间复杂度,简单方法是把算法运行一遍,就知道所消耗的时间。但是这种方法会有很多弊端,首先该方式非常容易受到运行环境的影响,不同性能的机器运行的时间差异很大;再者,写算法的时候也没法完整运行整个算法。

因此,另一种更为通用的方法就出来了:大O表示法。

常见的时间复杂度量级有:

2、空间复杂度

既然时间复杂度不是用来计算程序具体耗时的,那空间复杂度也不是用来计算程序实际占用的空间的。

空间复杂度是一个对算法来运行过程中临时占用储存空间大小的一个量度,同样反映的是一个趋势。

空间复杂度比较常用的有:O(1)、O(n)、O(n²)

二、Transformer的时间复杂度分析

一个形状为N × M的矩阵,与另一个形状为M × P的矩阵相乘,其运算复杂度来源于乘法操作的次数,时间复杂度为O(NMP)

Transformer模型的时间复杂度主要取决于输入序列的长度N和模型中隐藏层的数量H。而且tansformer的时间复杂度主要在于self-attention那块,至于激活函数、归一化、残差连接、前馈神经网络等这些计算的时间复杂度可忽略不计。

因此Transformer的时间复杂度,可以从两个角度看,一个是self-attention,另一个是多头attention。

1、 self-attention 的时间复杂度

self-attention 主要包括三个步骤:输入的线性映射、相似度计算、softmax和加权平均

  • Q,K,V:n × d
  • 相似度计算 Q K T QK^T QKT : n × d n\times d n×d与 n × d n \times d n×d 运算,得到 n × n n \times n n×n矩阵,复杂度为 O ( n 2 d ) O(n^2d) O(n2d)
  • softmax计算:对每行做softmax,复杂度为O(n),则n行的复杂度为 O ( n 2 ) O(n^2) O(n2)
  • 加权求和: n × n n\times n n×n 与 n × d n\times d n×d运算,得到 �×� 矩阵,复杂度为 O ( n 2 d ) O(n^2d) O(n2d)

因此,Self-Attention的时间复杂度是: O ( n 2 d ) O(n^2d) O(n2d)

2、 多头注意力机制的时间复杂度

对于多头注意力机制,假设有h个head,这里h是一个常数,对于每个head,首先需要把三个矩阵映射到 d q , d k , d v d_q,d_k,d_v dq,dk,dv。

  • Q,K,V: n × d n\times d n×d 与 n × d h n\times \frac{d}{h} n×hd 运算,复杂度为 O ( d 2 n ) O(d^2n) O(d2n)
  • 相似度计算 Q K T QK^T QKT: 多头的相似度计算不是通过循环完成的,而是通过transpose和reshapes,用矩阵乘法来完成的。假设有h个head,则 m = d h m=\frac{d}{h} m=hd。将 n × d n\times d n×d的矩阵拆分为 n × h × m n\times h\times m n×h×m的张量,再利用转置操作转为 h × n × m h\times n\times m h×n×m 。故 Q K T QK^T QKT的计算为 与 h × n × m h\times n\times m h×n×m与 h × n × m h\times n\times m h×n×m 做计算,得到 h × n × n h\times n\times n h×n×n 的张量,复杂度为 O ( h 2 n 2 m ) O(h^2n^2m) O(h2n2m), 即 O ( h n 2 d ) O(hn^2d) O(hn2d),。由于h是一个常数,故复杂度为 O ( n 2 d ) O(n^2d) O(n2d),。
  • softmax计算:对每行做softmax,复杂度为O(n),则n行的复杂度为 O ( n 2 ) O(n^2) O(n2)
  • 加权求和: n × n n\times n n×n与 n × d n\times d n×d运算,得到 n × d n\times d n×d 矩阵,复杂度为 O ( n 2 d ) O(n^2d) O(n2d)

故最后的复杂度为 O ( n 2 d + n d 2 ) O(n^2d+nd^2) O(n2d+nd2)

三、transformer的空间复杂度

由于空间复杂度是程序所占用的空间,但是transformer占用的空间复杂度比较复杂,涉及到变量储存、参数储存、梯度储存等,暂时还没搜到关于transformer的空间复杂度的分析

相关推荐
一去不复返的通信er1 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
程序 代码狂人4 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade5 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
贾公子6 小时前
图片 AIGC 检测接入实战——URL 与 Base64 的取舍、体积校验与「你送过去的可能不是那张图」
python·aigc
wu_solo7 小时前
6.1 Transformer架构概述
深度学习·架构·transformer
小郎君6587 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
算法
读完一本书7 小时前
AI 生成的图,为什么一眼就能看出是 AI?5 个破绽
人工智能·aigc
邵奈一7 小时前
GPT-6.1 Terra速度是Sol的3倍,价格减半
算法
RaaS1007 小时前
Node.js Brotli RCE 漏洞自查指南:fetch、undici、axios 都在影响面,三分钟确认你的版本
人工智能·深度学习·算法
用户11977079480737 小时前
服装电商的虚拟试穿怎么落地?拆解开源 OOTDiffusion:原理流程、本地推理与商用边界
aigc