探寻实时学习新路径:挖掘极致高效的“子空间微调”

TL;DR

在大模型微调的语境下,我们习惯了 LoRA 带来的“低秩”红利。但当参数量被压缩到极致,甚至低至 13 个参数时,模型还在学习什么?TinyLoRA 给了我们答案。另外,MiCA 的出现又给了我们一个清奇的视角:与其在拥挤的主导子空间里寻找增量,不如去那些被遗忘的“次要奇异方向”开垦荒原。本文将结合这两篇论文,聊聊如何通过挖掘特定的子空间,实现一种近乎“无损”且“实时”的插件化学习能力,这可能也是一种低成本、高独立性、可插拔的“实时学习”新范式。

介绍一篇有意思的文章:2604 MiCA Learns More Knowledge Than LoRA and Full Fine-Tuning[1],我个人觉得它的角度非常清奇,值得记录一下。

和常见的 PEFT 方法不同,MICA 的核心逻辑是:”不去动模型最显眼的部分,要去开发那些被闲置的角落。“具体来说,就是利用
奇异值分解来识别与最小显著奇异值相关联的次要奇异向量所对应的子空间,并在微调过程中将参数更新限制在这些方向上。

LoRA回顾

说到 PEFT,LoRA 肯定是绕不开的,它的核心思想是:”模型的更新通常可以在低维子空间中有效表示。“于是,通过将更新分解为两个较小矩阵的乘积(远小于原始参数空间),就可以显著降低参数量。

令 W ∈ R^d×d^,表示 Transformer 层中的参数权重矩阵,d 表示维度,r << d 表示更新的秩。权重通过低秩更新修改:

  • W = W + ∆W
  • ∆W = α/r BA

其中,A ∈ R^r×d^,B ∈ R^d×r^,α 是一个超参数,决定训练好的适配器权重对原始预训练模型权重的影响程度。

∆W 的秩最多为 r,所以整体更新的参数可以从 O(d^2^)降低至 O(^dr^)。

除了计算效率之外,根据 2405 LoRA Learns Less and Forgets Less[2],低秩更新还起到隐式的正则化作用。通过将适应过程限制在低维子空间中,它们降低了灾难性遗忘的风险,并且通常比完整的微调更好地保留预训练能力。

从LoRA到子空间利用

LoRA 有个核心问题没解决:到底去适应哪个子空间?标准 LoRA 中,两个低秩因子均自由优化,这意味着有效适配子空间在训练过程中隐式地被学成,且可能随时间发生漂移。而且,它没有显式考虑预训练权重矩阵的谱结构,特别是**无法区分权重空间中的主导方向与次要方向。**这就导致参数更新可能与预训练能力的高能成分重叠,可能导致干扰、表示容量利用效率低下,或对已有知识的不期望的改变。

MiCA 的核心假设是:权重矩阵中与「低奇异值相关的一小部分次要成分」可以被激活,以实现关键的任务特异性适应性。而这些成分在传统的低秩近似中通常被丢弃或忽略。MiCA 的做法正好是和传统低秩近似的做法相反!它认为这些表达较少的方向,尽管只占权重的一小部分,但可能为任务特异性学习提供更高的边际效用。尤其当主导子空间因通用的预训练知识而饱和时更加显著。

因此,MiCA 对 PeFT 原则进行了优化:不应仅仅降低维度,而应致力于在既未充分利用又对新任务最具信息量的方向上调整模型。

MCA 是次成分分析(比较常见的是主成分分析 PCA),它关注的是与最小特征值相关的特征向量。这些次成分通常与主子空间正交,可能包含 PCA 所忽略的微弱信号或结构。MiCA 借鉴了类似 MCA 的逻辑,用于识别权重空间方向中那些在方差意义上不显著但可能更具适应性、可塑性或任务相关性的隐藏成分。

从SVD到MiCA

SVD

我们知道,对一个 m×n 的实矩阵 A,有:

A=UΣVTA = U \Sigma V^T

其中:

  • U 是 m×m 的正交矩阵
  • ∑ 是 m×n 的对角矩阵,对角线元素称为奇异值
  • V 是 n×n 的正交矩阵

∑ 矩阵的奇异值是从大到小排列的,前面的一般是主成分,后面的自然是次要成分。

MiCA

MiCA 就是要找到 U 矩阵中对应最小奇异值的那几列,把新知识微调在这个空间里,而不动主要权重,避免灾难性遗忘。

过程如下:

  • 计算 SVD: W = U Σ V^T^
  • 选择最后的 r 个奇异向量:Ur = U [:, −r :]
  • 初始化参数: B = Ur(冻结),A = 0
  • 训练

如图所示,由于 B 是冻结的,所以训练参数量只有 LoRA 的一半左右(6%-60%)。

参数融合

参数融合也比较有意思,包括两个阶段:

  • 在 base 模型上学习新知识
  • 上一步学到新知识的权重 + (Instruct 模型 - base 模型)

这种做法假设模型空间的修改具有“线性局部性”,并基于经验观察:指令微调仅修改与指令遵循相关的一组相对受限的参数。好处是:

  • 模型能够保留微调过程中在特定领域数据上学习到的强任务对齐能力;
  • 无需重新微调,即可重新引入通用指令遵循能力。

消融实验

效果就不多讲了,自然是比 LoRA 好的,主要看看消融。目的是为了确定 MiCA 的提升是否特异地源于适应小的奇异方向,还是任何固定的标准正交子空间。

微调方法 (Method) 准确率 (Accuracy) 核心含义
Instruct (no FT) 72.91% 没经过微调的原生模型
Major-r 74.21% 微调那些奇异值最大的主方向
r random components 73.75% 在权重空间里随便抽 rr 个方向训练
Minor-r (MiCA) 75.63% 只在奇异值最小的方向微调

结果表明,小奇异方向构成了一个更具可塑性的子空间,适用于领域自适应,而主导或随机方向在结构上则具有较低的可塑性。

其实也 make sense 啊,主要权重调起来当然没那么容易。

扩展思考

更好的插件

非常小的一篇文章,但我个人感觉还挺有意思,有意思的点不仅仅是这个选择的角度,更多的是一种“可能性”——动态可拔插能力,有一点点那种实时学习的意思了。

现在的问题就是,如果用 MiCA 训练了多种能力,能否叠加融合?还是说只能独自保持?如果可以融合,那真的是极好的,因为相比 LoRA,MiCA 对主干模型的干扰会少很多。

或者,我们来个简单思路,最后 r 个奇异向量负责能力一,倒数第 r-2r 个奇异向量负责能力二,以此类推……由于 U 是正交的,不同参数(能力)在数学上是互不干扰的。MiCA 的 “插件化” 要比 LoRA 好得多。找个时间试一把!

RL与少参数学习

说到这里,突然想到了 2602 Learning to Reason in 13 Parameters[3],这个文章的主要设计是最小化参数量——仅 13 个参数(没看错,就是 13……)就可以达到不错的效果!而且,它也是基于 SVD 的!

这篇文章出发点就是更高的参数效率,他们观察到,SFT 中取得良好性能需要向模型中吸收比 RL 多得多的信息比特。那反过来,RL 是不是可以用非常小的更新量达到相当的性能?我们看看文章中具体的分析,很有意思。

众所周知,在每一轮次中,对于每个提示 x,RL 观察到 k 个具有新熵的 response,而 SFT 则仅使用一个重复出现在各轮次中的 response。因此,RL 看到了更多的数据,但其实大部分都是噪声,所以 RL 的信息量是小的。相比之下,SFT 每个 token 都是监督信号,其信息密度要高很多。

但正因为 RL 的有效信号极其稀疏且干净(只关注结果对不对,而不强求过程必须和某个模板一模一样),所以它可以用极少量的参数更新。而 SFT 将所有 token 视为同等重要,要把 GroundTruth 中的每一个细节(包括无关紧要的语气、格式等噪声)都学进去,反而需要更多的参数容量。这可能也解释了为什么 RL 需要的数据比 SFT 少。

因此,论文的假设是:在低参数情况下,SFT 的能力较弱,因为最小化其目标需要模型吸收大量信息比特,而其中只有一小部分与任务表现相关。相比之下,RL 接收的是更稀疏、更清晰的信号,因此即使容量较小也能有效学习。

LoRA-XS

接下来,我们看看它具体是怎么做的。文章也是从 LoRA 开始,然后是 LoRA-XS[4]

W=W+UΣRVTW' = W + U \Sigma R V^T

其中,U ∈ R^d×r^、Σ ∈ R^r×r^、V ∈ R^k×r^,都是来自 W 的截断奇异值分解(只保留前 r 个最大的奇异值及其对应的向量),只有 R ∈ R^r×r^ 是可训练参数。这可以看作是学习重新组合 W 的主导奇异方向,实际应用中表现优于随机初始化的 LoRA。

这几乎就是 MiCA 的对称呀!

TinyLoRA

这就到了 2602 Learning to Reason in 13 Parameters[3] 的关键方法了——TinyLoRA,主要方法是:减小 R和参数共享。

减小R

即使 r=1,LoRA-XS 也至少需要每个适配模块一个参数。TinyLoRA 通过将 r×r 的学习矩阵 R 替换为通过固定随机张量 P∈R^u×r×r^ 投影的低维可训练向量 vR^u^。

W=W+UΣ(i=1uviPi)VW^{\prime}=W+U \Sigma\left(\sum_{i=1}^u v_i P_i\right) V^{\top}

其中,U, Σ, V 定义同 LoRA-XS,Pi ∈ R^r×r^ 是固定随机矩阵,每个模块仅训练 u 个参数。

参数共享

LoRA 一般应用于注意力模块和 MLP 模块,典型的 LLaMA 架构中每个 block 会应用 7 次,如果层数为 L,则为 7L 次,如果 u=1,则总更新参数为 7L。

在 n 层的 m 个模块间采用权重共享时,总的可训练参数量按 O(nmu/n_tie) 规模缩放,当所有模块共享权重时,则简化为单个参数,也就是只需要 L 个参数。而当所有层也共享时,则整体更新参数就只有 1 个。

TinyLoRA+MiCA

可以看到,TinyLoRA 集中在 r 个主成分,而 MiCA 则集中在 r 个次成分,正好对称!理论上来说,TinyLoRA 的做法看起来似乎也可以用到 MiCA 上!理论上每个(或少量几个)正交的维度都可以学习一个特定的方向!感觉非常值得探索。

而 TinyLoRA 的消融还部分支持了我们的设想。对 r 的消融实验表明,r 从 1 增加到 2 只带来适度的提升,更大的值反而会降低性能!推测可能的原因是:较高的秩会在冻结的 UΣV 组件中引入更多的自由度,使得对小规模可训练向量 v 的最优化变得更加困难。另外是共享配置 un_tie 的消融,结果表明,性能通常随着更大的 u(更强的表达能力)和更小的 n_tie(共享程度更低)而提升。一个指导原则是,增加 n_tie 之前应先把 u 降到 1。但其实这个还好,7L 本来也没有多少。

小结

本文虽然看起来是在介绍高效微调,但其实是想展示一种实时学习的思路,而且看起来还挺有可行性。TinyLoRA 将参数压到几十这个量级让人感觉不可思议,MiCA 反其道而行之,从次要成分出发居然获得更好的效果。它们的结合又会产生怎样的火花呢?值得期待!

Reference

[1] 2604 MiCA Learns More Knowledge Than LoRA and Full Fine-Tuning: https://arxiv.org/abs/2604.01694
[2] 2405 LoRA Learns Less and Forgets Less: https://arxiv.org/abs/2405.09673
[3] 2602 Learning to Reason in 13 Parameters: https://arxiv.org/abs/2602.04118
[4] LoRA-XS: https://arxiv.org/abs/2405.17604