引言
对于下游任务,对大型预训练模型进行微调方法已经被广泛应用于多个领域。但是更新大型预训练模型的整个参数集代价高昂。虽然参数高效迁移学习(PETL)技术可以让预训练骨干网络只更新一小部分参数(比如说只更新2%的参数),但它们使用的内存却只减少了30%。其主要原因是模型参数的梯度计算仍然需要通过预训练的大型骨干模型进行反向传播。为此,本文提出了一种新的PETL技术--Ladder Side-Tuning (LST),在保证性能的情况下,它可以大幅降低训练内存需求。
背景介绍
近年来,Transformer的大规模预训练和微调在各个领域都取得了成功。随着模型规模的快速增长,对大型预训练模型的整体参数微调花费的代价也越来越大(为什么这么说?大家可以参照一下我之前的一篇文章:训练一个Bert模型所消耗的能量相当于一次跨美飞行)。然而参数高效迁移学习(PETL)是在线或多任务学习的最新研究方向。其主要目标是构建一个在所有任务上都表现良好的系统,而无需为每个新任务训练一个全新的模型。
具体来说,PETL方法选择预训练模型网络中的一小部分参数或者插入一些参数到预训练的网络中,只为新任务更新这些参数,同时冻结大多数原始参数。在自然语言处理(NLP)、计算机视觉(CV)和视觉与语言(VL)领域,目前主要有两种类型的参数通常被更新以实现参数高效迁移学习:(a)Adapters :插入Transformer的小模块;(b)Prompt:与输入连接的小参数(如下图所示)。
其实这两种方法就是作者整理过:Adapters微调方法和Prompt微调方法。不了解小伙伴可以看一下这两篇文章:
预训练模型微调 | 一文带你了解Adapter Tuning
预训练模型微调 | 一文带你了解 Prompt Tuning
虽然参数高效迁移技术减少了需要更新的参数量,但它们并没有在训练期间减少太多的内存需求(高达30%)。其主要原因是:需要更新的参数在主干语言模型中,为了利用反向传播计算这些参数的梯度,仍然需要通过预训练的大型语言模型进行反向传递。这使得PETL方法无法应用到计算资源有限的实际应用中。
为解决上述问题,本文提出了一种内存应用效率较高的PETL方法--Ladder Side-Tuning(LST)。LST从骨干模型中分离出可训练参数,构建侧边网络,进而让整个模型适应新下游任务。
模型介绍
「本文LST方法主要包括梯形侧边网络、权重初始化、降低网络层三个部分」。该方法与之前的方法相比,它也可以大幅减少训练记忆需求。
梯形侧网络
与现有的在Transformer网络中插入额外参数的参数迁移学习方法不同,本文提出训练梯形侧网络,这是一个小型的独立网络,将主体Transformer的中间激活作为输入并进行预测。如下图 (a)所示:
由于在带参数θ的主体Transformer正向传播过程中没有使用梯侧网络参数φ,因此梯侧网络的更新不需要主体Transformer网络的反向传播。注:我们的LST方法并不局限于特定的体系结构。其中上图(a)提供了使用编码器架构的LST的简化概述,在上图b中提供了使用编码器-解码器架构的LST的说明。
权值初始化
侧网络的权值并不是随机初始化产生的,而是利用网络精简技术检索一个较小的精简网络并将其作为侧网络。其结构图如下图a所示。
降低网络层
为进一步提高LST的效率,通过减少其中间Transformer层,使侧网络更紧凑。如上图(b)所示。与LayerDrop类似,本文在侧网络中减少层,这可以线性降低LST的内存和参数要求。例如,一个有N层的侧网络在去掉一半的图层之后,只剩下第2层,第4层,第6层…等网络层。
实验结果
我们使用不同的NLP和VL任务,即GLUE、VQA、GQA、NLVR2和MSCOCO对LST进行了全面研究。1、在GLUE实验中,LST节省了用于微调整个骨干模型所需的69%的GPU内存,与Adapter和LoRA相比节省了2.7倍的内存。
2、在低内存条件下,LST方法比其他PETL方法获得更高的精度。为了利用这种更好的内存效率,
论文&&源码
Paper:https://arxiv.org/pdf/2206.06522.pdf
Code:https://github.com/ylsung/ladder-side-tuning