微调与对齐

LoRA 实践:rank 怎么选?为什么优先微调 Attention 的 Q/K/V/O 而不是 FFN?lr 设置有什么技巧?

91学AI·2026/7/26·9 阅读

考察点

这题考的是真训过模型的人和只看过论文的人的差别。面试官想听具体的数字和判断依据:rank 什么任务给多少、alpha 和 r 怎么配比、lr 为什么和全参微调差一个数量级。Q/K/V/O 与 FFN 的取舍背后是对「哪部分参数承载什么能力」的理解,答得好会顺带提到知识注入类任务要带上 FFN。追问常往「loss 不降怎么排查」「过拟合怎么办」走。

参考答案

rank 怎么选:从任务难度和数据量出发

rank 决定低秩增量的表达容量。经验上的起点:风格对齐、格式对齐、简单指令微调这类「浅层行为调整」,r=8 到 16 足够;垂直领域适配(医疗、法律、代码),r=32 到 64 是常见区间;超过 128 很少有必要——参数量和显存线性上涨,但原论文和大量实践都表明 ΔW 的内在秩很低,收益早早饱和。

两个配套判断:一是数据量小(几千条)时 rank 别给大,参数量远超数据支撑能力就是过拟合;二是与其加大 rank,不如先检查 alpha 和 lr 是不是没配对——很多「rank 不够用」其实是更新幅度没放开。

alpha 和 r 的关系:缩放系数是 alpha/r,常见设 alpha = 2r(比如 r=16、alpha=32)。保持 alpha/r 不变只调 r,学习率基本可以不动;如果想让 LoRA 学得更「猛」,调 alpha 比调 lr 更温和。

为什么是 Q/K/V/O:性价比最高的切入点

原论文的实验很直接:同样的参数预算,只调 Q/V 的效果接近全调,把注意力四个投影都加上基本封顶。注意力层是「信息路由」所在——决定 token 之间怎么互相看,微调要改的「行为模式」很大程度是注意力的分配方式,所以低秩增量打在这里性价比最高。

FFN 层(gate/up/down,在 LLaMA 类模型里约占每层参数的三分之二)承载的更多是事实性知识存储。这是关键的取舍点:如果任务是行为/风格/格式对齐,Q/K/V/O 够用,不动 FFN 还能省参数;如果是领域知识注入(让模型记住垂直领域的术语和事实),只调注意力往往不够,需要把 FFN 也纳入 target modules,必要时连 embed_tokens 和 lm_head 一起训。很多团队的默认配置是 all-linear(所有线性层都加 LoRA),参数量仍然是全参数的百分之一到二,但免去了「到底哪些层够」的猜测成本。

学习率:比全参微调大一个数量级

这是 LoRA 实践里最容易踩的坑。全参微调 7B 模型的典型 lr 是 1e-5 到 2e-5,LoRA 的典型 lr 是 1e-4 到 2e-4。原因有两层:一是 LoRA 参数是从零附近开始学的新增参数,没有预训练权重那种「已经在一个好解附近」的约束,需要更大的步子;二是 BA 的乘积结构里,梯度经过两个小矩阵链式传导,有效更新幅度天然被压缩,需要更大的 lr 补偿。

用全参微调的 lr 去训 LoRA,症状是 loss 降得很慢、最终效果差一截,很多人会误判成「rank 不够」或「数据不行」。

其他配套设置:warmup 比例 3% 到 10%,cosine 衰减;batch 偏小(如 8 到 16 的有效 batch)时 lr 往下限靠;epoch 一般 2 到 3 个,SFT 数据质量高时 1 到 2 个就够,epoch 太多是 LoRA 过拟合的头号来源。

一套可直接起步的配方

以 7B 到 8B 模型做指令微调为例,一个稳的起步配置:r=16、alpha=32、dropout=0.05、target 为 Q/K/V/O(知识注入任务改 all-linear)、lr=1e-4、cosine schedule、warmup 3%、bf16、2 到 3 epoch、每半个 epoch 在验证集上看 loss。显存不够就 QLoRA:主干 NF4 量化,LoRA 部分保持 bf16,lr 可以略降。这个配置在大多数 SFT 场景能拿到全参微调 95% 以上的效果,剩下的差距再靠数据和 rank 微调去追。

怎么知道配置合不合理

看三条曲线和一组对照:训练 loss 应该平滑下降,不降先查 lr 和数据格式;验证 loss 和训练 loss 的 gap 拉得过早,说明 rank 大了或 epoch 多了;下游任务评测集指标是最终裁判。和全参微调做对照时,如果差距明显,依次排查:lr 是否太小、target modules 是否漏了 FFN、rank 是否需要上调。

可能的追问

追问:为什么 LoRA 能用更大的学习率而全参微调不行? 全参微调在预训练权重附近做小幅更新,lr 大了会破坏已有能力;LoRA 的可训练参数是 B 初始为零的新增量,初始扰动为零,相当于在一个「空白通道」上学,步子大不会直接冲击冻结的主干。

追问:dropout 在 LoRA 里有用吗? LoRA dropout 只作用在增量路径的输入上。小数据(几千条)配大 rank 时加 0.05 到 0.1 能缓解过拟合;数据量上去以后收益不明显,很多人直接设 0。

追问:多个任务的 LoRA 能合并成一个吗? 直接把多个 LoRA 权重相加有时能工作(各任务相关性强时),但没有保证,常见问题是能力互相干扰。稳妥做法是推理侧多 LoRA 热切换,或者用专门的多任务混合训练,而不是事后合并权重。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.