ICCV 2023|通过慢学习和分类器对齐在预训练模型上进行持续学习
点击蓝字
关注我们
AI TIME欢迎每一位AI爱好者的加入!
作者介绍
张耕维
悉尼科技大学在读博士生,研究方向为持续学习
报告题目
通过慢学习和分类器对齐在预训练模型上进行持续学习
内容简介
持续学习研究的目标在于提高模型利用顺序到达的数据进行学习的能力。尽管大多数现有工作都是建立在从头开始学习的前提下的,越来越多的努力致力于融入预训练的好处。然而,如何让每个增量任务自适应地利用预训练知识,同时保持预训练提供的泛化性仍然是一个悬而未决的问题。在这项工作中,我们对预训练模型上的持续学习(CLPM)进行了广泛的分析,并将关键挑战归因于渐进式过拟合问题。观察到选择性地降低学习率几乎可以解决该问题对表示层的影响,我们提出了一种简单但极其有效的方法,称为带有分类器对齐的慢速学习器(SLCA),该方法通过对类分布进行建模并对齐来进一步改进分类层。在各种场景中,我们的方法为CLPM提供了实质性改进(例如,在Split CIFAR-100、Split ImageNet-R、Split CUB-200和Split Cars-196上分别提高了49.76%、50.05%、44.69%和40.16%),因此显著优于最先进的方法。基于这样一个强有力的基线,我们深入分析了关键因素和有希望的方向,以促进后续研究。
论文链接:https://arxiv.org/pdf/2303.05118.pdf
代码链接:https://github.com/GengDavid/SLCA
01
Background
持续学习表现为在顺序到来的数据上学习,增量式地更新模型。但是,神经网络自身的设计导致它进行持续学习时存在一个挑战,名为“灾难性遗忘问题”,这体现为模型在学习新的任务时,由于没有原来任务的数据,导致模型在旧任务上的性能显著下降。
当前主流的针对这个问题的解决方法有三类。Regularization,在网络参数更新的时候增加限制,使得网络在学习新任务的时候不影响之前的知识。Replay,在模型学习新任务的同时混合原来任务的少量数据,让模型能够学习新任务的同时兼顾旧任务。Network architecture,在模型训练的时候,独立网络中的参数,减少新知识更新对旧知识产生干扰的可能性。
另一方面,预训练模型对于下游任务的训练是非常重要的。目前最基本的方式是对训练模型进行微调(finetune)。也有参数高效调优的方式,诸如视觉提示调优、适配器调优、LoRA、SSF等,在部分单个下游任务上甚至优于微调。
02
Problem Formulation
相对于从头开始学习,当在预训练模型上进行持续学习时,θrps将在预训练模型的数据集上进行预训练,然后使用该模型在一系列新的数据集上进行更新。在引入预训练模型之后,“灾难性遗忘问题”可以延伸为“progressive overfitting”问题,它面临的挑战是如何保证从预训练数据Dpt中得到的泛化性在持续学习的过程中被很好地保留,同时还要兼顾持续学习过程中知识遗忘的问题。
03
Recent Works
近年来的工作如L2P [1]、DualPrompt [2]引入了prompt技术,解决了模型泛化能力损失的问题。但是实际上prompt也是被共享的,仍然存在遗忘问题。从之前工作的实验结果来看,基于prompt的方法优于基于微调的方法。然而,在本工作里,我们的发现结论并非如此。
04
Continual Learning on a Pre-trained Model
Slow Learner is (Almost) All You Need?
在文章中,我们首先探讨了在持续学习的设置下,加入预训练之后基于微调的方法落后于基于提示方法的原因。我们发现关键在于学习率,传统基线的性能受到使用相对较大的学习率的严重限制。当对θrps使用小得多的学习率(0.0001,SGD优化器),而对θcls使用稍大的学习率(0.01)可以极大地提高传统基线的性能。
Effect of Pre-training Paradigm
另外,我们评估了预训练范式对下游持续学习的影响。如图所示,自监督预训练虽然在标签要求和上游持续学习方面更加现实,但通常会导致Seq FT与联合训练之间的性能差距比监督预训练更大。
Further Evaluation of Representation
接下来,我们进一步对表示层进行验证,发现在学习完所有增量任务后,使用持续学习的表示层联合训练所有类别的额外分类器几乎可以达到整个模型的联合训练性能,并且远远优于持续学习的表示层分类器。可见在利用慢学习的方式时,表示层的progressive overfitting问题已经近乎解决,而分类器还有很大提升空间。
Slow Learner with Classifier Alignment
出现上述现象的原因在于,由于每一个任务的分类器是独立训练的,而测试时要求对所有类别给出唯一的分类结果,这就导致持续学习得到的分类器并不是最优的。所以我们进一步提出了分类器对齐模块。具体的做法是在训练过程中,每一个任务结束时计算并存储特征的mean与covariance。在测试之前,用特征的统计量构建高斯分布,根据此分布采样得到每个类别的特征,最后对分类器进行统一的进行微调,这就达到了对齐分类器的目的。
此外,由于分类器在每个任务上是训练收敛的,那么进一步训练分类器会带来过拟合的问题。具体来讲,分类器的输出logits对应每一个类有预测值,我们将其写成模乘以单位向量的形式。当用cross-entropy loss进行优化时,会显著增加模长导致过拟合,于是我们借鉴了ICML’22上logit normalization [3]的工作,加入一个动态的temperature项,使得CE loss仅改变向量的方向,从而缓解过拟合的问题。
本文方法的整个算法流程如下图所示:
05
Experiment Setups
我们在4个Benchmarks上进行了验证,包括Split CIFAR-100、Split ImageNet-R、Split CUB-200、Split Cars-196。每个benchmark考虑了不同的验证维度(见下表)。我们将每个数据集分成10个任务进行训练,评价指标包括Last-Acc (主要评价指标,模型学习完最后一个任务后在所有任务上的平均accuracy)以及 Inc-Acc。
06
Overall Performance
本文方法与其他基线方法对比的实验结果如下图所示,可以看到,在Split CIFAR-100和Split ImageNet-R上,SL可以显著增强持续学习的性能,借助分类器对齐以及logit归一化,我们的方法明显优于L2P与DualPrompt。同样,在细粒度分类的Split CUB-200与Split Cars-196数据集上,本文所提方法表现也较好。
07
Ablation Study
我们对提出的方法进行了广泛的消融实验,证明了更新representation层的必要性。另一方面,我们进一步证明了所提出的分类器对齐和逻辑归一化的有效性。
08
Combine with other methods
我们进一步将Classifier Alignment加入现有的方法中,进一步证明了Classifier Alignment的有效性。
09
Conclusion
首先,我们对这个研究方向进行了重新思考和基准测试,并且提供了一个简单但非常有效的基线,用于重新评估当前的进展和技术路线;其次,Slow Learner几乎可以解决表示层的渐进过拟合问题,分类器对齐进一步改进了分类层。最后,关于未来的方向,我们可以探索更多针对持续学习的预训练范式,更有效地结合参数高效的方法,以及结合上游的预训练和下游的持续学习。
10
Reference
[1] Learning to Prompt for Continual Learning, CVPR’22
[2]DualPrompt: Complementary Prompting for Rehearsal-free Continual Learning, ECCV’22
[3] Mitigating neural network overconfidence with logit normalization, ICML’22
整理:陈研
审核:张耕维
提
醒
点击“阅读原文”跳转至00:22:07
可以查看回放哦!
往期精彩文章推荐
记得关注我们呀!每天都有新知识!
关于AI TIME
AI TIME源起于2019年,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法和场景应用的本质问题进行探索,加强思想碰撞,链接全球AI学者、行业专家和爱好者,希望以辩论的形式,探讨人工智能和人类未来之间的矛盾,探索人工智能领域的未来。
迄今为止,AI TIME已经邀请了1300多位海内外讲者,举办了逾600场活动,超600万人次观看。
我知道你
在看
哦
~
点击 阅读原文 查看回放!
相关文章:

ICCV 2023|通过慢学习和分类器对齐在预训练模型上进行持续学习
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 作者介绍 张耕维 悉尼科技大学在读博士生,研究方向为持续学习 报告题目 通过慢学习和分类器对齐在预训练模型上进行持续学习 内容简介 持续学习研究的目标在于提高模型利用顺序到达的数据进行学习的…...

蓝桥杯打卡Day5
文章目录 日志排序重复者 一、日志排序IO链接 本题思路:本题就是根据就是排序的知识点,在sort内部可以使用仿函数来改变此时排序规则。 #include <bits/stdc.h>const int N10010; int n; std::string logs[N];int main() {std::ios::sync_with_stdio(false)…...

QT for andriod
QT for andriod 开发 apk软件,因为一些特殊的原因,在这里简单的记录一哈自己开发apk的流程和心得。 首先说明我采用的环境有哪些? 1、QT的版本,个人建议5.15.2的版本及以上,我是用的5.15.2。 2、andriod studio 可以…...

【广州华锐互动】AR技术在配电系统运维中的应用
随着科技的不断发展,AR(增强现实)技术逐渐走进了我们的生活。在电力行业,AR技术的应用也为巡检工作带来了许多新突破,提高了巡检效率和安全性。本文将从以下几个方面探讨AR配电系统运维系统的新突破。 首先,AR技术可以实现虚拟巡检…...

TiDB 一栈式综合交易查询解决方案获“金鼎奖”优秀金融科技解决方案奖
日前,2023“金鼎奖”评选结果揭晓, 平凯星辰(北京)科技有限公司研发的 TiDB 一栈式综合交易查询解决方案获“金鼎奖”优秀金融科技解决方案奖 , 该方案已成功运用于 多家国有大行、城商行和头部保险企业 。 此次获奖再…...

《网络是怎样连接的》(六)
本文主要取材于 《网络是怎样连接的》 第六章。 目录 6.1 服务器概览 6.2 服务器的接收操作 6.3 Web服务器程序解释请求消息并作出响应 6.4 浏览器接收响应消息并显示内容 简述:本文主要内容是解释 网络包到达服务器之后,如何给客户端响应的。 服务…...

2023年高教社杯数学建模国赛 赛题浅析
2023年国赛如期而至,为了方便大家尽快确定选题,这里将对赛题进行浅析,以分析赛题的主要难点、出题思路以及选择之后可能遇到的难点进行说明,方便大家尽快确定选题。 难度排序 B>A>C 选题人数 C>A>B (预估结果&…...

使用QT操作Excel 表格的常用方法
VBA 简介 Microsoft Office软件通常使用VBA来扩展Windows的应用程序功能,Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言。 在VBA的参考手册中就可以看到具体函数、属性的用法,Qt操作Excel主要通过 QAxObj…...

vue前后端端口不一致解决方案
在config index.js文件中 引入如下代码即可 const path require(path) const devEnv require(./dev.env) module.exports {dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,proxyTable: devEnv.OPEN_PROXY false ? {} : {/api: {target: http://localhos…...

springcloudSeata处理分布式事务之1.7.0
1.5.0之后版本发生了很大改变 1.seata安装 1.1官网地址 http://seata.io/zh-cn/ 1.2下载地址 https://github.com/seata/seata/releases 下载的是seata-server-1.7.0.zip 1.3seata相关配置的修改 seata-server-1.7.0\seata\conf下的application.yml进行修改 server:por…...

每日刷题|回溯法解决全排列问题
食用指南:本文为作者刷题中认为有必要记录的题目 前置知识:回溯法经典问题之组合 ♈️今日夜电波:爱人错过—告五人 1:11 ━━━━━━️💟──────── 4:52 …...

10-JVM调优工具详解
上一篇:09-JVM垃圾收集底层算法实现 前置启动程序 事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用 1.Jmap 此命令可以用来查看内存信息,实例个数以及占用内存大小 jmap -histo 14660 #查看历史…...
东方博易oj——3119 - 约瑟夫问题2(链表)
文章目录 题目题目描述输入输出样例输入 输出标签 AC代码 题目 题目描述 约瑟夫问题:有 n n n只猴子,按顺时针方向围成一圈选大王(编号从 1 1 1到 n &#…...

C++,day0907
#include <iostream>using namespace std; struct stu { private:int num; private:double score[32];public:void setNum(){cout <<"请输入学生人数:";cin >>num;}void input(){cout<<"请输入学生的成绩:"<<endl;for(int i…...

孤儿僵尸守护进程的简单理解
孤儿进程: 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。 如何模仿一个孤儿进程: 答案是: kill 父…...

学习笔记——Java入门第一季
1.1 Java的介绍与前景 Java语言最早期的制作者:James Gosling(詹姆斯高斯林) 1995年5月23日,Sun Microsystems公司宣布Java语言诞生。 1.2 Java的特性与版本 跨平台 开源(开放源代码) Java代码ÿ…...

更改注册表exe值后的惨痛经历
装软件时由于执行性文件打不开,搜索教程更改了exefile的值,最后整个电脑崩了,所有EXE都打不开,折腾了5个小时,什么办法都试了,甚至重置电脑都不让,打算拿电脑城修电脑了,突然搜到了一…...
stable diffusion实践操作-LyCORIS
系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、LyCORIS是什么?二、使用步骤1.下载2.安装3 使用 二、整理模型1.LoHa-v1.0-pynoise 总结 前言 LyCORIS,可以理解为lora的加强版本。 LyCORIS - Lora beYond Conventional methods,…...

无需公网IP教你如何外网远程访问管家婆ERP进销存
文章目录 前言 1.管家婆服务2. 内网穿透2.1 安装cpolar内网穿透2.2 设置远程访问 3. 固定访问地址4. 配置固定公网访问地址 前言 管家婆辉煌系列产品是中小企业进销存、财务管理一体化的典范软件,历经十余年市场的洗礼,深受广大中小企业的欢迎ÿ…...
Swift使用编解码库Codable
Codable 是 Swift 引入的全新的编解码库,使开发者更方便的解析JSON 或 plist 文件。支持枚举、结构体和类。 Codable协议定义 Codable代表一个同时符合 Decodable 和 Encodable 协议的类型,即可解码且可编码的类型。 typealias Codable Decodable &a…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...