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

这篇具有很好参考价值的文章主要介绍了[从0开始AIGC][Transformer相关]:算法的时间和空间复杂度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

1、时间复杂度

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

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

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

多头注意力机制的时间复杂度,# 从0开始AIGC,算法与数据结构,AIGC,transformer,算法

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的空间复杂度的分析文章来源地址https://www.toymoban.com/news/detail-857916.html

到了这里,关于[从0开始AIGC][Transformer相关]:算法的时间和空间复杂度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法之【时间复杂度】与【空间复杂度】

    目录 一、算法 1、算法定义 2、两种算法的比较 3、算法的特性 4、算法设计的要求 二、算法的复杂度 1、时间复杂度 1.1定义 1.2大O的渐近表示法 1.3推导大O阶方法 1.4最坏情况与平均情况 1.5常见的时间复杂度计算示例 🍂常数阶: 🍂线性阶:  🍂对数阶: 🍂平方阶: 2、空间

    2024年02月05日
    浏览(62)
  • 【算法基础】时间复杂度和空间复杂度

    1 算法的评价 2 算法复杂度 2.1 时间复杂度(Time Complexity) 2.1.1 如何计算时间复杂度: 2.1.2 常见的时间复杂度类别与示例 2.2 空间复杂度 2.2.1 如何计算空间复杂度 2.2.2 常见的空间复杂度与示例 3 时间复杂度和空间复杂度计算示例 例子1:计算数组中所有元素的和。 例子2:快

    2024年02月08日
    浏览(58)
  • 算法的时间复杂度与空间复杂度

    1.算法效率 2.时间复杂度 3.空间复杂度 4.复杂度oj题目 1.算法效率 1.1 如何衡量一个算法的好坏 一辆车的好坏我们可以从价格,油耗...... 方面来衡量,但衡量一个算法的好坏我们该从哪一个方面入手呢?比如斐波那契数列: 斐波那契数列的递归实现方式非常简洁,但简洁一定

    2024年02月15日
    浏览(85)
  • 【算法篇C++实现】算法的时间、空间复杂度

    ​ 算法(algorithm)是解决一系列问题的 清晰指令 ,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 ​ 简单来说,算法就是解决一个问题的具体方法和步骤。算法是 程序的灵魂。 ​ 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个

    2024年02月13日
    浏览(43)
  • 算法学习22:时间复杂度 和 空间复杂度

    提示:以下是本篇文章正文内容: 😍😍😍文章链接👍👍👍 提示:这里对文章进行总结: 💕💕💕

    2024年04月22日
    浏览(99)
  • 算法的时间复杂度、空间复杂度如何比较?

    目录 一、时间复杂度BigO 大O的渐进表示法: 例题一: 例题2: 例题3:冒泡排序的时间复杂度 例题4:二分查找的时间复杂度 书写对数的讲究: 例题5:  实例6: 利用时间复杂度解决编程题 ​编辑思路一: 思路二: 源码: 思路三: 回顾位操作符 二、空间复杂度详解 概念

    2024年02月15日
    浏览(72)
  • 常见的排序算法及时间空间复杂度

    排序算法是计算机科学中的基本算法之一,它用于将一组数据按照某种顺序进行排列。下面是一些常见的排序算法,以及它们的思想和时间空间复杂度,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 冒泡排序 (Bubble Sort) - 思

    2024年02月07日
    浏览(43)
  • 八大排序算法(含时间复杂度、空间复杂度、算法稳定性)

    下列算法默认都是对数组进行升序 1.1、算法思想 插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序的具体步骤如下: 从第一个元素开始,该元素可以认为已经被排序;

    2024年02月08日
    浏览(47)
  • 数据结构:算法(特性,时间复杂度,空间复杂度)

    算法(Algorithm)是对 特定问题求解步骤 的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。 一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。 算法必须是有穷的,而程序可以是无穷的 算法中每条指令必须有确切的含义,对于

    2024年02月06日
    浏览(57)
  • 如何衡量算法的效率?时间复杂度&&空间复杂度

    本篇博客会讲解如何衡量一个算法的效率。衡量算法的效率,主要有2个维度,分别是:时间复杂度和空间复杂度。 时间复杂度用来衡量算法的时间效率。时间复杂度越低,算法的耗时越短,效率则越高。 空间复杂度用来衡量算法的空间效率。空间复杂度越低,算法占用的空

    2023年04月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包