DoRA: Weight-Decomposed Low-Rank Adaptation

(ICML 2024)

方法

DoRA 的核心思想是将预训练权重分解为“幅度”和“方向”分别进行微调。

DoRA 将权重矩阵 $W$ 分解为:

$$W = m \frac{V}{||V||_c}$$

其中:

  • $m \in \mathbb{R}^{1 \times k}$ 是幅度向量(Magnitude vector)。

  • $V \in \mathbb{R}^{d \times k}$ 是方向矩阵(Directional matrix)。

  • $||\cdot||_c$ 表示沿列计算的向量范数。

初始化

  • $m$ 初始化为预训练权重的列范数 $||W_0||_c$。

  • $V$ 初始化为预训练权重 $W_0$。

微调过程

  • 幅度 ($m$):作为一个可训练的向量直接进行微调。

  • 方向 ($V$):保持 $V$ 冻结,通过 LoRA(即低秩矩阵 $B$ 和 $A$)来学习方向的增量更新 $\Delta V = BA$ 。

最终权重公式

$$W’ = m \frac{W_0 + BA}{||W_0 + BA||_c}$$

这里 $m$ 是训练后的幅度向量,$W_0 + BA$ 是更新后的方向分量 。

梯度分析

DoRA 的更新公式为:

$$W’ = m \frac{W_0 + BA}{||W_0 + BA||_c}$$

其中 $\Delta V = BA$ 是通过 LoRA 学习到的方向更新。

(1) 方向分量的梯度 ($\nabla _ {V’} \mathcal{L}$)

梯度公式如下:

$$\nabla _ {V’} \mathcal{L} = \frac{m}{||V’||_c} \left( I - \frac{V’ V’^T}{||V’||_c^2} \right) \nabla _ {W’} \mathcal{L}$$

理论解释:

  • 缩放 (Scaling):梯度被 $\frac{m}{||V’||_c}$ 缩放。
  • 投影 (Projection):项 $\left( I - \frac{V’ V’^T}{||V’||_c^2} \right)$ 将梯度投影到与当前权重向量 $V’$ 正交的方向上。
  • 优化稳定性:这两个效应使得梯度的协方差矩阵更接近单位矩阵 (Identity Matrix)。根据权重归一化的理论,这有助于改善梯度的条件数 (Conditioning),从而加速收敛并提高优化稳定性 。
  • 传递性:由于 $V’ = V + \Delta V$,这一优化的好处直接传递给了 $\Delta V$ (即$\nabla _ {V’} \mathcal{L}=\nabla _ {\Delta V} \mathcal{L}$),增强了 LoRA 的学习稳定性。

(2) 幅度分量的梯度 ($\nabla _ {m} \mathcal{L}$)

梯度公式如下:

$$\nabla _ {m} \mathcal{L} = \frac{\nabla _ {W’} \mathcal{L} \cdot V’}{||V’||_c}$$

负斜率

DoRA 能够模拟 FT 的“负斜率”特征(即幅度更新与方向更新呈负相关)。

假设存在两种更新场景 S1 和 S2,且它们的权重更新范数相同 ($||\Delta w _ {S1}|| = ||\Delta w _ {S2}||$)。

  • 场景 S1:方向变化较小 ($\Delta D$ 小)。这意味着梯度与当前权重向量的方向更接近(夹角小,余弦相似度大) 。
  • 场景 S2:方向变化较大 ($\Delta D$ 大)。这意味着梯度与当前权重向量的方向偏差大(夹角大,余弦相似度小) 。

根据 $\nabla _ {m} \mathcal{L} \propto ||\nabla _ {W’} \mathcal{L}|| \cdot \cos(\nabla _ {W’} \mathcal{L}, v)$ :

  • S1 (方向变化小) 中,余弦相似度大,导致幅度梯度的标量值大,从而产生大的幅度更新
  • S2 (方向变化大) 中,余弦相似度小,导致幅度梯度的标量值小,从而产生小的幅度更新

结论:这就从数学上解释了 DoRA 为何能自然地表现出“方向变化小则幅度变化大,方向变化大则幅度变化小”的负相关特性。这种特性使得 DoRA 的学习行为更接近全量微调 (FT),从而具备比标准 LoRA 更强的学习能力。

降低训练时的显存消耗

DoRA 通过一种简单的梯度截断策略,显著降低了训练时的显存消耗。具体来说,它将权重分解公式分母中的范数项视为常数,从而将其从梯度计算图中分离出去。

更新后的权重 $W’$ 计算如下:

$$W’ = m \frac{V + \Delta V}{||V + \Delta V||_c}$$

在反向传播过程中,由于分母 $||V + \Delta V||_c$ 包含可训练参数 $\Delta V$,计算 $\Delta V$ 的梯度时通常需要对这个范数项也进行求导。这种对分母的求导会导致梯度图变得复杂,从而增加了额外的显存开销。

为了解决这个问题,作者提出了一种优化方案是反向传播时,将分母中的范数项 $||V + \Delta V||_c$ 视为常数

改进

ICLR 26有一篇改进的Dual LoRA,实验优于Dora但是理论稍弱。最后只得到4222分。

具体而言,也还是分为方向和幅度。

幅度组 ($W_m$): $W_m = \text{ReLU}(BA)$。

  • 可以将不需要更新的参数(即已经在大模型中训练得很好的参数)置为 0,这在传统 LoRA 中很难实现。

方向组 ($W_d$): $W_d = \text{Sign}(DC)$ 。

由于 Sign 函数不可导,训练时使用了直通估计器(Straight-Through Estimator, STE)来计算梯度 。

最终权重更新公式为:

$$W’ = W_0 + \Delta W = W_0 + \frac{\alpha}{\sqrt{r_1 r_2}} W_m \odot W_d$$

其中 $\odot$ 代表逐元素乘法(Hadamard product)。


DoRA: Weight-Decomposed Low-Rank Adaptation
https://lijianxiong.space/2025/20251202/
作者
LJX
发布于
2025年12月2日
许可协议