跳转至

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:小秩与大秩、全参数微调效果相当。