LoRA 实操超参:rank/alpha/目标模块

02-PEFT原理 核心≈ 20 分钟 #LoRA#超参#实操 reviewed
我的状态:

前置知识点

一句话定义

LoRA 的效果由四个超参决定:秩 r(容量)、缩放 α(扰动幅度)、dropout(正则)、目标模块(作用位置),本节给出每个旋钮的默认值与调节依据。

为什么重要

同一份数据,r 与目标模块选得对,效果可差 10 个点以上;选错模块甚至完全学不动。这四个超参是 LoRA 微调中「性价比最高的一组实验变量」,也是多数「LoRA 效果不如预期」帖子的真正病因。

前置知识

kp-005 的 ΔW=BA 分解与 α/r 缩放的含义。

核心概念

  • rank r:ΔW 的秩上限,决定表达容量。常用 8/16/32/64。
  • alpha α:分支输出乘以 α/r。常用值为 r 的 1-2 倍(如 r=16, α=32)。
  • lora_dropout:LoRA 分支上的 dropout,常 0.05-0.1,数据少时防过拟合。
  • target_modules:对哪些线性层加 LoRA。注意力 q/k/v/o 投影是底线,FFN 的 gate/up/down 加上通常更强。

原理与机制

各旋钮的调节逻辑:

  • r 与任务复杂度相关:格式改写、语气调整这类低复杂度任务 r=8-16 足够;涉及领域推理或多种子任务的 r=32-64;继续再大收益递减且过拟合风险上升。
  • α 的作用是解耦「容量」与「步长」:调 r 会同时改变参数量与 BA 输出的尺度,α 保持固定(如 32)可让不同 r 的实验更可比;等价地,α/r 像该分支专属的学习率倍率。
  • 目标模块影响信息流向:只加 q/v 是早期论文的省参数配置;现代实践普遍对注意力全部投影 + FFN 加 LoRA(如 all-linear),在指令遵循任务上普遍优于仅 q/v。
  • 经验学习率配合:LoRA 参数少,可用比全参大 5-10 倍的学习率(1e-4 ~ 3e-4),详见 kp-016。

图示

容量 r:   8 ── 16 ── 32 ── 64 ── 128
效果:     89%   92%   94%   94%   91%(过拟合)
成本:     ▂     ▃     ▄     ▆     █   (训练时间/显存)
结论: 取收益拐点, 默认 16 起步

直观类比

r 是「补习班课时数」,α 是「老师讲课的音量」,目标模块是「补习哪几门课」。课时太少学不会,太多会疲劳(过拟合);音量过大淹没原有人格;只补一门课(仅 q/v)常常不够。

实例或案例

一个合同抽取任务的三组对照(同数据、同 3 epoch):仅 q_proj/v_proj、r=16 → F1 0.71;全线性层、r=16 → F1 0.83;全线性层、r=8 → F1 0.82。结论:目标模块的影响大于 r,先开满线性层再谈 r。

操作步骤

  1. 起步配置:r=16, alpha=32, dropout=0.05, target_modules="all-linear"。
  2. 跑 500 step 看 loss 是否稳定下降,用 20 条固定样例生成观察格式是否开始收敛。
  3. 学不动(loss 平、输出不变):目标模块加满 → r 提到 32 → 检查数据格式(kp-014)。
  4. 验证集过拟合(train 降 eval 升):r 降回 16、dropout 提到 0.1、减 epoch。
  5. 每次只动一个超参,结果记入实验表(见 kp-026)。

排错清单

  • print_trainable_parameters 显示 0:target_modules 名字与模型不匹配。
  • adapter 文件异常大(数百 MB):r 或目标模块开得过大,或误存了全模型。
  • 同配置两次结果差异大:未固定随机种子(含 LoRA 初始化的种子)。
  • 合并后效果与训练时不一致:核对合并脚本里的 α/r 缩放与精度,见 kp-009。

常见误区

  • r 越大越好:超过任务所需后只剩过拟合与显存成本,多数场景 r=16-32 是拐点。
  • 忽略 target_modules 只调 r:作用位置错了,调 r 无济于事。
  • 把 alpha 与学习率混为一谈:α 是前向的静态缩放,学习率是优化步长,二者叠加决定有效更新幅度但语义完全不同。

与其他知识点的关系

与全局超参(学习率/批量)的配合见 kp-016;QLoRA 场景下这些超参的取值差异见 kp-007;训练效果异常的系统性排查见 kp-030。

延伸阅读

本节不适用:本节是工程经验汇总,无单篇权威文献;各家的推荐值请以所用框架文档的默认配置为基线做对照实验。

自测题

  1. r=16 时 alpha 应该取多少?为什么?

答:常取 32(α/r=2)。α 保持与 r 无关的固定值可以让不同 r 的实验可比,α/r 决定分支的等效扰动幅度。

  1. LoRA 学不动的排查顺序是什么?

答:先确认 target_modules 命中且 trainable params 非零,再开满全部线性层,然后升 r,最后回头检查数据与模板格式。

  1. 数据只有 500 条,r 应该偏大还是偏小?

答:偏小(8-16)并配合 dropout 0.1 与少 epoch——小数据下容量越大过拟合越快。

相关知识点