仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
作者:捏太阳
链接:https ://zhuanlan. zhihu.com/p/28233502273
作者其它相关文章推荐:
强化学习重要知识点梳理
基于人类反馈的强化学习(RLHF)深度解析
近端策略优化(PPO)算法深度解析
矩阵的秩是一个描述矩阵「线性独立性」的概念。简单来说,矩阵的秩就是其线性独立的行或列的最大数量。从一个简单的情况开始思考:一个2×2的矩阵,想象这个矩阵代表了一个平面上的线性变换:
这个矩阵的第二行是第一行的2倍。这意味着这个矩阵包含的独立信息实际上只有一行。这就引出了秩的第一个关键概念:秩表示矩阵中独立信息的数量。
让我们通过几个具体的例子来理解秩:
满秩矩阵:
秩为1的矩阵:
零秩矩阵:
矩阵的秩有几个重要性质:
秩总是小于或等于矩阵的行数和列数中的较小值
行秩等于列秩(这就是为什么我们可以简单地说\“矩阵的秩\“)
秩反映了矩阵方程组解的性质
让我们用一个实际的问题来理解秩的意义。
这个系数矩阵的秩是1,这告诉我们:
这两个方程实际上是同一个方程(第二个是第一个的2倍)
系统是欠定的(有无穷多个解)
理解秩的一个好方法是把它想象成矩阵中\“真正独立的维度\“的数量。比如:
秩为2的2×2矩阵可以把向量映射到整个平面
秩为1的2×2矩阵只能把向量映射到一条直线
秩为0的矩阵把所有向量都映射到原点
在线性代数中,有几种主要的矩阵分解方法,这里介绍一下最常见的几种:
LU分解(LUDecomposition)
将矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积
A=LU
2. QR分解(QRDecomposition)
将矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积
A=QR
Q的列向量是单位正交的(相互垂直且长度为1)
3. 特征值分解(Eigendecomposition)
只适用于方阵
其中D是对角矩阵(包含特征值),P的列是对应的特征向量
4. 奇异值分解(SVD,SingularValueDecomposition)
最通用的分解方法,可以应用于任何矩阵
和是正交矩阵,是对角矩阵(包含奇异值)
SVD分解是最接近MLA中低秩压缩思想的分解方法,因为:
SVD可以通过截取最大的k个奇异值来得到原矩阵的最佳k秩近似
这种近似保留了原矩阵最重要的信息
可以用于降维和压缩
以一个具体的Python代码示例说明SVD分解:
在实际应用中,比如MLA:
不是真的对一个大矩阵进行SVD分解
而是直接设计两个小矩阵的维度,让它们通过训练自动学习到一个好的低秩表示
这种方式计算效率更高,且更适合深度学习的训练过程
1. 3.1基本原理SVD将一个矩阵分解为三个矩阵的乘积,给定一个的矩阵,要求将其分解为:,其中:
:左奇异向量矩阵,是的列正交矩阵
:奇异值对角矩阵,是的对角矩阵(对角线上是奇异值)
:右奇异向量矩阵的转置,是的列正交矩阵的转置
几何意义:SVD描述了矩阵作为线性变换时
首先通过进行旋转/反射
然后通过进行缩放
最后通过进行旋转/反射
1. 3.2奇异值的含义和作用
奇异值反映了矩阵在对应方向上的\“拉伸程度\“:
最大奇异值表示矩阵能产生的最大拉伸
奇异值按从大到小排序
奇异值的大小反映了对应变换方向的重要性
1. 3.3求解步骤
计算(得到一个矩阵)
2. 求的特征值和特征向量
特征值就是奇异值的平方
特征向量构成矩阵
3. 计算奇异值:对特征值开平方根
4. 计算矩阵:
具体计算过程
通过一个具体的例子来理解奇异值分解(SVD)的数学求解过程:
已知矩阵A=[32][23]
计算:
2. 求的特征值:
构建特征方程:
或
3. 根据特征值求特征向量:
对:
解得₁
对:
解得₂
4. 使用特征向量构造矩阵:
5. 计算奇异值-对特征值开平方根:
6. 计算
首先,我们已经有:
现在计算:
因此,
U=[1/√21/√2][1/√21/√2]
验证:
U是正交矩阵()
可以通过重构原矩阵
让我们验证一下重构:
这样我们就完整地求出了矩阵的奇异值分解:,其中:
1. 3.4SVD的低秩近似
这是SVD最重要的应用之一,也是理解MLA的关键:
假设原始矩阵的奇异值为:σ₁=5,σ₂=1
完整重构:
低秩近似(只保留最大的奇异值):
为什么这样做有效?
较大的奇异值对应矩阵的主要特征
较小的奇异值可能只对应噪声
舍弃小奇异值可以实现数据压缩
这就是为什么MLA中选择低秩压缩是有效的:
不是简单地截断维度
而是保留最重要的特征方向
在压缩和信息保留之间取得平衡
从原始MHA开始,逐步理解为什么需要MLA,以及MLA是如何解决MHA的问题的。先从最基础的MHA(Multi-HeadAttention,多头注意力)开始:
在MHA中,每个token都需要三种向量:查询向量(Query)、键向量(Key)和值向量(Value)。我们可以把这个过程想象成一个图书馆的检索系统:查询向量就像是读者的需求,键向量就像是书籍的索引卡,而值向量则是书籍的实际内容。
在Transformer架构中,多头注意力机制是一个核心组件。为了彻底理解这个组件,我们从基本定义开始,然后逐步深入每个计算步骤。首先,定义输入和关键参数:
输入序列的隐藏状态:,其中是模型的隐藏维度(例如768)
注意力头的数量:(例如12)
每个头的维度:(例如64),通常有
对于每个输入token的隐藏状态:[维度:d],MHA首先通过三个不同的投影矩阵生成查询、键、值向量:
维度:
维度:
维度:
这就像是对一个token从不同角度进行观察。每个投影矩阵就像是一个特定的视角,帮助我们从不同方面理解这个token。
将投影后的向量分割成个头:
从到
从到
从到
如果我们有个头,每个头都会得到原始向量的一部分。这就像是让多个专家从不同角度来分析同一个问题,每个专家关注不同的特征。
对于每个头,计算注意力输出:
这里的计算过程可以细分为:
计算查询和键的点积:,[维度:1](标量)
缩放点积:除以,[维度:1]
应用Softmax函数获得注意力权重,[维度:](是序列长度)
将注意力权重与值向量相乘并求和,[维度:]
这个计算过程就像是在图书馆中,对每本书(键值对)进行相关性评分(通过查询),然后根据这些评分来整合信息。
将所有头的输出拼接起来,然后通过输出投影矩阵转换到最终的输出空间:
其中:
[维度:]是拼接所有头的输出,
是输出投影矩阵[维度:],
是最终输出[维度:],
在实际实现中,这个过程通常可以通过矩阵运算并行化:
注意在生成过程中,我们需要存储所有历史token的键值对:
每个token的键缓存:[]
每个token的值缓存:[]
因此对于长度为的序列,KV缓存的大小是:
用具体数字举例,如果:
=768(隐藏维度)
=12(头数)
=64(每头维度)
=1024(序列长度)
则KV缓存大小为:
个数值需要存储,
这就是为什么MHA在长序列生成时会面临内存瓶颈的原因。这个完整的计算过程展示了MHA的复杂性和计算开销。正是这些开销促使了后来MQA、GQA和MLA等优化方案的提出。
关于序列长度:这里这个序列长度是不是指模型能生成的最大序列的长度?
这是一个很好的问题,因为它涉及到模型的一个重要特性。序列长度(SequenceLength)在Transformer模型中实际上有几个相关但不同的概念:
模型的最大位置编码长度(MaximumPositionEmbeddings)
这是模型在预训练时设定的一个固定值
决定了模型能理解的最大上下文窗口大小
比如模型的位置编码最大是2048,那么它就不能直接处理超过2048个token的输入
2. 训练时的序列长度
这通常小于最大位置编码长度
是实际训练时使用的序列长度
受限于GPU内存和训练效率的考虑
3. 推理时的序列长度
这是实际生成或处理文本时的长度
受限于两个因素:
模型的最大位置编码长度(硬限制)
可用的GPU内存(实践限制)
在上面提到的=1024这个例子中:
这个数字(1024)是一个示例值,表示在某个特定时刻,模型需要存储的历史信息长度。在实际应用中:
模型可能支持更长的序列(如2048、4096或更多)
但实际能处理的长度往往受限于硬件资源
这也是为什么优化KV缓存如此重要
用一个类比来解释:想象你在看一本很长的书。模型的最大位置编码长度就像是你的阅读理解能力的上限——你最多能同时理解多少内容。而实际处理时的序列长度,就像是你当前正在关注的页数范围。即使你能理解整本书(最大位置编码),但在某一时刻,你可能只关注其中的一部分(实际序列长度),这部分内容需要存在你的短期记忆(KV缓存)中。这就是为什么研究人员在努力优化注意力机制(如MLA):
减少KV缓存的大小
允许模型处理更长的序列
在有限的硬件资源下提供更好的性能
通过理解\“投影矩阵\“这个概念,从直观的几何意义开始,然后过渡到在注意力机制中的应用。首先,从最基础的向量投影说起。想象一个简单的例子:假设你站在一个房间里,手里拿着一支激光笔。当你用激光笔指向墙壁时,激光点实际上是三维空间中的光线被\“投影\“到二维的墙面上。这就是最直观的投影概念——将高维空间中的点映射到低维空间。在线性代数中,投影矩阵的作用是:
将向量从一个空间转换到另一个空间
在这个过程中可能改变向量的维度
保留我们关心的某些特定特征
现在让我们看看在注意力机制中的投影矩阵:
为什么需要这三个不同的投影?还是一个图书馆的例子来解释:想象你走进一个图书馆,想找一本关于\“机器学习\“的书。这个过程涉及三个不同的视角:
查询(Query)投影:将你的需求\“机器学习\“转化成图书馆检索系统能理解的格式
就像把自然语言转换成检索关键词
W_Q的作用是学习如何最好地表达\“我想要什么\“
2. 键(Key)投影:将每本书的特征转化成可以被检索的形式
就像图书的分类编号和关键词标签
W_K的作用是学习如何最好地表达\“我有什么\“
3. 值(Value)投影:将书本的实际内容转化成可以被利用的形式
就像书本的摘要或核心内容
W_V的作用是学习如何最好地表达\“我能提供什么\“
这些投影矩阵是随机初始化的,但在训练过程中会不断优化,以学习:
Q投影:如何最好地表达查询意图
K投影:如何最好地表达内容特征
V投影:如何最好地表达实际信息
通过这三个不同的投影空间,注意力机制可以:
更准确地计算相关性(Q和K的点积:我想要什么和我有什么的匹配程度)
更有效地提取信息(通过V获取内容)
让模型从不同角度理解和处理信息
这就像是在图书馆中,同一本书在不同的维度上都有其表示:
与不同查询需求的相关程度(Q空间)
在检索系统中如何被找到(K空间)
能提供什么样的信息(V空间)
MHA的问题
MHA在实际应用中面临着一个严重的问题:在生成文本时,我们需要存储所有历史token的键向量和值向量。这就像是图书馆需要为每本书都保存完整的索引卡和内容副本,随着书籍数量增加,存储空间会急剧膨胀。
为了解决这个问题,研究人员提出了几种方案:
MQA(Multi-QueryAttention)-多查询注意力:所有头共享相同的键值对
GQA(Grouped-QueryAttention)-分组查询注意力:几个头共享一组键值对
但这些方法都有一个共同的缺点:它们通过减少信息来节省空间,这会导致性能下降。就像是让多个图书管理员共用同一套索引系统,虽然节省了空间,但可能会影响检索的准确性。这就是MLA出现的背景。
MLA的创新
MLA提出了一个创新的思路:与其直接存储或共享键值对,不如先将它们压缩成一个更小的潜在向量,需要时再恢复出来。MLA的核心创新在于:
低秩键值联合压缩:将键和值的信息共同压缩到一个更小的潜在空间
解耦的位置编码:将内容信息和位置信息分开处理
矩阵乘法优化:通过重排计算顺序来提高效率
这就像是图书馆发明了一种新的压缩技术,可以把索引和内容压缩存储,需要时再快速恢复,同时还保持了信息的完整性。对比来看:
存储效率:
MHA:需要存储完整的键值对
MLA:只需要存储压缩后的潜在向量
2. 计算方式:
MHA:直接在完整维度空间进行注意力计算
MLA:在压缩空间中进行部分计算,并通过解耦的位置编码保持性能
3. 性能表现:
MHA:完整信息,但存储开销大
MLA:通过巧妙的设计,在更少的存储空间下实现了更好的性能
这种演进过程展示了如何通过深入理解问题本质,找到既保持性能又提高效率的解决方案。
为了展示MLA的完整计算过程,论文附录提供了完整公式,这里对这些公式进行深入分析,先定义MLA中使用的关键维度参数:
:模型的隐藏维度(hiddendimension)
:注意力头的数量(numberofattentionheads)
:每个头的维度(dimensionperhead)
:键值压缩维度(KVcompressiondimension)
:查询压缩维度(querycompressiondimension)
:解耦位置编码的每头维度(per-headdimensionfordecoupledpositionencoding)
首先,输入向量经过下投影矩阵压缩成潜在查询向量
然后分成两条路径:
内容路径:通过上投影得到内容查询
位置路径:通过和RoPE得到位置查询
最后将两部分拼接在一起,形成完整的查询向量
注意,对查询进行低秩压缩,是为了减少训练过程中的激活内存,但是这不能减少KV缓存
1-查询压缩:
这个表达式看起来简单,但包含了几个重要的概念:
是输入向量,代表第t个位置的隐藏状态(或token表示)。这个向量包含了原始的、未压缩的特征信息。
是下投影矩阵(Down-projectionmatrix),其中:
\“D\“表示\“down\“,意味着这是一个降维操作
\“Q\“表示这个操作是针对查询(Query)的
这个矩阵的维度是,其中是原始维度,是压缩后的维度
3. 是压缩后的潜在查询向量,维度比原始输入小得多()。这个向量捕获了原始查询信息的关键特征。
这个压缩步骤的目的是:
减少内存使用:通过将高维度的查询信息压缩到低维空间
提高计算效率:后续操作可以在较小的维度空间中进行
保留关键信息:虽然维度降低了,但矩阵经过训练,能够保留最重要的特征信息
2-查询内容上投影:
这个公式描述了压缩查询的上投影过程。逐步理解:
是在公式(37)中得到的压缩潜在向量
是上投影矩阵(Up-projectionmatrix),将压缩的信息投影回高维空间
是上投影后的结果,它被分割成个头
分号[;]表示向量的垂直连接,说明每个头的查询向量被垂直堆叠在一起
3-查询位置编码
这个公式描述了位置编码查询的生成过程:
是生成位置相关查询的专用投影矩阵
函数应用旋转位置编码,为查询添加位置信息,结果同样被分成个头
上标表示这部分是与位置信息(Rotary)相关的查询
:位置编码查询
每个:单个头的位置查询
这两个公式共同构成了MLA的查询处理机制,它们的创新之处在于:
双路径设计:
压缩路径(C)处理内容信息
旋转路径(R)处理位置信息
效率优化:
主要的内容处理通过压缩路径进行,减少计算量
位置信息通过独立的路径处理,避免与压缩机制的冲突
灵活性:
可以独立调整内容处理和位置编码的维度
允许在保持位置信息准确性的同时实现高效压缩
来自内容压缩路径,包含了token的语义信息
来自位置编码路径,包含了位置信息
这种设计非常巧妙,就像是给每个查询配备了两个不同的\“镜头\“:一个用于看内容,另一个用于确定位置。这样的组合让模型能够同时理解\“说了什么\“和\“在哪里说的\“。
使用单个下投影矩阵将输入压缩成潜在向量(这是需要缓存的关键部分)
键的处理也分两条路径:
内容路径:通过从潜在向量恢复键的内容信息
位置路径:直接从输入计算位置信息
值只需要内容信息,通过从潜在向量恢复
1-键值联合压缩
这个公式表示键值对的联合压缩过程,这是MLA的一个重要创新。我们可以把它理解为:
是输入的隐藏状态,包含了原始的token表示
是一个特殊的下投影矩阵,它同时服务于键和值的压缩
是压缩后的潜在向量,它包含了键和值共享的信息
论文中这个公式左侧的被标记为蓝色,表示这是一个需要在推理过程中被缓存的关键向量。理解一下为什么:想象一下模型在生成文本时的工作过程。就像是一个作家在写故事,需要随时回顾前面写过的内容。在这个过程中:
每个新生成的token都需要参考之前的信息
如果每次都重新计算所有信息,会非常耗时
因此,我们需要存储一些关键信息以供快速访问
就是这样一个关键信息:
它包含了键和值的压缩信息
这个向量的维度比原始的键值对小得多
存储这个压缩向量比存储完整的键和值更节省空间
这就像是一个高效的笔记系统:
不是把所有细节都记下来
而是记录关键的概要信息
需要时可以快速展开使用
这种设计带来的好处是:
显著减少内存使用
加快推理速度
保持模型性能
这个设计的独特之处在于它的效率:
传统方法需要分别存储键和值
MLA通过这个联合压缩,大大减少了存储需求
这就像是把两个相关的信息压缩成一个更紧凑的表示
2-键的生成:内容键+位置键
是压缩后的潜在向量,它包含了键和值共享的信息
:键的上投影矩阵
:内容键
这个公式描述了如何从压缩的键值向量中恢复键的内容信息。想象一下,就像是一个包含了精华信息的浓缩包,而就像是一个展开装置,将这些浓缩的信息重新展开成我们需要的键向量。通过这个上投影过程,我们得到了个头的键向量,每个头负责关注输入信息的不同方面。
是输入的隐藏状态,包含了原始的token表示
:位置键投影矩阵
:位置键
这个公式处理键的位置信息,与内容信息的处理是分开的。这就像是给每个键添加一个位置标记,告诉模型\“这个信息来自哪里\“。RoPE(旋转位置编码)的使用非常巧妙,它不仅能编码位置信息,还能保持向量之间的相对关系。
这两个公式协同工作的方式很有趣:
内容信息(公式42)告诉我们\“说了什么\“
位置信息(公式43)告诉我们\“在哪里说的\“
这种分离设计的好处是:
可以更精确地控制内容和位置信息的处理
允许内容信息使用压缩技术节省空间
保持位置编码的准确性不受压缩的影响
这就像是在写一本书,其中:
内容信息就像是书中的文字
位置信息就像是页码和章节标记
两者结合才能让读者完整理解整本书的内容
3-键的组合
:内容键与位置键组合后的完整键
这个公式描述了完整键向量的组装过程。想象你在制作一个拼图,这个公式就像是把两块重要的拼图pieces拼在一起:包含了内容信息,而包含了位置信息,键向量需要同时理解\“说了什么\“和\“在哪里说的\“,所以组合了内容和位置信息。这里有一个有趣的细节:每个注意力头都有自己的内容信息(注意下标),但所有头共享同一个位置信息(注意没有下标)。这就像是每个头都有自己独特的视角来看内容,但它们都共同遵循同一个位置参考系统。
是压缩后的潜在向量,它包含了键和值共享的信息
:值上投影矩阵
:值向量
这个公式展示了如何从压缩的键值向量中生成值向量。这个过程有点像从一个压缩文件中解压出我们需要的信息。矩阵就像是一个解码器,它能够从压缩的中提取出完整的值信息。注意这里的值向量只有内容部分(上标C),没有位置部分(没有R),这是因为值向量主要负责携带实际的信息内容,只需要关注\“说了什么\“,而不需要额外的位置信息。键值的处理思路展示了MLA架构的一个重要创新:它通过巧妙的设计实现了信息的高效处理,这种设计不仅节省了计算资源,还保持了模型的强大性能。你可以把这个过程想象成一个图书馆的检索系统:键向量就像是图书的索引卡,需要同时知道书的内容(内容信息)和在书架上的位置(位置信息);而值向量就像是书本的实际内容,只需要关注内容本身就够了。这种分工明确的设计使得整个系统既高效又准确。
使用组合后的查询和键计算注意力分数
注意力分数经过缩放(使用作为缩放因子)和Softmax
最后与值向量加权求和,得到每个头的输出
1-注意力计算和头部输出
:每个头的输出
这是MLA架构中的核心计算步骤,它展示了如何将查询、键和值向量组合起来生成最终的输出,让我们逐步分解这个公式的每个部分,就像解开一个精密的时钟机制:首先,在分数计算部分,分子查询向量和键向量的点积运算。想象你在图书馆找书,查询向量就像是你的搜索关键词,而键向量就像是书籍的标签。它们的点积告诉我们这本书与你的搜索有多匹配。接着看分母。这个缩放因子与原始Transformer中不同,因为它考虑了两种维度:
是内容信息的维度
是位置信息的维度
这就像在调整放大镜的焦距,确保我们看到的画面既不会太模糊也不会太刺眼。Softmax操作则像是一个投票系统,它将所有的匹配分数转换成概率分布。较高的匹配分数会得到更多的\“投票权\“。
最后,我们用这些概率权重去加权值向量。注意这里使用的是纯内容值向量(带有上标C),没有位置信息。这就像是根据搜索相关度来整合不同书籍的内容。
整个求和过程表示我们要考虑从位置1到当前位置的所有信息。这就像是在阅读一本书时,我们会考虑从开始到当前页的所有相关内容。
这个设计的巧妙之处在于:
它同时利用了内容和位置信息来计算注意力权重
但在整合信息时只使用内容值向量
通过合适的缩放因子确保了计算的稳定性
将所有注意力头的输出拼接起来
通过输出投影矩阵得到最终的输出表示
1-最终输出生成
:输出投影矩阵
:最终输出
这个公式是MLA计算流程的最后一步,代表了如何将所有注意力头的输出整合成最终的表示,描述了一个重要的整合过程,就像是一个管弦乐团在演奏交响乐。每个注意力头()就像是乐团中的一个乐器部分,各自关注和处理输入信息的不同方面。而输出投影矩阵则像是一位优秀的指挥家,负责将这些独立的声部完美地融合在一起,创造出和谐的整体效果。
MLA的主要创新在于其存储效率。在推理过程中,只需要缓存:
:压缩的键值向量
:位置键向量
总缓存维度为,这远小于原始MHA的。这种设计显著减少了内存使用,同时通过巧妙的架构设计保持了模型性能。
论文附录C中有一段描述:其中蓝色框中的向量需要缓存以用于生成。在推理过程中,朴素公式需要从恢复和用于注意力计算。幸运的是,由于矩阵乘法的结合律,我们可以将吸收到中,将吸收到中。因此,我们不需要为每个查询计算出键和值。通过这种优化,我们避免了在推理过程中重新计算和的计算开销。
从数学原理的角度重新解释MLA中的这两步优化。
1、将吸收到中
首先,在MLA中键是这样计算的:
2. 然后在注意力分数计算中,我们计算查询和键的相似度:
3. 将键的计算代入相似度计算:
4. 根据矩阵乘法的结合律,我们可以重新组合括号:
5. 现在,让我们看查询是如何计算的:
6. 将这个代入到第4步的表达式:
7. 这里是一个新的矩阵,我们可以预先计算它。令:
8. 那么相似度计算就变成了:
这就是所谓的\“吸收\“过程:我们把两个矩阵的乘法预先计算好,形成一个新的变换矩阵。这样在实际推理时,我们就不需要先计算完整的键向量,而是可以直接在压缩空间中进行计算。
2、将吸收到中
回顾MLA中的完整注意力计算。当我们得到注意力权重后,需要与值向量相乘:
2. 其中值向量是这样计算的:
3. 将值的计算代入到注意力计算中:
4. 最后,这个结果还要经过输出投影矩阵:
5. 根据矩阵乘法的结合律,我们可以重新组合:
6. 这里是一个新的矩阵,我们可以预先计算它。令
7. 那么整个计算就变成了:
通过这两个\“吸收\“操作(到和到),MLA实现了在压缩空间中直接进行注意力计算,大大提高了推理效率。这就是论文中所说的\“我们不需要为每个查询计算键和值\“的原理。
这种优化之所以可行,完全是基于矩阵乘法的结合律。我们可以改变计算的顺序而不改变最终结果。这让我们能够选择计算量最小的顺序。
这就像在计算(2×3)×4和2×(3×4)时,虽然最终结果相同,但选择后者可以减少一步计算。在高维矩阵运算中,这种优化带来的计算节省更加显著。
这种数学变换的意义在于:
原本需要先从压缩向量重建完整的键值向量,再进行注意力计算
现在可以直接在压缩空间中进行计算,因为我们可以预先预先计算好变换矩阵
这样的优化让我们可以:
避免了显式重建值向量的步骤
减少了中间计算和存储
在保持数学等价性的同时提高了计算效率
当我们说\“低秩\“时,实际上在暗示一个重要的性质:这种压缩是通过矩阵分解实现的。举个例子,假设我们有一个8×8的矩阵M,它的秩是3,这意味着它可以被分解为:
这就是为什么要强调\“低秩\“:不是简单地把大矩阵变小,而是利用矩阵的内在结构(秩)来实现压缩,确保压缩后保留了原始数据的主要信息
低秩压缩的核心思想是:我们可以用一个较小的矩阵来近似表示一个大矩阵。而这个小矩阵正常来说是通过矩阵分解得到的,但在MLA中是直接设计小矩阵的维度,让它们通过训练自动学习到一个好的低秩表示
在论文中,秩就是信息压缩的维度,还是通过一个具体的例子来理解这个过程:想象一个5120维的向量,它可能代表了一张图片的所有像素值。当我们用一个秩为512的变换去处理它时,本质上我们是在说:
\“这5120个数字中,实际上可以用512个独立的特征来表达主要信息\“
这就像是在拍照片时的压缩过程:
原始图片可能有数百万个像素点(高维空间)
但这些像素之间存在大量相关性(不是完全独立的)
我们可以找到一些主要的特征(比如主要的颜色模式、边缘特征等)来表达这张图片
这些主要特征的数量就相当于我们说的\“秩\“
在MLA中:
这个过程告诉我们:
当矩阵的秩是512时,它最多可以保留512个独立的信息维度
即使最终重建回5120维,信息也被限制在这512个维度张成的空间中
这就是为什么它被称为\“低秩压缩\“-我们用较低的维度(512)来近似表示高维数据(5120)
这种压缩之所以有效,是因为在实际应用中:
真实数据通常存在大量冗余
并非所有维度都同等重要
保留最重要的512个维度往往足以表达数据的主要特征
传统SVD和MLA在处理高维数据压缩时有着根本的区别。想象我们在整理一个大图书馆:
传统SVD的方式是:
先完整整理所有书籍并建立详细的分类系统(先构建完整矩阵)
分析这个系统,找出主要的分类维度(计算奇异值和奇异向量)
基于主要维度重新组织(低秩近似)
而MLA的方式是:
直接定义和初始化一个高效的压缩编码系统(下投影矩阵W_DKV)
同时定义和初始化一个解码系统(上投影矩阵W_UK)
通过训练让这两个系统自动学习最优的压缩和重建方式
这就像是:
这种设计的优点是:
不需要先构建和存储大矩阵
直接在小矩阵空间进行优化
通过反向传播自动学习最优的分解形式
MLA中选择,假设一个具体的例子:
为什么选择?
太小的压缩维度(比如d_h)可能损失太多信息
太大的压缩维度(比如8d_h)节省的空间有限
提供了一个很好的平衡点:
足够大以保留关键信息
足够小以显著节省内存
这两个矩阵形成了一个\“信息漏斗\“系统:
下投影矩阵(W_DKV:Down-projection):将高维信息压缩到低维空间
上投影矩阵(W_UK,W_UV:Up-projection):将低维信息恢复到高维空间
这就像是一个自动编码器:
在MLA中,这种设计的优势是:
存储效率:只需要存储低维的潜在向量
计算效率:部分计算可以在低维空间进行
信息提取:强制模型学习最重要的特征
使用正态分布(GaussianDistribution)初始化权重
标准差的选择遵循Xavier/Glorot初始化的原理
通常不使用偏置项(bias=False)
为什么选择这种初始化方式?
帮助网络在训练初期有更好的梯度流动
避免梯度消失或爆炸
保持每一层输出的方差相对稳定
在MLA中,(压缩维度)是低秩压缩的秩。DeepSeek-V2选择,假设一个具体的例子让我们看看这种设计带来的具体收益:
存储空间:
计算效率:
压缩过程是额外的计算开销
但在生成过程中,由于缓存大幅减少:
内存访问更快
可以处理更长的序列
支持更大的批处理大小
这种设计在实践中证明是非常有效的,因为:为什么选择?
太小的压缩维度(比如d_h)可能损失太多信息
太大的压缩维度(比如8d_h)节省的空间有限
提供了一个很好的平衡点:
足够大以保留关键信息(秩=512足以捕获大部分重要信息),保持了模型性能
足够小以显著节省内存,提高了推理效率
想象我们有一个图书馆的信息检索系统,需要处理用户的查询请求:
原始多头注意力(MHA):
每个图书管理员(注意力头)都有自己完整的编目系统
每个管理员都可以根据自己的专业领域进行独立的搜索
无信息损失,但需要存储大量的编目信息
多查询注意力(MQA):
所有图书管理员共享同一个编目系统:
管理员A可能专注于科技类书籍
管理员B可能专注于文学类书籍
但他们都必须使用同样的检索方式,这会导致:
科技类书籍可能无法按照技术领域精确分类
文学作品可能无法按照文学流派详细归类
这种方式的信息损失最大,因为所有专业化的检索能力都被限制在一个统一的系统中。
分组查询注意力(GQA):
图书管理员分组共享编目系统:
科技组的管理员共享一个专业的科技文献编目系统
文学组的管理员共享一个专门的文学作品编目系统
这比MQA好,因为:
保留了一定的专业化能力
不同领域可以有各自的检索方式
但仍然存在组内信息混合的问题
多头潜在注意力(MLA):
每个管理员都有自己的检索系统,但通过智能压缩:
1. 首先提取关键特征:
对于科技书籍:可能是关键词、技术领域、出版年份
对于文学作品:可能是作者风格、主题、写作手法
2. 这些特征被压缩成一个精简的索引(256维):
不是简单地删减信息
而是找到最能代表原始信息的特征组合
3. 重建时:
可以从这些关键特征重建出详细的检索信息
虽然可能损失一些细节
但保留了最重要的区分性特征
所以,信息损失的比较:
MQA:损失最大,因为完全共享同一套系统
GQA:损失较大,但通过分组保留了一些专业化能力
MLA:损失相对最小,因为:
压缩是基于数据本身的特征进行的
保留了最重要的区分性信息
每个头仍然保持了一定的独特性
这就是为什么MLA能在节省存储空间的同时,仍然保持较好的性能。它不是简单地共享或删减信息,而是通过智能的压缩方式保留了最重要的特征。
进技术交流群请添加AINLP小助手微信(id:ainlp2)
请备注具体方向+所用到的相关技术点
关于AINLP
AINLP是一个有趣有AI的自然语言处理社区,专注于AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。