一、引言

“你有没有过这种崩溃时刻:跑大模型推理,明明参数不算顶格,结果显存‘咔嚓’一下就满了 —— 全是 KV Cache 在疯狂吃内存!

但 DeepSeek 凭啥能在算力有限的设备上‘杀疯了’?答案藏在它的 MLA(Multi-Head Latent Attention,多头潜在注意力)里:传统 MHA(Multi-Head Attention,多头注意力机制) 处理 1 个 Token 要存 8 个 K/V 数值,显存直接被塞满;而 MLA 玩了个‘乾坤大挪移’—— 先把输入压成 2 个数的‘压缩包’存起来,推理时靠矩阵结合律‘暗度陈仓’,不用还原原始数据就能算注意力!

相当于把显存占用直接砍到原来的 1/4,还能保住和 MHA 差不多的效果 —— 这波‘既要显存省、又要性能稳’的操作,直接把大模型的‘铺张浪费’治得服服帖帖!”

二、场景设定

假设我们需要处理 1 个 Token(比如单词 "Deep")。

三、传统方式:MHA (多头注意力) —— “铺张浪费”

在标准 MHA 中,每个头都有独立的投影矩阵,生成独立的 K 和 V,并且全部都要存下来

四、DeepSeek 方式:MLA (多头潜在注意力) —— “压缩存储”

MLA 认为:这些 K 和 V 之间其实有大量冗余信息。我们不需要存最终结果,只需要存一个**“压缩包”**(Latent Vector)。

五、关键问题:存这么少,计算时怎么还原?(矩阵吸收技巧)

你可能会问:“存是存少了,但计算注意力时,我不还是得把这 2 个数还原成那 8 个数才能算吗?那样显存不就又爆了吗?”

MLA 的精髓在于**“不需要显式还原”**。

六、补充

Q:在训练过程中如何初始化下降矩阵W_{down}与解压矩阵W_{up} ?

A:
 

这里需要区分 MLA (作为基础架构)LoRA (作为微调插件),虽然它们数学形式都是 $A \times B$,但初始化逻辑完全不同。

情况 A:DeepSeek MLA (从头预训练 Pre-training)

MLA 是 DeepSeek V2/V3 模型原本骨架的一部分,不是后来加进去的补丁。

  • 初始化策略: 标准初始化 (Standard Initialization)

    • 通常使用 Xavier (Glorot) 初始化Kaiming (He) 初始化

    • 也就是两个矩阵都初始化为均值为 0、方差较小的高斯分布 (Gaussian Distribution) 随机数。

  • 原因:

    • 模型是从一张白纸开始学的。我们需要让信号在网络中流动起来。

    • 如果把其中一个初始化为 0,那么输出就全为 0,梯度就断了 (Dead Neuron),模型一开始就学不到东西。

情况 B:LoRA (微调 Fine-tuning)

虽然 MLA 是架构,但面试常问的“低秩矩阵初始化”通常会关联到 LoRA。LoRA 的初始化非常有讲究。

  • 初始化策略:

    • W_{down} (矩阵 A): 高斯随机初始化 (Gaussian Initialization)。

    • W_{up} (矩阵 B): 全零初始化 (Zero Initialization)。

原因 (意义):

  • 在微调开始时(Step 0),我们希望模型的行为和原始模型完全一致

  • 通过让 $\Delta W = 0$,旁路对主路没有任何干扰。

  • 随着训练开始,梯度流向 W_{down}W_{up}W_{up}慢慢不再是 0,模型才开始逐渐学到新任务的知识。

关于更新: 二者都是一直更新的。它们是模型中的可学习参数 (Learnable Parameters),在每一轮训练(Step)中都会随着梯度下降进行调整。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐