【LLM】講清楚MLA原理

需要你對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年前&…