跳到主要内容
本周小抄:LoRA 该往哪几层插

本周小抄:LoRA 该往哪几层插

阿简
阿简

· 阅读约 3 分钟

LoRA 该往哪几层插?

听起来像调参细节。其实每个做微调的人都绕不开它,只是没人把它当回事。

这个月 8 号 arXiv 上挂了一篇,编号 2610.11620,冲的就是这个问题。

这期只有这一条。一条讲透,胜过八条念标题。

论文问的是:适配器放哪儿

参数高效微调能让大模型学会某个专门任务,代价是预训练那点通用能力往下掉。这个权衡同行都熟。

现有的缓解办法分两类,数据回放和正则化。两条路都要额外的东西,要么多喂数据,要么在损失里加约束。

这篇换了个角度:位置本身是不是就有讲究。

有。不同层微调,任务收益不一样,通用能力掉的程度也不一样。各层适合被适配的程度并不相同,而这件事一直没人当回事。

点评:思路不新,被当成默认值忽略了太久。

他们先用 Fisher 排了个序

逐层算经验 Fisher 信息,能看出哪一层对目标任务敏感。

问题是这要反向传播。模型一大,这笔计算就承担不起。有预算的团队无所谓,只有一张显卡的人不行。

所以他们换了个代理指标:输入和输出之间的余弦相似度。只做前向,成本几乎不增加。

多个模型、多个任务上,相似度低的层,Fisher 分数往往高。两个指标对得上。

点评:便宜指标的价值不在准,在于你会真的去用。一个要跑一整晚的排序,没人会跑第二遍,再准也白搭。

然后就有了 LS-LoRA

只在相似度低的层里放可训练的 LoRA adapter,其余层冻着。

数学推理和代码生成上,平均任务表现比标准全层 LoRA 好,常识推理也保留得更多。

点评:注意 baseline 是全层 LoRA。就是大家一直在用的那个默认值。

全层 LoRA 这个 baseline 可能一直在打折扣

所有 LoRA 变体的对比,基本都拿全层 LoRA 当参照物。

参照物本身没优化过位置。

位置要能让它涨一截,那过去那些“某变体比 LoRA 好零点几个点”的结论,里面有多少是因为参照物没调好?我不知道,这话说得有点满,但方向我觉得是对的。

这条是我从这篇里拿走的唯一一件事。其余方法细节,谁爱复现谁去复现。

留给普通人的那部分

不是让你明天就去改配置。

是下次看到那个层参数,知道它背后有一个可以被选的位置,而不是一个天经地义的 all。

简单说,配置里的默认值不是结论,是别人当初懒得选。

我没看懂的那一半

为什么相似度低就代表这层该适配,这个因果我没吃透。

低相似度可能只说明这层在做“改写”的活,输入进去、输出变了样,这种层更值得动,说得通。但也可能只是它离输出近,或者别的什么原因。

论文给的是相关性。相关性在实验里站得住,在解释上还差一层。

先放在这里,等我搞明白再补一句。有读过的愿意回来给我讲讲的,更欢迎。

最后补一句

这类“位置比参数重要”的事,之前也冒过。我自己收过一两次,都不了了之,因为当时没有一个便宜的判据,谁也没法逐层试。

现在有了一个。这才是我收这条的真正理由。

本周就这些。

上面有任何一条你试过、或者觉得我讲错了,欢迎告诉我。讲错的我补,没讲清的我改。

下周见。

阿简
阿简

每周替你把 vibe-coding 圈的大事筛成一张小抄,被讲玄的概念一句话搞懂。

查看主页 →