0. 背景

假设我们有两个矩阵:

  • 矩阵 A,尺寸为 (n, d_k)
  • 矩阵 B,尺寸为 (d_k, n)

我们要计算它们的乘积 C = A * B
那么这个过程所需的计算量是多少?


1. 结果矩阵的尺寸

首先,结果矩阵 C 的尺寸是由第一个矩阵的行数和第二个矩阵的列数决定的。

  • C 的行数 = A 的行数 = n
  • C 的列数 = B 的列数 = n
    所以,结果矩阵 C 的尺寸为 (n, n)

2. 单个元素的计算量

接下来,我们看如何计算结果矩阵 C 中的任意一个元素 C_ij(第 i 行,第 j 列的元素)。

根据矩阵乘法的定义,C_ij 是由 A 的第 i 行和 B 的第 j 列的点积(dot product)得到的。

  • A 的第 i 行是一个有 d_k 个元素的行向量。
  • B 的第 j 列是一个有 d_k 个元素的列向量。

计算过程如下:
C_ij = A_i1 * B_1j + A_i2 * B_2j + ... + A_id_k * B_d_kj

为了计算这一个 C_ij 元素,我们需要:

  • d_k 次乘法 (每个 A_ik 乘以 B_kj)
  • d_k - 1 次加法 (将 d_k 个乘积相加)

3. 总计算量

现在我们来计算整个矩阵 C 的总计算量。

结果矩阵 C 是一个 (n, n) 的矩阵,所以它总共有 n * n = n^2 个元素。

我们将单个元素的计算量乘以总元素数量:

  • 总乘法次数 = (每个元素的乘法次数) × (总元素个数)
    = d_k * n^2

  • 总加法次数 = (每个元素的加法次数) × (总元素个数)
    = (d_k - 1) * n^2


4. 结论

将一个 (n, d_k) 矩阵与一个 (d_k, n) 矩阵相乘:

  • 总乘法运算量为 n² * d_k 次。
  • 总加法运算量为 n² * (d_k - 1) 次。

在计算机科学和机器学习领域,我们通常使用浮点运算次数 (FLOPs, Floating Point Operations) 来衡量计算量。一次乘法和一次加法通常被打包看作一次操作(特别是在现代硬件的FMA指令中)。

总FLOPs ≈ 总乘法次数 + 总加法次数
= (n² * d_k) + (n² * (d_k - 1))
= n² * (d_k + d_k - 1)
= n² * (2d_k - 1)

d_k 比较大时,我们通常近似为 2 * n² * d_k FLOPs。

5. 应用背景(非常重要)

这个计算 (n, d_k) * (d_k, n)Transformer模型 的自注意力(Self-Attention)机制中非常核心。

  • n 通常代表序列长度(Sequence Length)。
  • d_k 代表Query和Key向量的维度。

这个计算对应的是 Query (Q) 矩阵Key (K) 矩阵的转置 (Kᵀ) 相乘,以得到注意力分数矩阵(Attention Score Matrix)。

  • Q 的尺寸是 (n, d_k)
  • K 的尺寸是 (n, d_k),所以 Kᵀ 的尺寸是 (d_k, n)
  • Q * Kᵀ 的结果是一个 (n, n) 的矩阵,其计算复杂度就是 O(n² * d_k)

这也解释了为什么标准Transformer模型的计算量和内存占用会随着序列长度 n 的增加而呈平方级增长,这是限制其处理非常长序列的主要瓶颈之一。

6. 附录(泛化)

补充一种更加泛化的计算方式。我们来分析一下将一个 (a, b) 矩阵与一个 (b, c) 矩阵相乘的计算量。

假设我们有两个矩阵:

  • 矩阵 A,尺寸为 (a, b)a 行, b 列)
  • 矩阵 B,尺寸为 (b, c)b 行, c 列)

我们要计算它们的乘积 C = A * B

6.1 结果矩阵的尺寸

首先,结果矩阵 C 的尺寸由 A 的行数和 B 的列数决定。

  • C 的行数 = A 的行数 = a
  • C 的列数 = B 的列数 = c
    所以,结果矩阵 C 的尺寸为 (a, c)

6.2 单个元素的计算量

接下来,我们计算结果矩阵 C 中的任意一个元素 C_ij(第 i 行, 第 j 列)。

C_ij 是由 A 的第 i 行和 B 的第 j 列的点积(dot product)得到的。

  • A 的第 i 行是一个长度为 b 的行向量。
  • B 的第 j 列是一个长度为 b 的列向量。

计算公式为:
C_ij = A_i1 * B_1j + A_i2 * B_2j + ... + A_ib * B_bj

为了计算这一个 C_ij 元素,我们需要:

  • b 次乘法
  • b - 1 次加法

6.3 总计算量

结果矩阵 C 是一个 (a, c) 的矩阵,它总共有 a * c 个元素。

我们将单个元素的计算量乘以总元素数量,得到整个矩阵的计算量:

  • 总乘法次数 = (每个元素的乘法次数) × (总元素个数)
    = b * (a * c)
    = a * b * c

  • 总加法次数 = (每个元素的加法次数) × (总元素个数)
    = (b - 1) * (a * c)
    = a * c * (b - 1)

6.4 结论与总结

对于一个 (a, b) 矩阵和一个 (b, c) 矩阵的乘法:

  • 总乘法运算量为 a * b * c 次。
  • 总加法运算量为 a * c * (b - 1) 次。

在衡量算法复杂度时,我们通常使用 Big O 表示法,或者计算总的 浮点运算次数 (FLOPs)

  • 总FLOPs ≈ 总乘法次数 + 总加法次数
    = (a * b * c) + (a * c * (b - 1))
    = a * c * (b + b - 1)
    = a * c * (2b - 1)

  • 时间复杂度 (Time Complexity)
    a, b, c 都很大时,常数 2-1 可以忽略。因此,计算复杂度为 O(abc)

6.5 验证一下之前的问题

让我们用这个通用公式来验证你之前的问题:一个 (n, d_k) 矩阵乘以一个 (d_k, n) 矩阵。
这里:

  • a = n
  • b = d_k
  • c = n

代入通用公式:

  • 总乘法次数 = a * b * c = n * d_k * n = n² * d_k
  • 总加法次数 = a * c * (b - 1) = n * n * (d_k - 1) = n² * (d_k - 1)

这与我们之前得到的结论完全一致。这个 O(abc) 的公式是矩阵乘法计算量分析的基础。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NeRF-Lidar实景重建:大疆Mavic 4 Pro低成本建模方案(2025实战指南)

摘要 面对传统激光雷达建模​​成本高昂​​(单设备超$20万)与​​操作复杂​​的行业痛点,本文提出基于消费级无人机大疆Mavic 4 Pro的​​NeRF-LiDAR融合重建方案​​,实现厘米级精度建模成本降低至1/10。核心技术突破在于&…

x64dbg设置条件断点

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、x64是什么?二、条件断点1.CreateWindowExW函数设置当窗口名称为xxx字符串时候break总结前言 提示:这里可以添加本文要记录的大概内容: x64dbg设置条件断点 版本 2024 mar 27 提示:以…

RNN人名分类器案例

RNN人名分类器案例 1 任务目的: 目的: 给定一个人名,来判定这个人名属于哪个国家 典型的文本分类任务: 18分类---多分类任务 2 数据格式 注意:两列数据,第一列是人名,第二列是国家类别,中间用制表符号&q…

鸿蒙HarmonyOS 关于图片、视频的选择详解

背景 在聊天软件中,发送相册中视频和照片、用相机拍摄视频和图片发送是很常用的功能。在Android和iOS端,大部分应用都通过API方式定义UI来实现相册选择照片、视频,相机拍摄照片、视频,它们一般都支持以下功能: 相册选…

iOS 网络请求断连重试失败?抓包分析丢包原因的完整流程

在移动 App 的开发中,中断网络环境(如切换到飞行模式再回网)后,App 在重连过程中有时会出现请求未重新发送或丢包的情况。这类问题难重现、难定位,尤其在 iOS 平台上更容易被忽视。我们最近就遇到一个用户反馈“切换网…

使用 DHTMLX Gantt 添加迷你地图:提升大型项目可视化与导航体验

在应对数千个任务构成的大型项目时,DHTMLX Gantt 以其卓越的性能表现和流畅渲染能力广受欢迎。然而,在实际使用中,终端用户往往需要快速定位到时间线中的特定位置,这在面对庞杂任务结构时尤为困难。为此,DHTMLX 提供了…

ROM修改进阶教程------用于自启脚本来打开系统的一些常用开关等指令 备份收藏 【一】

在定制化rom中。有很多项目需要反编译系统的相关应用来实现。但有些功能项完全可以使用指令来更改。那么结合自启脚本就可以很方便的来实现很多功能。网络虽然有很多类似的指令,但一些相关定制化项目的指令很少见而且不全面。此博文将全面收录此类指令。方便rom修改用户借鉴参…

腾讯云TSE注册中心实战:Nacos高可用集群搭建与流量治理避坑指南

1. 为什么选择腾讯云TSE托管Nacos? 在微服务架构中,注册中心承担着服务发现与配置管理的核心职能。Nacos作为阿里开源的动态服务发现组件,已成为国内微服务生态的事实标准。腾讯云微服务引擎TSE(Tencent Cloud Service Engine&am…

领域驱动设计(DDD)【26】之CQRS模式初探

文章目录 一 CQRS初探:理解基本概念1.1 什么是CQRS?1.2 CQRS与CRUD的对比1.3 为什么需要CQRS? 二 CQRS深入:架构细节2.1 基本架构组成2.2 数据流示意图 三 CQRS实战:电商订单案例3.1 传统CRUD方式的订单处理3.2 CQRS方…

项目测试-接口测试

软件测试的分类 软件测试主要分硬件和软件 硬件测试: cpu,内存条,显卡...测试可以看得见摸得着的东西 软件测试: web,app,小程序... 测试可以看得见摸不着的东西 web端 web端是在电脑上常常使用的, 也可以称之为网站.(web端是B/S架构) web端的客户端是任何一个访问这个网…

相机的光圈

光圈(Aperture)是镜头中一个控制光线进入相机的开口,它在摄影中起着至关重要的作用。光圈的大小决定了进入相机传感器的光线数量,并影响曝光、景深、以及拍摄效果。光圈参数通常用f/值(光圈值)来表示&#…

HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App

大家周末好,本文分享一个小而美的旅行app首页,效果图如下: 很显然这个页面还是使用List容器,页面两侧有统一的边距,我们可以在List容器统一设置: List(space:20){ } .padding(left:14,right:14,top:62) .w…

Python银行管理系统01升级(适合初学者)

目录 框架如下: 1. Account类 - 账户数据模型 2. Bank类 - 银行业务逻辑 3. BankApp类 - 图形用户界面 关键概念解析(适合初学者) 1. 面向对象编程(OOP)概念 2. Tkinter GUI编程基础 3. 数据持久化 4. 输入验证 学习建议 系统功能概览 完整代码: 在Python银行…

华为防火墙双向NAT实验

如图所示, 企业内网有一台Server2,通过在FW1上配置nat server,将Server2的www端口映射到了公网; 实验环境中,内网和外网都使用外网的server1提供的DNS服务,在DNS服务器上添加A记录,www.baidu.c…

前端路由的基石:深度剖析 Hash 与 History 模式的本质差异与实战抉择

在单页面应用(SPA)统治现代Web开发的今天,前端路由已成为构建流畅用户体验的核心技术。而hash和history作为两种主流实现方案,其设计理念和技术细节的差异直接影响着应用架构的选择。本文将深入解析二者的技术本质,通过…

微机系统 - 绪论

绪论: 一:微处理器,微型计算机和微型计算机系统: 分类: 按照系统结构和基本工作原理.计算机分为5大部分:运算器,控制器,存储器,输入设备,输出设备 按照体积,性能和价格分5类:巨型机,大型机,中型机,小型机,微型计算机(单板机,单片机) 微型计算机的特点:集成度高,体积小,重量轻…

基于Java+Springboot的宠物健康咨询系统

源码编号:S564 源码名称:基于Springboot的宠物健康咨询系统 用户类型:多角色,用户、顾问、管理员 数据库表数量:12 张表 主要技术:Java、Vue、ElementUl 、SpringBoot、Maven 运行环境:Win…

SpringBoot+MySQL宠物猫店管理系统

概述 基于SpringBootMySQL开发的宠物猫店管理系统完整源码。该系统功能完善,包含前后台完整功能模块,代码规范易于二次开发,是学习SpringBoot项目实战的优秀范例。 主要内容 前台功能展示 系统前台设计简洁实用,主要包含以下核…

UE5 - 制作《塞尔达传说》中林克的技能 - 16 - 遥控炸弹(一)

让我们继续《塞尔达传说》中林克技能的制作!!! 本章节的核心目标:素材导入与遥控炸弹的外观 先让我们看一下完成后的效果: 基本流程:素材准备->C类开发->蓝图配置->场景部署 1.素材准备&#xff1…

HTTP中常见的Content-Type

Content-Type,也称为互联网媒体类型或MIME类型,是HTTP协议中的一个头部字段,用于指定处理请求和响应中的媒体类型信息。它告诉服务器如何处理请求的数据,同时也指导客户端(通常是浏览器)如何解析响应的数据…