Lora微调原理
学习Lora笔记
👉:b站大学
什么是微调
LoRA(Low-Rank Adaptation)是一种轻量级微调技术,微调技术的本质是在已有的预训练模型基础上进行一定的改动。
预训练模型通常在大规模数据集上进行训练,学习到了丰富的特征表示。微调则是将预训练模型的权重作为初始点,通过少量的新数据或特定任务的数据,更新部分或全部模型参数,使其在特定任务上表现更好。
举个例子,现在你有一个能识别数百种动物的AI模型,但你只关心识别猫的不同品种。为了不从头训练模型,你可以在原有的模型基础上,只用猫的图片进行少量训练,这样模型就能更好地识别猫的品种。
微调可以节省时间和资源,因为我们只是在调整模型的部分参数,而不是从零开始构建整个模型。
讲人话
上面说到微调实质上是一种对模型的改动,而模型的改动实质上是模型参数的改动。从原有的参数变成现有的参数。
我们可以简单地认为,本质上通过微调,我们要学习到的其实就是这个改动的量 ΔW ,在真实的训练过程中,矩阵里的参数是很多的,比如100亿个,如果用要把这些参数全部学习到,这是一个浩大的工程(全量微调),所以人们就想寻找更高效的方法,用更少量的资源进行微调。这样的一系列微调方法统称为PEFT,其中很常用的一种方法就是Lora(Low-Rank Adaptation)。
Lora为什么叫做Low-Rank呢?它利用了线性代数中的低秩矩阵分解来减少微调大模型时所需的参数量。Rank是“秩”,这是线性代数中个一个重要概念。什么是“秩”呢?可以简单地理解为一个矩阵的有效信息量。 比如看下面这个矩阵:
第一行和第二行表达的信息其实是一样的,第二行除以2就和第一行一模一样了。所以我们只要用该矩阵的第一行和第三行就已经可以表达完整个矩阵中的有效信息了。因此该矩阵的“秩”为2。
对于要训练的模型参数矩阵,也许也存在许多冗余的信息。这时候可以把大的矩阵用低秩矩阵分解方法分解成两个较小的矩阵,更新参数的时候,只要更新两个小矩阵的参数就好了,减轻的工作量不是一星半点:
LoRA 假设权重矩阵的变化 可以被分解为两个低秩矩阵的乘积:
其中:
和 是两个低秩矩阵,秩 r 远小于 d 和 k,通常
因此,原始的线性变换可以被表示为:
在这个公式中:
- 原始权重矩阵 W 保持不变。
- 仅通过两个低秩矩阵 A 和 B 来调整模型的输出。
这样做的优势:
- 参数效率:你只需要调整 A 和 B 这两个小矩阵,而不是整个 W,因此可以显著减少参数量。
- 保持预训练知识:LoRA 保持了原始权重矩阵 W 不变,仅仅调整了它的一小部分(通过低秩矩阵),因此能够有效保留预训练模型的知识。不会因为新的训练任务损失掉原来的模型能力。
例子:
假设 W 是一个 的矩阵,传统微调方法需要更新 1,000,000 个参数。使用 LoRA 假设 r = 10 ,那么 A是 , B 是 ,因此你只需要调整 20,000 个参数,这比传统方法减少了很多计算量。