← 返回题目列表

LoRA 的原理是什么?rank、alpha 和 target_modules 如何选择?

高频 中等 第 9 / 25 题 更新于 2026/07/28
LoRAPEFT低秩分解Adapter

简化版

LoRA 冻结原权重,用两个可训练低秩矩阵表示任务权重增量,显著减少可训练参数和优化器状态。rank 控制增量容量,alpha 控制缩放,target_modules 决定把 LoRA 加到哪些线性层;它们没有跨模型通用的最优值,必须结合任务和评估选择。

详细版

对原权重矩阵 W,LoRA 使用:

W' = W + sBA
s = alpha / r

其中 A 和 B 的中间维度为 r。当 r 远小于输入、输出维度时,可训练参数约为 r(d_in + d_out),小于完整矩阵的 d_in × d_out

  • rank:越大容量和参数越多,但不保证效果单调提升;
  • alpha:调节 LoRA 更新相对基座输出的尺度;
  • target_modules:可只选注意力投影,也可覆盖更多线性层;
  • dropout:小数据时可缓解过拟合;
  • 初始化:通常让初始增量接近零,使训练从基座行为开始。

选参时先用较小 rank 建基线,再比较目标层覆盖、验证集效果、显存和延迟。

完整版教学

记忆钩子:微调题先分清目标是改行为、补知识还是降成本,再谈 SFT、LoRA、QLoRA 和评估上线。

一、为什么低秩增量可能有效

微调虽然允许全部权重变化,但任务所需的有效变化可能集中在较低维子空间。LoRA 不直接压缩原模型,而是限制新增的权重变化为低秩形式。

这是一种建模假设,不是数学保证。任务差异越大,低秩空间越可能成为限制。

二、矩阵是怎么接入的

前向计算同时经过冻结的原线性层和 LoRA 分支,两路结果相加。反向传播只更新低秩矩阵,基座权重不保存梯度和优化器状态。

不同实现对两个矩阵的命名、形状和初始化方向可能相反,但“一个分支初始为零,使整体增量起步为零”的目标相同。

三、rank 与 alpha 不能分开看

rank 增加会提高参数量和表达容量;alpha 决定增量缩放。原始缩放为 alpha/r,部分变体采用其他缩放规则,因此复制配置时要同时确认实现。

高 rank 不等于“学到更多知识”,低 rank 也不天然防止过拟合。应观察验证指标和更新幅度。

四、目标模块怎么选

经典做法常选择注意力的 query、value 投影,现代实践也会覆盖 key、output 和 MLP 线性层。覆盖越广,可训练参数与容量越大。

模块名称依赖模型架构,配置写错可能导致没有层被训练。训练前应打印可训练参数及实际命中的模块。

五、合并与部署

训练后可保留“基座 + Adapter”,便于切换任务;也可把增量合并到基座权重,减少额外推理算子。合并后的模型体积接近完整模型,且必须记录对应基座版本。

多个 LoRA 可以组合,但简单相加可能互相干扰,需要单独评估。

六、常见排查

若损失不下降,检查目标模块、学习率、Mask 和数据格式;若快速过拟合,降低学习率、rank 或训练步数;若目标能力不足,再尝试扩大模块覆盖,而不是只增大 rank。

七、面试拆解算例

微调题可以用一个小项目来拆:基座模型 7B,业务只需要客服问答风格统一,训练集初筛 30,000 条,清洗后留下 8,000 条高质量样本。若全量微调,7B 参数按 BF16 仅权重就约 14GB,训练还要梯度和优化器状态;若用 LoRA,只训练低秩增量,显存压力会明显下降,但表达能力受 rank 和目标模块影响。

base_model: 7B
raw_samples: 30000
clean_samples: 8000
lora_rank: 8 or 16
learning_rate: 1e-5 ~ 2e-4
validation_split: 5% ~ 10%
方案适合目标主要风险验收重点
Prompt临时改格式、少量约束长提示不稳定单轮成功率
RAG接入动态知识检索召回不足引用与命中率
SFT/LoRA固化行为和领域表达遗忘与过拟合回归集与人工偏好
全量微调深度改模型能力成本高、风险大全面评测
数据清洗 -> 训练/验证切分 -> 小步试训 -> 回归评测 -> 灰度上线
   |              |             |             |
 去噪去重       防泄漏       看 loss       看坏例

因此回答「LoRA 的原理是什么?rank、alpha 和 target_modules 如何选择?」时,不要直接说“用微调”。先问目标是什么、数据是否足够干净、是否有动态知识,再选择 Prompt、RAG、PEFT 或全量微调,最后用评估集证明它确实变好了。

八、常见误区与追问

  • 误区:微调就是把业务文档喂给模型让它记住。 微调更适合塑造行为格式、任务风格和领域表达,动态知识与事实更新通常更适合 RAG。
  • 追问:为什么这个问题不用 Prompt 或 RAG 解决? 面试里要先说明目标是改行为、补知识还是接外部数据,再选择微调方案。
  • 误区:训练集越大越好。 SFT 更怕低质、冲突、模板化和泄漏数据;少量高质量样本常常胜过大量脏样本。
  • 追问:上线前你会看哪些评估? 至少要覆盖基准集、人工偏好、回归用例、安全红线、延迟成本和灾难性遗忘检查。
  • 误区:LoRA/QLoRA 省显存就没有代价。 参数高效方法降低训练成本,但 rank、目标模块、量化误差和合并部署都会影响最终质量。

九、加强记忆

LoRA 把“改整张大矩阵”变成“学习一个低秩增量”:rank 管容量,alpha 管尺度,target_modules 管改哪里;参数少是优势,效果仍要靠数据与评估证明。