AI的数学血脉|被拉格朗日拒稿15年的那篇论文,正在帮全世界的大模型”省钱”
如果你在过去两年接触过大模型微调,你一定听过一个词:LoRA。
名字听起来像西班牙语里的”鹦鹉”。但全称其实很直白——Low-Rank Adaptation,低秩适应。
它的”卖点”惊人:不用动大模型原有的一千七百五十亿个参数。只加一点点额外的”小矩阵”进去训练。训练参数量减少一万倍,GPU显存占用降低三倍,效果——和全量微调一样好,有时甚至更好。
(ps:一万倍是什么概念?相当于你原来要请一万个工人干的活,现在一个人就干完了。如果你是一家AI公司,这东西就是你的命。)
全世界的开源大模型社区,从LLaMA到Qwen到DeepSeek,几乎所有的微调方案都在用LoRA。它可能是2021年以来最有影响力的AI工程创新之一。
但很少有人追问一个问题:
为什么LoRA能work?
论文里的回答是:大模型在适应新任务时,权重的变化ΔW具有”低内在秩”。“内在秩”(intrinsic rank)是数学家说的。翻译成人话:ΔW看起来是一个巨大的矩阵,但实际上它能被少数几个”方向”完整描述。剩下的都是噪声。扔掉它们,你几乎不损失任何信息。
好,那再问一个问题:凭什么一个巨大的矩阵可以被压缩到1%还不失真?
这个问题,两百多年前就有人回答过。
他差点上了断头台。
一、1807:傅里叶、一根热铁棒,和被拒稿的十五年
1768年,约瑟夫·傅里叶出生在法国欧塞尔一个裁缝家里。九岁那年,父母双亡。
由本笃会学校抚养长大的男孩,展现出惊人的数学天赋。他想要参军——但当时法军的科学职位只对贵族开放。他只能去教会学校教书。
法国大革命改变了一切。
傅里叶投身革命,担任了家乡的革命委员会委员。但也因此在1794年的”恐怖时期”被捕入狱。他在监狱里等死,直到罗伯斯庇尔被推上断头台,他才被放出来。
(ps:如果你觉得”论文被拒”已经是最惨的了——傅里叶差点连命都没了。整个人类数学史都是这样:最聪明的头脑,往往在距离死亡最近的地方工作。)
出狱后,傅里叶考入了新成立的巴黎高等师范学校。他的老师包括拉格朗日、拉普拉斯、蒙日——当时世界上最好的三位数学家。
1798年,拿破仑远征埃及。傅里叶随军前往,担任埃及研究院的秘书。他在金字塔旁边搭帐篷,白天处理军务和考古,晚上研究一个问题。
这个问题起源于他个人的一个怪癖。
傅里叶极度怕冷。
(ps:是真的。从他后来的行为来看——他坚持把房间烧到令人窒息的高温,来访者受不了而他穿着厚外套还觉得冷——这种对热的执念,可能源于他在埃及沙漠里待了三年。)
他研究的问题是:热,到底是怎么在固体中传播的?
这不是一个随便的好奇。铁的冶炼、建筑的保温、甚至地球内部的温度——当时都迫切需要一套理论来计算。
1807年12月21日——距离今天219年前的冬天——39岁的傅里叶向巴黎科学院提交了一篇论文:《论固体中的热传播》。
论文里推了一个偏微分方程:
∂u/∂t = k ∂²u/∂x²
——这就是著名的”热方程”。温度u随时间t的变化率,正比于温度在空间上的曲率。翻译成人话:一个点如果比周围都热,它就会冷却;比周围都冷,就会升温。
但真正惊人的不是方程本身。
是他解方程的方法。
二、一个”不可能”的断言:任何函数都能拆成无穷正弦波
傅里叶面对的问题是这样的:
一根长度为L的铁棒,两端温度保持为零度。初始时刻的温度分布是某个函数 f(x)。问:任意时刻t的温度分布 u(x,t) 是什么?
傅里叶用了一个技巧:分离变量。
令 u(x,t) = Φ(x)·ψ(t)。代入热方程之后,时间部分和空间部分神奇地分开了:
空间方程变成:Φ”(x) + λk²Φ(x) = 0,边界条件 Φ(0)=Φ(L)=0
这看起来像是一道普通的微分方程课后习题。解出来:
Φ(x) = sin(nπx/L),λₙ = (nπ/L)²
这里有n=1,2,3,…无穷个解。每一个n对应一个”模式”——铁棒上不同频率的驻波。
(ps:如果你弹过吉他,你马上就能理解:一根固定在两端的弦可以以基频振动,也可以以两倍频率、三倍频率振动。热传导也有类似的性质——只不过它是热的”驻波”,不是声音的。)
然后傅里叶说了一句当时让整个数学界炸锅的话:
初始温度分布 f(x) 可以写成所有这些”模式”的叠加:
f(x) = b₁sin(πx/L) + b₂sin(2πx/L) + b₃sin(3πx/L) + …
注意,他不是说”某些特定形状的f(x)可以”——他说的是任意f(x)。不管你初始时铁棒上的温度分布是什么形状,你都可以把它拆成无穷多个正弦波的叠加。
巴黎科学院指派了四位评审:拉格朗日、拉普拉斯、蒙日、拉克鲁瓦。
拉格朗日断然拒绝。
为什么?因为早在1750年代,拉格朗日就在弦振动问题上研究过三角级数。当时欧拉和达朗贝尔都不信任这种方法。拉格朗日自己的结论是:三角级数只能表示”足够光滑”的函数,不能表示”任意的函数”。傅里叶说”任意函数都可以”——这在拉格朗日看来,不是创新,是胡说八道。
论文被拒。未发表。
(ps:换个角度看,拉格朗日不是没有理由。傅里叶的”任意函数”说法在严格意义上确实是错的——有些病的很不一般的函数无法用傅里叶级数表示。但傅里叶的直觉是对的:所有在物理上会出现的有意义函数,都可以。数学的严格性在60年后由狄利克雷补齐,而物理的真理,傅里叶第一直觉就抓住了。)
四年后——1811年——巴黎科学院设了一个大奖,专门悬赏热传导问题。傅里叶修改了论文,再次提交。
这次他赢了。
但评审依然以”缺乏严格性和一般性”为理由,拒绝在科学院的《报告》上发表。
傅里叶被这个结果激怒了。
他花了又一个十年打磨理论。1822年——距离他第一次提交论文整整十五年——傅里叶自费出版了《热的解析理论》。一本600多页的大书。拉格朗日那时已经不在了,但傅里叶没有改动1807年论文中的任何一个核心结论。
这本书后来被称为”分析学的圣经”(poem of mathematics)。开尔文勋爵说:“傅里叶定理不仅是分析学中最美妙的结果之一,而且是所有现代数理物理学中不可或缺的工具。”
傅里叶于1830年去世。死因:心脏病。
有些人说,他死于对热的执念——长期把自己关在过于温暖的房间里。
但我们记住的不是他的怪癖。
我们记住的是:他发现了数学史上最深刻的一种”分解”。把一个东西,拆成若干个”基本模式”的叠加。这些基本模式,就是后来所谓的”特征向量”。
三、从热铁棒到希尔伯特空间:无穷维世界里的”方向”
傅里叶解热方程的过程,用现代语言说,是在做一件事:
找特征值和特征向量。
那个空间方程 Φ”(x) + λk²Φ(x) = 0 就是一个特征值问题。λ是特征值,sin(nπx/L)是对应的特征函数——无穷维空间里的”特征向量”。
在有限维世界里,一个n×n矩阵可以有n个特征值和n个特征向量。这些特征向量告诉你:在这个线性变换下,哪些”方向”是不变的(只是被拉伸或压缩)。
Av = λv
A作用在v上,v没有改变方向。它只是被拉长了λ倍。
这就是”不变的方向”。
傅里叶把这个思想从有限维推到了无穷维。他不只是处理n个数字组成的向量,他处理的是函数——在无穷多个点上有取值的对象。解热方程,本质上是找到了热传导”算子”的所有特征函数。
但当时没有人把这件事说清楚。傅里叶自己也没有用”特征值”这个词。他只是做了——然后世界花了一百年才理解他做了多大的事。
二十世纪初,一个德国数学家正式接管了这个任务。
大卫·希尔伯特。
(ps:如果你看过第1篇,会注意到一个规律:19世纪的天才负责”直觉式跳跃”,20世纪初的德国数学家用”公理化铁拳”把它砸成严密的体系。矩阵如此,特征值亦是如此。)
1904年到1910年间,希尔伯特在哥廷根大学研究积分方程。他把傅里叶的思想抽象到了一个前所未见的层次:
任何满足某些条件的线性算子,都可以像矩阵一样进行”特征分解”。即使在无穷维空间中。
他引入了一个全新的概念——无穷维的内积空间。在那里,你可以像在三维空间里一样谈论”正交”、“投影”、“长度”。
他的学生埃尔哈德·施密特把这个空间具象化了。他定义了内积、证明了正交基的存在。但”希尔伯特空间”这个名字,要等到1927年——由另一个天才,约翰·冯·诺依曼正式命名。
冯·诺依曼在做的事更疯狂:他在用量子力学来做这件事。1926年,海森堡提出了矩阵力学,薛定谔提出了波动力学。两个理论看起来完全不同——一个用矩阵,一个用波函数。谁是对的?
冯·诺依曼证明了:两个都对。因为你把量子态看作希尔伯特空间中的向量,矩阵力学和波动力学只是同一个空间里的两套不同”坐标系”。
特征向量,特征值,算子的谱。
傅里叶在一根热铁棒上发现的那个数学结构——找”不变的方向”——一百二十年后,成了描述整个量子世界的语言。
(ps:这就是数学最迷人的地方。它从最具体的物理问题中来——热怎么走、弦怎么振——然后被提炼成最抽象的结构,最后又应用于完全不同的物理问题。热→振动→量子,同一个”特征分解”,换了三件外衣。)
四、SVD:任意矩阵的灵魂解剖术
但有一个问题。
傅里叶和希尔伯特解决的,是”好算子”的特征分解——对称的、自伴的。
如果矩阵不是方的怎么办?如果它不对称怎么办?如果它是一个500000行×100列的庞然大物——你想降维、你找主要方向、但特征分解根本没法用——怎么办?
答案:奇异值分解。Singular Value Decomposition,SVD。
SVD说:任何一个矩阵A(不管多胖多瘦、多奇怪),都可以写成——
A = UΣV^T
U和V是正交矩阵(它们的列是”方向”),Σ是对角矩阵(对角线上的σ₁, σ₂, …就是”奇异值”,告诉我们每个方向有多”重要”)。
把这个式子展开成外积形式:
A = σ₁u₁v₁^T + σ₂u₂v₂^T + σ₃u₃v₃^T + …
每一项是一个秩为1的矩阵——它是两个向量uᵢ和vᵢ的外积,再乘以奇异值σᵢ。σ₁≥σ₂≥σ₃≥…≥0。
SVD于1873年首次由意大利数学家贝尔特拉米导出。此后Eugenio Beltrami、Camille Jordan、西尔维斯特(对,就是第1篇那位造出”矩阵”这个词的人)、埃尔哈德·施密特、赫尔曼·外尔等一大批数学家接力完善了它的理论基础。
但SVD真正的”复活”,要等到1970年。
五、Golub-Reinsch:让SVD从数学珍品变成工程利器
很多数学定理的处境是这样的:理论上非常美,但你没法算。
SVD也不例外。
你给一个数学家一个100×100的矩阵,他说”用特征值分解啊”。给一个1000×1000的——“勉勉强强”。给一个10000×10000的——他沉默了。
不是理论上不能算。是算法不稳定——舍入误差会把小奇异值吞掉。如果你需要区分”趋于零的奇异值”和”精确为零的奇异值”(这在数据降维中至关重要),传统的特征值方法就会跪。
1965年,斯坦福的Gene Golub和伯克利的William Kahan发表了一篇论文。他们设计了一个算法:先把矩阵A变成双对角形式,然后用QR迭代对角化。整个过程绕过了A
但算法和程序之间,还有一步——写出实际可用的代码。
1967年,Golub和Businger写出了第一个SVD的ALGOL程序。提交给了《自动计算手册》。审稿人是德国慕尼黑工业大学的Christian Reinsch。
Reinsch在测试时发现了问题:有些矩阵,算法不收敛。
他没等Golub改。他自己另起炉灶,独立写了一个全新的SVD程序。两个程序在底层做的基本上是同样的操作——双对角化+带位移的QR迭代——但数据结构和移位策略完全不同。
编辑部最终决定:以Golub-Reinsch的联合名义发表。
1970年,论文出现在《Numerische Mathematik》上。标题:《奇异值分解与最小二乘解》。
至今被引超过4000次。
(ps:一个真正好的数值算法,寿命比大部分软件工程要长得多。Golub-Reinsch SVD算法已经超过半个世纪了,今天我们训练大模型、做PCA降维、压缩图像、分析基因表达——背后的SVD实现,还是这个算法的后代。半个世纪,沧海桑田,但只要矩阵还是矩阵,SVD就不死。)
但最关键的定理,不在1970年,在1936年。
Eckart-Young定理:
如果你想用一个秩为k的矩阵去逼近原始矩阵A,最优的逼近就是扔掉Σ中除了前k个最大奇异值之外的所有东西。而且这个逼近在2-范数意义下是最优的——没有任何其他秩为k的矩阵能做得更好。
用大白话说:SVD把矩阵拆成了按重要性排序的叠加。前面的分量最重要。后面的分量你可以随便扔。
这个定理,是LoRA得以成立的终极数学保证。
六、LoRA:百亿参数的最后一课,藏在两百年前的热铁棒里
2021年6月,微软的Edward Hu等人向arXiv提交了一篇论文。
标题简洁得像公告:LoRA: Low-Rank Adaptation of Large Language Models。
论文的核心观察:当你把一个预训练好的大模型微调到新任务上时,模型权重的变化ΔW——虽然理论上是d×d维的庞大矩阵——实际上只有非常低的”内在秩”。
内在秩是什么?就是你用SVD分解ΔW之后,必须保留多少个奇异值,才能捕捉到95%以上的信息。
实验结果是:r=1或r=2就足够了。 即使原始矩阵的维度d高达12,288(GPT-3的隐藏维度)。
(ps:想想这个数字有多夸张。W是12288×12288 = 一亿五千多万个元素。但LoRA告诉你,这里面真正与”新任务”相关的信息,用一个秩为2的矩阵——大约五万个参数——就能完整表达。这意味着原始更新中99.97%的”变化”都是冗余的。大模型比你以为的要”懒惰”得多。)
LoRA的方案:
- 冻结原始权重矩阵W₀不动
- 注入两个小的低秩矩阵:一个B (d×r),一个A (r×d)
- h = W₀x + BAx = W₀x + ΔWx
- r可以是1,2,4,或8——远小于d=12288
这里的BA本质上是一个秩为r的矩阵。而SVD的Eckart-Young定理告诉我们:最优的秩r逼近就是保留前r个最大奇异值。
LoRA做的事情——你把它翻译成数学——就是用SVD的低秩逼近来近似ΔW,但让数据自动学习逼近中最重要的r个方向。
不需要显式地计算SVD。反向传播和梯度下降替你找到了那些”不变的方向”。
这就是LoRA能work的根本原因。
现在,让我们把时间线对折起来。
1807年。 傅里叶在一根热铁棒上发现:任意温度分布可以分解成”基本模式”的叠加。他在寻找热传导”算子”的特征函数。
1904-1910年。 希尔伯特把这个思想推广到无穷维,建立了谱理论。冯·诺依曼用它来统一量子力学的两个版本。
1936年。 Eckart和Young证明:扔掉小奇异值,就是最优低秩逼近。
1970年。 Golub和Reinsch写出了能稳定计算SVD的程序。此后半个世纪,几乎所有数据科学都在用这个算法的后代。
2021年。 微软团队发现:大模型微调时的权重变化ΔW,内在秩极低。他们用BA(两个低秩矩阵的乘积)来近似ΔW。LoRA诞生了。全世界的AI公司省下了数以亿计的算力成本。
2024年。 一项研究用SVD分析了不同rank的LoRA适应矩阵,发现rank=8和rank=64的适应矩阵,它们的奇异向量指向的子空间高度重合。换句话说——即使你用rank=64训练,真正有用的信息也只能填满前8个方向。
(ps:你花更多钱、用更高的rank、训练更长时间——但你得到的”新方向”,在数学上和rank=8几乎一模一样。这不是玄学。这是Eckart-Young定理在发挥作用:ΔW的”有效秩”本来就只有那么几个。多出来的方向——再多GPU也学不到真正的新东西,因为信息根本不存在于数据里。)
七、“不变的方向”:一个超越所有数学分支的核心隐喻
现在,我不是在跟你讲技术了。
我想跟你讲一个更抽象的东西:整个”特征分解”的思想史,到底在说什么?
它在说同一件事,换了两百年的马甲:
任何一个复杂的系统、变换、数据、物理过程——它们的核心结构,都可以被少数几个”方向”完整描述。
热在铁棒中的传播:少数几个正弦模式。
量子态的演化:少数几个特征态。
一万亿维的语义空间:少数几个语义方向。
GPT-3的微调更新:r=2就够。
这太诡异了。
为什么世界总是这样?为什么在任何尺度、任何领域,当我们找到”特征分解”的方法,得到的结论都是”真正重要的方向只有少数几个”?
可能是因为:世界本身是低秩的。 或者说,在所有可能的变化中,自然界只使用了极小一部分”方向”。
傅里叶发现了这一点。他用热证明了它。
希尔伯特把它写成公理。他用谱理论证明:一个正常算子,本质上就是它的特征值。
Golub和Reinsch把它变成代码。从此每个科学家都能在自己的数据上做SVD,看看到底有多少个”重要方向”。
LoRA的团队发现了AI里的同一个事实:大模型的权重更新是低秩的。你不需要万亿个参数——你需要的是找到那几个正确的方向。
(ps:再多说一层。注意力机制的多头Attention也可以从这个视角来理解。每个Attention head本质上是在学习一个特征子空间——它把输入的Query投射到Key矩阵的”主成分方向”上。2024年的一项研究发现,注意力头的奇异向量和模型使用的实际语义特征高度对齐。换句话说,Attention头的设计,本质上就是在让模型自动做特征分解。 不是你手动给每一层做SVD,而是反向传播自己找到了那些”重要的方向”。)
八、尚未写完的尾声
1830年,63岁的傅里叶在巴黎去世。
他生前没有看到自己的理论被完全接受。他的热方程被教科书收录,他的傅里叶变换和傅里叶级数成了理工科学生的必修课,他的名字被铸进了物理常数。但最戏剧性的一件事是:
他当年解热方程的方法——分离变量、找”特征函数”、把任意初始分布展开为这些特征函数的线性组合——这整套流程,在两百年后成了大语言模型数学分析的”标准动作”。
2024年的研究者们,在用SVD分析Attention矩阵时,写的公式和傅里叶1822年《热的解析理论》中的形式——在数学上,是同一个东西。
只不过,傅里叶拆分的是温度。
而他们拆分的,是语义。
“任何一个复杂的系统,它的核心结构都可以被少数几个’不变的方向’完整描述。“这个命题,傅里叶在一根热铁棒上发现了它,希尔伯特在积分方程中证明了它,Eckart和Young把它写成定理,Golub和Reinsch把它变成代码,LoRA把它刻进了全球所有AI公司的GPU集群。两百年,五个人,一个思想。这就是数学最深沉的力量——它不仅对,而且它一直在那里。等我们发现。
下一篇预告:《AI的数学血脉|向量空间的哲学:从格拉斯曼的孤独到Embedding的诞生》——一个德国中学教师自费出版了人类历史上第一本n维空间的书,没人读。180年后,GPT在4096维空间里理解语言。