深度解读 · 模型训练 / 微调
LoRA 无悔指南
低秩微调(LoRA)到底能不能追平"全参微调"?答案是:只要做对几个关键细节,它在绝大多数后训练场景下表现完全一致——还更省算力。
原文:Thinking Machines Lab · Connectionism · 2025.09.29 · 作者 John Schulman(PPO 之父、OpenAI 联合创始人)
一句话抓住重点
过去大家含糊地说"LoRA 不如全参"。这篇用大量实验给出明确边界:只要 LoRA 加在所有层(尤其 MLP/MoE) 且 数据不超 adapter 容量,监督微调与全参的学习曲线完全重合;强化学习场景哪怕秩低到 1 也能追平——因为策略梯度每条轨迹只携带约 1 bit 信息。最优学习率约为全参 10×,每步只花 ⅔ FLOPs。
01 · 动机
为什么要关心 LoRA
今天的大模型动辄上万亿参数、预训练吃掉几十万亿 token。但后训练用的数据小得多、领域也窄。用一整个 TB 级权重去承载几 GB、甚至几 MB 数据带来的更新,直觉上太浪费——这就是参数高效微调(PEFT)的动机。
最主流的方法就是 LoRA:把原始权重矩阵 W 换成 W' = W + (α/r)·BA,其中 B、A 是两个小矩阵,参数量远小于 W。它用一个低维表示来承载微调带来的更新。除了省钱,LoRA 还有几个工程优势:
🏢
多租户服务
原始权重不变,一台推理服务器能同时挂很多 adapter 批量采样(vLLM/SGLang 都支持)
💾
训练显存小
不必为所有权重存 fp32 梯度与优化器状态,训练布局只比采样稍大
📦
易加载迁移
adapter 体积小,机器间传输、装载都快
❓
但有个老问题
学术界一直含糊:LoRA 相比全参到底差多少?本文要回答它
02 · 核心发现
什么时候 LoRA = 全参微调
作者在 Llama 3、Qwen3(含 MoE)上跑了大量监督学习 + RL 实验,用 log loss 而非采样评测以求通用。三条关键结论:
① 数据没超容量时,监督微调完全一致
在中小规模指令微调 / 推理数据集上,LoRA 与全参学习曲线几乎重合——loss 随训练步数对数线性下降。只有当数据量超过 LoRA 容量(低秩 adapter 装不下了),曲线才会掉队。注意不是撞到一个无法逾越的下限,而是训练效率随"容量/数据量之比"变差。
② 必须加在所有层,尤其 MLP/MoE
2021 原版论文建议只加注意力矩阵,很多后续工作照搬。但本文发现:只加注意力层会明显拖慢学习,即便用更高秩把参数量补齐也没用。
| LoRA 配置(Llama-3.1-8B) | 参数量 | 效果 |
| attn-only, rank=256 | 0.25B | 最差 |
| mlp-only, rank=128 | 0.24B | 反而更好 ✓ |
| mlp-only, rank=256 | 0.49B | 好 |
| all-layers, rank=256 | 0.70B | 最好 |
💡 解读:问题不在参数多少,而在"加在哪儿"
参数量相近的 attn-256(0.25B)还不如 mlp-128(0.24B)。作者用
经验神经正切核(eNTK)解释:影响核函数最大的是参数最多的层,只有 LoRA 覆盖到 MLP/MoE 这些"参数大户",LoRA 的训练动力学才约等于全参。
③ RL 场景:秩 1 就够,因为 RL 学得"很少"
这是最反直觉也最实用的发现。LoRA 在策略梯度 RL 上完全追平全参,哪怕秩=1。背后是一个信息论论证:
# 监督学习 vs 强化学习:每条样本学到多少信息
监督学习:每条样本 ≈ O(token 数) bit
策略梯度 RL:每条轨迹 ≈ O(1) bit (只有末尾一个 advantage)
→ 一条轨迹上千 token 时,RL 每 token 吸收信息少约 1000×
# MATH 实验:1万题 × 32 采样 ≈ 需吸收 32 万 bit
而 rank-1 LoRA(Llama-3.1-8B) 就有 300 万参数 → 容量绰绰有余
作者甚至预测 DeepSeek-R1-Zero(5.3M 轨迹)也能用低秩 LoRA 复现。
03 · 调参实操
别被四个超参吓到
采纳 Hu 等人的参数化 W' = W + (α/r)·BA。看似要调四个超参(α、LR_A、LR_B、init_A),其实存在一个两参数变换不变性,砍掉两个自由度——真正有效的只有两个。
⚡ 1/r 缩放:最优学习率几乎与秩无关
那个 1/r 前置因子让最优学习率近似与秩无关——训练初期不同秩的学习曲线甚至
完全重合(作者一度怀疑写了 bug 把 rank 忽略了)。rank=4 到 512 之间,最优 LR 变化不到 2 倍。
💡 一句话调参法
直接用 HuggingFace
peft 默认参数(α=32、A 均匀初始化、B 置零、AB 同学习率),把
全参的最优学习率 ×10 拿来用即可——短训练(<100 步)用 ×15。作者明确表示"试不出比这更好的"。
唯一软肋——批大小:在某些设置下 LoRA 对大批大小容忍度不如全参(批越大 loss 惩罚越明显,且与秩无关,是 BA 矩阵乘积参数化本身的优化动力学问题)。不过两者都在较小批时取得最佳 loss,实践影响可能不大。
04 · 无悔区间
两个条件同时满足,LoRA 就和全参没差别
条件 1
加在所有层
尤其承载大部分参数的 MLP/MoE 层。满足后,训练一开始动力学就和全参一致。
+
条件 2
不受容量约束
可训练参数量超过待学信息量(可用数据集大小估算)。在此之前 LoRA 一路"长得像"全参。
→
结果
低悔区间
LoRA ≈ 全参,且覆盖绝大多数后训练场景。
算力账:LoRA 更划算
LoRA 把"更新整个 W"换成更新两个小矩阵,前向-反向总开销约为全参的 ⅔。按算力(而非步数)算,往往更省。
🔥 联网补充:作者来头不小
John Schulman 是 PPO、TRPO 的提出者、OpenAI 联合创始人、ChatGPT RLHF 体系核心人物,2024 年离开 OpenAI 加入 Thinking Machines Lab(前 OpenAI CTO Mira Murati 创办)。由他来谈"RL 后训练只需极低容量",分量很重。本文实验跑在 TML 的
Tinker 微调 API 上。
05 · 对你的框架
💡 对 trainer 的落地启示
🧩
MoE 的 LoRA 按专家拆
每个专家单独训一个 LoRA,秩 = 总秩 ÷ 激活专家数(Qwen3 MoE 为 8),保持参数比一致
🎯
RL 后训练大胆用低秩
做 GRPO/策略梯度类训练时,rank 不必给高,省显存还不掉点
📐
学习率迁移规则
已有全参最优 LR,直接 ×10 给 LoRA,短跑(<100 步)用 ×15
🔬
待解工程问题
MoE 上 LoRA 如何与张量并行/专家并行兼容,是作者点名的开放问题——正是大规模 MoE 框架的重点