Disentangled Transfer Learning for Visual Recognition

本文介绍了一种新型的迁移学习方法DisentangledTransferLearning(DTL),通过设计轻量级的CompactSideNetwork(CSN)来分离权重更新和主模型backbone,显著降低GPU内存使用,同时保持高精度的知识迁移。DTL通过低秩线性变换和适应性特征调整,有效扩展了传统PETL方法的适用范围。
摘要由CSDN通过智能技术生成

DTL: Disentangled Transfer Learning for Visual Recognition

  • 论文链接:https://arxiv.org/pdf/2312.07856.pdf
  • 源码链接:https://github.com/heekhero/DTL

简介

大规模预训练加微调的框架已经在各个领域推广。但是由于GPU内存或时间预算的原因,传统的微调可能是难以解决的,因为必须更新整个大模型参数。最近,参数有效迁移学习(PETL)被提出仅更新可训练参数的极小子集。由于其效率和防止过度拟合的能力,PETL的许多变体相继出现。
然而可训练参数的大幅减少并不一定意味着GPU内存使用量同等减少:节省的GPU内存百分比仍然很小(约为25%)。如果由于GPU内存不足而无法对大模型进行微调,即使是PETL框架也可能失败。这个缺点是至关重要的,也是根本性质。因此设计一种有效减少GPU内存使用并充分探索大规模预训练模型效率至关重要。PETL方法的一个共同特征是它们将小型可训练模块与巨大的冻结backbone紧密纠缠。 如LST: Ladder Side-Tuning for parameter and memory efficient transfer learning中所示,为了正确更新特定网络参数,模型必须从激活中缓存相关的中间梯度。这种纠缠设计使缓存称为GPU内存占用的相当大一部分,从而阻碍了大预训练模型在各种任务中应用。
为了解决这个基础缺点,本文提出了纠缠迁移学习(Disentangled Transfer Learning),它通过提出轻量级紧凑侧网络(Compact Side Network,CSN)将权重更新与backbone分离。DTL不仅大大减少了GPU内存占用,也取得了知识迁移的高精度。
如图2所示,CSN由若干低秩线性映射矩阵以抽取特定任务信息。通过将这些信息注入到后面几个backbone块中,自适应地校准预训练模型生成的部分中间特征,使得这些特征对下游任务更具判别性。本文还可以将DTL增强为DTL+,它插入额外的全局深度可分离卷积(DWConv)层,以在CSN向backbone注入时收集空间信息。DTL非常简单,并且与各种backbone架构兼容。backbone中早期块的输出在微调过程中保持不变,当提供相同输出时可以在多个下游任务中重用backbone特征。

在这里插入图片描述

当前PETL方法的限制

假设有N层的FFN网络 y = f N ( f N − 1 ( … f 1 ( x ) ) ) y=f_{N}(f_{N-1}(\ldots f_{1}(x))) y=fN(fN1(f1(x)))。层i权重矩阵 W i W_{i} Wi偏差项 b i b_{i} bi o i + 1 , z i + 1 o_{i+1},z_{i+1} oi+1,zi+1是层i的输出和激活前特征,满足 o i + 1 = σ ( z i + 1 ) = σ ( W i o i + b i ) o_{i+1}=\sigma(z_{i+1})=\sigma(W_{i}o_{i}+b_{i}) oi+1=σ(zi+1)=σ(Wioi+bi)。Ladder Side-Tuning研究显示从损失 L L L后向传播到 W i , b i W_{i},b_{i} Wi,bi的梯度是:
∂ L ∂ W i = ∂ L ∂ o i + 1 σ i ′ o i ∂ L ∂ b i = ∂ L ∂ o i + 1 σ i ′ \begin{aligned} \frac{\partial L}{\partial W_{i}}&=\frac{\partial L}{\partial o_{i+1}}\sigma_{i}^{\prime}o_{i}\\ \frac{\partial L}{\partial b_{i}}&=\frac{\partial L}{\partial o_{i+1}}\sigma_{i}^{\prime}\\ \end{aligned} WiLbiL=oi+1Lσioi=oi+1Lσi
其中 σ i ′ \sigma_{i}^{\prime} σi ∂ o i + 1 / ∂ z i + 1 \partial o_{i+1}/\partial z_{i+1} oi+1/zi+1缩写。进一步 ∂ L / ∂ o i + 1 \partial L/\partial o_{i+1} L/oi+1可以表示为:
∂ L ∂ o i + 1 = ∂ L ∂ o i + 2 ∂ o i + 2 ∂ z i + 2 ∂ z i + 2 ∂ o i + 1 = ∂ L ∂ o i + 2 σ i + 1 ′ W i + 1 \frac{\partial L}{\partial o_{i+1}}=\frac{\partial L}{\partial o_{i+2}}\frac{\partial o_{i+2}}{\partial z_{i+2}}\frac{\partial z_{i+2}}{\partial o_{i+1}}=\frac{\partial L}{\partial o_{i+2}}\sigma_{i+1}^{\prime}W_{i+1} oi+1L=oi+2Lzi+2oi+2oi+1zi+2=oi+2Lσi+1Wi+1
为了正确计算除了模型参数外的参数,在链式规则的对应项 { σ i ′ } \{\sigma_{i}^{\prime}\} {σi}需要在微调时被缓存,这支配了GPU内存使用。
本文发现代表性的PETL方法将可训练参数与backbone紧密纠缠在一起,这几乎不会减少缓存 { σ i ′ } \{\sigma_{i}^{\prime}\} {σi}中GPU内存使用。这一特性表明,与完全微调相比,即使可训练参数数量非常少,GPU内存占用也无法有效减少。
为了解决这一根本问题,本文提出了一种新的学习范式,称为纠缠迁移学习(Disentangled Transfer Learning,DTL)。DTL核心思想是将小型额外模块权重更新从backbone中分离出来。因此为后向传播存储的 σ i ′ \sigma_{i}^{\prime} σi能被剧烈减少。通过这种方式,DTL成功地进一步突破了当前PETL的极限,不仅提高了参数效率,而且在微调大规模预训练模型时减少了必要的GPU内存大小。
本文提出了一种简单且有效的方法正确微调大规模预训练模型。为了平衡不同环境中的识别精度和架构复杂性,本文引入了两种变体DTL和DTL+。

DTL

首先给出最简单的形式。图2给出了ViT架构对应的提出模块框架,这主要由紧凑边网络(Compact Side Network,CSN)组成。CSN被插入到backbone中用于信息聚合和特征自适应。提出的方法与其他类型的ViT兼容。
给定包含N块的ViT backbone,前向计算可以描述为 z = b N ( b N − 1 ( … b 1 ( x ) ) ) z=b_{N}(b_{N-1}(\ldots b_{1}(x))) z=bN(bN1(b1(x))) z z z是输出令牌。 z i + 1 z_{i+1} zi+1是块 b i b_{i} bi输出 z i + 1 = b i ( z i ) z_{i+1}=b_{i}(z_{i}) zi+1=bi(zi) z 1 = x z_{1}=x z1=x。本文CSN由N个低秩线性变换矩阵组成,每个插入到一个块中以提取特定于任务的信息。记 w i = a i c i w_{i}=a_{i}c_{i} wi=aici是第i块的权重矩阵。其中 a i ∈ R d × d ′ , c i ∈ R d ′ × d a_{i}\in \mathbb{R}^{d\times d^{\prime}},c_{i}\in \mathbb{R}^{d^{\prime}\times d} aiRd×d,ciRd×d d ′ ≪ d d^{\prime}\ll d dd。CSN逐渐从每个块聚集信息:
h i + 1 = h i + z i w i z i + 1 = b i ( z i ) \begin{aligned} h_{i+1}&=h_{i}+z_{i}w_{i}\\ z_{i+1}&=b_{i}(z_{i})\\ \end{aligned} hi+1zi+1=hi+ziwi=bi(zi)
h i h_{i} hi是CSN的第i层输出, h 1 = 0 h_{1}=0 h1=0。在这之后,从 M M M块开始,聚合的特定于任务的信息 h i + 1 h_{i+1} hi+1用于通过将 z i + 1 z_{i+1} zi+1添加回 z i + 1 z_{i+1} zi+1来使其适应下游任务。因此当 i ≥ M i\geq M iM时满足
z i + 1 ′ = z i + 1 + θ ( h i + 1 ) z_{i+1}^{\prime}=z_{i+1}+\theta(h_{i+1}) zi+1=zi+1+θ(hi+1)
z i + 1 ′ z_{i+1}^{\prime} zi+1 b i b_{i} bi的适应输出。 θ ( x ) \theta(x) θ(x)是swish激活函数。为了防止 z i + 1 ′ z_{i+1}^{\prime} zi+1在微调开始时急剧偏离 z i + 1 z_{i+1} zi+1 α i \alpha_{i} αi遵循均匀分布初始化, c i c_{i} ci是零初始化。第i块的输出可以表示为:
z i + 1 ′ = { z i + 1 + θ ( h i + 1 )  if  i ≥ M z i + 1  otherwise  z_{i+1}^{\prime}=\left\{\begin{array}{ll} z_{i+1}+\theta\left(h_{i+1}\right) & \text { if } i \geq M \\ z_{i+1} & \text { otherwise } \end{array}\right. zi+1={zi+1+θ(hi+1)zi+1 if iM otherwise 
本文发现小的 d ′ d^{\prime} d表现得相当好,这表明backbone特征具有高度冗余性。除了保持 d ′ d^{\prime} d较小之外,在Swish中使用较大的 β \beta β来进一步减少冗余。

DTL+

为了进一步加强本文方法的有效性,在应用 θ \theta θ之后,本文将一个额外的全局深度可分离卷积(Depthwise Separable Convolution,DWConv)层 g g g附加到每个侧层。DTL+公式可以描述为:
z i + 1 ′ = { z i + 1 + g ( θ ( h i + 1 ) )  if  i ≥ M z i + 1  otherwise  z_{i+1}^{\prime}=\left\{\begin{array}{ll} z_{i+1}+g(\theta\left(h_{i+1}\right)) & \text { if } i \geq M \\ z_{i+1} & \text { otherwise } \end{array}\right. zi+1={zi+1+g(θ(hi+1))zi+1 if iM otherwise 
g g g步幅设置为1,零填充用于确保不改变特征尺寸。 g g g在不同CSN层间共享,使得g中的可训练参数数量与初始CSN相比是小的并且整个CSN模块仍然是轻量级的。

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qgh1223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值