LoRA 微调见解:初始化很重要!

366 阅读3分钟

简介

在快速发展的机器学习领域,高效且经济地微调大型模型是一项紧迫的任务。低秩适应(LoRA)是一种备受关注的方法,通过低秩更新来适应预训练权重,提供了一种经济实惠的微调方法。然而,一个常常被忽视的关键方面是初始化对模型性能的影响。本文深入探讨了 LoRA 初始化的细微差别及其对高效特征学习和模型稳定性的影响。

理解 LoRA

LoRA 方法

LoRA 通过添加低秩更新来适应预训练权重 ,其数学表示为:

其中, 和  是低秩矩阵。LoRA 的主要优势在于它只训练  和 ,与训练完整权重矩阵  相比,大大减少了计算成本。

初始化方案

两种流行的初始化  和  的方案是:

  • init[A]:   随机初始化, 设为零。

  • init[B]:   随机初始化, 设为零。

乍一看,这些方案似乎相似,但它们导致的结果却截然不同。

初始化的惊人影响

init[A] 方案

当  随机初始化且  设为零时,模型表现出以下特征:

  • 高效的特征学习:  这种初始化允许模型更高效地学习特征。

  • 较大的学习率:  模型可以容忍较大的学习率,从而加快训练过程。

  • 内部不稳定性:  存在一些内部不稳定的可能性,需要仔细监控和调整。

init[B] 方案

相反,当  随机初始化且  设为零时,模型表现出不同的特征:

  • 稳定的学习:  这种方案通常导致更稳定的学习。

  • 较小的最佳学习率:  最佳学习率通常较小,这可能会减慢训练过程。

  • 次优的特征学习:  特征学习可能不如预期高效,可能导致模型性能次优。

实践要点

使用 Hugging Face PEFT 库

如果你使用的是 Hugging Face PEFT(参数高效微调)库,那你很幸运!该库默认使用 init[A] 方案。不过,值得一提的是,库经常更新,最好双重检查初始化设置。

零成本调整

确保在你的 LoRA 实现中使用正确的初始化方案是一种零成本的调整,可以显著影响模型的性能。始终验证初始化以优化你的微调过程。

大宽度警告

在涉及非常大的嵌入维度的情况下,init[A] 和 init[B] 方案都可能遇到困难。这时,LoRA+ 就派上用场了。

LoRA+

LoRA+ 通过为  和  设置不同的学习率,解决了大宽度模型的挑战。即使在较小的模型(如 RoBERTa)中,这种方法也能提高性能。如果你正在处理超宽模型,考虑尝试 LoRA+ 以获得更好的结果。

结论

LoRA 微调中的初始化不仅仅是一个细节,它在决定特征学习的效率和稳定性方面起着至关重要的作用。通过理解和利用正确的初始化方案,你可以优化微调过程,获得更优越的模型性能。无论你是使用 Hugging Face PEFT 库还是探索 LoRA+,始终关注初始化,以充分利用你的微调工作。

图片.png