当前位置: 首页 > news >正文

Attention层的FLOPs计算

前置知识

设矩阵 A 的维度为 m×n,矩阵 B 的维度为 n×p,则它们相乘后得到矩阵 C 的维度为 m×p。其中,C 中每个元素的计算需要进行 n 次乘法和 n−1 次加法。也就是说,总的浮点运算次数(FLOPs)约为 m × p × (2n) ≈ 2 × m × n × p。

Attention核心部分的计算

在一个 attention head 中,假设输入序列长度为 t,每个位置的表示维度(即 embedding 维度)为 d_head。在计算 self-attention 时,主要包含两个矩阵乘法操作:

1.查询矩阵与键矩阵的转置相乘(Q × K^T),计算量为 2 × t × t × d_head;
2.得分矩阵与值矩阵相乘,计算量同样为 2 × t × t × d_head。

则核心部分的总FLOPs为 4 × t × t × d_head

由于 Transformer 中通常使用多头注意力机制,设共有 n_head 个 head,并且每个 head 的维度为 d_head,那么有 d_model = n_head × d_head。于是所有 head 总共的 FLOPs 为:

4 × t × t × d_head × n_head = 4 × t × t × d_model

可见,在只考虑 attention 核心部分时,FLOPs 与 head 数量无关,仅与序列长度呈平方关系。

含有模型参数的矩阵乘法部分的FLOPs计算

除了注意力分数的计算外,Transformer 中还涉及多个由模型权重参与的线性映射,这些运算的 FLOPs 与序列长度呈线性关系。主要包括以下几个部分:
1.Q,K,V的映射:每个为输入矩阵(t × d_model)与权重矩阵(d_model × d_model)相乘,计算量为 2 × t × d_model × d_model(乘法与加法合计);三者合计为:
FLOPs ≈ 3 × 2 × t × d_model × d_model = 6 × t × d_model × d_model

2.concat以后的映射:拼接后的张量维度仍为 t × d_model,再乘以一个 d_model × d_model 的权重矩阵,FLOPs 为:
FLOPs ≈ 2 × t × d_model × d_model

综上,所有包含模型参数的线性变换的总 FLOPs 为:
FLOPs ≈ 8 × t × d_model × d_model

这部分 FLOPs 与序列长度 t 成线性关系。

总结

FLOPs的计算量可归结为2部分,其中一部分FLOPs与序列长度t呈平方关系,另一部分与序列长度 t 成线性关系,而且前者与n_head无关

相关文章:

  • C语言发展史:从Unix起源到现代标准演进
  • finebi使用资源迁移无法导入资源,解决方法
  • 编译faiss
  • Multicore-TSNE
  • ROS2与Carla安装设备(其三)测试 ROS 2
  • 基于 Rancher 部署 Kubernetes 集群的工程实践指南
  • STM32实现simpleFOC控制无刷电机
  • 基于C++的IOT网关和平台4:github项目ctGateway交互协议
  • 张正友相机标定算法(Zhang’s camera calibration method)原理和过程推导(附OpenCV代码示例)
  • QT6 源(63)篇六:阅读与注释 QString 这个类,包含了 QString 类的 完整源码,也附上 QLatin1String 类的
  • Linux C++ xercesc xml 怎么判断路径下有没有对应的节点
  • Arduino项目实战与编程技术详解
  • LangChain的向量RAG与MCP在意图识别的主要区别
  • 离轴干涉系统 | 赋能超表面性能精准检测
  • Java批量数据处理唯一ID生成优化
  • WPF之TextBox控件详解
  • LeRobot 项目部署运行逻辑(三)——机器人及舵机配置
  • 黑苹果显卡免驱教程:蓝宝石RX580刷成RX570详细步骤(附工具与注意事项)
  • 分布式计算框架(Dask)与单机库(Pandas)数据处理方法对比分析
  • 小知识总结记录
  • 制作小程序需要什么技术/济南seo网站排名关键词优化
  • 万盛经开区建设局官方网站/无锡网站排名公司
  • 景德镇网站制作/网络营销和推广做什么
  • 斗米兼职做任务发兼职网站靠谱吗/百度一下你就知道了
  • 哪家做网站最好/网站流量统计分析报告
  • wap网站下载/怎样做网络推广