【连续学习之SS-IL算法】2021年CPVR会议论文Ss-il:Separated softmax for incremental learning
1 介绍
年份:2021
期刊: 2021CPVR
Ahn H, Kwak J, Lim S, et al. Ss-il: Separated softmax for incremental learning[C]//Proceedings of the IEEE/CVF International conference on computer vision. 2021: 844-853.
本文提出的SS-IL(Separated Softmax for Incremental Learning)算法,通过分离的softmax输出层和任务级知识蒸馏(TKD),解决了增量学习中的类别灾难性遗忘问题,其中关键步骤包括:1) 分离softmax(SS)层,它通过独立计算新旧类别的softmax概率,阻止了新旧类别间的梯度流动,从而减少了对旧类别输出概率的不平衡惩罚;2) 任务级知识蒸馏(TKD),它为每个任务独立计算软目标,避免了全局知识蒸馏(GKD)可能保留的预测偏差。本文算法属于基于知识蒸馏的算法,因为它特别强调了任务级知识蒸馏(TKD)在解决增量学习中的类别不平衡和灾难性遗忘问题中的作用。同时,它也涉及到基于架构的方法,因为提出了新的分离softmax输出层来调整模型架构。
2 创新点
- 分离Softmax(SS)层:
- 提出了一种新的分离Softmax输出层,该层能够独立处理新旧类别的输出分数,避免了在梯度更新过程中对旧类别的过度惩罚。
- 任务级知识蒸馏(TKD):
- 展示了任务级知识蒸馏(TKD)与分离Softmax层相结合可以有效解决增量学习中的类别不平衡问题,TKD通过为每个任务独立计算软目标,减少了旧模型中的预测偏差。
- 系统性分析:
- 对导致类别分数偏差的根本原因进行了系统性分析,指出了传统softmax概率计算是导致偏差的主要原因,并提出了相应的解决方案。
- 实验验证:
- 在多个大规模增量学习基准数据集上进行了广泛的实验验证,证明了SS-IL在不同增量学习场景下都能取得强于现有技术的准确性,且无需额外的后处理步骤。
- 鲁棒性:
- 证明了SS-IL在不同的实验条件下(如不同的增量任务数量和记忆库大小)都表现出了很好的鲁棒性,尤其是在记忆库大小减小时,模型的准确性下降幅度较小。
- 经验回放(ER)技术:
- 引入了经验回放(ER)技术来保持mini-batch中新旧类别的比例,进一步平衡了模型对新旧类别的更新,提高了模型的预测性能。
3 算法
3.1 算法原理
分离Softmax(SS)层
在增量学习中,我们考虑一个学习代理连续地从增量到达的训练数据批次中学习新类别,并旨在对所有已学习的类别进行良好预测。主要挑战是灾难性遗忘,对于基于示例记忆的CIL方法,通常认为遗忘是由于新旧类别之间的数据不平衡导致的分类分数偏差。为了分析这种偏差的根源,我们考虑了计算所有旧类和新类的输出分数的softmax概率可能是偏差的主要原因。因此,我们提出了分离Softmax(SS)输出层,它通过分别计算新旧类别的softmax概率,阻止了新旧类别间的梯度流动,从而减少了对旧类别输出概率的不平衡惩罚。
任务级知识蒸馏(TKD)
为了进一步解决偏差问题,我们使用了任务级知识蒸馏(TKD)。与全局知识蒸馏(GKD)不同,TKD为每个任务独立计算软目标,避免了GKD可能保留的预测偏差。TKD通过使用每个任务的单独softmax概率进行蒸馏,尝试保留任务级知识,而不保留可能存在于旧模型中的预测偏差。
经验回放(ER)技术
为了确保在mini-batch中保持新旧类别的比例,我们引入了经验回放(ER)技术。ER通过从旧类和新类中均匀地抽取样本,确保了在梯度下降步骤中对旧类别的更新不会被新类别的样本所主导。
损失函数
SS-IL的总体损失函数由两部分组成:分离Softmax交叉熵损失(LCE-SS)和任务级知识蒸馏损失(LTKD)。具体来说,对于增量任务t,损失函数为:
$ L_{SS-IL,t}((x, y), \theta) = L_{CE-SS,t}((x, y), \theta) + L_{TKD,t}(x, \theta) $
其中,$ L_{CE-SS,t} 是分离 S o f t m a x 交叉熵损失, 是分离Softmax交叉熵损失, 是分离Softmax交叉熵损失, L_{TKD,t} $是任务级知识蒸馏损失。
3.2 算法步骤
- 黄色区域:代表旧类别(Old Classes),即在之前任务中已经学习过的类别。
- 红色区域:代表新类别(New Classes),即当前任务中新出现的类别。
- 特征提取器(Feature Extractor):通常是深度卷积神经网络(CNN),用于从输入数据中提取特征。
- SS-Layer(分离Softmax层):这是SS-IL算法的核心部分,它包含两个独立的softmax输出层,一个用于旧类别,一个用于新类别。分离的softmax层使得模型在处理新旧类别时更加平衡,提高了模型对旧类别的保持能力。
- 初始化模型参数:
- 初始化深度神经网络(DNN)模型的参数$ \theta $。
- 增量任务学习:
- 对于每个增量任务$ t : a . ∗ ∗ 经验回放( E R ) ∗ ∗ :从 : a. **经验回放(ER)**:从 :a.∗∗经验回放(ER)∗∗:从 D_t 和 和 和 M 中抽取 m i n i − b a t c h ,确保新旧类别的比例。 b . ∗ ∗ 前向传播 ∗ ∗ :计算模型在当前 m i n i − b a t c h 上的输出分数 中抽取mini-batch,确保新旧类别的比例。 b. **前向传播**:计算模型在当前mini-batch上的输出分数 中抽取mini−batch,确保新旧类别的比例。b.∗∗前向传播∗∗:计算模型在当前mini−batch上的输出分数 z_t(x, \theta_t) $。
c. 计算损失:- 分离Softmax交叉熵损失:$ L_{CE-SS,t}((x, y), \theta_t) = L_{CE,t-1}((x, y), \theta_t) \cdot 1{y \in P_t} + DKL(y_t | p_t(x, \theta_t)) \cdot 1{y \in N_t} ,其中 ,其中 ,其中 P_t 表示旧类别, 表示旧类别, 表示旧类别, N_t $表示新类别。
- 任务级知识蒸馏损失:$ L_{TKD,t}(x, \theta_t) = \sum_{s=1}^{t-1} DKL(p_s(x, \theta_{t-1}) | p_s(x, \theta_t)) 。 d . ∗ ∗ 反向传播与参数更新 ∗ ∗ :计算总损失 。 d. **反向传播与参数更新**:计算总损失 。d.∗∗反向传播与参数更新∗∗:计算总损失 L_{SS-IL,t}((x, y), \theta_t) = L_{CE-SS,t}((x, y), \theta_t) + L_{TKD,t}(x, \theta_t) ,并通过随机梯度下降( S G D )更新模型参数 ,并通过随机梯度下降(SGD)更新模型参数 ,并通过随机梯度下降(SGD)更新模型参数 \theta_t $。
- 对于每个增量任务$ t : a . ∗ ∗ 经验回放( E R ) ∗ ∗ :从 : a. **经验回放(ER)**:从 :a.∗∗经验回放(ER)∗∗:从 D_t 和 和 和 M 中抽取 m i n i − b a t c h ,确保新旧类别的比例。 b . ∗ ∗ 前向传播 ∗ ∗ :计算模型在当前 m i n i − b a t c h 上的输出分数 中抽取mini-batch,确保新旧类别的比例。 b. **前向传播**:计算模型在当前mini-batch上的输出分数 中抽取mini−batch,确保新旧类别的比例。b.∗∗前向传播∗∗:计算模型在当前mini−batch上的输出分数 z_t(x, \theta_t) $。
- 测试与评估:
- 在所有增量任务学习完成后,使用最终模型参数$ \theta_T $对测试集进行预测和评估。
4 思考
(1)全局知识蒸馏和任务级知识蒸馏?
全局知识蒸馏(General Knowledge Distillation, GKD)和任务级知识蒸馏(Task-wise Knowledge Distillation, TKD)。LGKD将所有任务的知识合并在一起进行蒸馏,而LTKD则为每个任务独立进行蒸馏,这样做有助于减少不同任务间的干扰,特别是在处理增量学习中的类别不平衡和灾难性遗忘问题时。
LGKD (左图)
- 全局Softmax概率:LGKD使用全局的softmax概率$ p_{\tau}^{1:t-1}(x, \theta) 作为软目标( s o f t t a r g e t ),这个概率是结合了从任务 1 到任务 作为软目标(soft target),这个概率是结合了从任务1到任务 作为软目标(softtarget),这个概率是结合了从任务1到任务 t-1 $的所有类别输出分数计算得到的。
- KL散度:LGKD的损失函数基于Kullback-Leibler散度(KL散度),它衡量了模型当前参数$ \theta 下的概率分布 下的概率分布 下的概率分布 p_{\tau}^{1:t-1}(x, \theta) 和之前学习任务上的概率分布 和之前学习任务上的概率分布 和之前学习任务上的概率分布 p_{\tau}^{1:t-1}(x, \theta_{t-1}) $之间的差异。
- 目标:LGKD的目标是使当前模型的输出接近于之前所有任务学习到的全局概率分布,以此来保留之前任务的知识。
LTKD (右图)
- 任务级Softmax概率:与LGKD不同,LTKD为每个任务$ s 独立计算 s o f t m a x 概率 独立计算softmax概率 独立计算softmax概率 p_{\tau}^s(x, \theta) $,仅使用该任务自己的输出分数。
- KL散度:LTKD的损失函数也是基于KL散度,但是它分别计算当前模型参数$ \theta $下的概率分布和之前每个任务学习到的概率分布之间的差异。
- 目标:LTKD的目标是使当前模型的输出接近于每个任务自己的软目标,这样可以减少不同任务间的知识干扰,特别是在新任务学习时不会受到旧任务预测偏差的影响。
相关文章:

【连续学习之SS-IL算法】2021年CPVR会议论文Ss-il:Separated softmax for incremental learning
1 介绍 年份:2021 期刊: 2021CPVR Ahn H, Kwak J, Lim S, et al. Ss-il: Separated softmax for incremental learning[C]//Proceedings of the IEEE/CVF International conference on computer vision. 2021: 844-853. 本文提出的SS-IL(…...

Go+chromedp实现Web UI自动化测试
1.为什么使用go进行UI自动化测试? 速度:Go速度很快,这在运行包含数百个UI测试的测试套件时是一个巨大的优势 并发性:可以利用Go的内置并发性(goroutines)来并行化测试执行 简单:Go的简约语法允许您编写可读且可维护…...
【MySQL 高级特性与性能优化】
MySQL 高级特性与性能优化 一、MySQL 存储引擎 (一)InnoDB 存储引擎 1. 特点 支持事务:InnoDB 是 MySQL 中提供完整 ACID 事务支持的存储引擎,这意味着它能够保证数据库操作在复杂的并发环境下的一致性、隔离性、原子性和持久…...

Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化
如何使用 Maven 将 Spring Boot 应用程序 Docker 化? Docker是一个开源容器化工具,用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中,为了将Spring B…...
微信小程序开发示例
微信小程序开发涉及多个方面,包括页面布局、交互逻辑、数据处理等。以下是一个简单的微信小程序开发示例,包括页面布局、样式定义、交互逻辑等方面的内容。 一、页面布局(WXML) <!-- index.wxml --> <view class"…...
【机器学习】概述
文章目录 1. 机器学习三步骤2. 机器学习图谱2.1 任务类型 (Task)2.2 模型选择 (Methods)2.3 学习场景 (Scenario) 1. 机器学习三步骤 定义一个模型 (Define a set of function) 选择一组合适的函数来表示模型。 评估模型好坏 (Goodness of function) 找到一个损失函数…...

音视频采集推流时间戳记录方案
音视频同步更多文章 深入理解音视频pts,dts,time_base以及时间数学公式_视频pts计算-CSDN博客 ffplay音视频同步分析_ffplay 音视频同步-CSDN博客 音视频采集打时间戳设计 实时音视频数据的采集和处理场景。具体来说: 采集阶段: 在音视频数据采集过…...

【Linux】:线程安全 + 死锁问题
📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 1. 线程安全和重入问题&…...

【深度学习】时间序列表示方法
自然界除了2D的图片数据之外,还有语音、文字,这些数据都有时间的先后顺序的。对于2D的图像的数据,可以用RGB值来表示像素的色彩度。语音可以用信号幅度值来表示,而Pytorch没有自带String支持,在表示文字之前需要进行Em…...

1.微服务灰度发布落地实践(方案设计)
文章目录 前言灰度发布的优点设计概要系统架构图流量控制客户端服务端 路由路径应用客户端实现核心组件分析1.网关2. spring-cloud3. dubbo4. nocas5. thread6. message queue 前言 微服务架构中的灰度发布(也称为金丝雀发布或渐进式发布)是一种在不影响…...

【UE5 C++课程系列笔记】15——Assert的基本使用
目录 概念 一、Check 二、Verify 三、Ensure 对比 基本使用 一、check的基本使用 二、ensure的基本使用 三、verify的基本使用 概念 assert 可在开发期间帮助检测和诊断不正常或无效的运行时条件。这些条件通常检查是否指针为非空、除数为非零、函数并非递归运行&…...

kubernetes Gateway API-1-部署和基础配置
文章目录 1 部署2 最简单的 Gateway3 基于主机名和请求头4 重定向 Redirects4.1 HTTP-to-HTTPS 重定向4.2 路径重定向4.2.1 ReplaceFullPath 替换完整路径4.2.2 ReplacePrefixMatch 替换路径前缀5 重写 Rewrites5.1 重写 主机名5.2 重写 路径5.2.1 重新完整路径5.2.1 重新部分路…...

likeAdmin架构部署(踩坑后的部署流程
1、gitee下载 https://gitee.com/likeadmin/likeadmin_java.git 自己克隆 2、项目注意 Maven:>3.8 ❤️.9 (最好不要3.9已经试过失败 node :node14 (不能是18 已经测试过包打不上去使用14的换源即可 JDK:JDK8 node 需要换源 npm c…...

【一款超好用的开源笔记Logseq本地Docker部署与远程使用指南】
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
浅谈torch.utils.data.TensorDataset和torch.utils.data.DataLoader
1.torch.utils.data.TensorDataset 功能定位 torch.utils.data.TensorDataset 是一个将多个张量(Tensor)数据进行简单包装整合的数据集类,它主要的作用是将相关联的数据(比如特征数据和对应的标签数据等)组合在一起&…...

gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵
gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵 题目描述 小杨想要构造一个 m m m \times m m...

FFmpeg:详细安装教程与环境配置指南
FFmpeg 部署完整教程 在本篇博客中,我们将详细介绍如何下载并安装 FFmpeg,并将其添加到系统的环境变量中,以便在终端或命令行工具中直接调用。无论你是新手还是有一定基础的用户,这篇教程都能帮助你轻松完成 FFmpeg 的部署。 一、…...
《特征工程:自动化浪潮下的坚守与变革》
在机器学习的广阔天地中,特征工程一直占据着举足轻重的地位。它宛如一位幕后的工匠,精心雕琢着原始数据,将其转化为能够被机器学习模型高效利用的特征,从而推动模型性能迈向新的高度。然而,随着技术的飞速发展…...

webrtc 源码阅读 make_ref_counted模板函数用法
目录 1. 模板参数解析 1.1 typename T 1.2 typename... Args 1.3 typename std::enable_if::value, T>::type* nullptr 2. scoped_refptr 3. new RefCountedObject(std::forward(args)...); 4. 综合说明 5.在webrtc中的用法 5.1 peerConnectionFactory对象的构建过…...
【深度学习基础之多尺度特征提取】特征金字塔(Feature Pyramid)是如何在深度学习网络中提取多尺度特征的?附代码
【深度学习基础之多尺度特征提取】特征金字塔(Feature Pyramid)是如何在深度学习网络中提取多尺度特征的?附代码 【深度学习基础之多尺度特征提取】特征金字塔(Feature Pyramid)是如何在深度学习网络中提取多尺度特征…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...