大模型的低秩适应旨在通过用低维结构近似大型模型的高维结构来降低其复杂性。具体来说,这种方法旨在创建一个更小、更易于管理的原始模型表示,该表示仍然可以很好地执行特定的任务。对于许多任务,大型模型的高维结构可能包含冗余或不相关的信息。通过识别和删除这种冗余,可以创建一个更有效的模型,并保留其原始性能,而且可以使用更少的资源来训练和部署。
低秩适应在训练方法上可以加速大型模型的训练,同时消耗更少的内存。它通过将预训练模型权重冻结,并将可训练的秩分解矩阵注入到Transformer架构的每一层中,大大减少了下游任务的可训练参数数量。这种方法是将原始矩阵分解为两个矩阵的乘积,其中一个矩阵的秩比另一个矩阵的秩低。这时只需要运用低秩矩阵来进行运算,这样就可以减少模型参数数量,提高训练吞吐量,并且在模型质量上表现出色,且不会增加推理延迟。
低秩适应示例
以GPT-3模型为例,大模型的低秩适应(LoRA)通过优化密集层在适应过程中的秩分解矩阵,来间接训练神经网络中的一些密集层。这种方法仅需对部分参数进行微调,而不是对整个模型进行全参数训练,从而大大提高了部署时的操作效率。在GPT-3模型中,LoRA仅需对一个秩极低的分解矩阵进行优化,就可以实现与全参数微调相当的性能。这使得在存储和计算上非常高效。
此外,低秩适应的思想很简单,在原始PLM(预训练语言模型)旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的intrinsic rank(内在维度)。训练的时候固定PLM的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与PLM的参数叠加。用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵。
这种思想有点类似于残差连接,同时使用这个旁路的更新来模拟full finetuning的过程。并且,full finetuning可以被看做是LoRA的特例(当r等于k时):这意味着当将LoRA应用于所有权重矩阵并训练所有偏置项时,通过将LoRA的秩r设置为预训练权重矩阵的秩k,我们大致可以恢复full fine-tuning的表达能力。换句话说,随着可训练参数数量的增加,LoRA的训练大致收敛于原始模型的训练,而adapter-based方法收敛于一个MLP,prefix-based方法收敛于一个无法处理长输入序列的模型。
低秩适应和神经网络压缩有何不同?
低秩适应和神经网络压缩在目标和方法上有一些不同。
神经网络压缩的目标是减少神经网络的参数和存储空间,从而降低网络的计算代价和存储空间,同时保持网络的性能。它通常通过改变网络结构、利用量化、近似等方法来实现。
神经网络压缩可以分为近似、量化和裁剪三类方法。
1)近似类方法主要利用矩阵或张量分解的思想,通过少量参数重构原始网络参数矩阵或参数张量,以达到减少网络存储开销的目的。
2)量化方法的主要思想是将网络参数的可能值从实数域映射到有限数集,或将网络参数用更少的比特数来表示,以减少网络存储开销。
3)裁剪方法会直接改变网络的结构,按粒度可以分为层级裁剪、神经元级裁剪和神经连接级裁剪。
而低秩适应则是指通过降低模型参数的维度,从而减少模型的复杂性,并且通常利用矩阵分解等技术来实现。这种方法通常用于减少模型的计算成本和存储需求,同时保持模型的预测能力。
总的来说,神经网络压缩是一种更广泛的概念,涵盖了多种方法来减少神经网络的参数和存储空间。而低秩适应是一种特定的技术,旨在通过用低维结构近似大型模型来降低其复杂性。