Abstract
随着预训练模型规模迅速扩大,其在下游任务上的微调成本也不断上升。为经济地微调这些模型,提出了参数高效迁移学习(PETL),其仅调节极少量可训练参数,以高效学习优质表征。然而,当前的 PETL 方法面临这样一个困境:在训练过程中,GPU 显存占用并未像可训练参数数量那样得到有效减少;如果完整微调会出现显存不足的问题,PETL 方法也很可能会失败。出现这一现象的原因在于,这些方法中的可训练参数通常与主干网络(backbone)高度耦合,使得大量中间状态必须存储在 GPU 显存中以进行梯度反向传播。为缓解这一问题,我们提出了解耦迁移学习(DTL),通过一个轻量级的紧凑侧网络(Compact Side Network, CSN)将可训练参数从主干网络中解耦。通过使用少量低秩线性映射逐步提取任务特定信息,并将这些信息适当地重新注入主干网络,CSN 能够在多种下游任务中有效地实现知识迁移。我们进行了大量实验来验证该方法的有效性。所提出的方法不仅显著减少了 GPU 显存占用和可训练参数数量,而且在准确率上明显优于现有的 PETL 方法,在多个标准基准上取得了新的最新最优结果。
Introduction
大型预训练加微调的范式已在诸多领域得到广泛应用(Devlin et al. 2018;Lewis et al. 2019;He et al. 2022;Caron et al. 2021)。然而,传统微调往往难以实施,因为需要更新整个大模型的所有参数,导致 GPU 显存或时间成本过高(He et al. 2022)。近年来,参数高效迁移学习(PETL)被提出,用于仅更新极少量的可训练参数(Houlsby et al. 2019)。由于其有效性以及避免过拟合的能力,众多 PETL 的变体(Jia et al. 2022;Hu et al. 2022;Zhang, Zhou, and Liu 2022;Lian et al. 2022;Jie and Deng 2023)相继出现。
然而,可训练参数的大幅减少并不意味着 GPU 显存使用量会等比例下降:实际节省的显存比例仍然较小(约 25%,参见图 1)。如果由于 GPU 显存不足而无法对大型模型进行微调,那么 PETL 流程本身仍可能失败。这个缺陷是根本且关键的。因此,迫切需要一种能有效减少 GPU 显存使用、并充分发挥大规模预训练模型价值的新方法。
PETL 方法(Hu et al. 2022;Houlsby et al. 2019;Jia et al. 2022)的一个共同特征是,其小型可训练模块与体量巨大的冻结主干网络紧密耦合。正如 Sung, Cho, and Bansal (2022) 所指出的,为了正确更新某个网络参数,模型必须缓存其相关的来源于激活值的中间梯度。这种耦合式设计使得缓存成为 GPU 显存占用的重要组成部分,从而阻碍了大型预训练模型在多种任务中的应用。
为解决这一根本性问题,我们提出了解耦迁移学习(DTL),通过一个轻量级的紧凑侧网络(Compact Side Network, CSN)将权重更新过程从主干网络中解耦。DTL 不仅大幅降低 GPU 显存占用,还在知识迁移上取得了较高的准确率(参见图 1)。如图 2 所示,CSN 由若干低秩线性映射矩阵组成,用于提取任务特定信息,并与主干网络完全解耦。通过将这类信息注入主干网络的少量后层模块,部分由预训练模型生成的中间特征能够被自适应校准,使其在下游任务上更具判别性。
我们还可以将 DTL 扩展为 DTL+,在从 CSN 回注到主干网络的过程中额外加入一个全局深度可分离卷积(DWConv)层(Chollet 2017),以聚合空间信息。DTL 方法简单、通用,与多种主干架构均具有良好兼容性。在微调过程中,主干网络的早期模块(图 2 中灰色区域所示)输出保持不变,使得在输入相同的情况下可以在多个下游任务间复用主干特征。
我们进行了大量实验验证所提出的 DTL 的有效性。与传统 PETL 方法相比,DTL 在显著减少可训练参数和微调阶段 GPU 显存使用的同时,仍获得更高的 top-1 准确率。
我们的贡献总结如下:
- 我们从 GPU 显存使用的角度分析了现有 PETL 方法的局限性,而显存占用对微调能否实施具有关键影响。
- 基于上述分析,我们提出了 DTL——一个解耦且简洁的框架,可在显著降低可训练参数量和 GPU 显存使用的情况下高效微调大规模预训练模型。
- 我们进行了大量实验验证 DTL 的有效性,结果显示其在性能上相比现有方法具有显著优势。
Related Work
Limitations of Current PETL Methods
我们在相关工作部分介绍了若干典型 PETL 方法,这些方法均将其可训练模块与主干网络高度耦合,因此几乎无法减少反向传播中缓存 {σi′}\{\sigma'_i\}{σi′} 所需的 GPU 显存。这意味着,即便可训练参数数量极少,其 GPU 显存占用仍与完全微调相差不大。
为解决这一根本难题,我们提出了一种新的学习范式——解耦迁移学习(DTL)。DTL 的核心思想是:将额外小型模块的权重更新过程从主干网络中彻底解耦(见图 2)。这样,与梯度相关的 σi′\sigma'_iσi′ 缓存需求即可大幅减少(参见式 (3) 与 (4))。
通过这种方式,DTL 不仅具备参数高效的特性,更能够在微调大规模预训练模型时显著减少必要的 GPU 显存占用,从而突破现有 PETL 方法的限制。
Method
我们提出了一种解耦的、简单有效的方法来适当地微调大规模预训练模型。为了权衡不同环境下的识别精度和结构复杂度,我们引入了两种方法的变体,分别命名为DTL和DTL +。
DTL: Simplicity Matters
我们首先展示了我们解决方案的最简单版本。在图2中,我们展示了所提出的Vi T ( Dosovitskiy et al 2021)主干网架构的管道,该主干网主要由紧凑型侧网络( Compact Side Network,CSN )构建。CSN被插入到主干网中进行信息聚合和特征适配。需要说明的是,本文提出的方法与其他类型的骨干网是兼容的,将在下文中讨论。
CSN 是一个独立、轻量的小网络,输入每一层 ViT 的特征 zi,从中抽取任务信息 hi;
在后半部分的层把 hi 加回到主干,以产生任务特定的特征。主干不需要反向传播,只做前向;
参数全部在 CSN 里面 → 显存极省。
DTL+ : Effectiveness Matters
为了进一步提升本文方法的有效性,我们在施加θ后的每一个边层附加一个全局深度可分离卷积( DWConv )层(肖莱2017 ) g。DTL +的计算公式为:
g的步长设置为1,并采用补零的方式保证g不改变特征尺寸。值得注意的是,g在不同的CSN层之间共享,使得g中的可训练参数数量相比于初始CSN较少,整个CSN模块仍然是轻量级的。g的引入使得我们的CSN模块能够很好地处理空间信息。通过这样的操作,模型更容易识别新的类别。
Advantages
所提出的方法具有一些显著的优点,我们对此进行了详细的讨论。
Disentangled.如图 2 所示,所提出的 CSN 是一个与主干网络几乎解耦的插件式模块,它以即插即用的方式与主干进行交互。这一特性使得我们的方法实现简单,并且几乎兼容所有主干架构。现代深度神经网络通常被划分为若干中间阶段(stage),且同一阶段内部的特征维度保持一致。通过在每个阶段的开始将 CSN 的隐状态 hi 重新初始化为 0,我们的方法可以轻松迁移到不同的主干架构。
从 GPU 显存使用的角度来看,以往的方法中权重更新与主干网络是直接耦合的。正如前文所分析的那样,即使可训练参数的数量很小,它们仍然需要缓存大量的 {σ′ᵢ} 来进行梯度回传,从而占用大量显存。我们的方法通过以下两点缓解了这一问题:
将主干的前向传播与 CSN 分离;
只在靠后的阶段(i ≥ M)将它们重新耦合。
在我们的框架中,主干网络前 M 个 block(图 2 中的灰色区域)不会接收任何反向传播梯度。因此,CSN 中需要缓存的 {σ′ᵢ} 数量大幅减少,从而极大地提高了显存使用效率,实现了真正意义上的 GPU 内存节省。
最后,我们进一步讨论该解耦架构带来的另一项优势:特征复用(feature reuse)的可能性。设想这样一个场景:我们需要对同一张输入图像执行多个任务(例如同时预测一个人的年龄和性别)。如果使用以往的方法,经过微调后的不同任务模型会生成彼此不同的中间特征 zi+1。换句话说,不同任务之间无法在主干中共享计算。因此,以往的标准流程是:为每个任务分别学习一组特定的参数(参见表 1),并为每个任务单独执行前向推理。
Simple.由于 CSN 与主干网络是解耦的,我们的方法相比以往方法在结构上天然更加简洁。由于所有 PETL 方法都会在主干网络上添加不同形式的结构单元作为可训练参数,为了更详细地验证 DTL 的简洁性,我们在表 1 中比较了我们方法与现有方法的最小结构单元数量。在此语境下,“最小结构单元”指插入到主干网络中的原子模块。
例如,在 LoRA(Hu et al. 2022)中,一个最小结构单元由一对矩阵 A 与 B 构成,以生成 ΔW\Delta WΔW(参见公式 2)。因为 LoRA 在每个 Transformer block 的 MHSA 中的 Wq 和 Wv 上分别插入 ΔW\Delta WΔW,因此总共需要 24 个这样的单元。其他方法也以类似方式定义最小结构单元,包括:
1)SSF 中的 γ 和 β;
2)NOAH 中 supernet 要搜索、subnet 要保留的模块;
3)FacT 中的分解张量;
4)我们 DTL 中的矩阵对 aia_iai 和 cic_ici;
5)DTL+ 中额外的全局 DWConv 层。
如表 1 所示,所提出的方法所需的最小结构单元数量比现有方法显著更少。
我们注意到之前的工作 LST(Sung, Cho, and Bansal 2022)也采用了 side network 的设计。但其架构非常复杂,并且需要使用复杂的初始化技巧(Li et al. 2017),导致其可训练参数数量非常大(如表 2 所示,大约是我们方法的 50 倍)。正如之前分析的那样,我们通过将 d′d'd′ 设为非常小的值(2 或 4)来减少微调冗余,这远小于以前的方法(如 LoRA 和 Adapter 中的 8)。这种设置使得我们的 DTL 不仅结构简单,而且可训练参数量也显著少于其他方法。
Effective.我们进行了大量的实验来验证所提出方法的有效性。结果表明,我们的方法在多种架构上都表现出优异的识别精度,在几个标准基准上达到了新的先进水平。