【论文解读】TransMLA: Multi-Head Latent Attention Is All You Need
论文链接
1. 论文背景与问题动机
现代大规模语言模型(LLM)在推理时往往遇到通信瓶颈,主要原因在于自注意力机制中需要缓存大量的 Key-Value(KV)对。例如,对于 LLaMA‑65B 这种模型,即使采用 8 位量化,存储 512K 个 token 的 KV 缓存也需要超过 86GB 的 GPU 内存,这远远超出了单个高端 GPU 的容量。为了降低 KV 缓存带来的内存与通信开销,许多方法被提出,例如 Multi‑Query Attention (MQA) 和 Group Query Attention (GQA);然而,这些方法虽然降低了缓存需求,但通常会牺牲模型性能。论文正是在这种背景下,提出了一种新的注意力机制——多头潜变量注意力(Multi‑Head Latent Attention, MLA),旨在在不增加 KV 缓存开销的前提下提高模型表达能力。
2. 基本概念与传统注意力机制

2.1 Multi‑Head Attention (MHA)
-
输入与权重变换
给定输入序列 X ∈ R T × D X \in \mathbb{R}^{T \times D} X∈RT×D(T 为序列长度,D 为隐藏维度),通过三个权重矩阵 W Q W_Q WQ、 W K W_K WK 和 W V W_V WV 将输入分别映射为 Query、Key 和 Value:
Q = X W Q , K = X W K , V = X W V . Q = XW_Q,\quad K = XW_K,\quad V = XW_V. Q=XWQ,K=XWK,V=XWV. -
多头拆分
将 Q Q Q、 K K K 和 V V V 分成 n h n_h nh 个头,每个头的维度为 d h d_h dh:
Q = [ Q 1 ; Q 2 ; ⋯ ; Q n h ] , (其他同理) Q = \begin{bmatrix} Q_1; Q_2; \cdots; Q_{n_h} \end{bmatrix}, \quad \text{(其他同理)} Q=[Q1;Q2;⋯;Qnh],(其他同理) -
注意力计算
每个头计算注意力得分:
O i = softmax ( Q i K i T d h ) V i W O i , O_i = \text{softmax}\Bigl(\frac{Q_iK_i^T}{\sqrt{d_h}}\Bigr)V_iW_{O_i}, Oi=softmax(dhQiKiT)ViWOi,
最终将所有头的输出相加得到最终结果 O O O。
2.2 Group Query Attention (GQA)
-
思想
GQA 的目标是降低 KV 缓存的开销,它将所有 Query 头分成若干组,每组共享同一个 Key 和 Value。设总共 n q n_q nq 个 Query 头,Key 与 Value 只用 n k n_k nk 个头(其中 n k < n q n_k < n_q nk<nq),并通过复制(replication)操作使得每个 Query 都能匹配到 Key。 -
具体操作
- 将输入 X X X 分别映射为 Q ∈ R T × ( n q ⋅ d h ) Q\in\mathbb{R}^{T\times(n_q\cdot d_h)} Q∈RT×(nq⋅dh) 和 K ∈ R T × ( n k ⋅ d h ) K\in\mathbb{R}^{T\times(n_k\cdot d_h)} K∈RT×(nk⋅dh)(以及 V V V)。
- 为了使得 Query 与 Key 数量匹配,需要对 Key 进行复制:设复制因子为 s = n q n k s = \frac{n_q}{n_k} s=nknq,将每个 Key 头复制 s s s 次,拼接得到扩展后的 Key 矩阵 K ′ K' K′。
-
特殊情况
当 n k = n q n_k = n_q nk=nq 时,GQA 恢复为标准 MHA;当 n k = 1 n_k = 1 nk=1 时,即为 Multi‑Query Attention (MQA)。
2.3 Multi‑Head Latent Attention (MLA)
-
核心思路
MLA 提出用低秩矩阵因子分解来近似传统的复制操作。其主要思想是将 Key 层的投影矩阵进行因子分解,从而只需缓存一个低维的“潜变量”表示,再通过一个上投影矩阵恢复完整表示。 -
具体实现
设:- W Q ∈ R D × ( n h ⋅ d h ) W_Q \in \mathbb{R}^{D\times(n_h\cdot d_h)} WQ∈RD×(nh⋅dh) 用于生成 Query;
- 对于 Key 和 Value 层,分别使用两个矩阵 W K a W^a_K WKa(或 W V a W^a_V WVa)和 W K b W^b_K WKb(或 W V b W^b_V WVb),其中 W K a ∈ R D × r W^a_K \in \mathbb{R}^{D\times r} WKa∈RD×r 将输入映射到一个低维表示( r r r 远小于 n h ⋅ d h n_h\cdot d_h nh⋅dh),而 W K b ∈ R r × ( n h ⋅ d h ) W^b_K \in \mathbb{R}^{r\times(n_h\cdot d_h)} WKb∈Rr×(nh⋅dh) 负责扩充回原来的维度。
具体计算为:
Q = X W Q , K = X W K a W K b , V = X W V a W V b . Q = XW_Q, \quad K = XW^a_K W^b_K, \quad V = XW^a_V W^b_V. Q=XWQ,K=XWKaWKb,V=XWVaWVb.这样,在推理时只需要缓存 X W K a XW^a_K XWKa 和 X W V a XW^a_V XWVa(低维表示),而不必保存完整的高维 Key 和 Value,从而大大降低了 KV 缓存的存储开销。
3. TransMLA:从 GQA 到 MLA 的转换
论文在理论上证明了以下定理:
定理 1: 当 KV 缓存大小相同时,MLA 的表达能力严格大于 GQA 的表达能力。
为证明这一点,论文从三个方面展开讨论:
3.1 GQA 中的 Key 复制
-
过程说明
在 GQA 中,假设输入经过 W K W_K WK 得到 Key K K K(具有 n k n_k nk 个头,每个头维度为 d h d_h dh),为了匹配 n q n_q nq 个 Query 头,需要对每个 Key 头进行复制。具体地,将 K K K 按照列分成 n k n_k nk 个块,然后每个块复制 s = n q n k s = \frac{n_q}{n_k} s=nknq 次,拼接后形成扩展后的矩阵 K ′ K' K′。 -
数学等价性
这种方法与先计算后复制数学上是等价的,但为后续的低秩分解奠定了基础。
3.2 将复制操作转移到参数侧
-
方法描述
不必先计算 Key 后再复制,我们可以直接在参数矩阵 (W_K) 上进行复制。将 (W_K) 按照列分为若干个小矩阵 (W_K^{(i)}),然后对每个小矩阵复制 (s) 次,拼接得到新的矩阵 (W’_K),最终直接计算 (K’ = XW’_K)。 -
数学等价性
这种方法与先计算后复制数学上是等价的,但为后续的低秩分解奠定了基础。
3.3 MLA 的低秩分解形式
-
SVD 分解
论文指出,由于 W K ′ W'_K WK′ 仅仅是 W K W_K WK 复制而成,其自由度最多只有 n k ⋅ d h n_k \cdot d_h nk⋅dh 个。利用奇异值分解(SVD),可以将 W K ′ W'_K WK′ 分解为:
W K ′ = U K S K V K ⊤ . W'_K = U_K S_K V_K^\top. WK′=UKSKVK⊤.
由于只有最多 n k ⋅ d h n_k \cdot d_h nk⋅dh 个非零奇异值,可以截断 SVD,仅保留前 r ≤ n k ⋅ d h r \leq n_k \cdot d_h r≤nk⋅dh 个奇异值。 -
构造因子
定义:
W K a = U K [ : , : r ] S K [ : r , : r ] , W K b = S K [ : r , : r ] V K [ : r , : ] ⊤ . W^a_K = U_K[:,:r] \sqrt{S_K[:r,:r]}, \quad W^b_K = \sqrt{S_K[:r,:r]} V_K[:r,:]^\top. WKa=UK[:,:r]SK[:r,:r],WKb=SK[:r,:r]VK[:r,:]⊤.
则有:
W K ′ = W K a W K b , K ′ = X W K ′ = X W K a W K b . W'_K = W^a_K W^b_K, \quad K' = XW'_K = XW^a_K W^b_K. WK′=WKaWKb,K′=XWK′=XWKaWKb. -
启示
这表明,原本 GQA 中通过复制得到的 Key,其实可以看作是一个低秩分解的结果。相比于直接复制,MLA 在引入额外上投影( W K b W^b_K WKb)之后,可以在保持相同 KV 缓存大小的前提下,增加额外的表达能力。
3.4 MLA 的表达能力优势
- 不可表示性
论文讨论了一个特殊情况:如果 W K b W^b_K WKb的各个向量正交,则通过 X W K a XW^a_K XWKa得到的低维表示,在经过 W K b W^b_K WKb 扩展后,各个通道输出依然保持各自的独立性。而在 GQA 中,同一组内所有头都是完全相同的(由于复制操作),因此无法捕捉这种多样性。 - 结论
因此,在相同 KV 缓存大小下,MLA 能够表达出更多种类的模式,从而具有更强的表达能力。
4. TransMLA 实践:将 GQA 模型转换为 MLA 模型
论文不仅在理论上证明了 MLA 的优势,还提出了一种名为 TransMLA 的方法,将已有的 GQA‑based 模型转换为 MLA 模型。转换过程中主要的步骤包括:
-
参数转换
- 对于 Q-K 对,原来 GQA 模型中用于 Key 层的矩阵 W K W_K WK被分解为 W K a W^a_K WKa和 W K b W^b_K WKb。
- 在转换后, W K a W^a_K WKa 和 W V a W^a_V WVa的输出维度调整为一个较小的值(例如 512),而 KV 缓存的尺寸保持不变(例如 1024)。
- 为了使得转换后 Query 与 Key/Value 之间依然可以充分交互, W K b W^b_K WKb 和 W V b W^b_V WVb被设计为将低维表示扩展到一个更高的维度(例如 28×128 = 3584)。
-
参数增加的代价
- 额外参数主要来自于增加的 W K b W^b_K WKb 和 W V b W^b_V WVb 矩阵,但论文指出这部分参数只占原始参数的 1/8,对于整体模型(例如从 7.6B 增加到 7.7B)来说,增长非常有限。
-
后续训练与微调
- 转换完成后,论文对转换后的模型进行进一步的训练,以提升模型的表达能力,而不会增加 KV 缓存的尺寸。这种后训练方法(post‑training)使得模型在保持低延迟的同时,能够充分利用 MLA 带来的优势。
5. 实验验证
论文在实验部分主要展示了 TransMLA 模型在下游任务上的性能提升,并与原始 GQA 模型进行了对比。
5.1 实验设置
-
模型选择
使用 Qwen2.5 系列模型,其中 Qwen2.5‑7B 模型有 28 个 Query 头和 4 个 Key/Value 头,每个头维度为 128,对应的 KV 缓存尺寸为 1024;而 Qwen2.5‑14B 模型相应地有更多头数和更大的 KV 缓存尺寸(2048)。 -
转换细节
在转换为 MLA 模型后:- W K a W^a_K WKa 与 W V a W^a_V WVa 的输出维度调整为 512,
- W K b W^b_K WKb与 W V b W^b_V WVb 的维度调整为 3584,
- 总体参数量仅略有增加(例如 7.6B 增至 7.7B)。
5.2 微调与性能对比
-
微调数据集
使用包含数学(例如 Meta‑MathQA)和编程任务(例如 Self‑OSS‑Starcoder2‑Instruct)的指令微调数据集 SmolTalk,对比 GQA 模型与 TransMLA 模型在训练过程中的表现。 -
实验结果
- 训练损失:如图 2a 所示,TransMLA 模型在训练过程中损失显著降低,说明其数据拟合能力更强。
- 测试准确率:图 2b 展示了在 7B 与 14B 模型下,TransMLA 模型在数学和编程任务上均取得了更高的准确率。
-
消融实验
论文还对仅通过身份映射(identity map)初始化进行维度扩展的版本进行对比,发现这种方法仅带来微小提升(例如准确率提升仅约 0.15%),从而验证了正交分解(orthogonal decomposition)在提升模型表达能力方面的关键作用。
6. 结论与未来工作
-
结论
论文证明了在 KV 缓存大小相同的条件下,MLA 的表达能力严格大于 GQA。理论上通过将 GQA 的复制机制转化为低秩因子分解,可以实现同样的 KV 缓存开销,但同时获得更丰富的表示能力。实验结果进一步证明了转换后的 MLA 模型在下游任务上表现更优。 -
未来工作
作者计划将这一方法扩展到更大规模的模型(如 LLaMA、Qwen、Mistral),并利用 DeepSeek R1 蒸馏技术进一步优化转换模型的性能,同时开发针对 MLA 的专门推理加速策略,以实现更低延迟和更高效的资源利用。
总结
整篇论文的核心贡献在于:
- 理论证明:展示了如何将 GQA 中的复制操作转化为低秩分解,并证明了在同等 KV 缓存开销下,MLA 的表达能力更强,尤其是在允许不同头之间产生更多差异性表示方面。
- 实践方案(TransMLA):提出了一种后训练方法,将现有的 GQA 模型转换为 MLA 模型,只需极少的额外参数即可显著提升模型性能。
- 实验验证:通过对 Qwen2.5 系列模型的微调实验,证明了 TransMLA 模型在数学、编程等任务上均优于原始 GQA 模型,验证了理论上的优势。
通过这种方法,论文为未来设计更高效且表达能力更强的注意力机制提供了新的思路,同时也为降低大模型在长序列推理时的资源消耗提出了切实可行的解决方案。
相关文章:
【论文解读】TransMLA: Multi-Head Latent Attention Is All You Need
论文链接 1. 论文背景与问题动机 现代大规模语言模型(LLM)在推理时往往遇到通信瓶颈,主要原因在于自注意力机制中需要缓存大量的 Key-Value(KV)对。例如,对于 LLaMA‑65B 这种模型,即使采用 8…...
CentOS 下安装和配置 HTTPD 服务的详细指南
CentOS 下安装和配置 HTTPD 服务的详细指南 CentOS 下安装和配置 HTTPD 服务的详细指南1. 环境准备2. 安装 HTTPD 服务2.1 更新系统2.2 安装 HTTPD2.3 启动 HTTPD 服务2.4 检查 HTTPD 服务状态 3. 配置防火墙3.1 开放 HTTP 和 HTTPS 端口3.2 验证防火墙规则 4. 配置 HTTPD4.1 主…...
VUE3中子组件改变父组件传过来的值(props)的方法和使用场景详解
在 Vue 3 中,子组件改变父组件传过来的值(props)的方法主要有以下几种:通过事件发射、使用 v-model、模拟 .sync 修饰符的功能(Vue 3 中已移除),以及使用 ref 或 reactive。下面我将结合代码示例…...
登录-06.JWT令牌-生成和校验
一.JWT令牌的生成和校验 JWT令牌生成 想要生成JWT令牌,那么就要首先引入JWT令牌的相关依赖, <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version>…...
【Git】多人协作
文章目录 完成准备工作多人协作场景一场景二远程分支删除后,本地 git branch -a 依然能看到的解决办法 完成准备工作 在之前,我们所完成的工作如下: 基本完成 Git 的所有本地库的相关操作,git基本操作,分支理解&#…...
Python爬虫-破解字体加密技术
前言 本文是该专栏的第77篇,后面会持续分享python爬虫干货知识,记得关注。 字体加密是一种常见的反爬虫技术,通过自定义字体文件和字符映射来保护网页内容,防止爬虫直接获取文本信息。 在文章《Python爬虫-猫眼电影的影院数据》中,笔者有详细介绍过猫眼的相关数据采集。…...
邮件安全之发件人伪造
电子邮件工作原理 电子邮件传输过程中主要涉及到SMTP、IMAP、POP3三种协议,具体功能如下: SMTP:全称Simple Mail Transfer Protocol,即简单邮件传输协议,主要用于发送邮件,使用端口号25。 IMAP:全称Internet Mail Acce…...
git 常用功能
以下是 Git 的常用功能及其命令: 初始化仓库 git init在当前目录初始化一个新的 Git 仓库。 克隆仓库 git clone <仓库地址>将远程仓库克隆到本地。 查看状态 git status查看工作区和暂存区的状态。 添加文件到暂存区 git add <文件名>将文件添…...
【llm落地】从零到一,用DeepSeek打造智能BI工具:自然语言驱动数据洞察
在数据驱动的时代,商业智能 (BI) 工具已经成为企业决策的关键。然而,传统的 BI 工具往往操作复杂,需要专业技能才能驾驭。想象一下,如果用户只需要用 自然语言 就能轻松查询数据、获取分析结果甚至生成可视化图表,那将会多么高效和便捷! 本文将带你踏上从零到一构建智能…...
请谈谈 Vue 中的 key 属性的重要性,如何确保列表项的唯一标识?
1. Key属性的核心作用(附代码对比) // 错误示例:未使用key的列表渲染 <template><ul><li v-for"item in items">{{ item.text }}</li></ul> </template>// 正确示例:使用唯一key的…...
使用 AIStor 和 OpenSearch 增强搜索功能
在这篇文章中,我们将探讨搜索,特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如,如果您正在查看运营数据,如果您的服务似乎是随机的,那么您需要尽可能回溯以识别模式并找出原因。这不仅适用…...
Node.js中如何修改全局变量的几种方式
Node.js中如何修改全局变量。我需要先理解他们的需求。可能他们是在开发过程中遇到了需要跨模块共享数据的情况,或者想要配置一些全局可访问的设置。不过,使用全局变量可能存在一些问题,比如命名冲突、难以维护和测试困难,所以我得…...
基于Python和Neo4j开发的医疗辅助诊断系统的详细实现步骤和代码示例
以下是一个基于Python和Neo4j开发的医疗辅助诊断系统的详细实现步骤和代码示例。 1. 环境准备 首先,确保你已经安装了必要的库。可以使用以下命令进行安装: pip install py2neo2. Neo4j数据库初始化 在Neo4j中创建一个新的数据库,并启动N…...
第9章:LangChain结构化输出-示例2(数字提取服务)
如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解,将自然语言处理任务(如情感分析、数字提取、日期提取、POJO提取等)封装为服务,并通过LangChain4j的AiServices动态生成这些服务的实现。 本章主要讲述基于Lan…...
【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新
note (1)未来的工作需亟待解决: 支持大规模 RL 训练(PPO、GRPO 等)的开源基础框架用于稳定训练的 GRPO 训练超参的自动化调优RL 训练数据的配比(难度、领域、任务等)基于 Instruct 模型训练 R…...
买股票的最佳时机 - 2
买卖股票的最佳时机 III 题目描述: 提示: 1 < prices.length < 1050 < prices[i] < 105 分析过程: 写动态规划,我们需要考虑一下问题: 定义状态状态转移方程初始条件 遍历顺序 4种状态: …...
Python基于flask的智慧交通可视化,大数据智慧交通数据可视化系统
博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【Unity】鱼群效果模拟
鱼群效果模拟 文章目录 鱼群效果模拟Boid算法实现方式version1_CPUversion2_GPUversion3_Multilaterationversion4_Bitonic_Sorting (GPU友好)version5_Skinning (TODO) 细节项优化项参考链接 Boid算法 Boid算法是一种模拟群体行…...
Unity使用IL2CPP打包时,我们应该注意什么?如何避免(可以举例说明)
这一篇部分内容在Unity之中如何处理C#底层代码那篇博客之中有提及,接下来对这部分进行补充说明。(请先阅读--Unity之中如何处理C#底层代码) 目录 1 注意点 2 如何避免 1 注意点 IL2CPP 在编译过程中会将 IL(中间语言…...
Wireshark使用介绍
文章目录 Wireshark介绍Wireshark使用工作模式介绍1. 混杂模式(Promiscuous Mode)2. 普通模式(Normal Mode)3. 监视模式(Monitor Mode) 界面分区捕获过滤器语法基本语法逻辑运算符高级语法使用示例捕获过滤…...
云图库平台(五)——后端图片模块开发
目录 一、需求分析二、库表设计三、图片的处理如何实现图片的上传和下载创建图片的业务流程如何对图片进行解析 四、创建并使用对象存储五、后端操作对象存储初始化客户端通用能力类文档上传文件下载 一、需求分析 管理员功能: 图片的上传和创建:仅管理…...
postman调用ollama的api
按照如下设置,不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住:110,1-12,之后所有数学计算必…...
十、OSG学习笔记-多线程(OpenThreads)
上一节内容: 九、OSG学习笔记-NodeVisitor节点遍历器-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145742756?spm1001.2014.3001.5501 本章节代码: OsgStudy/Openthreads CuiQingCheng/OsgStudy - 码云 - 开源中国https://gite…...
Gemma 2 的滑动窗口注意力(Sliding Window Attention)解析:源代码
Gemma 2 的滑动窗口注意力(Sliding Window Attention)解析 在 Transformer 结构 中,自注意力(Self-Attention)是核心机制之一。然而,标准的自注意力计算复杂度为 ( O ( n 2 ) O(n^2) O(n2) ),随…...
机器学习数学通关指南——链式法则
前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 一、定义与公式 链式法则&a…...
Python爬虫实战:从零到一构建数据采集系统
文章目录 前言一、准备工作1.1 环境配置1.2 选择目标网站 二、爬虫实现步骤2.1 获取网页内容2.2 解析HTML2.3 数据保存 三、完整代码示例四、优化与扩展4.1 反爬应对策略4.2 动态页面处理4.3 数据可视化扩展 五、注意事项六、总结互动环节 前言 在大数据时代,数据采…...
DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【行业解决方案篇十八】【DeepSeek航空航天:故障诊断专家系统 】
引言:为什么说这是“航天故障终结者”? 2025年春节刚过,航天宏图突然官宣"DeepSeek已在天权智能体上线",这个搭载在卫星和空间站上的神秘系统,号称能提前48小时预判99.97%的航天器故障。这不禁让人想起年初NASA禁用DeepSeek引发的轩然大波,更让人好奇:这套系…...
谷歌浏览器更新后导致的刷新数据无法显示
这几天突然出现的问题,就是我做了一个网站,一直用Google展示,前两天突然就是刷新会丢失数据,然后再刷新几次吧又有了,之前一直好好的,后端也做了一些配置添加了CrossOrigin注解,然而换了edge浏览…...
nvidia-docker2 和 NVIDIA Container Toolkit 的区别及推荐
NVIDIA Docker 和 NVIDIA Container Toolkit 1. NVIDIA Docker 和 NVIDIA Docker2 nvidia-docker 是 NVIDIA 最早推出的工具,用于在 Docker 容器中启用 GPU 支持。它以独立守护进程的形式作为 Volume Plugin 存在,但与 Docker 生态系统的兼容性较差&am…...
