设原始的全连接层权重为 $W_0 \in \mathbb{R}^{d \times k}$,在LoRA中,其更新方式变为:
\[
W = W_0 + \Delta W
\]
其中 $\Delta W$ 是引入的可训练参数,用以调整预训练模型的行为。LoRA使用低秩矩阵分解的方法对 $\Delta W$ 建模:
\[
\Delta W = B A
\]
其中 $B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$,$r \ll \min(d, k)$ 是秩约束参数,显著减少了可训练参数的数量。
通常还会引入一个缩放因子 $\alpha$:
\[
\Delta W = \frac{\alpha}{r} B A
\]
该缩放项是为了防止低秩更新对模型产生过大的扰动。
\subsubsection{标准初始化策略}
根据目前主流实现和论文规范,LoRA 的标准初始化方式如下:
\begin{itemize}
\item 矩阵 $A$ 使用高斯分布随机初始化,如 $A \sim \mathcal{N}(0, \sigma^2)$;
\item 矩阵 $B$ 初始化为全零:$B = 0$;
\item 整体结构被缩放:$\Delta W = \frac{\alpha}{r} B A$。
\end{itemize}
在这种初始化下,有以下性质:
\[
\Delta W = \frac{\alpha}{r} \cdot 0 \cdot A = 0
\]
因此,模型的输出在训练开始时与原始模型完全一致,不引入任何扰动。
\subsubsection{为什么 B 初始化为 0,A 随机初始化?}
\paragraph{训练初期保持模型稳定性}
由于 $B=0$,即使 $A$ 为非零,整体 $\Delta W = 0$,保证了初始输出与原模型一致,不对下游任务造成额外偏移或扰动。
这种策略的优势在于:
\begin{itemize}
\item \textbf{防止预训练知识在训练初期被覆盖};
\item \textbf{保证训练一开始是“安全”的};
\item \textbf{类似于残差连接中的“恒等映射”}。
\end{itemize}
\paragraph{有效的梯度传播机制}
从反向传播的角度分析,设损失函数为 $L$,我们计算对 $B$ 和 $A$ 的梯度:
\[
\frac{\partial L}{\partial B} = \frac{\partial L}{\partial \Delta W} \cdot A^\top
\]
\[
\frac{\partial L}{\partial A} = B^\top \cdot \frac{\partial L}{\partial \Delta W}
\]
此时,$B = 0$,但 $A$ 是非零,因此:
\begin{itemize}
\item $\frac{\partial L}{\partial B} \ne 0$,\textbf{$B$可以立即开始更新};
\item 虽然 $\frac{\partial L}{\partial A} = 0$,\textbf{但 $B$ 更新后即可带动 $A$};
\item \textbf{梯度传播“激活路径”畅通无阻,避免梯度消失}。
\end{itemize}
\paragraph{打破对称性,促进收敛}
如果 $A$ 初始化为全零,则所有输出方向在初始时刻完全相同,参数没有“特异性”:
\[
B \cdot 0 = 0
\]
此时无论如何更新 $B$,在第一次前向传播中 $\Delta W$ 恒为零,造成参数退化、学习停滞。因此,\textbf{$A$ 的随机初始化是打破对称性、推动训练启动的关键}。
\subsubsection{反例分析:若 A=0, B 随机初始化,会发生什么?}
这种“反转初始化”虽然理论上仍满足 $\Delta W = 0$,但训练效率极低,甚至可能失败。
\paragraph{梯度消失现象}
如前所述:
\[
\frac{\partial L}{\partial B} = \frac{\partial L}{\partial \Delta W} \cdot A^\top
\]
若 $A = 0$,则 $\frac{\partial L}{\partial B} = 0$,导致 $B$ 无法更新。尽管:
\[
\frac{\partial L}{\partial A} = B^\top \cdot \frac{\partial L}{\partial \Delta W} \ne 0
\]
但 $A$ 更新依赖于随机初始化的 $B$,且不能形成有效的优化路径。最终导致:
\begin{itemize}
\item \textbf{训练初期 $B$ 完全静止};
\item \textbf{$A$ 更新方向混乱、不稳定};
\item \textbf{收敛缓慢甚至震荡};
\item \textbf{模型性能退化}。
\end{itemize}
\paragraph{破坏协同优化机制}
LoRA 设计的核心是通过 $B A$ 的低秩表示实现权重更新,其前提是 $A$ 与 $B$ 能够协同学习。当 $A = 0$ 时,这种协同被打破,整个系统训练变成了单向学习,极易陷入局部最优或学习失败。
\subsubsection{另一种情况:A 和 B 都随机初始化是否可行?}
这在某些场景下也是一种做法,但存在如下问题:
\begin{itemize}
\item \textbf{初始 $\Delta W \ne 0$,扰动模型输出};
\item \textbf{$\Delta W$ 的方差不易控制,易引入过大噪声};
\item \textbf{与 LoRA 的“残差学习”理念相违背}。
\end{itemize}
虽然该策略在特定任务上可能表现良好(尤其是小模型),但不具有普适性。对于大模型和复杂任务,推荐使用 $A$ 随机、$B = 0$ 的标准方式。
\subsubsection{缩放因子 $\alpha$ 的作用}
为了缓解秩约束过低带来的表达能力下降,LoRA 使用缩放因子:
\[
\Delta W = \frac{\alpha}{r} B A
\]
其中 $\alpha$ 一般为正整数,$r$ 是秩。缩放的作用有:
\begin{itemize}
\item \textbf{维持 $\Delta W$ 的值域稳定};
\item \textbf{提高低秩分解的表达力};
\item \textbf{避免 $r$ 过小时模型能力受限};
\item \textbf{平衡原模型输出与LoRA更新的比重}。
\end{itemize}
实验中通常设置 $\alpha \in [8, 64]$,根据任务复杂度与模型大小调整。
\subsubsection{工程实践建议}
\begin{enumerate}
\item \textbf{初始化选择}:始终选择 $A$ 随机,$B=0$ 作为默认策略;
\item \textbf{缩放因子设置}:推荐 $\alpha/r$ 在 $[1, 8]$ 范围内试验;
\item \textbf{秩选择}:任务复杂度高、参数少时可提高 $r$,但需配合合理 $\alpha$;
\item \textbf{训练起始期观察}:关注初期 loss 是否震荡,是否快速下降;
\item \textbf{稳定性调优}:必要时可添加 LayerNorm 或 Dropout;
\end{enumerate}
\subsubsection{总结}
LoRA 的成功不仅来自其结构设计的巧妙,更关键的是合理的初始化策略。通过将 $B$ 初始化为零,$A$ 随机初始化,LoRA 实现了训练初期不扰动模型输出、而梯度又可流动的理想平衡。这种设计兼顾了稳定性与可训练性,是工程与理论的完美结合。
错误的初始化(如 $A=0$ 或全随机)则可能导致训练冷启动失败、收敛缓慢、模型性能下降。因此,理解并正确应用初始化原则是使用LoRA的关键。