大模型微调(面经总结)

发布于:2025-05-28 ⋅ 阅读:(31) ⋅ 点赞:(0)

一、LORA篇

1、介绍一下Lora的原理

LoRA 是一种参数高效微调方法,其核心思想是将原始权重矩阵的更新限制在一个低秩空间内,从而显著减少训练参数量。
不同于传统微调,LoRA 将权重的更新项 Δ W \Delta W ΔW 表示为两个低秩矩阵 A ∈ R r × d A \in \mathbb{R}^{r \times d} ARr×d B ∈ R d × r B \in \mathbb{R}^{d \times r} BRd×r 的乘积:
W ′ = W + Δ W = W + B A W' = W + \Delta W = W + BA W=W+ΔW=W+BA
训练阶段只更新两个低秩矩阵 A A A B B B ,原始模型权重 W W W 保持不变;

2、LoRA 是为了解决什么问题提出的?哪些模型适合用 LoRA 微调?什么是低秩分解?

  • LoRA 的核心目标:降低大模型微调成本 参数量从 O ( d 2 ) O(d^2) O(d2) O ( r d ) O(rd) O(rd)
  • 适合含大量线性层的 Transformer 架构模型 比如注意力模块的 Q/K/V 投影矩阵、FFN前馈神经网络
低秩分解:用小矩阵逼近大矩阵

定义:低秩分解是将高维矩阵近似为两个低维矩阵的乘积,以降低表示复杂度。
数学形式:对于 d × d d \times d d×d 的高维矩阵 W W W,找到两个低维矩阵 A ∈ R r × d A \in \mathbb{R}^{r \times d} ARr×d B ∈ R d × r B \in \mathbb{R}^{d \times r} BRd×r 的乘积,使得:

W ≈ B A W \approx BA WBA

  • (A) 是 降维矩阵:将原始 d d d 维空间映射到 r r r 维子空间(提取关键特征)。
  • (B) 是 升维矩阵:将 $r$ 维特征恢复到 d d d 维空间(重构原始空间的更新)。
  • 优势:通过仅优化 (A) 和 (B) 的 2 r d 2rd 2rd 个参数(远小于 d 2 d^2 d2),即可近似表达 (W) 的主要变化,大幅减少计算量。

3、LoRA初始化

LoRA 的初始化通常遵循以下原则:

  • 原始模型权重 W 不变

  • LoRA 的矩阵:

    • A A A 通常使用正态分布初始化:nn.Linear(..., bias=False) 默认初始化
    • B B B 通常初始化为 全零矩阵,这样一开始 Δ W = B A = 0 \Delta W = B A = 0 ΔW=BA=0,模型输出不会被扰动,保证收敛稳定性

如果A也初始化成0,这样都没法更新了。对于

对于 y = B A x y = B A x y=BAx

  • 对 B 的梯度: ∂ L ∂ B = ∂ L ∂ y ⋅ ( A x ) T \displaystyle \frac{\partial L}{\partial B} = \frac{\partial L}{\partial y} \cdot (A x)^T BL=yL(Ax)T
  • 对 A 的梯度: ∂ L ∂ A = B T ⋅ ( ∂ L ∂ y ) ⋅ x T \displaystyle \frac{\partial L}{\partial A} = B^T \cdot \left( \frac{\partial L}{\partial y} \right) \cdot x^T AL=BT(yL)xT
    向量对矩阵求导规则:
    如果:
  • y = B z y = B z y=Bz
  • B ∈ R d × r B \in \mathbb{R}^{d \times r} BRd×r
  • z ∈ R r z \in \mathbb{R}^{r} zRr
    则有:
    ∂ L ∂ B = ∂ L ∂ y ⋅ z T \frac{\partial L}{\partial B} = \frac{\partial L}{\partial y} \cdot z^T BL=yLzT
    📌 这是矩阵微积分中经典的链式法则:
  • ∂ L ∂ y \frac{\partial L}{\partial y} yL d d d 维行向量(外层loss对每个输出的导数)
  • z T z^T zT 1 × r 1 \times r 1×r 行向量
  • 所以它们的乘积是一个 d × r d \times r d×r 的矩阵(和 B 同型)

4、LoRA初始化秩 r 是怎么选的?为什么不选其他值?

LoRA 中的秩 $r$ 是一个超参数,控制低秩矩阵的维度,通常选取值为 4、8、16、32、64,具体视模型规模和任务而定。

  • 太小(如 r = 1 r=1 r=1:表达能力太弱,模型性能下降
  • 太大(如 r = 512 r=512 r=512:虽然逼近能力强,但和原始 full fine-tune 差别不大,丧失了 LoRA 节省资源的意义

📌 一般经验:

模型规模 推荐 LoRA 秩 r
<100M 参数 4-8
100M-1B 16
>1B 模型 32 或 64

5、LoRA家族

参考:LoRA及衍生

5.1 LoRA+

将矩阵 B 的学习率设置得比矩阵 A 的学习率高得多
在这里插入图片描述

4.2 VeRA

VeRA(Very Efficient Rank Adaptation)是一种改进版 LoRA 微调方法,它固定低秩矩阵 A 和 B(随机初始化后冻结,在所有层之间共享;),仅训练缩放向量 d 和 b,实现参数更少、适配性更强的微调。
在这里插入图片描述
等等

4.3 QLoRA

对LoRA进行量化

模型参数精度格式

类型 位数 作用 优缺点
FP32(float32) 32 bits 默认精度,训练常用 精度高,速度慢,占内存大
FP16(float16) 16 bits 常用于推理、混合精度训练 精度适中,速度快,容易溢出
bfloat16 16 bits Google 开发的 float16 变体 精度比 FP16 更稳,适合训练
INT8 8 bits 整数,常用于推理时量化 占用小但训练难,精度可能下降
NF4(4-bit量化) 4 bits 近似表示浮点,QLoRA 中用 占用极小,速度快,精度较低

QLoRA 是一种面向大语言模型的参数高效微调方法,它结合了 4-bit 权重量化和 LoRA adapter 插入,其关键技术点包括三方面:

第一,4-bit量化 NF4 量化(Normalized Float 4)。 相比传统的对称 int4 量化,QLoRA 使用非对称、数据分布感知的 NF4 量化格式,它通过查表(lookup table)方式实现非均匀分桶,可以更好地保留模型参数的数值分布特性。同时配合 double quantization 技术,连 lookup 表都量化,显著降低显存开销。

第二,LoRA

第三,内存调度优化。 QLoRA 使用 bitsandbytes 库的 4bit Linear 替代标准 nn.Linear,并结合 Hugging Face 的 paged optimizer,在训练时自动进行参数分页加载和 offloading,从而有效避免 CUDA OOM,支持在单张 A100 上训练 65B 模型。


网站公告

今日签到

点亮在社区的每一天
去签到