【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)

【DeepSeek背后的技术】系列博文:
第1篇:混合专家模型(MoE)
第2篇:大模型知识蒸馏(Knowledge Distillation)
第3篇:强化学习(Reinforcement Learning, RL)
第4篇:本地部署DeepSeek,断网也能畅聊!
第5篇:DeepSeek-R1微调指南
第6篇:思维链(CoT)
第7篇:冷启动
第8篇:位置编码介绍(绝对位置编码、RoPE、ALiBi、YaRN)
第9篇:MLA(Multi-Head Latent Attention,多头潜在注意力)

目录

  • 1 背景
  • 2 方法
  • 3 集中常见的Attention对比
  • 4 示例代码
  • 5 关键优势
  • 6 应用场景
  • 7 对比与变体

1 背景

多头潜在注意力(Multi-Head Latent Attention,MLA)是一种改进的注意力机制,旨在提高Transformer模型在处理长序列时的效率和性能。

在传统的Transformer架构中,多头注意力(MHA)机制允许模型同时关注输入的不同部分,每个注意力头都独立地学习输入序列中的不同特征。然而,随着序列长度的增长,键值(Key-Value,KV)缓存的大小也会线性增加,这给模型带来了显著的内存负担。为解决MHA在高计算成本和KV缓存方面的局限性,DeepSeek引入了多头潜在注意力(MLA)。

多头潜在注意力(MLA)采用低秩联合压缩键值技术,优化了键值(KV)矩阵,显著减少了内存消耗并提高了推理效率。

  • 低秩联合压缩键值:MLA通过低秩联合压缩键值(Key-Value),将它们压缩为一个潜在向量(latent vector),从而大幅减少所需的缓存容量。这种方法不仅减少了缓存的数据量,还降低了计算复杂度。

  • 优化键值缓存:在推理阶段,MHA需要缓存独立的键(Key)和值(Value)矩阵,这会增加内存和计算开销。而MLA通过低秩矩阵分解技术,显著减小了存储的KV(Key-Value)的维度,从而降低了内存占用。

MLA通过“潜在向量”来表达信息,避免了传统注意力机制中的高维数据存储问题。利用低秩压缩技术,将多个查询向量对应到一组键值向量,实现KV缓存的有效压缩,使得DeepSeek的KV缓存减少了93.3%。

2 方法

MLA 主要步骤如下:

  1. 输入映射到潜在空间

给定输入X(其中 n 是序列长度,d 是特征维度),通过映射函数 f 将其投影到潜在空间:

z

f(⋅) 可为全连接层、卷积层等映射模块,潜在维度 k 是显著降低计算复杂度的关键。

  1. 潜在空间中的多头注意力计算

在潜在空间 Z 上进行多头注意力计算。对于第 i 个注意力头,其计算公式为:

公式1

将所有注意力头的输出拼接后再通过线性变换:

公式2

  1. 映射回原始空间

将多头注意力结果从潜在空间映射回原始空间:

公式3
g(⋅) 为非线性变换,如全连接层。

整体框架如下图所示:

框架

进一步优化:

MQA

3 集中常见的Attention对比

Attention对比

4 示例代码

import torch
import torch.nn as nnclass MultiHeadLatentAttention(nn.Module):def __init__(self, input_dim, latent_dim, num_heads):super(MultiHeadLatentAttention, self).__init__()self.latent_proj = nn.Linear(input_dim, latent_dim)  # 映射到潜在空间self.attention = nn.MultiheadAttention(embed_dim=latent_dim, num_heads=num_heads)self.output_proj = nn.Linear(latent_dim, input_dim)  # 映射回原始空间def forward(self, x):# 输入映射到潜在空间latent = self.latent_proj(x)# 在潜在空间中计算多头注意力attn_output, _ = self.attention(latent, latent, latent)# 映射回原始空间output = self.output_proj(attn_output)return output# 示例输入
batch_size, seq_len, input_dim = 32, 128, 512
x = torch.rand(batch_size, seq_len, input_dim)
mla = MultiHeadLatentAttention(input_dim=512, latent_dim=128, num_heads=8)
output = mla(x)

5 关键优势

  • 计算效率:潜在键值数量远少于原始序列,复杂度从 (O(n^2)) 降至 (O(nm))((m \ll n) 为潜在变量数)。
  • 长序列处理:适合处理长文本、高分辨率图像或视频数据。
  • 全局信息捕捉:潜在键值可学习到数据的全局结构,提升模型泛化能力。

6 应用场景

  • 自然语言处理:长文档翻译、文本摘要。
  • 计算机视觉:图像生成(如ViT变体)、视频理解。
  • 语音处理:长音频序列建模。

7 对比与变体

  • 与传统多头注意力:MLA通过潜在空间压缩减少计算量,而非直接处理所有输入元素。
  • 与Linformer/Performer:类似低秩近似目标,但实现方式不同(如潜在变量生成 vs 核方法或投影矩阵)。
  • 变体扩展:可结合稀疏注意力、层次化结构进一步优化。

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

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

相关文章

UE_C++ —— Gameplay Classes

目录 一,Adding Classes 二,Class Headers Class Declaration Class Specifiers Metadata Specifiers 三,Class Implementation Class Constructor 引擎中每个游戏类都由一个类头文件(.h)和一个类源文件&#x…

使用AI创建流程图和图表的 3 种简单方法

你可能已经尝试过使用 LLMs 生成图像,但你有没有想过用它们来创建 流程图和图表?这些可视化工具对于展示流程、工作流和系统架构至关重要。 通常,在在线工具上手动绘制图表可能会耗费大量时间。但你知道吗?你可以使用 LLMs 通过简…

二叉树(中等题)

1、先序,中序遍历确定二叉树 105 方法一、 前提 ① 必须不能有重复元素② 只有先序+中序和后序+中序才能实现唯一树 思考要点: 不要想着用for循环,递归一定更好解决输入是vector,递归就得考虑传入索…

蓝思科技赋能灵伴科技:AI眼镜产能与供应链双升级

2月22日,蓝思科技宣布与AI交互领军企业杭州灵伴科技(Rokid)达成深度战略合作,通过整机组装与全产业链整合,为2025年全球AI眼镜出货量爆发式增长(预计达400万-1200万台)提供核心支撑。 双方合作通…

【C/C++】分隔链表 (leetcode T86)

核心考点预览:链表 (双指针) 技巧:虚拟头结点 题目描述: 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应…

Lineageos 22.1(Android 15)Launcer简单调整初始化配置

一、前言 Launcer的初始化配置主要在如下的xml文件夹下,默认读取的5x5 这里我们把device_profiles调整一下,然后新建一个default_workspace_my.xml作为我们自己的配置就行。 二、配置 注意Lineageos 的Launcer是在lineageos/packages/apps/Trebuchet…

量子计算的基本运算:Hadamard 门、CNOT 门、Pauli 门详解

量子计算是现代计算科学的前沿领域,它与经典计算机在处理信息的方式上有着本质的区别。量子计算机利用量子比特(qubit)的叠加态和量子纠缠等特性来进行计算,从而在某些特定任务上超越传统计算机。量子计算的核心运算单元是量子门,它们通过作用于量子比特来操控量子状态。本…

Java 大视界 -- 国际竞争与合作:Java 大数据在全球市场的机遇与挑战(94)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

游戏引擎学习第113天

仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板:优化的基本过程 在游戏编程中,优化是一个非常重要的学习内容,尤其是想要成为专业开发者时。优化的核心是理解代码的执行速度,以及如何提升其性能。在这个阶段,已经…

教师教学技能大赛流程方案及细则

为了适应高等教育的改革和我校的生存发展,进一步提升教师教学技能和教育教学能力,促进教师专业发展,提高教师综合素质,加强我校教师队伍建设,提高教育教学质量,举办青年教师教学技能大赛,特制订…

QML MouseArea 鼠标事件详解

鼠标区域是一个不可见的项目,通常与可见项目一起使用,以便为该项目提供鼠标处理。通过有效地充当代理,鼠标处理逻辑可以包含在MouseArea项中。 有关MouseArea和按钮单击的信息是通过为其定义事件处理程序属性的信号提供的。最常用的是处理鼠…

系统思考—结构影响行为

“付费是对价值的认可,它是承诺的体现,是我们共同走向未来的信任。” — 吉姆柯林斯 在组织中,结构的影响几乎无处不在。它不仅定义了我们的流程、职能和角色,更在不知不觉中塑造了我们日常的行为和决策方式。每一次决策、每一个…

嵌入式标志位解决程序卡顿问题

在写程序实现多个功能时发现会因为延时时间长导致其他功能程序无法运行问题 例如在写闹钟程序时,如果闹钟响灯亮5秒,这五秒期间会导致led显示的时间停止更细,等五秒过后直接显示5秒后正确的时间。这个因为程序是顺序运行的,延时时…

BFS算法解决最短路径问题(典型算法思想)—— OJ例题算法解析思路

目录 一、1926. 迷宫中离入口最近的出口 - 力扣(LeetCode) 算法代码: 代码分析 各个部分的解释 注意事项 整体的含义 具体情况 使用 e[0] 和 e[1] 的优势 总结 示例代码中的用法 整体流程 示例 复杂度分析 总结 二、433. 最小基…

《Europe From Above》鸟瞰欧洲(意境欧洲)@ 第三季

目录 第1集 爱尔兰克罗克公园灰海豹保护团队防风石墙无线电望远镜水产凤凰公园农业惊艳瞬间 第2集 挪威第3集 克罗地亚第4集 葡萄牙第5集 冰岛第6集 瑞士制作与播出信息 第1集 爱尔兰 本集聚焦爱尔兰的自然与人文交融: 克罗克公园 首都都柏林的克罗克公园&#x…

cs106x-lecture14(Autumn 2017)-SPL实现

打卡cs106x(Autumn 2017)-lecture14 (以下皆使用SPL实现,非STL库,后续课程结束会使用STL实现) 1、min Write a function named min that accepts a pointer to a ListNode representing the front of a linked list. Your function should return the …

【HeadFirst系列之HeadFirstJava】第4天之理解对象的行为:方法操作实例变量

理解对象的行为:方法操作实例变量 在《Head First Java》的第四章节中,作者深入探讨了对象的行为,即方法如何操作实例变量。这一章节的核心思想是:对象的行为由其方法定义,而方法通过操作实例变量来实现这些行为。理解…

自注意力机制和CNN的区别

CNN:一种只能在固定感受野范围内进行关注的自注意力机制。​CNN是自注意力的简化版本。自注意力:具有可学习感受野的CNN。自注意力是CNN的复杂形态,是更灵活的CNN,经过某些设计就可以变为CNN。 越灵活、越大的模型,需要…

网络运维学习笔记 012网工初级(HCIA-Datacom与CCNA-EI)某机构新增:GRE隧道与EBGP实施

文章目录 GRE隧道(通用路由封装,Generic Routing Encapsulation)协议号47实验:思科:开始实施: 华为:开始实施: eBGP实施思科:华为: GRE隧道(通用路…

Mac m1 连接公司内网

1、创建VPN 1、在系统偏好设置 2、选择网络 3、进行添加 2、添加设置 1、选择VPN 2、类型选择L2TP/IPSec 3、填写服务器IP和账号 4、点击认证设置-填写密码 。然后应用 3、进行特殊配置 网上说苹果系统的问题。 1、创建命令 sudo vim /etc/ppp/options 2、添加内容-主要别…