Disentangled Transfer Learning for Visual Recognition

news2024/10/6 19:17:16

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模块仍然是轻量级的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1462805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sora:打开视频创作新纪元的魔法钥匙

随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨Sora的技术特点、应用场景以及对未…

ctfshow web入门 web141-145

1.web141 ^\w$表示在开头和末尾匹配字母数字_,传入的v3值不能有字母数字_,即无字母的命令执行 php中1-phpinfo()是可以执行的,加减乘除都可以实现 这里或,异或,取反等运算都可以 这里采用羽师傅的异或脚本生成paylo…

代码随想录第二十三天 回溯算法 77.组合 216.组合总和 17.电话号码的字母组合

回溯算法 LeetCode 77 组合 题目描述 思路 递归函数的返回值以及参数 在这里要定义两个全局变量&#xff0c;一个用来存放符合条件单一结果&#xff0c;一个用来存放符合条件结果的集合。 代码如下&#xff1a; vector<vector<int>> result; // 存放符合条件…

如何使用Docker本地部署Jupyter+Notebook容器并结合内网穿透实现远程访问

文章目录 1. 选择与拉取镜像2. 创建容器3. 访问Jupyter工作台4. 远程访问Jupyter工作台4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定二级子域名地址远程访问 本文主要介绍如何在Ubuntu系统中使用Docker本地部署Jupyter Notebook&#xff0c;并结合cpolar内网穿透…

思科Cisco下输入问号“?”命令help

Cisco CLI &#xff08;Command-Line Interface&#xff09;命令下输入问号“&#xff1f;” 一、在Cisco CLI下&#xff0c;“&#xff1f;”被认为是 – help的帮助命令&#xff0c;当在默认情况下输入“&#xff1f;”&#xff0c;系统会自动识别为 help 命令。 二、那么&a…

【Java面试系列】Nginx

目录 为什么要用Nginx&#xff1f;为什么Nginx性能这么高&#xff1f;Nginx 是如何实现高并发的&#xff1f; Nginx怎么处理请求的&#xff1f;Nginx的工作流程 给 favicon.ico 和 robots.txt 设置过期时间; 这里为 favicon.ico 为 99 天,robots.txt 为 7 天并不记录 404 错误日…

牛B了,GitHub用户免费领空投: TOP 5k 项目的贡献者可领取价值 $200空投。

StarkNet 公链项目为了激励开发者参与其平台建设&#xff0c;启动了空投活动。 如果曾向 GitHub 上获得较多 Star 的项目提交过 PR &#xff0c;就有资格领取 111.1 STRK 的空投奖励。 只需要使用 OAuth 2.0 登录&#xff0c;就可以直接领取。 领取规则 截止到 2023 年 11 月 …

【图片公式识别】图片公式转Word与LaTeX文档:智能识别与转换

前言 嘿&#xff0c;大家好呀&#xff01;&#x1f44b; 谁都知道&#xff0c;写 Word 文档里的公式可不是一件简单的事情&#xff01;你辛辛苦苦在键盘上敲出的数学公式&#xff0c;结果随着 Word 版本的更新&#xff0c;竟然变成了一张图片&#xff01;&#x1f624; 这简直就…

客户端web开发工具

文章目录 安全网络Linter-->捕获代码错误-->eslint源代码控制-->Git代码格式化-->Prettier打包工具--Parcel--Webpack 转换--Babel开发后阶段测试工具配置工具其他 node&#xff0c;npm、yarnnode.js包管理器npmyarn https://developer.mozilla.org/zh-CN/docs/Lea…

http和https的区别(简述)

HTTP&#xff08;HyperText Transfer Protocol&#xff09;和HTTPS&#xff08;HTTP Secure&#xff09;都是用于在客户端和服务器之间传输数据的协议&#xff0c;但它们在安全性方面有重要的区别。 1.HTTP: 概述&#xff1a; HTTP是一种用于传输超文本的协议&#xff08;超文…

洗选中心智能化运维工是做什么的?智能化运维工程师是干什么的

洗选中心智能化运维工程师的职责和工作内容&#xff1f;同时&#xff0c;描述智能化运维工程师在信息技术行业中的具体角色和他们的主要任务。  洗选中心智能运维工程师的职责和工作内容主要包括&#xff1a;  设备监控管理&#xff1a;重点对洗涤中心机器进行实时监控管理…

新书速览|细说PyTorch深度学习:理论、算法、模型与编程实现

超详细的PyTorch深度学习入门书&#xff0c;100余个编程示例6大热点案例&#xff0c;大咖带路&#xff0c;边学边实践。 本书特点&#xff1a; 1. 专家编撰&#xff1a;由资深专家精心编撰&#xff0c;通俗易懂&#xff0c;娓娓道来 2&#xff0e;范例丰富&#xff1a;100余个…

ChatGPT在数据分析OKR计划中的应用

ChatGPT在数据分析OKR计划中的应用 ​ 现在大多数公司引入了OKR&#xff08;objective & key result&#xff09;计划&#xff0c;数据分析师也需要定期制定和检查自己的OKR计划。我们不仅可以利用ChatGPT辅助制定OKR计划&#xff0c;也可以让其对OKR计划内容进行调整、优…

C++笔记:OOP三大特性之多态

前言 本博客中的代码和解释都是在VS2019下的x86程序中进行的&#xff0c;涉及的指针都是 4 字节&#xff0c;如果要其他平台下测试&#xff0c;部分代码需要改动。比如&#xff1a;如果是x64程序&#xff0c;则需要考虑指针是8bytes问题等等。 文章目录 前言一、多态的概念二、…

前端基础自学整理|HTML + JavaScript + DOM事件

目录 一、HTML 1、Html标签 2、Html元素 3、基本的HTML标签 二、CSS 样式 层叠样式表 三、JavaScript 使用示例 四、HTML DOM 通过可编程的对象模型&#xff0c;javaScript可以&#xff1a; window document 1、查找HTML元素 2、操作HTML元素 获取元素的属性 四…

现货白银投资指南 主打一个真实

一说到现货白银投资指南&#xff0c;投资者可能就想到那些怎么教投资者赚钱&#xff0c;而且是赚大钱的技巧。老实说&#xff0c;老看这些大路货很没意思&#xff0c;下面我们就来讨论一些真实的现货白银投资指南。 首先在这个现货白银投资指南开篇我们就需要知道&#xff0c;作…

Retrofit2原理分析

Retrofit官网 GitHub上的Retrofit 使用Retrofit进行网络请求的主要步骤 创建一个接口 用于描述HTTP请求。接口里的方法使用注解来标记请求方式、API路径、请求参数等信息。使用Retrofit.Builder().build();配置和创建一个Retrofit实例&#xff1b;调用retrofit.create()方法获…

四、分类算法 - 随机森林

目录 1、集成学习方法 2、随机森林 3、随机森林原理 4、API 5、总结 sklearn转换器和估算器KNN算法模型选择和调优朴素贝叶斯算法决策树随机森林 1、集成学习方法 2、随机森林 3、随机森林原理 4、API 5、总结

开源 - 一款可自定义的在线免杀平台|过x60、wd等

免责声明&#xff1a;本工具仅供安全研究和教学目的使用&#xff0c;用户须自行承担因使用该工具而引起的一切法律及相关责任。作者概不对任何法律责任承担责任&#xff0c;且保留随时中止、修改或终止本工具的权利。使用者应当遵循当地法律法规&#xff0c;并理解并同意本声明…

智慧项目管理平台安全系统开发,实现智慧化、精细化、智能化管理

场景建设需求 1.建设内容&#xff1a;智慧项目管理平台以工程项目为载体&#xff0c;着眼交通运输铁路施工、道路施工、建筑施工相关行业&#xff0c;以标准化、统一化、动态管理为抓手&#xff0c;以互联网、大数据云计算、5G应用、数字孪生、趋势分析、安全预警、视频监控等…