为什么要微调?
为了让模型更适配具体应用场景的需求,可能需要对一个已经完成预训练的大模型的参数进行微调或者说修正,也就是对其进行加加减减,使模型的输出效果更符合特定场景需求。
挑战
可是大模型的参数数量一般比较大,从百万到千亿不等。如果对这些参数一个一个的进行微调,那要求的训练数据及训练量都会很大、成本高。有没有什么方法可以以相对低成本的方式达到微调的目的?
方法
大模型参数一般使用矩阵来表示,比如一个行列都为1024的矩阵W能表示1024*1024=1048576个(百万个)参数。
我们可以先训练两个小的矩阵,A和B。A为1024行,8列;B为8行,1024列。这样我们总共只需要训练16384个参数,然后我们将矩阵A和B相乘,得到一个1024*1024的微调参数矩阵ΔW,然后将这个矩阵加到大模型与训练的原参数矩阵上,最终实现模型参数的整体微调。

LoRA原理(使用AI生成)
这样我们需要训练的参数量不到原参数量的百分之2(1.56%)。从而,实现了低成本微调。
上述例子中矩阵A 的列数(8)和 矩阵B 的行数(8)就是所谓的 “秩 r”(Rank),其大小一般可以选8,16,32,64等。它通常低于原始矩阵纬度。这种通过训练低秩矩阵实现微调的方法称之为LoRA,Low-Rank Adaptation。