AI入門 | 計算自注意力時QK^T的計算復雜度是多少?

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) 矩陣相乘:

  • 總乘法運算量為 n2 * d_k 次。
  • 總加法運算量為 n2 * (d_k - 1) 次。

在計算機科學和機器學習領域,我們通常使用浮點運算次數 (FLOPs, Floating Point Operations) 來衡量計算量。一次乘法和一次加法通常被打包看作一次操作(特別是在現代硬件的FMA指令中)。

總FLOPs ≈ 總乘法次數 + 總加法次數
= (n2 * d_k) + (n2 * (d_k - 1))
= n2 * (d_k + d_k - 1)
= n2 * (2d_k - 1)

d_k 比較大時,我們通常近似為 2 * n2 * 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(n2 * 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 = n2 * d_k
  • 總加法次數 = a * c * (b - 1) = n * n * (d_k - 1) = n2 * (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協議中的一個頭部字段,用于指定處理請求和響應中的媒體類型信息。它告訴服務器如何處理請求的數據,同時也指導客戶端(通常是瀏覽器)如何解析響應的數據…