PaLoRA提出配速定律:给持续学习每一步算清刹车力度
你有没有遇到过这样的情况:学一门新语言的时候,学得越投入,母语反而开始生疏了。说英语说多了,中文突然卡壳想不起某个词怎么说。这不是你记性不好,这是大脑在腾挪空间给新知识,顺带挤掉了一部分旧知识。神经网络也有这个毛病,而且比人类严重得多。这个现象有个专门的名字,叫做灾难性遗忘。灾难性遗忘*:模型在学习...
学一门新语言时,投入得越深,母语反倒容易生疏。英语说多了,中文忽然卡住,某个词怎么想都想不起来。这不是记性出了问题,而是大脑在给新知识腾地方,顺手挤掉了一部分旧知识。
神经网络同样有这个毛病,而且比人严重得多。这种现象有专门的名字,叫灾难性遗忘。
灾难性遗忘*:模型学新任务时,会把先前学过的知识大面积覆盖掉,旧任务的表现随之急剧下滑,这是持续学习领域最核心的难题。
设想一个视觉识别模型,先学会认猫狗,再学认汽车,学着学着,猫狗都不认得了。这不是科幻桥段,而是传统深度学习模型不断接收新任务时的真实下场。大模型时代到来后,这个问题更棘手:每次学新任务都把整个大模型重训一遍,谁也承担不起,太贵了。
于是LoRA成了救命稻草。
LoRA*:全称Low-Rank Adaptation,低秩适应。思路是冻结预训练模型的原始参数,只训练两个很小的矩阵来模拟参数的变化量,既省计算资源,又不破坏原模型的能力。
LoRA最初是为省参数设计的,后来大家发现它在持续学习里也很好用:每学一个新任务,就加一小块LoRA模块,原来的知识冻住不动,新知识单独存放。听着很美好,现实却没这么简单。
当"不踩雷"变成一句空话
现有的LoRA持续学习方法,大多在干一件事:约束新任务的更新方向,别和旧知识的方向重叠。这个思路有个专业说法,叫零空间投影。
零空间投影*:把新任务的梯度更新强行投影到一个与历史知识正交的子空间里,理论上这样更新就不会碰到旧知识占用的那部分参数空间。
这个想法听着挺严谨,数学上也站得住脚。问题就出在"理论上"这三个字上。
论文作者发现了一个很扎心的事实:
这里要追问一句:渗漏为什么不能靠调小学习率来解决?大多数现有方法确实是这么干的,几乎所有LoRA持续学习方案都会配一个很小的学习率。
学习率*:控制模型每一步参数更新幅度大小的超参数,学习率越小,每次更新的步子越小。
调小学习率确实能把渗漏压小,但这是个固定的、一刀切的解法。论文指出了一个关键问题:
这就好比在一条越走越窄的巷子里开车,起初把车速放慢一点就够安全了,可巷子越来越窄,你却还用同一个慢速度开,迟早要出事。一直不调整车速,要么巷子窄到根本转不过弯还在硬闯,要么为了绝对安全把车速压得死死的,哪儿也去不了。车速得跟着巷子的宽度动态调整,这才是问题的关键,现有方法却从没认真想过这件事。
论文配了一张图来说明这件事。只有两个任务时,分开各自训练会各自走到一个最优点,联合训练则落到一个折中的最优点上。新任务如果不加约束地训下去,模型就会一路奔向新任务自己的最优点,与联合最优点的距离越拉越大。一旦加上约束,模型就停在中间某个位置,这个位置跟两边都隔着一段距离,可以看作折中的结果。
放到多任务的情形里,这一点表现得更加清楚。前面学过许多任务之后,当前参数里其实已经装进了大量历史信息,此时新任务要是仍旧毫无顾忌地朝自己的最优点冲,带来的破坏会远比两任务时严重。随着任务数量变多,这个折中点应当一步步偏向历史知识那一侧,而不是原地不动。
说到底,这讲的是一个很直白的道理:肩上担子越沉,走起路来就该越当心,步子也得迈得越小。可问题在于,现有方法根本没有把担子的轻重衡量出来,只是凭经验定一个固定的小学习率,论文要填的正是这个核心缺口。
一个公式,把"踩刹车力度"量化出来
论文的核心贡献,是推导出一个叫做配速定律的公式:
s* = √(R/c)
这里的R是历史知识的有效秩,c是一个容忍系数,s是控制梯度步长的分母,s越大,实际更新步子就越小,相当于刹车踩得越狠。
有效秩*:用来衡量一个矩阵里究竟装了多少“有用信息维度”的指标。它指的不是矩阵在理论上有多少维,而是压缩之后真正还带着信息的那些维度有几个。
这个公式从哪来?论文在简化的单层线性模型上做推演,设定新任务的更新会以“各向异性泄漏”的方式渗入旧知识的空间。所谓各向异性,说的是渗漏量在各个方向上并不均匀,有的方向渗得多,有的方向渗得少。
顺着这个假设,论文得出一个颇有意思的结论:步长缩到原来的1/s,遗忘量便按1/s?的速率下滑,属平方级;而新任务的学习进度只按1/s的速率下降,属线性级。
这背后是什么道理?适度踩刹车,损失的学习速度是线性的,换回来的遗忘削减却是平方级的。步长减半,遗忘量直接掉到四分之一,学习进度只丢一半,账算下来极划算。配速定律能站得住,数学根基正是这种不对称性。
公式里的R又管什么?R越大,表明历史知识越复杂、占用的有效维度越多,此时公式给出的信号是刹车要踩得更重,s得跟着变大。反之,历史知识简单、R很小时,就无须畏手畏脚,步子尽可放开。
好比开车,限速牌不该是一块写死的牌子,而该是一套能实时感知路况的系统:路上车多(R大),系统自动压低限速;路上车少,系统自动放宽。固定限速牌的毛病在于分不清凌晨三点的空马路和早高峰的拥堵段,一个数字应付所有情形,不是浪费效率就是制造危险。论文真正想建的,就是这种能感知“车流量”的动态限速机制。
论文还证出另一个关键性质:步长按s* = √(R/c)设定后,每一步造成的预期遗忘量刚好等于事先定下的“遗忘预算”,不多也不少。步长再收一点,学习进度就白费;步长再放一点,遗忘就超支。这个点叫帕累托最优点,即在给定遗忘容忍度下能达到的最佳平衡。
PaLoRA:把公式落地成一套可操作的算法
理论有了,论文给出具体方法PaLoRA,全称Paced Low-Rank Adaptation,译作“配速低秩适应”。
整个框架分两阶段走。第一阶段叫自适应秩压缩:动手学新任务之前,先把此前所有任务攒下的更新矩阵合并起来做SVD分解,只保留能量占比超过阈值(论文取0.99)的那些主成分,由此得到压缩后的历史知识表示,以及与之对应的有效秩R。
SVD分解*:即奇异值分解,一种矩阵分解技术,能把一个矩阵拆成若干按重要性排序的“成分”,重要的成分对应大的奇异值,不重要的成分直接丢掉也几乎不影响整体信息。
这一步的巧处在于,它没有粗暴地假定“每学一个任务,知识库就固定涨某个量”,而是看实际数据的冗余程度来动态决定保留多少维度。论文实验显示,50个任务的场景下,若按任务数乘固定秩这种朴素算法,知识库的秩会线性飙到四百多;换成自适应压缩,实际有效秩涨得慢得多,还会随数据集和任务难度不同而出现差异。可见任务之间确实存在大量可压缩的冗余信息,死按任务数量线性累加纯属浪费。
第二阶段叫秩感知更新配速。训练当前任务时,新任务的梯度先被投影到历史知识的零空间里,以减少对旧知识的直接冲撞;随后针对LoRA中控制更新幅度的那个矩阵(论文称B矩阵),再按√(R/C)把它的梯度缩小一次,C是人工设定的预算常数。
有个细节设计值得一说:论文对LoRA里的A矩阵做了归一化,让它只管表示更新的方向,B矩阵则专管更新幅度的大小。这么一来,配速机制只需缩放B矩阵的梯度,干净利落,不会跟方向信息搅在一起。好比把油门和方向盘拆开调,想控车速就单独踩油门,不必同时兼顾打方向盘的力度,两件事分开调,互不干扰。
零空间投影和配速机制之外,PaLoRA还添了一个额外的正则项,灵感取自一种叫简单正例三元组损失的技术。
三元组损失*:一种让模型学着拉近同类样本、推远不同类样本的训练目标。论文用的是简化版,主要靠拉开当前样本与最近“异类”样本之间的距离来增强分类区分度。
这个正则项用来补零空间投影的副作用。把新任务的更新方向限在一个很窄的子空间里,对旧知识的干扰固然少了,可模型学新任务的自由度也跟着被压缩,等于拿可塑性换了稳定性,正则项就是用来适当找回一些可塑性的。论文也坦承,这个正则项属于经验性的补充设计,不在前面那套数学最优性证明的覆盖范围内——这种把边界划清楚的严谨挺难得。
数字说话:50个任务也扛得住
PaLoRA在CIFAR-100、ImageNet-R、ImageNet-A三个数据集上,分别做了10、20、25、50个任务的切分实验,每组跑五个随机种子,结果取均值和标准差。
| 数据集(50任务) | PaLoRA最终准确率 | 最强基线LoRA–DRS | 提升幅度 |
|---|---|---|---|
| ImageNet-R | **76.56%** | 72.47% | 4.09个百分点 |
| ImageNet-A | **60.90%** | 56.91% | 3.99个百分点 |
| CIFAR-100 | **88.96%** | 87.02% | 1.94个百分点 |
表格里最耐人寻味的是,任务数越多,PaLoRA的优势越明显。10个任务时它领先的幅度只有3点多,到50个任务,领先幅度扩大到4点左右。这正好印证论文的核心论点:历史知识越积越多,固定配速的办法会越来越吃力,而PaLoRA的动态配速机制跟得上节奏。
论文还拿PaLoRA和另一个同类方法SD-LoRA做了正面比较。SD-LoRA的做法是每个任务单独学一个幅度缩放系数;PaLoRA不走这条路,它靠累积的有效秩统一决定配速,不用为每个任务单独学幅度参数。比下来,PaLoRA在所有测试场景里都赢,任务数越多差距越大——50任务场景下,ImageNet-A上的领先幅度冲到29.1个百分点,这个数字相当夸张。
那个√(R/c)里的指数0.5到底是不是最优?论文为此单独做了一组消融实验,把指数α从0.125一路调到2.0,盯着准确率、训练损失和遗忘程度的变化看。结果α=0.5就是最佳点:指数高过0.5,模型偏保守,可塑性吃亏,准确率往下掉;指数低于0.5,模型又稳不住,遗忘明显变多。这组实验等于用数据反过来验证理论推导,给整套数学分析补了一次实证背书。
各个模块的贡献,论文也逐一拆开看了。光用零空间投影,能压住一部分遗忘;再叠上秩感知配速,曲线继续改善;三元组正则项加进来后,曲线几乎是平行上移的——说明这一项主要带来的是可塑性收益,稳定性方面的贡献不大。模块切得这么清楚,读者能看明白每块设计各自在解决什么问题,而不是一句“综合起来效果好”糊弄过去。
兼容性测试的结果有点出人意料。研究者把LoRA换成另一种初始化方式PiSSA,再套上PaLoRA的配速机制,准确率从71.85%直接跳到89.30%,甚至略高于标准LoRA配PaLoRA的88.86%。可见配速定律抓住的是任务积累这个更本质的矛盾,并非冲着某一种LoRA变体量身定做的补丁。
写在后面
读这篇论文,最让我愣住的地方不是那个√(R/c)公式本身,而是论文反复强调的一句话:
这种克制不多见。不少论文会把简化场景下的理论结果直接包装成普适真理,再拿实验结果反过来证明理论多正确。这篇偏偏反着来:先老老实实把理论的适用边界划清楚,再用实验去看边界内的推论在复杂场景下还管不管用。这份态度本身,比公式更值得记一笔。
还有个细节可以单独拎出来说:论文发现减少训练轮数,居然也能拿到类似“调小学习率”的持续学习增益。这事挺反直觉——按常理,轮数少说明模型没训充分,性能该更差才对。但从配速的角度看,道理是相通的:调小学习率也好,减少训练轮数也罢,本质上都在限制参数偏离初始点的距离,殊途同归地踩了刹车。这提示持续学习里“限制更新幅度”可能不止一条实现路径,值得继续往下挖。
论文结尾提出一个问题:这套配速原则能不能搬到LoRA之外的场景,比如其他参数高效微调方法,甚至大语言模型和多模态大模型的持续学习。方向很自然,不过论文也实话实说——怎么定义和衡量“积累的知识量”,放到不同模型结构里可能是完全另一回事,目前还没有现成答案。
一个模型该记住多少过去,才配得上学习多少未来?这个问题恐怕没有放之四海而皆准的答案。但至少现在,手里有了一把用数学标好刻度的尺子。
Q&A
Q1:PaLoRA解决的核心问题是什么?
A:它针对的是LoRA持续学习中的“灾难性遗忘”。传统做法用固定的小学习率限制更新幅度,一刀切,没法随任务积累动态调整限制力度;PaLoRA推导出配速定律,让限制强度能依据历史知识的有效秩自动调节。
Q2:配速定律s*=√(R/c)是怎么来的?
A:论文在单层线性模型下分析发现,缩小更新步长能让遗忘量以平方级速度下降,而新任务的学习进度只是线性下降。这种不对称意味着,用较小的学习代价就能换来较大的遗忘减少;设定遗忘预算再求解最优步长,公式就出来了,其中R是历史知识的有效秩。
Q3:PaLoRA在实验中表现如何?
A:在CIFAR-100、ImageNet-R、ImageNet-A三个数据集上做五种子实验,PaLoRA在所有任务切分下都拿到最高准确率,50任务这种长周期场景优势最突出——ImageNet-R和ImageNet-A上分别领先最强基线4.09和3.99个百分点。