LoRA 微调和低秩矩阵 - 蝈蝈俊
内容提要
LoRA是一种针对大型语言模型的微调方法,通过引入可训练的低秩矩阵来适应特定任务,无需重新训练整个模型。LoRA通过低秩更新模型参数,减少训练资源和时间,实现在特定应用领域内最佳性能。
延伸解读
LoRA 如何减少训练参数
LoRA 在自注意力和前馈网络层中引入可训练的低秩矩阵 A 和 B,训练时只更新 A 和 B,而不更新原始权重。A 初始化为高斯分布,B 初始化为零,因此训练开始时附加参数为零,模型行为与预训练模型一致。随着训练进行,A 和 B 通过反向传播和梯度下降调整,从而间接更新模型行为。这种方法大幅减少了需要训练的参数数量。
低秩矩阵的直观理解
低秩矩阵的秩远小于其行数和列数,可以用两个较小矩阵的乘积表示。例如,一个 4×5 的矩阵 A 可以由 4×2 的矩阵 B 和 2×5 的矩阵 C 相乘得到,此时 A 的秩最多为 2。这种结构意味着矩阵包含大量冗余或重复信息,可以用更少的参数捕捉其主要特征。LoRA 正是利用这种低秩特性来高效调整模型权重。
LoRA 微调的权衡:专精与通用
使用 LoRA 微调是一种权衡:它通过调整少量参数强化模型在特定任务上的能力,但可能牺牲模型在其他未特化任务上的通用性。这是因为微调过程使模型更倾向于优化和应对微调时使用的数据和任务类型。因此,LoRA 适合追求特定应用领域内最佳性能的场景,而非要求模型在所有任务上保持平均表现。
Q&A
LoRA 微调是什么?它和全量微调有什么区别?
LoRA(Low-Rank Adaptation)是一种针对大型语言模型的微调方法,通过引入可训练的低秩矩阵来适应特定任务,无需重新训练整个模型。与全量微调更新所有参数不同,LoRA 只更新少量低秩矩阵参数,从而减少训练所需的资源和时间。
LoRA 具体是怎么工作的?它的低秩矩阵如何更新模型权重?
LoRA 在模型的自注意力和前馈网络层中引入额外的可训练低秩矩阵 A 和 B。A 初始化为高斯分布,B 初始化为 0,训练开始时附加参数为 0。训练时通过反向传播和梯度下降更新 A 和 B 的参数,生成对原始权重的低秩更新。使用时,原始权重不直接更新,而是通过 A 和 B 的参数间接调整模型行为。
低秩矩阵是什么?能举个例子吗?
低秩矩阵是指其秩远小于其行数和列数的矩阵,可以通过两个较小矩阵的乘积来表示。例如,一个 4×5 的矩阵 A 可以由 4×2 的矩阵 B 和 2×5 的矩阵 C 相乘得到,此时 A 的秩最多为 2,因此是低秩矩阵。
LoRA 微调有什么优缺点?会牺牲模型的通用性吗?
LoRA 微调是一种权衡:它通过精确调整少数参数来强化模型在特定任务上的能力,但可能牺牲模型在其他未特化任务上的通用性。因此,LoRA 旨在实现在特定应用领域内的最佳性能,而非追求在所有任务上的平均表现。
LoRA 为什么能减少训练资源和时间?
因为 LoRA 只更新引入的低秩矩阵参数,而不是整个模型的权重矩阵。这大大减少了需要训练的参数数量,从而降低了训练所需的计算资源和时间。
低秩矩阵通常出现在哪些情况下?
低秩矩阵通常出现在以下情况:数据冗余(行或列高度相关)、信息重复(不同部分包含重复信息)、固有维度低(数据真实维度较低)、缺失或不完整的数据(通过低秩近似恢复缺失条目)。