1. 核心思想
量化感知 LoRA 的核心思想是:
在模型量化过程中,同时考虑 LoRA 的低秩补偿能力,使"量化权重 + LoRA 低秩矩阵"共同逼近原始全精度权重,从而降低量化带来的性能损失。
其目标可以表示为:
W≈Q+ABT W \approx Q + AB^T W≈Q+ABT
其中:
- WWW:原始全精度权重
- QQQ:低比特量化后的权重
- A,BA,BA,B:LoRA 的低秩矩阵
- ABTAB^TABT:用于补偿量化误差的低秩矩阵
2. 传统量化带来的问题
传统量化直接将原始全精度权重 WWW 映射为低比特权重:
Q=qN(W) Q = q_N(W) Q=qN(W)
由于量化会将连续的浮点数映射为有限的离散数值,因此会产生量化误差:
R=W−Q R = W - Q R=W−Q
其中:
R R R
表示量化过程中丢失的权重信息。
如果量化误差较大,就会导致模型精度下降。
3. 使用 LoRA 补偿量化误差
量化感知 LoRA 希望利用 LoRA 的低秩矩阵来表示量化误差中最重要的部分,即:
ABT≈W−Q AB^T \approx W - Q ABT≈W−Q
因此:
Q+ABT≈W Q + AB^T \approx W Q+ABT≈W
也就是说,可以将原始权重近似拆分为两部分:
W≈Q+ABT \boxed{ W \approx Q + AB^T } W≈Q+ABT
其中:
- QQQ 负责保存模型的大部分权重信息;
- ABTAB^TABT 负责补偿量化过程中损失的重要信息。
4. 量化与 LoRA 交替优化
量化感知 LoRA 并不是简单地先量化、再添加 LoRA,而是通过量化和低秩分解的交替过程进行优化。
第一步:量化
在第 iii 次迭代中,首先减去上一轮 LoRA 已经能够表示的部分,然后再进行量化:
Qi=qN(W−Ai−1Bi−1T) Q_i = q_N \left( W - A_{i-1}B_{i-1}^{T} \right) Qi=qN(W−Ai−1Bi−1T)
这一过程可以理解为:
LoRA 已经负责保存的信息,不需要再让量化权重重复保存。
因此,量化权重和 LoRA 之间形成一种"分工"。
5. 计算量化残差
得到新的量化权重 QiQ_iQi 后,计算原始权重和量化权重之间的残差:
Ri=W−Qi R_i = W - Q_i Ri=W−Qi
其中:
Ri R_i Ri
表示当前量化权重还没有准确表示的权重信息。
接下来让 LoRA 去补偿这部分残差。
6. 对残差进行 SVD 分解
对残差矩阵 RiR_iRi 进行奇异值分解:
Ri=UΣVT R_i = U\Sigma V^T Ri=UΣVT
其中:
- UUU:左奇异向量矩阵
- Σ\SigmaΣ:奇异值矩阵
- VVV:右奇异向量矩阵
奇异值大小可以反映不同方向的重要程度。
7. 截断 SVD
由于 LoRA 的秩 rrr 通常很小,因此不能完整表示整个残差矩阵。
因此,只保留最大的前 rrr 个奇异值:
Ri≈UrΣrVrT R_i \approx U_r \Sigma_r V_r^T Ri≈UrΣrVrT
这一过程称为:
截断 SVD(Truncated SVD)
其作用是:
提取量化误差中最重要的低秩结构。
8. 构造 LoRA 矩阵
可以根据截断 SVD 构造 LoRA 的两个低秩矩阵:
Ai=UrΣr1/2A_i = U_r \Sigma_r^{1/2}Ai=UrΣr1/2
Bi=VrΣr1/2B_i = V_r \Sigma_r^{1/2}Bi=VrΣr1/2
于是:
AiBiT=UrΣrVrTA_iB_i^T= U_r\Sigma_rV_r^TAiBiT=UrΣrVrT
因此:
AiBiT≈Ri A_iB_i^T \approx R_i AiBiT≈Ri
又因为:
Ri=W−Qi R_i = W - Q_i Ri=W−Qi
所以:
AiBiT≈W−Qi \boxed{ A_iB_i^T \approx W - Q_i } AiBiT≈W−Qi
9. 恢复原始权重
将 LoRA 补偿矩阵与量化权重相加:
Qi+AiBiT Q_i + A_iB_i^T Qi+AiBiT
因为:
AiBiT≈W−Qi A_iB_i^T \approx W - Q_i AiBiT≈W−Qi
所以:
Qi+AiBiT≈Qi+W−Qi Q_i + A_iB_i^T \approx Q_i + W - Q_i Qi+AiBiT≈Qi+W−Qi
最终得到:
Qi+AiBiT≈W \boxed{ Q_i + A_iB_i^T \approx W } Qi+AiBiT≈W
这说明 LoRA 可以有效补偿量化带来的主要权重误差。
10. 迭代优化
为了进一步减小误差,可以重复执行:
Q1→A1B1T→Q2→A2B2T→⋯ Q_1 \rightarrow A_1B_1^T \rightarrow Q_2 \rightarrow A_2B_2^T \rightarrow \cdots Q1→A1B1T→Q2→A2B2T→⋯
每一轮都重新调整:
- 量化权重 QiQ_iQi
- LoRA 补偿矩阵 AiBiTA_iB_i^TAiBiT
使整体误差不断减小:
∥W−Qi−AiBiT∥F \left\| W - Q_i - A_iB_i^T \right\|_F W−Qi−AiBiT F
最终得到更加匹配的量化权重和 LoRA 初始化参数。
总结
量化感知 LoRA 的基本思想可以概括为:
W≈Q⏟量化权重+ABT⏟LoRA低秩补偿 \boxed{ W \approx \underbrace{Q}{\text{量化权重}} + \underbrace{AB^T}{\text{LoRA低秩补偿}} } W≈量化权重 Q+LoRA低秩补偿 ABT
其中:
量化负责压缩模型,LoRA 负责补偿量化过程中丢失的重要信息。
通过对量化残差进行截断 SVD,可以提取最重要的低秩误差结构,并用于初始化 LoRA 参数,从而在降低模型存储和显存开销的同时,尽可能保持原始模型的性能。