LoRA 入门¶
Mint Recursive 用 LoRA——低秩适配——来训练。LoRA 不更新全部基座权重,而是在其上学习一个小的 adapter。它的开销只有全参数微调的一小部分,在 Mint Recursive 面向的任务上能达到与全参数微调相同的效果。
LoRA 在什么场景下能追平全参数微调¶
- 中小规模 SFT(指令微调、推理数据):LoRA 与全参数微调效果相当。
- 超大规模 SFT 数据集:当数据量超过 adapter 的容量,LoRA 会落后。差距随数据量增大而扩大,而不是突然塌到一个硬下限。
- 强化学习:LoRA 在低秩下就能追平全参数微调——RL 需要的容量很小。
- 超大 batch:LoRA 对超大 batch 的容忍度不如全参数微调,而且加大秩也不能修复这一点(这是矩阵乘积参数化的固有性质,与秩无关)。
- 挂载位置:在所有权重矩阵上都挂 LoRA(attention 和 MLP,含 MoE 层)。只挂在 attention 上,即使把秩加大到参数量相当,效果仍然更差。
学习率¶
学习率是最关键的超参数,而 LoRA 需要比全参数微调大得多的学习率——大约 10 倍。一个常见错误是切到 LoRA 后仍沿用全参数微调的学习率,然后得出 LoRA 效果不好的结论。
按 lora_lr ≈ 10 × full_finetune_lr 来选学习率。最优学习率与秩无关:用同一个学习率在不同秩下训练,前几步的轨迹会重合。
LoRA 到底是什么¶
给定权重矩阵 (W),LoRA 用 (W' = W + BA) 替换它,其中 (B) 为 (n \times r),(A) 为 (r \times n),(r \ll n) 即秩。Mint Recursive 的默认秩为 32。
低秩这个框架并不是重点。更简单的理解方式是:LoRA 是对参数空间的一次随机投影,恰好训练起来很便宜。对 RL 和小规模 SFT 而言,你只需学习很少的信息,投影出的子空间已经足够。
如何选择秩¶
- 默认
rank=32适用于 RL 和小规模 SFT。 - 大规模 SFT 数据集:调大秩。一个粗略的经验是,只要 adapter 的参数量至少与你训练的 completion token 数(即
weight=1的 token 数)相当,LoRA 就能正常工作。 - RL:小秩与大秩、全参数微调效果相当。