为什么MLA中求query也乘了降维矩阵和升维矩阵

news/2025/3/9 13:12:34/文章来源:https://www.cnblogs.com/AlwaysSui/p/18757982

MLA的公式放在这里:

\[\begin{align*} \mathbf{c}_t^{KV} &= W^{DKV}\mathbf{h}_t &(1) \\ [\mathbf{k}_{t,1}^C, \mathbf{k}_{t,2}^C, ..., \mathbf{k}_{t,n_h}^C] = \mathbf{k}_t^C &= W^{UK}\mathbf{c}_t^{KV} &(2) \\ \mathbf{k}_t^R &= \text{RoPE}(W^{KR}\mathbf{h}_t) &(3) \\ \mathbf{k}_{t,i} &= [\mathbf{k}_{t,i}^C; \mathbf{k}_t^R] &(4) \\ [\mathbf{v}_{t,1}^C, \mathbf{v}_{t,2}^C, ..., \mathbf{v}_{t,n_h}^C] = \mathbf{v}_t^C &= W^{UV}\mathbf{c}_t^{KV} &(5) \\ \mathbf{c}_t^Q &= W^{DQ}\mathbf{h}_t &(6) \\ [\mathbf{q}_{t,1}^C, \mathbf{q}_{t,2}^C, ..., \mathbf{q}_{t,n_h}^C] = \mathbf{q}_t^C &= W^{UQ}\mathbf{c}_t^Q &(7) \\ [\mathbf{q}_{t,1}^R, \mathbf{q}_{t,2}^R, ..., \mathbf{q}_{t,n_h}^R] = \mathbf{q}_t^R &= \text{RoPE}(W^{QR}\mathbf{c}_t^Q) &(8) \\ \mathbf{q}_{t,i} &= [\mathbf{q}_{t,i}^C; \mathbf{q}_{t,i}^R] &(9) \\ \mathbf{o}_{t,i} &= \sum_{j=1}^t \text{Softmax}_j(\frac{\mathbf{q}_{t,i}^T\mathbf{k}_{j,i}}{\sqrt{d_h + d_h^R}})\mathbf{v}_{j,i}^C &(10) \\ \mathbf{u}_t &= W^O[\mathbf{o}_{t,1}; \mathbf{o}_{t,2}; ...; \mathbf{o}_{t,n_h}] &(11) \\ \end{align*} \]

\(t\)是token序号,\(i\)是注意力头的序号

回答用户查询

用户的问题是:在生成查询向量 \(\mathbf{q}\) 时,为什么不直接使用一个普通的权重矩阵 \(W\) 来变换隐藏状态 \(\mathbf{h}_t\)(即 \(\mathbf{q}_t = W \mathbf{h}_t\)),而是在 MLA(多头潜在注意力)中选择通过 \(W^{DQ}\)\(W^{UQ}\) 进行两步变换(即 \(\mathbf{c}_t^Q = W^{DQ} \mathbf{h}_t\),然后 \(\mathbf{q}_t^C = W^{UQ} \mathbf{c}_t^Q\))。用户认为直接使用单个 \(W\) 矩阵会更简单。下面我们将分析这种设计的合理性,并解释为什么 MLA 选择了两步变换。


标准变换器中的方法

在标准的变换器模型中,查询向量 \(\mathbf{q}_t\) 的生成确实很简单:

\[\mathbf{q}_t = W^Q \mathbf{h}_t \]

这里:

  • \(\mathbf{h}_t\) 是输入的隐藏状态,维度为 \(d\)
  • \(W^Q\) 是一个权重矩阵,维度为 \(d \times (d_h \cdot h)\),其中 \(d_h\) 是每个注意力头的维度,\(h\) 是注意力头的数量,
  • \(\mathbf{q}_t\) 是输出的查询向量,直接用于注意力机制的计算。

这种方法的好处是:

  • 简单性:只需要一次矩阵乘法,易于实现。
  • 计算效率:计算复杂度为 \(O(d \cdot d_h \cdot h)\),非常直接。

因此,用户提出“直接乘一个 \(W\) 矩阵不是更简单吗”是有道理的,这种方法在标准变换器中已经被广泛验证。


MLA 中的两步变换

在 MLA 中,查询向量的生成采用了不同的策略,分为两步:

  1. 第一步:生成中间表示

    \[\mathbf{c}_t^Q = W^{DQ} \mathbf{h}_t \]

    其中 \(W^{DQ}\) 是一个矩阵,将隐藏状态 \(\mathbf{h}_t\) 变换为一个中间表示 \(\mathbf{c}_t^Q\),其维度记为 \(d_c\)

  2. 第二步:生成查询向量

    \[\mathbf{q}_t^C = W^{UQ} \mathbf{c}_t^Q \]

    其中 \(W^{UQ}\) 将中间表示 \(\mathbf{c}_t^Q\) 进一步变换为查询向量的一部分 \(\mathbf{q}_t^C\)。最终,MLA 中的查询向量还结合了旋转位置嵌入(RoPE)生成的 \(\mathbf{q}_t^R\),形式为 \(\mathbf{q}_{t,i} = [\mathbf{q}_{t,i}^C; \mathbf{q}_{t,i}^R]\)

这种两步变换看起来比直接使用单个 \(W\) 矩阵复杂,那么它为什么会被采用呢?


两步变换的潜在优势

尽管直接使用单个 \(W\) 矩阵更简单,但 MLA 的两步变换设计可能带来了以下好处:

  1. 更高的灵活性和表达能力

    • 通过引入中间表示 \(\mathbf{c}_t^Q\),模型可以在不同注意力头之间共享这一表示。\(\mathbf{c}_t^Q\) 可以看作是对隐藏状态的一种通用特征提取,然后 \(W^{UQ}\) 为每个头定制化输出。
    • 这类似于多层感知机(MLP)中添加隐藏层的设计,能够增强模型的非线性表达能力,从而捕捉更复杂的模式。
  2. 参数效率(低秩近似)

    • 如果中间表示 \(\mathbf{c}_t^Q\) 的维度 \(d_c\) 小于隐藏状态的维度 \(d\),那么 \(W^{DQ}\) 可以看作是对 \(\mathbf{h}_t\) 的降维操作。
    • 这种降维类似于低秩近似,可以减少后续 \(W^{UQ}\) 的参数数量。总体参数量从 \(d \cdot (d_h \cdot h)\) 变为 \(d \cdot d_c + d_c \cdot d_h \cdot h\)。当 \(d_c < d\) 时,这可能显著降低参数规模。
  3. 计算和内存的优化

    • 计算复杂度:单步变换的复杂度是 \(O(d \cdot d_h \cdot h)\),而两步变换的复杂度是 \(O(d \cdot d_c + d_c \cdot d_h \cdot h)\)。如果 \(d_c\) 较小,两步变换的计算量可能更低。
    • 内存使用:虽然查询向量本身不被缓存,但在某些实现中,中间表示 \(\mathbf{c}_t^Q\) 可能被复用,减少重复计算。此外,MLA 在键和值生成中也使用了类似的参数共享(通过 \(W^{DKV}\) 生成 \(\mathbf{c}_t^{KV}\)),这显著降低了 KV 缓存的内存需求。查询的两步变换可能也遵循类似的优化逻辑。
  4. 与位置编码的更好集成

    • MLA 的查询向量结合了 \(\mathbf{q}_t^C\) 和 RoPE 生成的 \(\mathbf{q}_t^R\)。两步变换可能帮助模型更自然地将位置信息融入查询向量中,从而提升对长序列位置关系的建模能力。

计算和内存的权衡

让我们简单对比一下两种方法的计算和内存需求:

  • 单步变换
    • 计算复杂度:\(O(d \cdot d_h \cdot h)\)
    • 参数数量:\(d \cdot d_h \cdot h\)
  • 两步变换
    • 计算复杂度:\(O(d \cdot d_c + d_c \cdot d_h \cdot h)\)
    • 参数数量:\(d \cdot d_c + d_c \cdot d_h \cdot h\)

如果 \(d_c < d\),两步变换在参数数量和计算复杂度上可能更优,尤其是在处理长序列或需要高效 KV 缓存的场景中。虽然查询本身不被缓存,但这种设计可能与 MLA 整体的优化目标一致。


为什么不直接用单个 \(W\) 矩阵?

回到用户的问题:直接用一个 \(W\) 矩阵确实更简单,但 MLA 的两步变换提供了以下潜在优势:

  • 灵活性:允许模型学习更复杂的特征表示。
  • 效率:通过降维或参数共享减少计算和内存开销。
  • 性能:可能提升模型在长序列或复杂任务上的表现。

在标准变换器中,单步变换已经足够高效且效果良好。但在 MLA 中,设计者可能希望通过两步变换解决特定问题(如内存瓶颈或长序列建模),因此选择了这种看似复杂的方案。这种设计在其他现代变换器变体中也有类似思路,例如低秩注意力(Performer)或分组查询注意力(Grouped Query Attention),它们通过共享投影或降维来优化资源使用。

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

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

相关文章

从“零”到“联”:Profinet转Ethernet/IP网关搞定发那科机器手臂

从“零”到“联”:Profinet转Ethernet/IP网关搞定发那科机器手臂 在电子制造行业,产品更新换代迅速,对生产效率和精度的要求近乎严苛。一家专注于智能手机零部件制造的企业,面临着生产流程优化与设备协同的重大挑战。传统设备多采用EthernetIP协议,而新引入的发那科机器人…

聊聊突然爆火的Manus

昨天号称全球首款通用人工智能的产品Manus横空出世,开始全网刷屏。我看到很多技术社群的讨论话题从DeepSeek变成了Manus,甚至网上已经有人在卖Manus的资料和邀请码,流量属性拉满。 Manus号称支持直接交付完整的任务结果(官网有展示Use case),还宣称在GAIA评分中超越了OpenA…

Linux 交叉编译(toolchain) ARM 版openssl-1.0.0s的libssl.so 库

前言全局说明一、说明 环境: ubuntu 18.04二、下载源码: 官网: https://openssl-library.org 源码下载: https://openssl-library.org/source/old/1.0.0/index.html 下载,指定版本: https://github.com/openssl/openssl/releases/download/OpenSSL_1_0_0s/openssl-1.0.0s.ta…

DMS+ADB-PG支持一键部署QwQ-32B推理模型

3月6日,阿里云发布并开源全新推理模型通义千问QwQ-32B。现已支持在DMS+ADB上私域部署并与Dify打通使用。3月6日,阿里云发布并开源全新的推理模型通义千问QwQ-32B。通过大规模强化学习,千问QwQ-32B在数学、代码及通用能力上实现质的飞跃,整体性能比肩DeepSeek-R1。在保持强劲…

下载安装nvm

1.下载 网址:Release - nvm-windows:一个针对Windows平台的Node.js版本管理工具,是用Go语言编写的。 - GitCode 能不能打开看命,我是一直打不开,还是同事打开了发给我得 2.安装 找到nvm文件,找到setting.txt文件并打开复制下面代码,引用镜像:node_mirror: https://npm…

算法学习笔记:DS-区间类问题

DS:区间类问题 前言 对于区间或区间子区间问题,我们有一些惯用套路简化问题。 很多区间问题都可以转化为平面上矩形问题,用扫描线就可以解决。具体地,我们把区间 \([l,r]\) 抽象为平面内的点 \((l,r)\)。 同时我们可以使用反演的思路,考虑每个值对哪些询问如何造成贡献,而…

vuepress中引入本地资源

二次封装了一个jessibuca的组件 使用vuepress写文档一时不知如何引入jessibuca.js文件 于是搜索且验证以下可行方式 // .vuepress/config,js 文件 添加head配置项 module.exports = {...head: [[script, { src: /jessibuca-pro.js }]]... }jessibuca.js和decoder.js文件放在pub…

VMware ESXi 6.7 U3v (ESXi670-202503001) 下载

VMware ESXi 6.7 U3v (ESXi670-202503001) 下载VMware ESXi 6.7 U3v (ESXi670-202503001) 下载 VMware ESXi 6 Extend Support Release 🆓 🔄 请访问原文链接:https://sysin.cn/blog/vmware-esxi-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org2025-03-0…

Linux系统离线安装docker环境

1 下载docker的安装文件 下载地址:https://download.docker.com/linux/static/stable/x86_64/ 2 解压 tar -zxvf docker-18.06.3-ce.tgz 3 复制 cp ./docker/* /usr/bin 4 创建docker.service文件 cd /etc/systemd/system/ touch docker.service 5 编辑docker.service文件 vi …

告别Qt,拥抱CUTOS - 智能设备应用开发新选择

本文探讨了在智能设备应用开发领域,从传统Qt框架向新兴CUTOS框架的转变。CUTOS在开发效率、稳定性、学习门槛和生态融合等方面表现突出,将成为更具前瞻性的开发框架。一、引言 Qt是一个功能强大且历史悠久的跨平台C++应用开发框架,由芬兰公司Qt Company开发。Qt在汽车、航空…

k3s高可用集群搭建

机器统一操作 # 更新yum源数据 # 复制ContOS-Base.repo到/etc/yum.repos.d/ yum makecache yum update -y# 安装vim yum install -y vim# 关闭swap vim /etc/fstab 注释掉最后一行 # /dev/mapper/centos-swap swap swap defaults 0 0 swapoff -a#…

kylin v10 sp2升级glibc到2.29和2.31

目录环境安装glibc2.29安装glibc2.31 环境 [root@kyline10 ~]# cat /etc/os-release NAME="Kylin Linux Advanced Server" VERSION="V10 (Sword)" ID="kylin" VERSION_ID="V10" PRETTY_NAME="Kylin Linux Advanced Server V10 (…