LoRA核心公式
LoRA核心公式
flyfish
低秩矩阵分解如何通过“降维-升维”的线性变换,用极少的参数近似表示复杂的权重更新
原始矩阵 vs 低秩近似
一、基础设定:构造一个高维原始矩阵
假设我们有一个预训练模型的权重矩阵 W 0 W_0 W0,维度为 4 × 4 4 \times 4 4×4,表示如下(保留两位小数):
W 0 = [ 0.80 0.20 0.30 0.70 0.40 0.90 0.10 0.60 0.30 0.50 0.70 0.20 0.60 0.10 0.80 0.40 ] W_0 = \begin{bmatrix} 0.80 & 0.20 & 0.30 & 0.70 \\ 0.40 & 0.90 & 0.10 & 0.60 \\ 0.30 & 0.50 & 0.70 & 0.20 \\ 0.60 & 0.10 & 0.80 & 0.40 \end{bmatrix} W0= 0.800.400.300.600.200.900.500.100.300.100.700.800.700.600.200.40
矩阵观察:
- 这是一个随机生成的矩阵,假设其秩为 4(满秩),意味着所有行/列向量线性无关。
- 在实际大模型中,权重矩阵维度通常为 d × d d \times d d×d(如 d = 768 d=768 d=768或 1024 1024 1024),参数总量为 d 2 d^2 d2,计算和存储成本极高。
二、低秩分解:用 r = 2 r=2 r=2近似原始矩阵
LoRA 引入两个低秩矩阵 A A A(降维矩阵)和 B B B(升维矩阵),设 r = 2 r=2 r=2(远小于 d = 4 d=4 d=4):
1. 初始化低秩矩阵
-
降维矩阵 A ∈ R r × d A \in \mathbb{R}^{r \times d} A∈Rr×d(随机高斯初始化):
A = [ 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 ] A = \begin{bmatrix} 0.10 & 0.20 & 0.30 & 0.40 \\ 0.50 & 0.60 & 0.70 & 0.80 \end{bmatrix} A=[0.100.500.200.600.300.700.400.80]- 每一行代表低维空间的一个基向量,将 4 维输入压缩到 2 维。
-
升维矩阵 B ∈ R d × r B \in \mathbb{R}^{d \times r} B∈Rd×r(初始化为零矩阵):
B = [ 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ] B = \begin{bmatrix} 0.00 & 0.00 \\ 0.00 & 0.00 \\ 0.00 & 0.00 \\ 0.00 & 0.00 \end{bmatrix} B= 0.000.000.000.000.000.000.000.00 - 初始全零保证训练初期不影响原始权重 W 0 W_0 W0。
2. 训练后更新低秩矩阵
假设经过下游任务微调, B B B被更新为(示例值):
B = [ 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 ] B = \begin{bmatrix} 0.10 & 0.20 \\ 0.30 & 0.40 \\ 0.50 & 0.60 \\ 0.70 & 0.80 \end{bmatrix} B= 0.100.300.500.700.200.400.600.80
3. 计算低秩更新量 Δ W = A B \Delta W = AB ΔW=AB
矩阵乘法过程:
-
计算 A B AB AB的第 1 行第 1 列元素:
( A B ) 1 , 1 = A 1 , 1 B 1 , 1 + A 1 , 2 B 2 , 1 + A 1 , 3 B 3 , 1 + A 1 , 4 B 4 , 1 (AB)_{1,1} = A_{1,1}B_{1,1} + A_{1,2}B_{2,1} + A_{1,3}B_{3,1} + A_{1,4}B_{4,1} (AB)1,1=A1,1B1,1+A1,2B2,1+A1,3B3,1+A1,4B4,1
= 0.10 × 0.10 + 0.20 × 0.30 + 0.30 × 0.50 + 0.40 × 0.70 = 0.10 + 0.06 + 0.15 + 0.28 = 0.59 = 0.10 \times 0.10 + 0.20 \times 0.30 + 0.30 \times 0.50 + 0.40 \times 0.70 = 0.10 + 0.06 + 0.15 + 0.28 = 0.59 =0.10×0.10+0.20×0.30+0.30×0.50+0.40×0.70=0.10+0.06+0.15+0.28=0.59 -
完整计算 A B AB AB:
A B = [ 0.59 0.74 1.39 1.74 2.19 2.74 2.99 3.74 ] AB = \begin{bmatrix} 0.59 & 0.74 \\ 1.39 & 1.74 \\ 2.19 & 2.74 \\ 2.99 & 3.74 \end{bmatrix} AB= 0.591.392.192.990.741.742.743.74
4. 构造低秩近似矩阵 W = W 0 + A B W = W_0 + AB W=W0+AB
假设缩放因子 α = r = 2 \alpha = r = 2 α=r=2,则 α / r = 1 \alpha/r = 1 α/r=1,最终权重为:
W = W 0 + A B = [ 0.80 + 0.59 0.20 + 0.74 0.30 + 0.59 0.70 + 0.74 0.40 + 1.39 0.90 + 1.74 0.10 + 1.39 0.60 + 1.74 0.30 + 2.19 0.50 + 2.74 0.70 + 2.19 0.20 + 2.74 0.60 + 2.99 0.10 + 3.74 0.80 + 2.99 0.40 + 3.74 ] W = W_0 + AB = \begin{bmatrix} 0.80+0.59 & 0.20+0.74 & 0.30+0.59 & 0.70+0.74 \\ 0.40+1.39 & 0.90+1.74 & 0.10+1.39 & 0.60+1.74 \\ 0.30+2.19 & 0.50+2.74 & 0.70+2.19 & 0.20+2.74 \\ 0.60+2.99 & 0.10+3.74 & 0.80+2.99 & 0.40+3.74 \end{bmatrix} W=W0+AB= 0.80+0.590.40+1.390.30+2.190.60+2.990.20+0.740.90+1.740.50+2.740.10+3.740.30+0.590.10+1.390.70+2.190.80+2.990.70+0.740.60+1.740.20+2.740.40+3.74
= [ 1.39 0.94 0.89 1.44 1.79 2.64 1.49 2.34 2.49 3.24 2.89 2.94 3.59 3.84 3.79 4.14 ] = \begin{bmatrix} 1.39 & 0.94 & 0.89 & 1.44 \\ 1.79 & 2.64 & 1.49 & 2.34 \\ 2.49 & 3.24 & 2.89 & 2.94 \\ 3.59 & 3.84 & 3.79 & 4.14 \end{bmatrix} = 1.391.792.493.590.942.643.243.840.891.492.893.791.442.342.944.14
三、参数效率对比:低秩分解的“压缩魔力”
-
原始矩阵 W 0 W_0 W0:
- 维度: 4 × 4 4 \times 4 4×4,参数总量 = 4 × 4 = 16 4 \times 4 = 16 4×4=16。
-
低秩矩阵 A A A和 B B B:
- A A A维度: 2 × 4 2 \times 4 2×4,参数 = 2 × 4 = 8 2 \times 4 = 8 2×4=8;
- B B B维度: 4 × 2 4 \times 2 4×2,参数 = 4 × 2 = 8 4 \times 2 = 8 4×2=8;
- 总参数 = 8 + 8 = 16 8 + 8 = 16 8+8=16(与原始矩阵相同,此例中 d = 4 , r = 2 d=4, r=2 d=4,r=2,实际大模型中 r ≪ d r \ll d r≪d时参数会大幅减少)。
-
实际大模型场景( d = 1024 , r = 8 d=1024, r=8 d=1024,r=8):
- 原始参数: 1024 × 1024 = 1 , 048 , 576 1024 \times 1024 = 1,048,576 1024×1024=1,048,576;
- LoRA 参数: 1024 × 8 + 8 × 1024 = 16 , 384 1024 \times 8 + 8 \times 1024 = 16,384 1024×8+8×1024=16,384(压缩率 16384 1048576 = 1.56 % \frac{16384}{1048576} = 1.56\% 104857616384=1.56%)。
四、低秩近似的几何意义:从“满空间”到“一维流形”
- 原始矩阵 W 0 W_0 W0:权重分布在 4×4=16 维空间中,参数间可能存在复杂关联。
- 低秩矩阵 A B AB AB:权重更新被限制在 r = 2 r=2 r=2维子空间中,即所有可能的 A B AB AB矩阵可表示为:
A B = ∑ i = 1 2 a i b i T AB = \sum_{i=1}^2 \mathbf{a}_i \mathbf{b}_i^T AB=i=1∑2aibiT
其中 a i \mathbf{a}_i ai是 A A A的行向量, b i T \mathbf{b}_i^T biT是 B B B的列向量。这意味着权重更新只能沿着 a i b i T \mathbf{a}_i \mathbf{b}_i^T aibiT定义的“方向”变化,大幅减少搜索空间。
五、低秩分解的“信息过滤”作用
假设原始矩阵 W 0 W_0 W0包含:
- 预训练学到的通用知识(如语言模型中的语法规则);
- 微调需要增强的任务特定知识(如情感分析中的情感极性特征)。
低秩矩阵 A B AB AB相当于一个“过滤器”:
- 保留 W 0 W_0 W0中的通用知识(因 W 0 W_0 W0冻结);
- 仅学习任务特定知识的低维表示(如情感分析中, A B AB AB可能强化“积极/消极”相关的权重模式)。
六、直观比喻:用“调色盘”理解低秩近似
- 原始矩阵 W 0 W_0 W0:相当于一幅已经完成的“预训练画作”,包含丰富的色彩(知识)。
- 低秩矩阵 A B AB AB:相当于一个“任务特定调色盘”,仅用少数几种颜色(低秩维度 r r r)在原作上叠加新的风格(如将风景画调整为抽象画)。
- 缩放因子 α \alpha α:相当于调色盘的“颜料浓度”,控制新风格的强度,避免覆盖原作的基础构图。
七、误差分析:低秩近似的“损失与收益”
- 近似误差:计算原始矩阵 W 0 W_0 W0与低秩近似矩阵 W W W的 Frobenius 范数误差:
∥ W − W 0 ∥ F = ∑ i , j ( W i , j − W 0 , i , j ) 2 = 0.59 2 + 0.74 2 + ⋯ + 3.74 2 ≈ 8.97 \|W - W_0\|_F = \sqrt{\sum_{i,j} (W_{i,j} - W_{0,i,j})^2} = \sqrt{0.59^2 + 0.74^2 + \dots + 3.74^2} \approx 8.97 ∥W−W0∥F=i,j∑(Wi,j−W0,i,j)2=0.592+0.742+⋯+3.742≈8.97
误差大小取决于 r r r的选择: r r r越大,误差越小,但参数越多。
LoRA(Low-Rank Adaptation)的本质是一种参数高效微调技术,其核心思想是通过低秩矩阵分解来近似表示大模型权重的任务特定更新,从而将可训练参数从传统全量微调的数十亿规模降至百万级别。具体来说,LoRA在冻结预训练模型原始权重( W 0 W_0 W0)的基础上,引入两个低秩矩阵 A A A(降维)和 B B B(升维),使得权重更新量 Δ W ≈ A B \Delta W \approx AB ΔW≈AB,最终权重表示为 W = W 0 + α r A B W = W_0 + \frac{\alpha}{r}AB W=W0+rαAB。这种设计通过数学上的降维操作,将权重更新限制在低维子空间中,既保留了预训练知识的核心结构,又能通过极小的参数量(通常为原模型的0.01%-1%)快速适应新任务,实现了计算效率与模型性能的最优平衡。
LoRA核心公式
一、基础公式解析
LoRA的核心公式由三部分组成:
- 低秩矩阵分解: Δ W ≈ A B \Delta W \approx AB ΔW≈AB
- 权重组合: W = W 0 + α r A B W = W_0 + \frac{\alpha}{r}AB W=W0+rαAB
- 缩放因子: α r \frac{\alpha}{r} rα
二、低秩矩阵分解: Δ W ≈ A B \Delta W \approx AB ΔW≈AB
1. 数学本质
- 目标:用两个低秩矩阵 A A A和 B B B的乘积近似表示权重更新量 Δ W \Delta W ΔW。
- 矩阵维度:
- A ∈ R r × d A \in \mathbb{R}^{r \times d} A∈Rr×d(降维矩阵)
- B ∈ R d × r B \in \mathbb{R}^{d \times r} B∈Rd×r(升维矩阵)
- A B ∈ R d × d AB \in \mathbb{R}^{d \times d} AB∈Rd×d(与 W 0 W_0 W0同维度)
- 参数压缩:原始 W 0 W_0 W0的参数量为 d 2 d^2 d2,而 A A A和 B B B的总参数量为 2 d r 2dr 2dr。当 r ≪ d r \ll d r≪d时(如 r = 8 r=8 r=8, d = 1024 d=1024 d=1024),参数量减少98.4%。
2. 几何解释
- 将权重更新 Δ W \Delta W ΔW限制在一个 r r r维子空间中,而非整个 d 2 d^2 d2维空间。
- 直观理解:假设 W 0 W_0 W0是一个“知识底座”, A B AB AB则是在这个底座上叠加的“任务特定偏移”,且这个偏移被约束在低维方向上。
三、权重组合: W = W 0 + α r A B W = W_0 + \frac{\alpha}{r}AB W=W0+rαAB
1. 预训练权重冻结
- W 0 W_0 W0保持不变,所有训练仅更新 A A A和 B B B。这确保了预训练知识不会被破坏,避免“灾难性遗忘”。
2. 增量更新机制
- 最终权重 W W W由两部分组成:
- W 0 W_0 W0:预训练模型的基础能力(如语言理解、图像特征提取)。
- α r A B \frac{\alpha}{r}AB rαAB:任务特定的增量知识(如情感分析、医疗命名实体识别)。
3. 前向传播计算流程
假设输入向量为 x x x,传统计算为 W 0 x W_0x W0x,而LoRA的计算分解为:
- 基础输出: h 1 = W 0 x h_1 = W_0x h1=W0x
- 增量输出: h 2 = α r A B x h_2 = \frac{\alpha}{r}ABx h2=rαABx
- 最终输出: h = h 1 + h 2 h = h_1 + h_2 h=h1+h2
四、缩放因子: α r \frac{\alpha}{r} rα
1. 设计目的
- 平衡 A B AB AB的梯度量级,确保训练初期增量矩阵的影响不会过大,避免破坏预训练权重的稳定性。
2. 典型设置
- 通常 α = r \alpha = r α=r,此时 α r = 1 \frac{\alpha}{r} = 1 rα=1,公式简化为 W = W 0 + A B W = W_0 + AB W=W0+AB。
- 当 α ≠ r \alpha \neq r α=r时, α r \frac{\alpha}{r} rα作为缩放系数:
- α > r \alpha > r α>r:增强增量矩阵的影响。
- α < r \alpha < r α<r:减弱增量矩阵的影响。
3. 工程实践
- 在训练初期, α / r \alpha/r α/r可防止随机初始化的 A A A和 B B B产生过大扰动。
- 例如,在QLoRA(量化LoRA)中, α \alpha α常被用作超参数调整量化误差与任务适配的平衡。
五、从线性代数视角理解
1. 矩阵乘法的分步解析
计算 A B x ABx ABx时:
- 降维: h l o w = A x h_{low} = Ax hlow=Ax,将 x x x从 d d d维压缩到 r r r维。
- 升维: h h i g h = B h l o w h_{high} = Bh_{low} hhigh=Bhlow,将 h l o w h_{low} hlow从 r r r维恢复到 d d d维。
2. 低秩矩阵的表达能力
- A B AB AB的秩最大为 r r r,意味着它只能表示 r r r个线性无关的方向。
- LoRA的假设:任务特定的权重更新往往集中在低维子空间中,因此 r r r维足以捕捉关键信息。
六、初始化策略的数学意义
1. A A A的随机初始化
- 通常用高斯分布 N ( 0 , 0.02 2 ) N(0, 0.02^2) N(0,0.022)初始化 A A A,确保其元素具有足够的随机性,打破对称性。
2. B B B的零初始化
- 训练初期 B = 0 B=0 B=0,则 Δ W = A B = 0 \Delta W = AB = 0 ΔW=AB=0,此时 W = W 0 W = W_0 W=W0。
- 随着训练进行, B B B逐渐更新,增量矩阵 Δ W \Delta W ΔW从0开始平滑增长,实现对预训练知识的“温和调整”。
七、多任务扩展公式
对于 T T T个任务,可共享 W 0 W_0 W0,为每个任务维护独立的 A t A_t At和 B t B_t Bt:
[
W = W_0 + \sum_{t=1}^{T} \frac{\alpha_t}{r_t}A_tB_t
]
- 切换任务时,只需激活对应任务的 A t A_t At和 B t B_t Bt,无需重新训练 W 0 W_0 W0。
- 参数效率进一步提升:总参数量为 W 0 + T × 2 d r W_0 + T \times 2dr W0+T×2dr,远小于独立训练 T T T个模型的成本。
八、公式对比:LoRA vs 传统微调
方法 | 权重更新公式 | 可训练参数 | 预训练知识保留 |
---|---|---|---|
全量微调 | W = W 0 + Δ W W = W_0 + \Delta W W=W0+ΔW | d 2 d^2 d2 | 部分丢失 |
LoRA | W = W 0 + α r A B W = W_0 + \frac{\alpha}{r}AB W=W0+rαAB | 2 d r 2dr 2dr | 完全保留 |
Adapter(对比) | W = W 0 + Adapter ( x ) W = W_0 + \text{Adapter}(x) W=W0+Adapter(x) | 额外模块参数 | 完全保留 |
LoRA巧妙地将大模型微调问题转化为一个低秩矩阵优化问题,在保留预训练知识的同时,以极小的计算代价实现任务适配。
- 参数效率:参数量与 r r r呈线性关系,与 d d d呈二次关系。
- 计算复杂度:前向传播仅增加 O ( 2 d r ) O(2dr) O(2dr)的计算量,远低于 O ( d 2 ) O(d^2) O(d2)。
- 梯度隔离:仅 A A A和 B B B参与训练, W 0 W_0 W0的梯度为0,避免干扰预训练知识。
- 低秩约束:通过限制 r r r,隐式引入正则化,防止过拟合。