需要你对MHA、MQA、GQA有足够了解,相信本文能帮助你对MLA有新的认识。

本文内容都来自https://www.youtube.com/watch?v=0VLAoVGf_74,如果阅读本文出现问题,建议直接去看一遍。

        按照Deepseek设定一些参数值:输入token长度n=10,注意力头数目n_h=128,每个注意力头的隐含层维度d_h=128,transformer block层数 l =61,使用fp16存储参数。

        先来看MHA的kv-cache计算:

cachesize = 2*n*n_h*d_h*l*2 = 2*10*128*128*61*2 = 40MB

(第一个2是因为要保存K和V,第二个2是因为fp16占2bit)

        MQA和GQA的思路是通过不同注意力头之间共享参数,减少注意力头数目n_h来达到降低开销的目的。

        这样的问题是参数的共享会导致模型效果下降,毕竟原本有128个头,128份KV参数,每份KV参数都会计算出不一样的注意力分布,让模型能更好的根据所有的注意力分布去预测下一个词,而现在128份参数变成了1份,预测效果下降是必然的。

        如何解决这个问题?如何只保留1份参数,但又能计算出128个不同的注意力分布呢?

        MLA给出的答案是,只保留原本128分参数中共有的部分,而每份参数独有的部分则提取出来,不进行保存。

        这里就碰到了MLA第一个比较难理解的点,就是怎么找出128个W_K的共有部分和独有部分?(只以K为例,V也是一样的) 

        答案是不用去找,而是从一开始就用两个矩阵,分别去学习共有部分和独有部分。也就是下图中的W_DKV和W_UK,其中W_DKV学习共有部分,W_UK学习独有部分。也就是说128个注意力头,会共用W_DKV,但是每个注意力头的W_UK是独有的,这样保证了128个注意力头能计算出128个不同的注意力分布。

这里就会碰到MLA第二个比较难理解的点,为什么最后kv-cache只用保存L_KV,而不用保存K和V?

答案是根本就不存在K和V,MLA很巧妙的利用矩阵乘法,把W_UK与W_Q融合,把W_UV和W_O融合。至于为什么能这样做,可以从公式中找出答案。

说不存在W_UK和W_UV其实并不严谨,但是这样可以更方便去理解,其实这里所谓的把W_UK与W_Q融合是指输入先经过W_Q,紧跟着就经过W_UK,从结果上来看,跟先把W_UK与W_Q相乘得到W_QUK,然后输入经过W_QUK的效果是一样的。

        原本,加入W_DKV后,注意力的计算公式为:

 A = QK^T = (XW_Q)(XW_{DKV}W_{UK})^T

        按照矩阵运算,上述公式可以写成下述形式:

A = (XW_Q)(W_{UK}^TW_{DKV}^TX^T) = (XW_QW_{UK}^T)(W_{DKV}^TX^T) = (XW_QW_{UK}^T)(XW_{DKV})^T = (XW_{QUK})L_{KV}^T

        我们完全可以将W_QW_{UK}^T视作一个矩阵W_{QUK},它和W_Q并没有什么本质区别,只是维度需要调整(当然实际实现上还是两个矩阵,分开来学习)。从上式中,我们发现注意力计算公式中的K消失了

        然后是最终输出O的计算:

O = AVW_O = A(XW_{DKV}W_V)W_O = A(XW_{DKV})(W_VW_O) = AL_{KV}W_{VO}

        同理,这样就能把W_V融进W_O中,我们能够发现,最终输出的计算公式中,V也消失了

        最后的效果如下图,我们需要保存的只有L_KV,它是128个注意力头共用的,所以只需要保存一份,存储开销计算如下,整个计算公式中完全不需要考虑注意力头数目:

cachesize = n*d_h'*l*2 = 10*576*61*2 = 0.7MB

        开销降低40/0.7,约57倍,也就是deepseek技术报告中公布的压缩倍数。 

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

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

相关文章

谷歌采用 Ligero 构建其 ZK 技术栈

1. 引言 前序博客有: Ligero 和 Ligetron 中的 MPC 和 ZKLigetron:Nim Network开发的针对AI的zkVMLigetron:基于MPC-In-The-Head范式的zkVM简介 在隐私保护身份验证领域迈出重要一步,谷歌最近宣布 将零知识证明(ZKP…

Flutter渲染引擎:Impeller和Skia

一、Impeller 渲染引擎的发布时间Impeller 是 Flutter 团队为解决 Skia 引擎在移动端(尤其是 iOS 平台)的性能问题而开发的全新渲染引擎,其发展历程如下:首次公开:2021 年 Google I/O 大会上首次提及,作为 …

网络编程-加密算法

目录 一.网络编程基础 1. 概述 2. IP地址 3. 域名 4. 网络模型 5. 常用协议 6. 小结 二.TCP编程 1. 什么是Socket? 2. 服务器端 3. 客户端 4. Socket流 5. 小结 三.UDP编程 1. 概述 2. 服务器端 3. 客户端 4. 小结 案例: 四.加密算法 …

【网络工程师软考版】网络安全

任何形式的网络服务都会导致安全方面的风险,问题是如何将风险降到最低程度,目前的网络安全措施有数据加密、数字签名、身份认证、防火墙、特征过滤等。所涉内容:1、网络安全基础2、加密技术与哈希算法3、数字签名4、数字证书5、VPN技术6、防火…

深入浅出设计模式——创建型模式之建造者模式 Builder

文章目录建造者模式简介建造者模式结构建造者模式代码实例定义产品类House定义建造者定义抽象建造者AbstractBuilder定义具体建造者定义指挥者客户端代码示例运行结果建造者模式总结代码仓库建一栋房子总共分几步?建造者模式告诉你答案!“把大象装冰箱&a…

OpenVLA: 论文阅读 -- 开源视觉-语言-行动模型

更多内容:XiaoJ的知识星球 目录OpenVLA:开源视觉-语言-行动模型1. 介绍2. 相关工作1)视觉条件语言模型(Visually-Conditioned Language Models)2)通用型机器人策略(Generalist Robot Policies&a…

JavaWeb(苍穹外卖)--学习笔记15(分页查询PageHelper)

前言 终于开始学习做项目了,本篇文章是学习B站黑马程序员苍穹外卖的学习笔记📑。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,这篇文章来看看分页查询&#…

金融专题|某跨境支付机构:以榫卯企业云平台 VPC 功能保障业务主体安全

作者:SmartX 金融团队 金融机构在信息化建设时面临诸多数据合规要求,例如:不同业务区域之间互相隔离、数据库仅能由关联的应用服务器访问、仅有特定的服务器允许被外网访问等。对此,某跨境支付机构以 SmartX 榫卯企业云平台构建私…

Win10下python环境变量呼出微软应用商店

以下是三种彻底解决 Windows 10 的 CMD 中运行 python 命令弹出应用商店问题的方法​​方法一:调整环境变量优先级​-或者直接删除微软应用商店的环境变量%USERPROFILE%\AppData\Local\Microsoft\WindowsApp​​​操作步骤​​打开系统环境变量设置(右键…

字节跳动“扣子”(Coze)开源:AI智能体生态的技术革命

(以下借助 DeepSeek-R1 辅助整理) 在2025年7月26日的深夜,GitHub上悄然出现的两个仓库——Coze Studio和Coze Loop,在48小时内狂揽超过9,000颗Star。字节跳动以Apache 2.0许可证将自家AI智能体平台的核心技术彻底开源。 “当所有人…

Camx-usecase ID和pipeline的匹配源码解读

组件关系整体流程:camxhal3.cpp:704 open()camxhal3.cpp:1423 configure_streams()chxextensionmodule.cpp:2810 InitializeOverrideSessionchxusecaseutils.cpp:850 GetMatchingUsecase()chxadvancedcamerausecase.cpp:4729 Initialize()chxadvancedcamerausecase.…

日志管理进入「对话式」时代:日志易MCP Server落地实录

01 背景:MCP协议介绍在AI蓬勃发展的当下,大型语言模型(LLM)虽展现出强大潜力,却受困于与外部资源连接的难题。数据分散、接口繁杂,致使AI模型难以灵活对接本地资源与远程服务,极大限制了其响应质…

django-3模型操作

from django.db import modelsclass Book(models.Model):title models.CharField(max_length200) # 书名author models.CharField(max_length100) # 作者publish_date models.DateField() # 出版日期price models.DecimalField(max_digits10, decimal_places2) # 价格s…

【绘制图像轮廓】——图像预处理(OpenCV)

目录 1 什么是轮廓 2 寻找轮廓 2.1 mode参数 2.2 method参数 3 绘制轮廓 1 什么是轮廓 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。轮廓是连续的,边缘不一定连续。轮廓是一个闭合的、封闭的形状。 轮廓的作用: 形状分析 目…

嵌入式 Linux 深度解析:架构、原理与工程实践(增强版)

嵌入式 Linux 深度解析:架构、原理与工程实践(增强版) 目录嵌入式 Linux 深度解析:架构、原理与工程实践(增强版)第一章 嵌入式 Linux 基础概念1.1 定义与核心特征1.2 典型架构栈深度解析第二章 Linux 文件…

xcode swift项目运行、连接真机运行报错,引入文件夹失败

最近乱七八糟解决了很多报错,看着记录点吧 xcode版本:16 failed to emit precompiled header ‘/Users/yuqing/Library/Developer/Xcode/DerivedData/cloudspace-ios-ejldldcfhouqnretchuzoewmsqkg/Build/Intermediates.noindex/PrecompiledHeaders/spic…

[python][selenium] Web UI自动化8种页面元素定位方式

测试工程师必备!Selenium自动化测试全攻略 | 手写POM框架数据驱动,轻松搞定UI自动化!简单的加个前置知识: 第一:webdriver.Chrome()这句话,通过WebDriver的构造方法,拿到浏览器驱动的对象&…

丝杆支撑座在电子装配中的关键作用

丝杆支撑座是电子装配过程中不可或缺的组件,主要用于支撑和固定丝杆,确保其稳定性和精度。在高速、高精度装配场景中,丝杆支撑座的作用尤为突出。稳定性与精度保障:丝杆支撑座采用高品质钢材制作,具有高刚性和高强度&a…

微信小程序页面间通信的实现方式

微信小程序中页面间的通信是指不同页面之间的数据传递、状态同步或交互操作,常见于多页面协作场景。根据通信方向和场景不同,主要有以下几种实现方式:一、基于页面跳转的参数传递1. 正向传递(A页面到B页面)通过URL参数…

uniapp开发微信小程序(新旧版本对比:授权手机号登录、授权头像和昵称)

目录标题授权手机号新旧版本核心差异对比强制使用新版的情况代码实现方案特殊处理逻辑企业账号要求最佳实践建议授权头像和昵称新旧版本核心差异对比强制使用新版的情况代码实现方案最佳实践建议注意事项授权手机号 新旧版本核心差异对比 触发方式 旧版(2023年前&…