Decoupled Knowledge Distillation解耦知识蒸馏

Decoupled Knowledge Distillation解耦知识蒸馏

现有的蒸馏方法主要是基于从中间层提取深层特征,而忽略了Logit蒸馏的重要性为了给logit蒸馏研究提供一个新的视角,我们将经典的KD损失重新表述为两部分,即目标类知识蒸馏(TCKD)和非目标类知识蒸馏(NCKD)。我们实证研究并证明了两部分的效果:TCKD转移了关于训练样本“难度”的知识而NCKD是logit蒸馏有效的突出原因。更重要的是,我们揭示了经典KD损失是一个耦合公式,它(1)抑制了NCKD的有效性,(2)限制了平衡这两个部分的灵活性。为了解决这些问题,我们提出了解耦知识蒸馏(DKD),使TCKD和NCKD更有效和灵活地发挥其作用。

介绍

在过去的几十年里,计算机视觉领域已经被深度神经网络(DNN)彻底改变,它成功地促进了各种真实场景的任务,如图像分类、目标检测和语义分割。然而,大的网络通常受益于大的模型容量,引入了高计算和存储成本。在广泛部署轻量级模型的工业应用中,这样的成本并不可取。在文献中,降低成本的一个潜在方向是知识蒸馏(KD)。KD代表了一系列专注于将知识从重模型(教师)——转移到轻模型(学生)的方法,这可以在不引入额外成本的情况下提高轻模型的性能。

KD的概念在[12]中首次提出,通过最小化教师和学生预测logit之间的KL-Divergence来转移知识(图1a)。

image-20240303132727112

自[28]以来,大部分的研究注意力都集中在从中间层的深层特征中提取知识。与基于logit的方法相比,特征蒸馏的性能在各种任务上是否表现出色,因此,对logit蒸馏的研究很少涉及。然而,基于特征方法的训练成本并不令人满意,因为在训练期间引入了额外的计算和存储使用(例如,网络模块和复杂的操作)来提取深度特征。

Logit蒸馏需要边际的计算和存储成本,但性能较差。直观的说,logit蒸馏应该达到与特征蒸馏相当的性能,因为logit比深度特征处于更高的语义层。假设logit蒸馏的潜力收到未知原因的限制,导致性能不理想。为了振兴基于Logit的方法,我们通过深入研究KD的机制开始这项工作。首先,我们将分类预测分为两个层次(1)对目标类和所有非目标类进行二值预测;(2)对每个非目标类进行多类预测。在此基础上,我们将经典KD损失[12]重新表述为两部分,如图1b所示。一种是针对目标类的二元logit蒸馏另一种是针对非目标类的多类别logit蒸馏。为了简化期间,我们将其分别命名为目标分类和知识蒸馏(TCKD)和非目标分类知识蒸馏(NCKD)。重新配方使我们能够独立地研究这两部分的效果。

TCKD通过二元logit蒸馏传递知识,这意味这只提供目标类的预测,而每个非目标类的具体预测是未知的。一个合理的假设是,TCKD传递了关于训练样本“难易度”的知识,即知识描述了识别每个训练样本的难易程度。为了验证这一点,我们从三个方面设计实验来提高训练数据的“难度”,即更强的增强、更嘈杂的标签和具有固有挑战性的数据集。

NCKD只考虑非目标logit之间的知识。有趣的是,我们通过经验证明,仅应用NCKD就可以获得与经典KD相当甚至更好的结果,这表明非目标logit中包含的知识至关重要,这可能是突出的“暗知识”。

更重要的是,我们的重新表述表明,经典KD损失是一个高度耦合的表述(如图1b所示),这可能是logit蒸馏潜力有限的原因。首先,NCKD损失项被一个与教师对目标类别的预测置信度负相关的系数加权。因此较大的预测分数将导致较小的权重。这种耦合显著抑制了NCKD对良好预测训练样本的影响。这种抑制并不可取,因为教师对训练样本越有信息,可提供的知识越可靠越有价值。其次,TCKD和NCKD的意义是耦合的,即不允许分别对TCKD和NCKD进行加权。这种限制是不可取的,因为TCKD和NCKD应该分开考虑,因为它们的贡献来自不同的方面。

为了解决这些问题,我们提出了一种灵活高效的logit蒸馏方法,称为解耦知识蒸馏(DKD,图1b)DKD将NCKD损失从与教师置信度负相关的系数中解耦,将其替换为恒定值,从而提高了对预测良好的样本的蒸馏效率。同时,对NCKD和TCKD也进行了解耦,通过调整各部分权重,可以分别考虑NCKD和TCKD的重要性。

总的来说,我们的贡献总结如下:

(1)将经典的logit蒸馏分为TCKD和NCKD,为Logit蒸馏的研究提供了新的思路。

(2)我们揭示了由其高耦合公式引起的经典KD损失的局限性。NCKD与教师信心的耦合抑制了知识转移的有效性。TCKD与NCKD的耦合限制了平衡两部分的灵活性。

(3)为了克服这些局限性,我们提供了一种有效的logit蒸馏方法DKD。

重新思考知识蒸馏

在本节中,我们深入探讨知识蒸馏的机制。我们将KD损失重新表述为两部分的加权和,一部分与目标类相关,另一部分与目标类无关。我们探讨了知识蒸馏框架中每个部分的作用,并揭示了经典KD的一些局限性。受此启发,我们进一步提出了一种新的logit蒸馏方法,在各种任务上取得了显著的性能。

回顾KD

Notation对于第t类的训练样本,分类概率可以表示为P=image-20240303150007961,其中pi是第i类的概率,C是类的个数。p中的每个元素都可以通过softmax函数得到:
p i = e x p ( z i ) ∑ j = 1 C e x p ( z j ) p_i = \frac{exp(z_i)}{\sum_{j=1}^Cexp(z_j)} pi=j=1Cexp(zj)exp(zi)
其中zi代表第i类的对数。

为了区分于目标类相关和不相关的预测,我们定义了以下符号。b = image-20240303150447331表示目标类(pt)和其他所有非目标类(p\t)的二值概率,其计算公式为:

image-20240303150539198

同时,我们声明image-20240303150715008独立建模非目标类之间的概率(即,不考虑第t类)。每个元素的计算方法为:image-20240303150736308

Reformulation 在第一部分中,我们尝试用二元概率b和非目标类之间的概率p来重新表述KD。T和S分别表示老师和学生。经典KD使用kl散度作为损失函数,也可以写成2:

image-20240303151314489

根据等式(1)和等式(2)我们有image-20240303151721273,所以我们可以把等式(3)改写为:

image-20240303151806455

等式(4)可以改写为:

image-20240303151918101

如公式(5)所示,KD损失被重新表述为两项的加权和。image-20240303152823063表示目标类别的教师和学生的二元概率之间的相似度。因此,我们将其命名为目标类知识蒸馏(TCKD)。同时,image-20240303153038652表示非目标类中教师和学生概率的相似度,称为非目标类知识蒸馏(NVKD)。式(5)可以改写为:

image-20240303153129634

显然,NCKD的重建与image-20240303153158532是耦合的。

上述重新表述启发了我们对TCKD和NCKD的个体效应进行研究,这将揭示经典耦合表述的局限性。

TCKD和NCKD的影响

各部件的性能增益。我们分别研究了TCKD和NCKD对CIFAR-100的影响。选择ResNet、WideResNet(WRN)和ShuffleNet作为训练模型,其中考虑了相同和不同的架构。实验结果如表1,对于每个师生对,我们报告了(1)学生基线,(2)经典KD(其中同时使用TCKD和NCKD),(3)单一TCKD和(4)单一NCKD的结果。每个损失的权重设置为1.0(包括默认的交叉熵损失)。其它实现细节与第4节相同。

image-20240303155626665

直观地说,TCKD集中于与目标类相关的知识,因为相应的损失函数只考虑二进制概率。相反,NCKD侧重于非目标类别的知识。我们注意到单独使用TCKD对学生来说可能没有帮助(例如在ShufflerNet-V1上增加0.02%和0.12%)甚至是有害的(例如,在WRN-16-2上下降2.3%,在ResNet8-4上下降3.87%)。然而,NCKD的蒸馏性能与经典KD相当,甚至更好(例如,在ResNet8/4上,1.76% vs 1.13%)。消融结果表明靶类相关知识不如非靶类知识重要,为了深度研究这一现象,我们提供如下进一步的分析。

TCKD传递了关于训练样本“难度”的知识

根据等式(5),TCKD通过二值分类任务传递“暗知识”,这可能与样本的“难度“有关。例如,与image-20240303155803478的训练样本相比,image-20240303155813762的训练样本可能”更容易“让学生学习。由于TCKD传达了训练样本的“难度”,我们假设当训练数据变得具有挑战性时,有效性将被解释。然而,CIFRA-100训练集很容易过拟合。因此,教师提供的“难度”知识并不是信息性的。在这一部分中,我们从三个角度进行实验验证:训练数据越难,TCKD提供的好处越多。

(1)应用强增强是增加训练数据难度的一种直接方法。我们在CIFAR-100上使用AutoAugment训练ResNet32×4模型作为教师,获得了81.29%的top-1验证精度。对于学生,我们训练带/不带TCKD的ResNet8、4和ShufflerNetv1模型。表2的结果表明,如果应用强增强,TCKD可以获得显著的性能增益。

image-20240303161609391

(2)噪声标签也会增加训练数据的难度。我们在CIFAR-100上以{0.1,0.2,0.3}对称噪声比训练ResNet32×4模型作为教师,ResNet8×4模型作为学生,如下[7,35]。如表3所示,结果表明TCKD在噪声较大的训练数据上取得了更多的绩效提升。

image-20240303161939762

(3)挑战性的数据集(例如,ImageNet也被考虑。表4显示,TCKD可以在ImageNet上带来+0.32%的性能增益。

image-20240303162009395

最后,我们通过实验各种策略来增加训练数据的难度(如强增强、噪声标签、困难任务),证明了TCKD的有效性。结果证明,在提取更具挑战性的训练数据时,有关训练样本“难度“的知识可能更有用。

NCKD是logit蒸馏工作的重要原因,但受到很大的抑制。有趣的是,我们在表1中注意到,当仅应用NCKD时,性能与经典KD相当甚至更好。结果表明,非目标类的知识对logit蒸馏至关重要,可以成为突出的“暗知识”。然而,通过回顾方程(5),我们注意到NCKD损失与image-20240303162635731相耦合。其中,image-20240303162731869代表教师对目标类别的置信度。因此,更有置信度的预测会导致更小的NCKD权重。我们假设教师对训练样本越有信心,它提供的知识就越可靠,越有价值。然而,这种自信的预测高度抑制了损失权重。我们假设这一事实会限制知识蒸馏的有效性,这首先是由于我们在等式(5)中对KD的重新表述而研究的。

我们设计了一个消融实验来验证预测良好的样本确实比其他样本更好地传递知识。首先,我们根据image-20240303163021532对训练样本进行排序,并将其平均分成两个子集。为了清晰起见,一个子集包括image-20240303163212148前50%的样本,而其余样本在另一个子集中。然后,我们在每个子集上使用NCKD训练学生网络,以比较性能增益(而交叉熵损失仍然在整个集合上)。表5显示,在前50%的样本上使用NCKD可以获得更好的性能,这表明预测良好的样本的知识比其他样本更丰富。然而,预测良好的样本的损失权重被教师的高置信度所抑制。

image-20240303163329872

解耦知识蒸馏

至此,我们将经典KD损失重新表述为两个独立部分的加权和,进一步验证了TCKD的有效性,揭示了NCKD的抑制作用。具体来说,TCKD传递了关于训练样本“难度”的知识。TCKD可以在更具挑战性的训练数据上获得更显著的改进。NCKD在非目标类之间进行知识转移。当权重image-20240303163557024较小时,知识转移受到抑制。

本能地,TCKD和NCKD都是必不可少的,至关重要的。然而,在经典KD公式中,TCKD和NCKD从以下几个方面耦合。

(1)首先,NCKD与image-20240303163724801耦合,这可以抑制预测良好的样本上的NCKD。由于表5的结果表明,预测良好的样本可以带来更多的性能增益,因此耦合形式可能会限制NCKD的有效性。

(2)另一方面,在经典KD框架下,NCKD与TCKD的权重是耦合的。不允许为了平衡重要性而改变每个词的权重。我们认为TCKD和NCKD应该考虑他们的贡献来自不同的方面而分离。

基于我们对KD的重新表述,我们提出了一种新的logit蒸馏方法——解耦知识蒸馏(DKD)。我们提出的DKD在解耦公式中独立考虑了TCKD和NCKD。具体来说,我们分别引入了两个超参数作为TCKD和NCKD的权重,DKD的损失函数为:

image-20240303164149479

在DKD中,image-20240303164236706会抑制NCKD的有效性,使用image-20240303164247291代替。此外,还允许调整两个超参数以平衡TCKD和NCKD的重要性。DKD通过解耦NCKD和TCKD,为logit蒸馏提供了高效、灵活的方法。算法1提供了DKD的伪代码。

image-20240303164406442

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 年广东省职业院校技能大赛(高职组)“云计算应用”赛项样题 2

#需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! 某企业根据自身业务需求&#…

第八节 龙晰Anolis 8.8 安装 DDE 桌面环境

一、前言 最小化安装的龙晰 Anolis OS 8.8 是不带图形化界面的,只能使用命令行,有些时候需要用到桌面环境,而DDE (Deepin Desktop Enviroment) 就是很好的桌面环境,它是指龙晰 Anolis 所搭载的中国自主桌面环境,用起来…

常数项级数

定义 级数的形式如下: ∑ n 1 ∞ u n u 1 u 2 u 3 . . . u n . . . \sum_{n1}^{\infin}u_n u_1u_2u_3...u_n... n1∑∞​un​u1​u2​u3​...un​... 这个数列的项数是无穷多个,如果取其前n项 S n u 1 u 2 . . . u n S_n u_1u_2...u_n Sn…

Java集合相关面试题(2024大厂高频面试题系列)

1、说一说Java提供的常见集合?(画一下集合结构图) 在java中提供了量大类的集合框架,主要分为两类: 第一个是Collection 属于单列集合,第二个是Map 属于双列集合 在Collection中有两个子接口List和Set。…

C#中多语言编程原理及实例解析

文章目录 一、了解C#多语言编程原理1. 通用语言运行库(CLR)2. 通用类型系统(CTS)3. 微软中间语言(MSIL)4. 元数据和反射5. 公共语言规范(CLS) 二、实例说明 一、了解C#多语言编程原理…

sql基本语法+实验实践

sql语法 注释: 单行 --注释内容# 注释内容多行 /* 注释内容 */数据定义语言DDL 查询所有数据库 show databases;注意是databases而不是database。 查询当前数据库 select database();创建数据库 create database [if not exists] 数据库名 [default charset 字符…

大话设计模式——4.装饰模式(Decorator Pattern)

1.定义 1)可以在不改动原有对象代码的情况下扩展对象的功能,通过聚合的方式相较于继承更加灵活。 2)UML图 2.示例 汽车有很多装饰可选,如座椅、音响、轮胎等都可以进行自定义组装 1)抽象汽车对象 public interfac…

【yolov8部署实战】VS2019环境下使用Onnxruntime环境部署yolov8目标检测|含源码

一、前言 部署yolo项目,是我这几个月以来做的事情,最近打算把这几个月试过的方法,踩过的坑,以博客的形式,分享一下。关于下面动态中讲到的如何用opencv部署,我在上一篇博客中已经详细讲到了:【…

项目-论坛系统

基于Spring前后端分离版本的论坛系统。 1、构建项目结构 common公共类:统一返回结果、全局变量、异常枚举信息config配置类:Swagger,用于自动生成CRUD和基本对象controller控制器类:用于接受前端信息和控制路由dao数据库访问类&…

LeetCode206题:反转链表(python3)

采用递归 class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:cur headpre Nonewhile cur:temp cur.next # 保存下一轮循环的节点cur.next pre # 将当前节点 cur 的指针指向上一个节点 prepre curcur tempreturn pre

前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)

一、前缀和的原理和特点 prefix表示前缀和,前缀和由一个用户输入的数组生成。对于一个数组a[](下标从1开始),我们定义一个前缀和数组prefix[],满足: prefix有一个重要的特性,可以用于快速生成p…

sql注入之sqli-labs-less-1 错误注入

输入?id1 得到登录页面: 通过order by 函数试探: 5的时候报错 试探到3 的时候返回正确的值: 然后继续注入:?id -1 union select 1,2,3 -- 查看回显点: 开始查看数据库内容:id-1 union select 1,databa…

【C++精简版回顾】17.io流,流中提供的函数

1.流含义 2.流类 3.流对象 4.流对象的函数 举例&#xff1a; 要求&#xff1a;数据结构中经常需要对齐输出数据&#xff0c;应该怎么做&#xff1f; 1.头文件 #include<iomanip> 2.创建表格头 cout << setiosflags(ios::left) << setw(8) << "姓名…

Linux系统忘记root密码重置方法

一、操作系统-麒麟v10 操作方法和Centos系统进入救援模式类似&#xff0c;BMC中重启操作系统&#xff0c;启动界面按e键进入 进入救援模式需要密码 root/Kylin123123 进入编辑内核启动界面&#xff0c;找到以linux开头的那一段&#xff0c;在linux内核信息后面加入单用户模式…

Doris——基础概念 FAQ盘点

基本概念&#xff1a; 基于Apache Doris在读写流程、副本一致性机制、存储机制、高可用机制等概念进行整理&#xff1a; FE&#xff1a;Frontend&#xff0c;即 Doris 的前端节点。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。BE&#xff1a;Back…

备考2024年小学生古诗文大会:历年真题15题练习和独家解析

如何提高小学生古诗词的知识&#xff1f;如何激发小学生古诗词的学习兴趣&#xff1f;如何提高小学古诗词的学习成绩&#xff1f;如何备考2024年小学生古诗文大会&#xff1f;... 如果你也在关注这些问题&#xff0c;我的建议是参加每年一度的小学生古诗词大会&#xff08;免费…

vue-router4 (六) 命名视图

命名视图可以使得同一级&#xff08;同一个组件&#xff09;中展示更多的路由视图&#xff0c;而不是嵌套显示&#xff0c; 命名视图可以让一个组件中具有多个路由渲染出口&#xff0c;这对于一些特定的布局组件非常有用。 应用场景&#xff1a; 比如点击login切换到组件A&am…

Sqli-labs靶场第15关详解[Sqli-labs-less-15]自动化注入-SQLmap工具注入

Sqli-labs-Less-15 #自动化注入-SQLmap工具注入 SQLmap用户手册&#xff1a;文档介绍 - sqlmap 用户手册 由于这题是post请求&#xff0c;所以先使用burp进行抓包&#xff0c;然后将数据包存入txt文件中打包 用-r 选择目标txt文件 python sqlmap.py -r data.txt -current-db…

Java——数组的定义与使用

目录 一.数组的基本概念 1.什么是数组 2.数组的创建及初始化 3.数组的使用 二.数组是引用类型 1.初始JVM的内存分布 2.基本类型变量与引用类型变量的区别 3.再谈引用变量 4.认识 null 三.数组的应用场景 1.保存数据 2.作为函数的参数 2.1参数传基本数据类型 2.…

Python算法100例-3.3 阿姆斯特朗数

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展 1&#xff0e;问题描述 如果一个整数等于其各个数字的立方和&#xff0c;则该数称为“阿姆斯特朗数”&#xff08;亦称为自恋性数&#xff…