type
status
date
slug
summary
tags
category
icon
password
LORA系列
- LoRA 引入了低秩矩阵 A 和 B,这些矩阵是经过训练的,而预训练的权重矩阵 W 是固定的。
- LoRA+ 建议 B 的学习率应远高于 A 的学习率。
- VeRA 不训练 A 和 B,而是随机初始化它们,并在此基础上训练新的向量 d 和 b。
- LoRA-FA 仅训练矩阵 B。
- LoRA-drop 使用 B*A 的输出确定哪些层值得进行训练。
- AdaLoRA 动态地调整不同层中 A 和 B 的排名,从而在这些层中允许更高的排名,期望对模型性能的贡献更大。
- DoRA 将 LoRA 适配器分为两个组件:幅度和方向,并允许更独立地训练它们。
- Delta-LoRA通过 A*B 的梯度改变 W 的权重。
LoRA
LoRA 的主要思想是在预训练权重矩阵 W 旁边添加两个较小的可调矩阵 A 和 B,而不改变 W 的参数。
LoRA 引入了两个矩阵 A 和 B,它们被称为 适配器,并且尺寸要小得多。如果原始参数矩阵 W 的大小为 d x d,则矩阵 A 和 B 的大小分别为 d x r 和 r x d,其中 r 要小得多(通常小于 100)。参数 r 被称为 秩。也就是说,如果您使用秩为 r=16 的 LoRA,则这些矩阵的形状为 16 x d。秩越高,训练的参数就越多。一方面,这会导致更好的性能,但另一方面需要更多计算时间。
输入到 W 的数据也会输入到 B*A,并且 B*A 的输出会加到原始矩阵 W 的输出上。也就是说,你在上面训练一些参数,并将它们的输出添加到原始预测中,这可以让你影响模型的行为。你不再训练 W,这就是为什么我们有时说 W 是 冻结 的。重要的是,A 和 B 的加法不仅在最后完成(这只会添加一层),而且可以应用于神经网络深处的层。
在开始时,矩阵 A 用均值为零的随机值初始化,但围绕该均值有一定的方差。矩阵 B 被初始化为一个全零矩阵。这确保了 LoRA 矩阵从一开始就不会以随机方式改变原始 W 的输出。A 和 B 对 W 输出的更新应该更像是对原始输出的补充,一旦 A 和 B 的参数被调整到期望的方向。
LoRA+
LoRA+ 为矩阵 A 和 B 引入了不同的学习率,这里用参数 λ 表示
LoRA+ [2] 介绍了一种更有效的方式来训练 LoRA 适配器,方法是引入矩阵 A 和 B 的不同学习率。 大多数情况下,在训练神经网络时,只使用一个学习率,以相同的方式应用于所有权重矩阵。然而,对于 LoRA 中使用的适配器矩阵,LoRA+ 的作者可以证明,使用单个学习率是次优的。通过将矩阵 B 的学习率设置得比矩阵 A 的学习率高得多,训练变得更加高效。
有一种理论论据可以证明这种方法是合理的,该论据主要基于神经网络初始化的数值注意事项,如果模型在神经元数量方面变得非常宽。然而,证明这一点所需的数学运算相当复杂。直观地,你可能会认为初始化为零的矩阵 B 可以使用比随机初始化的矩阵 A 更大的更新步长。此外,有实证证据表明这种方法有所改进。通过将矩阵 B 的学习率设置为矩阵 A 的 16 倍,作者能够在模型精度方面获得少量改进(约 2%),同时将训练时间缩短两倍,适用于 RoBERTa 或 Llama-7b 等模型。
VeRA
VeRA 不训练 A 和 B,而是将它们初始化为随机投影,并训练额外的向量 d 和 b
VeRA (Vector-based Random Matrix Adaptation) 作者提出了一种大幅减少 LoRA 适配器参数规模的方法。他们没有训练矩阵 A 和 B(这是 LoRA 的核心思想),而是用共享随机权重初始化这些矩阵(即所有层中的矩阵 A 和 B 具有相同的权重),并添加两个新的向量 d 和 b。在接下来的训练中,只有这些向量 d 和 b 会被训练。
基于随机投影领域的研究,在一个大型神经网络中,只有一小部分权重用于引导行为并实现模型所训练任务的期望性能。由于随机初始化,模型的某些部分(或子网络)从一开始就对期望的模型行为贡献更大。在训练过程中,所有参数都会被训练,因为现在已经知道哪些是重要的子网络。这使得训练成本非常高,因为大多数更新的参数对模型的预测没有任何价值。
基于这个想法,有一些方法只训练这些相关的子网络。通过在矩阵后添加投影向量,而不是训练子网络本身,也可以获得类似的行为。由于矩阵与向量的乘法,这可能导致与调整矩阵中某些稀疏参数相同的输出。这正是 VeRA 的作者所提出的,通过引入向量 d 和 b 进行训练,而矩阵 A 和 B 保持不变。此外,与原始的 LoRa 方法相比,矩阵 B 不再被设置为零,而是像矩阵 A 一样随机初始化。
在 GPT-3 中引入秩为 16 的 LoRA 层,预计有 7550 万个参数。而使用 VeRA,只有 280 万个参数(减少了 97%)。但VeRA 模型的性能仅比完全微调的模型或使用原始 LoRa 技术的模型低一些。
LoRA-FA
LoRA-FA 冻结矩阵 A,仅训练矩阵 B
在 LoRA-FA 中,矩阵 A 在初始化后被冻结,因此作为随机投影。相反,矩阵 B 在初始化为零后进行训练(就像在原始 LoRA 中一样)。这将参数数量减半,同时性能与普通 LoRA 相当。
LoRA-drop
LoRA-drop 使用 B*A 的输出来决定哪些 LoRA 层值得进行训练。
LoRA-drop引入了一种算法来决定哪些层值得通过 LoRA 进行增强,以及哪些层不值得付出努力。即使训练 LoRA 适配器的成本远低于微调整个模型,但您添加的 LoRA 适配器越多,训练的成本仍然越高。
LoRA-drop步骤:1.从数据中抽取一个子集,并训练 LoRA 适配器几次迭代。2.计算每个 LoRA 适配器的重要性,公式为 B*A*x,其中 A 和 B 是 LoRA 矩阵,x 是输入。这实际上是 LoRA 适配器的输出,它被添加到每个冻结层的输出中。如果这个输出很大,它会更显著地改变冻结层的行为。如果很小,这表明 LoRA 适配器对冻结层的影响很小,也可以省略。
如何选择LoRA层:1将重要性值相加,直到达到一个由超参数控制的阈值,2.可以直接选择重要性最高的前 n 个 LoRA 层。在使用全量数据进行微调的时候,仅会在被选择的层上进行训练。其他的层会被固定。
AdaLoRA
在网络的不同层次上,LoRA 矩阵被赋予不同的秩。一般来说,越往后,秩更高
DoRA
DoRA 的出发点是,每个矩阵都可以分解为一个大小和一个方向的乘积。在 DoRA 中,权重矩阵 W 被分解为幅度 m 和方向 V,且两者是独立微调的。
LoRA 的主要思想是实现与微调相同的性能,但参数更少。这意味着,理想情况下,我们希望在不增加成本的前提下,LoRA 的训练尽可能多地与微调共享属性。如果在微调中方向和幅度之间的相关性略为负,那这对于 LoRA 来说也可能是一个理想的特。 换句话说,如果 LoRA 中方向和大小之间的关系与完全微调不同,这可能是 LoRA 有时表现不如微调的原因之一。
DoRA 的作者提出了一种通过将预训练矩阵 W 分离为大小为1 x d的幅度向量 m 和方向矩阵 V,独立训练幅度和方向的方法。然后,方向矩阵 V 通过 B*A 进行增强,这与标准的 LoRA 方法相同,而 m 则保持不变进行训练,因为它只有一个维度。虽然 LoRA 倾向于同时改变幅度和方向(这两者之间的高度正相关表明了这一点),但 DoRA 可以更容易地调整其中一个而不影响另一个,或者用一个的负变化来补偿另一个的变化。我们可以看到方向和幅度之间的关系更像是微调中的关系:
Delta-LoRA
Delta-LoRA 不会冻结矩阵 W,而是用从 B*A 获得的梯度更新它。
Delta-LoRA 的作者提议通过 AB 的梯度来更新矩阵 W,AB 是在两个连续时间步之间的差异。这个梯度被某个超参数λ缩放,λ控制新训练对预训练权重的影响程度,然后被添加到 W 中(而α和 r(秩)是原始 LoRA 设置中的超参数):
这引入了更多的参数进行训练,几乎没有计算开销。我们不必像在微调中那样计算整个矩阵 W 的梯度,而是用在 LoRA 训练中已经获得的梯度来更新它。
论文链接
- [1] LoRA: Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., … & Chen, W. (2021). Lora: Low-rank adaptation of large language models. arXiv preprint arXiv:2106.09685.
- [2] LoRA+: Hayou, S., Ghosh, N., & Yu, B. (2024). LoRA+: Efficient Low Rank Adaptation of Large Models. arXiv preprint arXiv:2402.12354.
- [3] VeRA: Kopiczko, D. J., Blankevoort, T., & Asano, Y. M. (2023). Vera: Vector-based random matrix adaptation. arXiv preprint arXiv:2310.11454.
- [4]: LoRA-FA: Zhang, L., Zhang, L., Shi, S., Chu, X., & Li, B. (2023). Lora-fa: Memory-efficient low-rank adaptation for large language models fine-tuning. arXiv preprint arXiv:2308.03303.
- [5] LoRA-drop: Zhou, H., Lu, X., Xu, W., Zhu, C., & Zhao, T. (2024). LoRA-drop: Efficient LoRA Parameter Pruning based on Output Evaluation. arXiv preprint arXiv:2402.07721.
- [6] AdaLoRA: Zhang, Q., Chen, M., Bukharin, A., He, P., Cheng, Y., Chen, W., & Zhao, T. (2023). Adaptive budget allocation for parameter-efficient fine-tuning. arXiv preprint arXiv:2303.10512.
- Author:liamtech
- URL:https://liamtech.top/article/example-1
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!