LoRA 的超参数应该怎么设置?有什么经验法则?
LoRA 的超参数应该怎么设置?有什么经验法则?
这道题考的是你对 LoRA 核心超参数的理解深度。面试官想看你能不能说清楚每个参数"是什么、怎么调、为什么这么调",而不是只会背几个默认值。
我从四个方面来讲:万能起步配置、核心参数(秩和Alpha)、最容易踩的坑(学习率和周期)、以及加分项(过拟合和显存优化)。
万能起步配置:先套公式
拿到新项目不知道怎么调?先记住这套"不会翻车"的起步配置:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| r | 8~64 | 秩,越大学得越多 |
| alpha | r 的 1-2 倍 | 通常设为 r 或 2r |
| 学习率 | 1e-4 | LoRA 专用 |
| 训练周期 | 1~3 | 一般 2 个最好 |
| dropout | 0~0.1 | 防止过拟合 |
| weight_decay | 0.01~0.1 | 正则化 |
就像用相机,先套个人像模式预设,拍出来不会太差。
秩 (r) 和 Alpha:决定"学多少"的核心旋钮
r 是 LoRA 的灵魂参数,它决定了低秩矩阵的维度,也就是可训练参数量。
r 越大,能学的知识越多,但同时:
- 显存占用增加
- 过拟合风险上升
- 训练变慢
实战经验:
- 简单任务(情感分类、意图识别):r=4~8 够了
- 中等任务(对话生成、文本风格):r=8~32
- 复杂任务(多语言、代码生成、长文档):r=32~64
Alpha 是什么?
Alpha 是缩放因子。LoRA 的实际调整幅度 = (alpha / r) × 梯度。
所以 alpha/r 的比值很关键:
- alpha = r:调整幅度为 1倍
- alpha = 2r:调整幅度为 2倍(最常用)
简单理解:alpha 越大,LoRA 对原模型的影响越大。
一个容易搞混的点:r=8, alpha=16 和 r=16, alpha=32 的调整幅度是一样的!因为都是 2倍。但前者的可训练参数更少,更省显存。
学习率和训练周期:新人最常踩的坑
学习率:别用默认的 1e-3
LoRA 的学习率和全量微调不一样。全量微调可以用 1e-3 到 1e-2,但 LoRA 推荐用 1e-4。
为什么?
全量微调时,整个模型的参数都在更新,每个参数的梯度很小,学习率大点没事。
LoRA 只训练很小一部分参数(可能只有 0.1%),这些参数承担了"全部的调整责任",梯度幅度更大。学习率太大就会震荡不收敛。
经验法则:
- 从 1e-4 开始
- 效果不好先调学习率,再调其他参数
- r 越大,学习率可以稍微小一点
训练周期:1-3 个,千万别贪多
LoRA 收敛很快,一般 1-3 个 epoch 就够了。
为什么不能多练?
这和过拟合有关。LoRA 训练的是低秩矩阵,它的能力是有限的。训练太多轮,它会"死记硬背"训练数据的答案,泛化能力下降。
类比一下:考试前做真题,做 2 遍能记住题型,做 20 遍就只能背答案了。
怎么判断训练够了?
看验证集 loss。如果验证 loss 开始上升,但训练 loss 还在下降,这就是过拟合的信号,赶紧停。
过拟合应对:六种武器
模型过拟合了怎么办?按这个顺序尝试:
- 减少 r - 减小可训练参数量,让模型"记不住那么多"
- 减少 epoch - 少练几轮
- 增加 dropout - 训练时随机丢弃一些连接,增加泛化能力
- 增加 weight_decay - 限制参数大小,防止过度调整
- 降低 alpha - 减小调整幅度
- 增加数据量 - 根本解法
实际场景中,优先减少 r 或 epoch,效果最明显。
显存优化:QLoRA 技巧
如果显存不够用,有两个思路:
方案一:减小 batch size + 梯度累积
batch size=1,累积 32 步,等效 batch size=32,但显存占用大幅减少。
方案二:QLoRA
用 4-bit 量化的基座模型 + LoRA,显存占用减少约 33%,代价是训练时间增加约 39%。
这是一个经典的"显存-速度" tradeoff。根据你的硬件情况选择。
QLoRA 的额外参数:
- nf4(4-bit 归一化浮点):适合权重分布均匀的任务
- bnb(BitsAndBytes)量化:HuggingFace 默认方案,兼容性更好
优化器和调度器:容易被忽略的细节
很多人在优化器上纠结半天,其实 LoRA 场景下,优化器选择影响很小。
- AdamW vs SGD:显存差异有,但 LoRA 可训练参数本来就很小,实际差异可以忽略
- 调度器:用 linear 或 cosine 就行,不需要复杂配置
类比一下:优化器像是不同品牌的汽油,百公里油耗差异在 LoRA 场景下微乎其微。
唯一要注意的:如果用 QLoRA,配合 paged optimizer 可以更好管理显存。
面试怎么答
基础版
LoRA 的核心超参数有这几个:
- r(秩):控制可训练参数量,一般 8~64 之间,复杂任务选大值
- alpha(缩放因子):通常设为 r 或 2r,决定调整幅度
- 学习率:1e-4,比全量微调小 10 倍
- 训练周期:1~3 个 epoch,LoRA 收敛很快,不能多练
过拟合的时候,优先减小 r 或 epoch,也可以增加 dropout 和 weight_decay。显存不够用可以用 QLoRA,节省 33% 显存。
加分版
在基础版基础上,加这些:
- 理解 alpha/r 比值决定调整幅度,r=8 alpha=16 和 r=16 alpha=32 效果等效
- 知道 batch size + 梯度累积的等效关系
- 了解 QLoRA 的 4-bit 量化方案,以及 nf4 和 bnb 的适用场景
- 提到 paged optimizer 在 QLoRA 中的作用
- 能说清楚优化器选择对 LoRA 影响很小这个关键点
一句话总结
LoRA 超参数的核心是:r 决定容量、alpha 决定幅度、学习率要小(1e-4)、周期要短(1-3个),过拟合就减小 r 或 epoch。
