秩 r 的选取是 LoRA 中的一个主要超参数,直接影响着参数效率与模型表示能力之间的平衡。LoRA 将预训练权重矩阵 W0 修改为 W=W0+ΔW,其中变化量 ΔW 通过两个低秩矩阵 B∈Rd×r 和 A∈Rr×k 的乘积来近似。秩 r 决定了这些矩阵的共享内维度。
W=W0+BA
较小的 r 导致可训练参数更少,最大化了效率;而较大的 r 则允许适配 BA 有可能捕捉到权重更新中更复杂的模式,可能带来更好的下游任务表现。秩 r 的选取本质上关联着 LoRA 的核心假设:即特定任务的适配过程位于一个低维子空间中。
权衡:表示能力与效率
选取 r 需要应对一项基本权衡:
- 参数量: LoRA 为单个权重矩阵 W0∈Rd×k 引入的可训练参数数量是 r×(d+k)。如果 W0 是方阵 (d=k),这可简化为 2×d×r。由于 r≪min(d,k),这个数量远小于直接微调 W0 所需的 d×k 参数。增加 r 会线性增加参数量,因此也会增加存储 LoRA 权重和优化器状态所需的内存。
- 近似能力: 秩 r 决定了更新矩阵 BA 秩的上限。更高的 r 允许 BA 近似更复杂的 ΔW。如果所需适配的真实“固有秩”较高,较小的 r 可能不够用,导致欠拟合。反之,如果 r 设置得过高,它可能会通过捕捉噪声或虚假相关性导致训练数据过拟合,此外还会不必要地增加计算成本。
这与奇异值分解 (SVD) 等矩阵分解的思路相关,其中低秩近似能够捕捉矩阵中最主要的变动。LoRA 将此原则应用于微调过程中权重的变化。
秩选取的实用方法
在实践中,找到最优的 r 通常是一个经验性过程,被视为一个重要的超参数调整步骤。
以下是一些常见的方法和考量:
- 经验评估: 最常见的方法是尝试一系列 r 值,并在独立的验证集上评估表现。研究和实践中常试用的典型值通常包括 2 的幂次方,例如 r=4,8,16,32,64,128。最优值很大程度上取决于具体的模型、数据集和任务。
- 计算预算: 您可用的硬件,特别是 GPU 内存,施加了实际限制。更高的秩需要更多内存来存储 A 和 B 矩阵及其在训练过程中的梯度。如果资源有限,请从较低的秩(例如 8 或 16)开始;如果表现不足且预算允许,则增加它。
- 性能饱和: 观察 r 与任务表现之间的关系。通常,随着 r 的增加,表现会提升,直到达到一定程度,之后便会趋于平稳,甚至略微下降。这种平稳状态表明,更高秩提供的额外能力并未为任务捕获有用信息,或者甚至可能开始过拟合。
性能通常在秩 'r' 增加初期会提高,但当 'r' 过大时会趋于饱和甚至下降,这表明收益递减和潜在的过拟合。最佳点在于表现提升与参数效率之间取得平衡。
- 任务复杂度和模型大小: 直观上,更复杂的适配任务(例如,针对差异很大的方面或高度专业化技能的微调)可能比简单的调整从更高的秩中获益。同样地,适配更大的基础模型有时值得尝试更高的秩,尽管低固有秩的原则通常仍然适用。
- 初始化与 Alpha 缩放: 请记住,秩的选取并非孤立发生。矩阵 A 和 B 的初始化策略(例如, A 初始化为零, B 使用高斯噪声)以及缩放参数 α 的选取都与 r 相关联。虽然 α 控制着 LoRA 更新的整体幅度(在某些公式中为 W=W0+αr1BA,或在其他公式中简单缩放为 W=W0+αBA),但 r 决定了其结构能力。常见做法通常是将 α 设置为与 r 相关联的值(例如 α=r 或 α=2r),或者将 α 作为与 r 并列的另一个超参数进行调整。我们将在下一节讨论 α。
建议
对于实际应用:
- 从小处着手: 从相对较小的秩开始,例如 r=8 或 r=16,特别是当计算资源是一个考量因素时。
- 迭代与评估: 进行系统性实验,改变 r(例如 8,16,32,64),同时保持其他超参数不变,并在验证集上衡量表现。
- 观察曲线: 绘制表现与秩的关系图,以识别收益递减点。选择一个能在表现和效率之间取得良好平衡的秩。通常,略低但达到接近峰值表现的秩因其效率优势而更受欢迎。
- 考量预算: 在选择要尝试的最大秩时,始终考量您的内存和计算限制。
归根结底,选取秩 r 是在平衡低秩更新的理论能力与计算的实际限制和过拟合风险之间的一项练习。通常需要仔细的经验评估,以找到适合您特定 LLM 微调情况的最佳点。