实习 | 兽人永不为奴,但偶尔可以

终于编好了实习的简历。这个帖子记录一下我准备的可能的问题以及面试中的问题。


微调

LoRA:Low-Rank Adaptation of LLM

  • 优点是什么?
    • 参数少:0.1%-0.01%
    • 速度快:训练和部署
    • 模块化:不影响原始模型
      • 避免灾难性遗忘
      • 存储效率高
      • 快速切换
      • 兼容性强
  • 为什么可以进行低秩分解?
    • 奇异值分解
    • 大部分信息集中在了少量的奇异值上。
    • LoRA论文中GPT-3上的$\Delta W$的前10-20个奇异值就可以保留90%以上的信息
    • 由于$\Delta W$的秩很低,可以用A和B直接构造,不需要完整的SVD计算,更加高效

一个$512\times 512$的权重矩阵,全微调可能需要$512\times 512$的调整参数量,LoRA如果r=8,只需要$512\times 8$和$8\times 512$的参数变化。

  • LoRA如何更新参数?
    • 反向传播算法。具体来说是$W’=W+\Delta W=W+A\times B$。
    • Step1:初始化
      • $W$是预训练好的权重
      • $A$通常用小的随机值初始化
      • $B$初始可以设置为全0,这样$\Delta W$=0,不干扰原始模型
    • Step2:计算损失
      • 对于输入X,前向传播计算得到输出$Y_{pred}=(W+A\times B)\times X$。
      • 根据任务定义损失函数$L=Loss(Y_{true},Y_{pred})$。
    • Step3:反向传播更新
      • 计算损失$L$对$A$和$B$的梯度
      • 梯度下降更新
    • Step4:迭代优化
      • 重复Step2和Step3,直到损失收敛或者达到预定训练轮次
      • 最终得到$A$和$B$
  • 用在Transformer的哪个层?
    • 注意力层中的$W_q$和$W_v$较多,其他的收益有限
    • 前馈层的LoRA可能会用在较大模型上
  • LoRA改进版本
    • LoRA+:加速
      • 靠近输出的权重B应该对梯度变化更敏感,需要更大调整。所以调整得B比A的学习率高
    • DoRA:稳定高性能
      • 把预训练权重矩阵分解为幅度和方向$W=m\times V$
      • 微调的时候调整方向$V$,幅度单独训练
      • 训练量增加,性能高
    • rsLoRA:稳定
      • 引入动态秩调整和稳定化因子优化训练
      • $W’=W+\Delta W=W+(\frac{\alpha}{\sqrt{r}})A\times B$。
      • 训练更稳定
    • PiSSA:收敛快
      • 优化初始化,把A和B矩阵初始化使用SVD分解
    • GaLore:内存极低
  • LoRA需要的超参数

以下是 LLaMA Factory 微调中最重要的超参数及其核心作用的总结表格。这些参数直接决定了微调的成功与否、效率以及资源消耗。

参数类别 参数名 核心作用 关键建议与说明
训练核心​ 学习率​ 控制模型参数更新的步长,是影响收敛速度和稳定性的最关键参数。 LoRA/QLoRA:可稍大,常用 1e-45e-4
全量微调:需谨慎,常用 1e-53e-5
per_device_train_batch_size
gradient_accumulation_steps
共同决定有效批处理大小,影响训练稳定性和显存占用。 有效批大小 = 批大小 × 累积步数。建议将此值保持在 16 或以上以获得稳定训练。批大小受显存限制,多用累积步数来补偿。
LoRA核心​ lora_rank 决定LoRA适配器的能力与参数数量。秩越高,拟合能力越强,但也更易过拟合。 通用任务从 8、16 或 32​ 开始尝试。复杂任务可尝试 64 或更高。
lora_alpha 控制LoRA适配器输出的缩放因子,与 lora_rank配合调节更新强度。 一个稳定的经验法则是设置为 lora_rank的两倍(例如 rank=16, alpha=32)。
流程控制​ num_train_epochs 控制整个数据集训练的遍数,直接影响是否过拟合。 指令微调通常 1-3 个 epoch​ 足够。务必监视验证集损失,考虑启用早停。
数据格式​ template 指定数据格式模板,将数据转化为模型熟知的对话格式。选错会导致模型无法理解指令。 如果不确定,优先使用 default​ 或与预训练模型对应的模板(如 qwen, llama3)。这是最易忽略但致命的一环。
资源与长度​ cutoff_len 设置单条训练数据的最大长度,直接影响显存占用。 在显存允许下,根据任务实际需要的上下文长度设置。过短会丢失信息,过长浪费资源。
使用 Hugo 构建
主题 StackJimmy 设计