LoRA
生成:Gemini-2.5-pro, 整理:fyerfyer
LoRA
1. LoRA 的核心思想与原理
核心假设:权重更新的“低内在秩”
LoRA 的核心假设是:模型在适应新任务时,其权重的“变化量”()本身具有“低内在秩”(low intrinsic rank)。
这意味着,这个代表变化的、巨大的权重矩阵,可以用两个非常小的、瘦长的矩阵相乘来近似模拟。这就好比一个复杂的变换,其实可以分解为几个简单的、低维度的变换组合而成。
LoRA 的工作流程
基于这个假设,LoRA 提出不直接更新原始权重 ,而是通过一个“旁路”结构来学习这个变化量 :
- 冻结预训练权重:在微调过程中,保持预训练好的模型权重 (例如 1750 亿个参数)不变。
- 注入可训练的低秩矩阵:在原始权重旁边,增加一个新的分支。这个分支由两个低秩矩阵 和 相乘构成,即 。
- 的维度是 。
- 矩阵 的维度是 。
- 矩阵 的维度是 。
- 这里的 就是“秩” (rank),它是一个远小于 和 的超参数 ()。
- 只训练小矩阵:在训练时,我们只更新 和 的参数,而 保持冻结。由于 非常小,可训练的参数量急剧减少。
模型的前向传播过程变为:
初始化策略
为了保证训练的稳定性,LoRA 采用了一种巧妙的初始化方法:
- 矩阵 使用随机高斯分布进行初始化。
- 矩阵 则全部初始化为零。
这意味着在训练刚开始时, 的结果就是零。此时,模型和原始的预训练模型是完全一样的。随着训练的进行, 和 才慢慢学习到对特定任务有用的“修正量”。
同时,LoRA还引入了常数因子 这个内置的缩放超参数。这是一种归一化技巧,可以在改变秩 的大小后,不必重新调整学习率等超参数。
引入 的一个关键目的是解耦 的选择和学习的强度。如果没有这个超参数,当我们增大 时,输出的方差会变大、导致输出不稳定。而 的存在使得 LoRA 旁路在训练开始时的整体输出幅度都能保持在一个相对稳定的水平。我们可以在不大幅调整学习率的情况下,更自由地实验不同的 rank 值。
4. 实验结论与深入理解
应该对哪些权重矩阵应用 LoRA?
实验表明,在有限的参数预算下,用较低的秩去适配更多的权重矩阵,比用较高的秩去适配单一的权重矩阵效果更好。在 Transformer 模型中,同时对自注意力模块的查询矩阵 () 和值矩阵 () 应用 LoRA,通常能取得最佳性能。
最佳秩 是多少?
令人惊讶的是,实验发现一个非常小的秩,比如 ,就已经能达到非常有竞争力的性能。这强有力地证明了权重更新矩阵 的“内在秩”确实非常低。
进一步的子空间分析发现,用不同秩(如 r=8 和 r=64)训练出的 ,其最重要的信息方向(top singular vector)是高度重合的。这说明一个很小的 就已经抓住了最关键的适配信息。
更新矩阵 与原始矩阵 的关系
研究发现:
- 并非学习全新的知识,而是在放大 中已有的某些特征。
- 并非简单重复 中最强的特征,而是放大了那些在 中存在但不被强调的次要特征。
- 这种放大效应非常显著。
结论是:LoRA 的工作机制可以被理解为,它在庞大的预训练知识中,找到了对特定下游任务至关重要的、但被“埋没”的特征,然后将这些特征极大地“放大”,从而实现了对新任务的高效适配。
Comments