人工智能
MoRA:用于PEFT的高秩更新
由于其在与其他方法相比具有强大的性能和广泛的适用性,LoRA或低秩适应是PEFT或参数高效微调中最流行的方法之一,用于对大型语言模型进行微调。LoRA框架采用两种低秩矩阵来分解和近似FFT或全微调中的更新权重,并且LoRA框架通过调整矩阵的秩来修改这些可训练参数。实施此过程的主要好处是,它可以在微调后无需推理延迟地合并这些矩阵。另外,尽管最近的大型语言模型在上下文学习任务中表现出色,但某些场景仍需要微调,可以大致分为三种类型。第一种类型是指令微调,旨在更好地将LLM与最终任务和用户偏好对齐,而不增强LLM的知识和能力,这种方法简化了处理多种任务和复杂指令的过程。第二种类型包括数学问题解决等复杂推理任务。最后,第三种类型是持续预训练,旨在增强大型语言模型的整体领域特定能力。
在本文中,我们将讨论低秩更新是否会影响LoRA框架的性能,因为观察到低秩更新机制可能会阻碍大型语言模型学习和记忆新知识的能力。基于此,本文将讨论MoRA,一种新的方法,它通过使用平方矩阵实现高秩更新,同时保持相同数量的可训练参数。为了实现这一点,MoRA框架通过引入相应的非参数运算符来减少输入维度并增加平方矩阵的输出维度。此外,这些运算符确保权重可以合并回LLM,这使得MoRA框架可以像LoRA一样部署。
本文旨在深入介绍MoRA框架,我们将探讨其机制、方法论、架构以及与最先进框架的比较。那么,让我们开始吧。
MoRA:用于PEFT的高秩更新
随着语言模型的规模和能力的增加,PEFT或参数高效微调已经成为将LLM适应特定下游任务最流行和高效的方法之一。与更新所有参数的FFT相比,PEFT只修改总参数的一小部分,因此在某些任务上可以通过更新少于1%的总参数来实现与FFT类似的性能,从而显著减少优化器的内存需求,同时方便模型的存储和部署。此外,在所有现有的PEFT方法中,LoRA是目前最流行的,尤其适用于LLM。LoRA方法之所以比其他PEFT方法(如适配器或提示微调)表现更好,主要是因为LoRA使用低秩矩阵来更新参数,而框架可以将这些矩阵合并到原始模型参数中,而不会增加推理期间的计算需求。尽管有许多方法试图改进LoRA以适应大型语言模型,但这些方法大多依赖于GLUE来验证其效率,要么需要很少的可训练参数,要么能实现更好的性能。
此外,在广泛的任务(包括持续预训练、数学推理和指令微调)上进行的LoRA实验表明,尽管LoRA基于框架在这些任务上表现出类似的性能,并且在指令微调任务上与FFT基于方法具有可比的性能,但LoRA基于模型在持续预训练和数学推理任务上无法复制FFT的性能。LoRA可能依赖于低秩矩阵更新,这可能是其性能不佳的原因,因为低秩更新矩阵可能难以估计FFT中的全秩更新,特别是在需要记忆领域特定知识的内存密集型任务中,如持续预训练。由于低秩更新矩阵的秩小于全秩,微调时限制了存储新信息的能力。基于这些观察,MoRA试图在低秩更新矩阵中最大化秩,同时保持相同数量的可训练参数,方法是使用平方矩阵而不是传统LoRA模型中的低秩矩阵。以下图表比较了在相同数量可训练参数下的MoRA框架和LoRA。

如上图所示,(a)表示LoRA,(b)表示MoRA。W是来自模型的冻结权重,M是MoRA中的可训练矩阵,A和B是LoRA中的可训练低秩矩阵,r表示LoRA和MoRA中的秩。可以观察到,MoRA框架比LoRA模型具有更大的容量。另外,MoRA框架开发了相应的非参数运算符来减少输入维度并增加可训练矩阵M的输出维度。此外,MoRA框架允许使用低秩更新矩阵来代替可训练矩阵M和运算符,从而确保MoRA方法可以像LoRA一样合并回大型语言模型。以下表格比较了FFT、LoRA、LoRA变体和我们方法在指令微调、数学推理和持续预训练任务上的性能。

MoRA:方法论和架构
低秩更新的影响
LoRA基于模型的关键原理是使用低秩更新来估计FFT中的全秩更新。传统上,对于给定的预训练参数矩阵,LoRA采用两种低秩矩阵来计算权重更新。为了确保训练开始时的权重更新为0,LoRA框架用高斯分布初始化一个低秩矩阵,另一个低秩矩阵初始化为0。LoRA中的权重更新在FFT中的低秩更新相比具有低秩,尽管LoRA中的低秩更新在某些任务(如指令微调和文本分类)上具有与全秩更新相似的性能,但其在持续预训练和复杂推理等任务上的性能开始下降。基于这些观察,MoRA提出,利用LLM的能力和原始知识来解决任务使用低秩更新更容易,但模型在执行需要增强LLM能力和知识的任务时会遇到困难。
方法论
尽管具有上下文学习的LLM比以前的方法有了显著的改进,但仍有一些情况需要微调,通常可以分为三类。第一类是指令微调,旨在更好地将LLM与最终任务和用户偏好对齐,而不增强LLM的知识和能力,这使得处理多种任务和复杂指令更容易。第二类是数学问题解决等复杂推理任务,对于这些任务,通用指令微调不足以处理复杂的符号多步骤推理任务。最近的研究主要集中在提高LLM的推理能力,通常需要根据更大的教师模型(如GPT-4)设计相应的训练数据集,或者沿着推理路径重新表述理由对应的问题。第三类是持续预训练,旨在提高LLM的领域特定能力。与指令微调不同,持续预训练需要微调来丰富相关的领域特定知识和技能。
然而,大多数LoRA变体几乎只使用GLUE指令微调或文本分类任务来评估其在LLM中的有效性。由于指令微调需要的资源最少,因此可能无法在LoRA变体之间进行适当的比较。添加推理任务来更好地评估其方法是一种常见的做法,但通常我们使用的小型训练集(即使有100万个示例,也相当大)。LLM在这些示例中难以学习适当的推理。例如,一些方法使用GSM8K,只有7.5K个训练集。然而,这些数字比最先进的方法(在395K个样本上训练)要少,这使得评估这些方法学习NLP推理能力的能力变得困难。
基于低秩更新的影响,MoRA框架提出了一种新的方法来减轻低秩更新的负面影响。MoRA框架的基本原理是使用相同的可训练参数来最大限度地实现低秩更新矩阵的高秩。考虑到预训练权重,LoRA框架使用两个低秩矩阵A和B,具有总可训练参数的秩r。然而,对于相同数量的可训练参数,平方矩阵可以实现最高的秩,MoRA框架通过减少输入维度和增加可训练平方矩阵的输出维度来实现这一点。另外,这两个函数应该是非参数化的运算符,预计在与维度成线性关系的时间内执行。
MoRA:实验和结果
为了评估其性能,MoRA框架在广泛的任务上进行了评估,以了解高秩更新对三个任务的影响:记忆UUID对、微调任务和预训练。
记忆UUID对
为了展示性能的改进,MoRA框架与FFT和LoRA框架在记忆UUID对方面进行了比较。训练损失如以下图像所示。

值得注意的是,MoRA框架在具有相同数量可训练参数的情况下能够比现有的LoRA模型表现更好,表明它从高秩更新策略中受益。不同训练步骤下的字符级训练准确率报告如下表所示。
如图所示,与LoRA相比,MoRA框架需要更少的训练步骤来记忆UUID对。
微调任务
为了评估其在微调任务上的性能,MoRA框架在三个微调任务上进行了评估:指令微调、数学推理和持续预训练,这些任务是为大型语言模型设计的,并且具有高质量的对应数据集,用于MoRA和LoRA模型。微调任务的结果如下表所示。

如图所示,在数学推理和指令微调任务上,LoRA和MoRA模型表现出类似的性能。然而,MoRA模型在持续预训练任务上优于LoRA框架,尤其是在生物医学和金融领域,MoRA模型从高秩更新方法中受益,以记忆新知识。此外,需要了解这三个任务彼此不同,具有不同的要求和不同的微调能力。
预训练
为了评估高秩更新对整体性能的影响,MoRA框架中的变换器从头开始在C4数据集上训练,并且其性能与LoRA和ReLoRA模型进行了比较。预训练损失和C4数据集上的对应复杂度如下图所示。


如图所示,MoRA模型在预训练任务上比LoRA和ReLoRA模型表现更好,尤其是在具有相同数量可训练参数的情况下。
另外,为了展示高秩更新对低秩更新矩阵秩的影响,MoRA框架分析了预训练250M模型后学习的低秩更新矩阵的奇异值谱,结果如下图所示。

结论
在本文中,我们讨论了低秩更新是否会影响LoRA框架的性能,因为观察到低秩更新机制可能会阻碍大型语言模型学习和记忆新知识的能力。基于此,我们讨论了MoRA,一种新的方法,它通过使用平方矩阵实现高秩更新,同时保持相同数量的可训练参数。为了实现这一点,MoRA框架通过引入相应的非参数运算符来减少输入维度并增加平方矩阵的输出维度。此外,这些运算符确保权重可以合并回LLM,这使得MoRA框架可以像LoRA一样部署。












