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

news2024/10/7 20:26:15

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

文章目录

  • 一、算法的时间和空间复杂度
    • 1、时间复杂度
    • 2、空间复杂度
  • 二、Transformer的时间复杂度分析
    • 1、 self-attention 的时间复杂度
    • 2、 多头注意力机制的时间复杂度
  • 三、transformer的空间复杂度

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

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

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

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

1、时间复杂度

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

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

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

img

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的空间复杂度的分析

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

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

相关文章

专题十二、字符串

字符串 1. 字符串字面量1.1 字符串字面量中的转义序列1.2 延续字符串字面量1.3 如何存储字符串字面量1.4 字符串字面量的操作1.5 字符串字面量与字符常量 2. 字符串变量2.1 初始化字符串变量2.2 字符数组与字符指针 3. 字符串的读和写3.1 用 printf 函数和 puts 函数写字符串3.…

通俗白话了解资产负债现金利润三张表

看到一本小书不错《财务小白轻松入门》,里面通俗说了三张表之间的关系。贴图摘录下:

SSL证书添加与ICP备案,对于SpringBoot的要求

配置了SSL证书之后,在SpringBoot的resources文件夹里的application.properties会添加以下代码: server.port443 不需要添加server.address。不然会报错。 https类型的请求默认在Postman里面不可请求。 经过SSL证书处理的网页,链接中使默认…

RAG文本加载和分块调研

文本加载和分块 一、文本加载 文本加载是RAG文本增强检索重要环节。文件有不同类型(excel、word、ppt、pdf、png、html、eps、gif、mp4、zip等),衍生出了很多第三方库。使用python处理文件是各种python开发岗位都需要的操作。主要涉及到的标准…

TryHackMe - HTTP Request Smuggling

学完、打完后的复习 HTTP 1 这部分比较简单,直接略过 HTTP2请求走私 首先要了解HTTP2的结构,与HTTP1之间的一些差异 HTTP2中不再使用CRLF来作为字段的边界限定,而是在二进制中直接通过长度、名字、值长度、值,来确认边界 而这…

【C++】用红黑树封装map和set

我们之前学的map和set在stl源码中都是用红黑树封装实现的,当然,我们也可以模拟来实现一下。在实现之前,我们也可以看一下stl源码是如何实现的。我们上篇博客写的红黑树里面只是一个pair对象,这对于set来说显然是不合适的&#xff…

软件可靠性基本概念_1.定义和定量描述

1.软件可靠性定义 软件可靠性(Software Reliability)是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。规定的条件是指直接与软件运行相关的使用该软件的计算机系统的状态和软件的输入条件,或统称为软件运行时的外部输入条件&am…

【MATLAB源码-第183期】基于matlab的图像处理GUI很全面包括滤波,灰度,边缘提取,RGB亮度调节,二值化等。

操作环境: MATLAB 2022a 1、算法描述 1. RGB颜色亮度调整 1.1 RGB颜色模型 RGB颜色模型是一种加色模型,使用红色(R)、绿色(G)、蓝色(B)三种颜色的不同组合来表示各种颜色。每种…

OceanBase V4.2 MySQL模式下,如何通过DBLINK实现跨数据源访问

概述 跨数据源访问可通过 DBLINK(以下简称DBLINK)实现,从而使得业务代码能够像访问本地数据库一样轻松访问远端数据库。原先,DBLINK主要服务于Oracle模式,但由于OceanBase 的MySQL模式租户同样存在访问远端数据库的需…

【二分查找】Leetcode 点名

题目解析 LCR 173. 点名 算法讲解 1. 哈希表 class Solution { public:int takeAttendance(vector<int>& nums) {map<int, int> Hash;for(auto n : nums) Hash[n];for(int i 0; i < nums[nums.size() - 1]; i){if(Hash[i] 0)return i;}return nums.si…

【ZZULIOJ】1053: 正弦函数(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入x&#xff0c;计算上面公式的前10项和。 输入 输入一个实数x。 输出 输出一个实数&#xff0c;即数列的前10项和&#xff0c;结果保留3位小数。 样例输入 Copy 1 样例输出 Copy 0.841 c…

Python学习笔记11 - 列表

1. 列表的创建与删除 2. 列表的查询操作 3. 列表的增、删、改操作 4. 列表元素的排序 5. 列表生成式

PostgreSQL入门到实战-第十弹

PostgreSQL入门到实战 PostgreSQL数据过滤(三)官网地址PostgreSQL概述PostgreSQL中OR操作理论PostgreSQL中OR实操更新计划 PostgreSQL数据过滤(三) 了解PostgreSQL OR逻辑运算符以及如何使用它来组合多个布尔表达式。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列…

免费SSL证书跟付费SSL证书有什么区别?

免费SSL证书与付费SSL证书的主要区别如下&#xff1a; 1. 类型与验证级别&#xff1a; - 免费SSL证书通常仅提供域名验证&#xff08;DV&#xff09;&#xff0c;这是一种最基本的验证级别&#xff0c;仅验证域名的所有权&#xff0c;确认申请者对所申请域名的有效控制。 - 付费…

如何在 iOS 项目中集成 MiniApp SDK,快速构建智能小程序?

本文介绍如何在 iOS 项目中&#xff0c;集成 MiniApp SDK&#xff0c;使之能够构建智能生活小程序&#xff0c;运行在你的 IoT App 上。 准备工作 在集成 MiniApp SDK 之前&#xff0c;您需要在 涂鸦 IoT 开发平台 上&#xff1a; 注册开发者账号、创建产品、创建功能点等。…

汇智知了堂:AIGC引领数字营销新革命,你准备好了吗?

ChatGPT火了&#xff0c;带火的还有AIGC。 经过长时间的蓄力&#xff0c;AIGC技术落地的应用场景呈平铺式展开&#xff0c;已经逐渐渗透到各行各业中&#xff0c;AIGC时代已来。 AIGC浪潮来袭&#xff0c;电商行业从业者该如何应对&#xff1f; AIGC技术会给电商行业带来哪些变…

排序算法—快速排序

文章目录 快速排序一、递归实现二、非递归实现总结 快速排序 以下均以排升序为最终目的。 一、递归实现 有一个排序能解决所有问题吗&#xff1f;没有&#xff01;不过&#xff0c;快速排序这种排序适用于大多数情况。 我们前面讨论排序算法一般都是先讨论一趟的情况&#…

传输层 --- TCP (上篇)

目录 1. TCP 1.1. TCP协议段格式 1.2. TCP的两个问题 1.3. 如何理解可靠性 1.4. 理解确认应答机制 2. TCP 报头中字段的分析 2.1. 序号和确认序号 2.1.1. 序号和确认序号的初步认识 2.1.2. 如何正确理解序号和确认序号 2.2. TCP是如何做到全双工的 2.3. 16位窗口大小…

TypeScript系列之-理解TypeScript类型系统画图讲解

TypeScript的输入输出 如果我们把 Typescript 编译器看成一个黑盒的话。其输入则是使用 TypeScript 语法书写的文本或者文本集合。 输出是编译之后的 JS 文件 和 .d.ts 的声明文件 其中 JS 是将来需要运行的文件(里面是没有ts语法&#xff0c;有一个类型擦除的操作)&#xff0…

Shopee虾皮100%有效提高广告效果的案例分享

Shopee 店铺运营中存在三种广告类型&#xff0c;分别是:关键词广告、关联广告和店铺广告。其中使用最为普遍&#xff0c;主控权最为直接的就是关键词广告&#xff0c;TA的适用范围最广&#xff0c;起效最快&#xff0c;并且可根据自身运营的能力去调控投入产出比&#xff0c;深…