LoRA 该往哪几层插?
听起来像调参细节。其实每个做微调的人都绕不开它,只是没人把它当回事。
这个月 8 号 arXiv 上挂了一篇,编号 2610.11620,冲的就是这个问题。
这期只有这一条。一条讲透,胜过八条念标题。
论文问的是:适配器放哪儿
参数高效微调能让大模型学会某个专门任务,代价是预训练那点通用能力往下掉。这个权衡同行都熟。
现有的缓解办法分两类,数据回放和正则化。两条路都要额外的东西,要么多喂数据,要么在损失里加约束。
这篇换了个角度:位置本身是不是就有讲究。
有。不同层微调,任务收益不一样,通用能力掉的程度也不一样。各层适合被适配的程度并不相同,而这件事一直没人当回事。
点评:思路不新,被当成默认值忽略了太久。
他们先用 Fisher 排了个序
逐层算经验 Fisher 信息,能看出哪一层对目标任务敏感。
问题是这要反向传播。模型一大,这笔计算就承担不起。有预算的团队无所谓,只有一张显卡的人不行。
所以他们换了个代理指标:输入和输出之间的余弦相似度。只做前向,成本几乎不增加。
多个模型、多个任务上,相似度低的层,Fisher 分数往往高。两个指标对得上。
点评:便宜指标的价值不在准,在于你会真的去用。一个要跑一整晚的排序,没人会跑第二遍,再准也白搭。
然后就有了 LS-LoRA
只在相似度低的层里放可训练的 LoRA adapter,其余层冻着。
数学推理和代码生成上,平均任务表现比标准全层 LoRA 好,常识推理也保留得更多。
点评:注意 baseline 是全层 LoRA。就是大家一直在用的那个默认值。
全层 LoRA 这个 baseline 可能一直在打折扣
所有 LoRA 变体的对比,基本都拿全层 LoRA 当参照物。
参照物本身没优化过位置。
位置要能让它涨一截,那过去那些“某变体比 LoRA 好零点几个点”的结论,里面有多少是因为参照物没调好?我不知道,这话说得有点满,但方向我觉得是对的。
这条是我从这篇里拿走的唯一一件事。其余方法细节,谁爱复现谁去复现。
留给普通人的那部分
不是让你明天就去改配置。
是下次看到那个层参数,知道它背后有一个可以被选的位置,而不是一个天经地义的 all。
简单说,配置里的默认值不是结论,是别人当初懒得选。
我没看懂的那一半
为什么相似度低就代表这层该适配,这个因果我没吃透。
低相似度可能只说明这层在做“改写”的活,输入进去、输出变了样,这种层更值得动,说得通。但也可能只是它离输出近,或者别的什么原因。
论文给的是相关性。相关性在实验里站得住,在解释上还差一层。
先放在这里,等我搞明白再补一句。有读过的愿意回来给我讲讲的,更欢迎。
最后补一句
这类“位置比参数重要”的事,之前也冒过。我自己收过一两次,都不了了之,因为当时没有一个便宜的判据,谁也没法逐层试。
现在有了一个。这才是我收这条的真正理由。
本周就这些。
上面有任何一条你试过、或者觉得我讲错了,欢迎告诉我。讲错的我补,没讲清的我改。
下周见。
