大模型因其强大的功能而备受瞩目,人们正在积极探索其应用。尽管许多大模型支持零样本学习(zero-shot learning),即无需额外训练即可直接使用,但为了获得更好的性能,通常需要进行微调(finetuning)。在小规模模型时代,微调并不是一个难题。然而,随着大模型时代的到来,微调成为了一个挑战。这是因为现代大模型的参数数量通常从10亿(10B)起步,这使得训练成本变得非常昂贵,即使是微调,对计算资源的需求也相当高(微调虽然训练周期短,但对显存等计算资源的占用并没有减少)。没有至少上百GB的显存,很难进行微调,这对我们来说门槛太高。
因此,开发高效的微调方法变得至关重要。我了解到LoRA便是其中一种高效微调技术。
让我们用一种更通俗易懂的方式来解释LoRA的原理:
想象一下,大模型就像是一个拥有无数房间的豪宅,每个房间都有一些开关控制着整个建筑的运作。但是,当我们需要针对某个特定的任务来调整这个豪宅时,我们并不需要去调整每一个房间的开关,因为这样太费时费力了。实际上,只有少数几个关键的房间(参数)对完成任务至关重要。
LoRA就是利用了这个原理。它认为,虽然大模型的参数矩阵很大,但其实我们可以通过一种更简单的方式来近似它,就像用一张小地图来代表一个大城市一样。具体来说,LoRA在模型中增加了一个辅助的路径,这个路径由两个小矩阵A和B组成,它们相乘的结果可以近似原来大矩阵的功能。这里的A和B的尺寸远小于原来的大矩阵,因此需要调整的参数数量大大减少。
在实际应用中,我们保持原来模型的大部分参数不变(冻结它们),只专注于训练这两个小矩阵A和B。由于A和B的参数数量远远小于原来的大矩阵,所以训练时所需的内存和计算资源也就大大减少了。这就好比是在豪宅中只调整那几个关键房间的开关,而不是去动整个建筑的每一个细节。
使用LoRA进行训练时,如果使用Adam这样的优化器,所需的显存大约只有全面微调所需显存的三分之一,这样就能以更低的成本来训练模型。