【知识蒸馏】Knowledge Distillation with the Reused Teacher Classifier

article/2025/11/7 9:31:15

文章目录

  • 一、摘要
  • 二、引言
  • 三、相关工作
  • 四、创新点
  • 五、实验
    • 5.1精度对比
    • 5.2. 分类器重用操作分析
    • 5.3 应用一:多教师知识提炼
    • 5.4 应用二:无数据的知识蒸馏
  • 六.结论
  • 七. 限制性和未来工作


一、摘要

知识蒸馏的目的是将一个强大而繁琐的教师模型压缩到一个轻量级的学生模型中,而不至于牺牲很多性能。为此,在过去的几年里,人们提出了各种方法,一般都有精心设计的知识表示,这反过来又增加了模型开发和解释的难度。相比之下,我们的经验表明,一个简单的知识蒸馏技术足以大大缩小师生之间的性能差距。我们直接将预先训练好的教师模型中的判别分类器重新用于学生推理,并通过单一的ℓ2损失的特征对齐来训练学生编码器。这样一来,只要他们提取的特征完全一致,学生模型就能达到与教师模型完全相同的性能。我们开发了一个额外的投影仪来帮助学生编码器与教师分类器相匹配,这使得我们的技术适用于各种教师和学生架构。广泛的实验表明,我们的技术取得了最先进的结果,但由于增加了投影仪,压缩率的代价不大。

二、引言

我们提出的 "SimKD "技术如图1所示。我们认为,教师模型强大的类别预测能力不仅归功于那些表现性的特征,而且同样重要的是归功于一个判别性的分类器。基于这一论点,并在后面得到了经验上的支持,我们在分类器的前一层通过特征对齐来训练学生模型,并直接复用教师分类器进行学生推理。这样一来,如果我们能将学生的特征与教师模型的特征完美对齐,他们的性能差距就会消失。也就是说,仅仅是特征对齐误差就占了学生推理的准确性,这使得我们的知识转移更容易被理解。根据我们的实验结果,单一的ℓ2损失用于特征对齐已经有了惊人的效果。这样一个简单的损失使我们不必像以前的工作那样,为了平衡多个损失的影响而仔细调整超参数。
在这里插入图片描述
图1. 我们提出的SimKD的概述。在最终分类器的前一层,采用了简单的L2损失进行特征对齐。在训练过程中,只有学生的特征编码器和维度投影仪被更新(有黑色边框的方框)。预先训练的教师分类器被重新用于学生的推理。

由于从教师和学生模型中提取的特征的维度通常是不同的,因此在学生特征编码器之后增加了一个投影仪来弥补这种维度不匹配。这个投影仪在教师到学生的压缩过程中一般会产生小于3%的剪枝率,但它使我们的技术适用于任意的模型结构。在少数情况下,如果增加的投影仪加上重用的教师分类器的参数数小于原来的学生分类器的参数数,剪枝率甚至可以扩大(见图7)。我们在标准的基准数据集上进行了广泛的实验,观察到我们的SimKD在各种师生结构组合下始终胜过所有比较过的最先进的方法。我们还表明,我们的简单技术在不同的场景下有很好的通用性,如多教师知识蒸馏和无数据知识蒸馏。

三、相关工作

在上述知识表示或重构迁移策略的帮助下,学生模型将使用来自最后一层(即分类器)的梯度信息进行训练,也可以从这些早期层进行训练。然而,额外的超参数需要在这些方法中仔细调整以平衡不同损失的影响,目前尚不清楚新引入的监督信号如何对学生模型的最终性能产生积极影响。

在某种程度上,我们重用教师分类器的关键思想是与之前关于假设迁移学习 (HTL) 的研究有关。HTL 旨在利用学习到的源域分类器来帮助目标域分类器的训练,条件是只有少量标记的目标数据集且无法访问源数据集 。与此不同的是,SimKD的目标是减少同一数据集上的师生性能差距,而不是调整预训练模型以在具有不同分布的另一个数据集上获得良好的性能。此外,我们的 SimKD 比这项工作简单得多,在标准 KD 设置中仍然取得了令人惊讶的好结果。

四、创新点

近年来,已经提出了各种特征提取方法。这些工作主要从中间师生层对中收集和传输额外的梯度信息,以更好地训练学生特征编码器(图 2b)。然而,他们的成功在很大程度上取决于那些特别设计的知识表示,以需要适当的归纳偏差,以及精心选择的超参数来平衡不同损失的影响。两者都是劳动密集型和耗时的。还很难得出某种类型的表示在学生训练中扮演的实际角色。
相比之下,我们提出了一种简单的知识蒸馏技术,称为 SimKD,它脱离了这些严格的需求,同时仍然在广泛的实验中取得了最先进的结果。如图 2c 所示,SimKD 的一个关键组成部分是“分类器重用”操作,即我们直接借用预训练的教师分类器进行学生推理,而不是训练一个新的分类器。这消除了标签信息计算交叉熵损失的需要,并使特征对齐损失成为生成梯度的唯一来源。总体而言,我们认为教师分类器中包含的判别信息很重要,但在 KD 的文献中很大程度上被忽略了。
然后,我们对其重要角色提供了合理的解释。考虑一个要求一个模型处理具有不同数据分布的几个任务的情况,一个基本的做法是冻结或共享一些浅层作为跨不同任务的特征提取器,同时微调最后一层以学习特定于任务的信息。在这个模型多任务设置中,现有的工作认为任务不变的信息可以共享,而特定于任务的信息需要独立识别,通常由最终分类器识别。对于具有不同能力的教师和学生模型在同一数据集上进行训练的 KD,类似地,我们可以合理地相信数据中有一些能力不变的信息很容易在不同的模型中获得而强大的教师模型可能包含额外的基本能力特定信息,这对于更简单的学生模型来说很难获得。此外,我们假设大多数特定于能力的信息都包含在深层,并期望重用这些层,即使最终分类器也将有助于学生训练。
在这里插入图片描述
图 2. 三种知识蒸馏技术的比较。主要区别在于梯度是如何形式化的并且梯度流开始的地方。(a) Vanilla KD 计算类预测的梯度,并依靠这个梯度来更新整个学生模型。(b) 特征提取通过各种知识表示从中间层收集更多的梯度信息。需要仔细调整其他超参数以获得最大性能。(c)我们的 SimKD 计算分类器前一层的 ℓ2 损失,并仅反向传播此梯度以更新学生特征编码器和维度投影。为简单起见,省略了 (a) 和 (b) 中比较方法的预测和真实标签之间的交叉熵损失。

基于这个假设,稍后由各个方面的经验证据支持,我们为学生模型提供了教师分类器进行推理,并强制其提取的特征与以下匹配ℓ2损失函数

在这里插入图片描述

其中投影仪 P(·) 旨在以相对较小的成本匹配特征维度,同时足够有效以确保准确的对齐。实际上,这种简单的损失已经在之前被利用,但我们实际上试图揭示重用教师分类器的潜在价值,而不是开发复杂的损失函数来进行特征对齐。如图 3 所示,从预训练的教师模型(深色)和我们的 SimKD(浅色)中提取的特征被紧凑地聚集在同一类中,并在不同类别之间明显分离,这确保了学生特征使用重用的教师分类器正确分类后者。
这种简单的技术将大大减轻师生压缩的性能下降。
除了较高的推理精度,这种单损失公式的简单性为我们提供了具有良好可解释性的 SimKD。
请注意,来自预训练教师模型的重用部分允许合并更多层,而不仅仅是仅限于最终分类器。通常,重用更多的层会导致更高的学生准确性,但会给推理带来负担增加。

在这里插入图片描述
图 3 带有 t-SNE 的 CIFAR-100 测试图像的可视化结果。我们从 100 个类别中随机抽取 10 个。教师和学生模型提取的特征分别用深色和浅色来描述,并且它们在我们的 SimKD 中几乎无法区分。最好以彩色观看。

五、实验

在本节中,我们进行了广泛的实验来证明我们提出的SimKD的有效性。我们首先在标准的基准数据集上将其与几个有代表性的最先进的方法进行比较。然后,我们给出了一些经验性的证据来证明我们的 "分类器重用 "操作在提高学生成绩方面的优越性。虽然我们的学生推理需要一个额外的投影仪,但实验表明,它对剪枝率的影响可以控制在一个可接受的水平。
最后,我们将我们的技术应用于多教师和无数据的知识提炼环境。
数据集和基线
我们采用了两个基准图像分类数据集,包括CIFAR-100和ImageNet,进行了一系列的实验。我们使用标准的数据增强,并按照的规定,通过通道平均值和标准偏差对所有图像进行归一化处理。除了虚构的KD,我们还复制了各种方法进行比较,包括FitNet、A T、SP、VID、CRD、SRRL和SemCKD。除了KD本身之外,所有被比较的方法都是结合了vanilla KD损失,也就是公式(2).
训练细节
我们遵循以前的工作的训练程序,并报告所有竞争对手在我们随机关联的师生组合上的表现。具体来说,我们对所有的数据集都采用SGD优化器,内斯特罗夫动量为0.9。对于CIFAR-100,总的训练历时被设置为240,学习率在第150、180和210次历时被除以10。对于MobileNet/ShuffleNetseries架构,初始学习率设置为0.01,其他架构设置为0.05。小型批次大小被设置为64,权重衰减被设置为5×10-4。对于ImageNet,初始学习率被设置为0.1,然后在总共120个训练周期的第30、60、90个周期除以10。小型批次大小被设置为256,权重衰减被设置为1×10-4。除了ImageNet上的结果是以单次试验报告的,所有的结果都以4次试验的平均值(标准差)报告。在本文中,KD损失中的温度T被设定为4。更详细的可重复性描述以及更多的结果都包含在技术附录中。

5.1精度对比

表1至3介绍了基于15种网络组合的各种方法的综合性能比较,其中教师和学生模型被实例化为类似或完全不同的架构。

从表1和表2的测试精度比较中,我们可以看到,SimKD在CIFAR-100上的表现一直优于所有竞争对手,而且在某些情况下改进相当明显。例如,对于 "ResNet8x4 & ResNet-32x4 "的组合,SimKD取得了3.66%的绝对精度改进,而最好的竞争者在vanilla KD的基础上只取得了1.81%的绝对改进。此外,如表1第四列和第五列所示,给定相同的教师模型 “ResNet110x2”,SimKD可以训练一个轻量级的学生模型 “ResNet-110”,其投影仪包含0.5M的额外参数,以相当大的幅度超过所有的竞争对手,即使他们采用的是比 "ResNet110 "多0.10M参数的 “ResNet-116”。表3中不同训练历时的测试精度表明,SimKD在训练中实现了更快的收敛。

我们还发现,在 "ResNet-8x4 & WRN-40-2 "和 "ShuffleNetV2 & ResNet110x2 "组合的情况下,用SimKD训练的学生模型比其教师模型产生更高的精度,这似乎有点令人困惑,因为即使是零特征对齐损失也只能保证他们的精度完全相同。来自自我蒸馏的一个可能的解释是,方程(3)中的特征重现效应可能有助于学生模型变得更加稳健,从而取得更好的结果。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2. 分类器重用操作分析

在上述性能比较中,"分类器重用 "操作是我们的成功秘诀。为了更好地理解它的关键作用,我们对处理学生特征编码器和分类器的两种替代策略进行了几次实验。(1) 联合训练,(2) 顺序训练。这两种变体导致的性能下降证实了教师分类器中判别信息的价值。此外,重用更深的教师层将进一步提高学生的表现。
联合训练。如同之前的特征蒸馏方法(图2b),我们现在联合训练学生特征编码器及其相关分类器。通过引入额外KD损失来训练学生模型获得结果:
在这里插入图片描述
其中α是一个超参数。为了彻底评估联合训练的效果,我们使用了四个不同的师生组合以及四个均匀间隔的α值。

如图4所示,无论是基于自己的分类器还是基于重用的教师分类器,学生的表现在所有设置中都变得远不如SimKD,这表明教师分类器中的判别信息可能不容易以联合训练的方式转移到学生模型中。准确率的大幅下降也表明,增加的投影仪本身和特征对齐损失并不一定能提高最终的性能,除非我们放弃联合训练而采用更有效的策略,即使用单一的特征对齐损失进行训练并重新使用教师分类器进行推理。图4还显示,为了超越传统KD的性能,这种双损失方法需要逐个进行超参数调整。

在这里插入图片描述
图4 我们将学生特征编码器与其相关联的分类器联合训练,然后使用学生模型自己的分类器或重用的教师分类器报告学生模型的测试准确性。

5.3 应用一:多教师知识提炼

然后,我们展示了我们的技术在多教师KD环境中的适用性,其中有多个预训练的教师模型可用于学生训练。我们比较了两种有代表性的方法。"A VEG "表示香草KD的一个简单变体,它平均了多个教师的预测;"AEKD "用一个自适应的加权策略聚集了教师的预测,它的改进版本通过纳入中间特征被表示为 “AEKD-F”。如表6所示,SimKD总是取得最好的性能。此外,我们还提供了SimKDv的结果,其中首先使用全连接层投影仪来对齐特征向量,然后合并到相关的教师分类器。多个教师分类器的权重被平均化并重新用于学生推理,这不会产生额外的参数。

在这里插入图片描述

5.4 应用二:无数据的知识蒸馏

无数据知识提炼的目的是利用预先训练好的教师模型,而不访问其训练数据集,以提高学生的成绩。一个流行的方法是先用生成模型恢复原始数据流形,然后对合成的数据集进行知识提炼。我们的SimKD可以很容易地集成到这些现有的方法中,将他们的KD训练步骤替换为我们的 "重新使用分类器 "操作和相关的特征对齐。表7显示,在我们的SimKD的帮助下,学生在无数据知识提炼应用中的表现也得到了改善。
在这里插入图片描述

六.结论

在本文中,我们探索了一种简单的知识提炼技术,在这种技术中,预先训练好的教师分类器被重新用于学生推理,学生模型的训练采用单一的ℓ2损失进行特征对齐。我们设计了几个实验来分析我们的技术的工作原理,并进行了广泛的实验来证明它比最先进的方法的优越性。我们希望这项研究能成为未来研究的一个重要基线。

七. 限制性和未来工作

一个简单的参数重用被作为我们探索教师分类器的潜在价值的第一次尝试。当特征维度不匹配时,这需要一个投影仪,从而增加了模型的复杂性。如何开发一个无投影仪的替代方案需要进一步调查。另一个限制是,我们的技术只适用于有监督的知识提炼,如图像分类,密集预测和机器翻译。我们的技术也值得为无监督的学习场景开发一个成功的变体。


http://chatgpt.dhexx.cn/article/d8syyH1R.shtml

相关文章

集成、知识蒸馏和自蒸馏有区别?

点击上方“视学算法”,选择加"星标"或“置顶” 重磅干货,第一时间送达 作者丨梦佳 来源丨智源社区 编辑丨极市平台 集成(Ensemble,又称模型平均)是一种「古老」而强大的方法。只需要对同一个训练数据集上&am…

知识蒸馏学习

一.知识蒸馏综述 1.简介 大模型在部署到资源有限的设备上(手机、嵌入式设备等)会遇到体积和速度问题,知识蒸馏作为有代表性的模型压缩和加速的技术之一(其他还有:参数裁剪和共享、低秩分解和Transferred compact con…

深度学习三大谜团:集成、知识蒸馏和自蒸馏

来源:数据派THU 链接:https://www.microsoft.com/en-us/research/blog/three-mysteries-in-deep-learning-ensemble-knowledge-distillation-and-self-distillation/ 编辑:王萌(深度学习冲鸭公众号) 著作权归作者所有,本文仅作学术…

sql 一条语句统计男女人数

第一种方法: SELECT user.sex, count(user.sex) as 总数 FROM test.user group by user.sex; 执行结果 ​​​​ 第二种方法: select sum(case when sex 男 then 1 else 0 end) 男生人数 , sum(case when sex 女 then 1 else 0 end) 女生人数 from …

Sql根据不同条件统计总数

前言 经常会遇到根据不同的条件统计总数的问题&#xff0c;一般有两种写法&#xff1a;count和sum都可以 数据准备&#xff1a; 方法一 &#xff1a;Count 代码&#xff1a; SELECTCOUNT(CASEWHEN age > 20AND age < 25 THEN1ELSENULLEND) AS cnt0,COUNT(CASEWHEN a…

SQLServer查询多条件统计总数

业务需求&#xff1a;根据不同条件查询统计出总价钱 select SUM(case when status0 then price else 0 end) A, SUM(case when status5 then price else 0 end) B, SUM(case when status4 then price else 0 end) C, SUM(case when status1 then price else 0 end) D, SUM(ca…

SQL--统计出每日在线总数

需求&#xff1a; 一张表有uid、起始日期和终止日期&#xff0c;能不能一条sql统计出每日在线总数 样例&#xff1a; 比如 三条数据&#xff1a; a 20220510 20220512 b 20220510 20220511 c 20220511 20220512 结果: 20220510 2 20220511 3 20220512 2 数据准备&#xff1a;…

MySQL一条sql语句多个count统计

user表&#xff1a; 多个count统计sql语句 selectcount(case when sex 男 then 1 end) as man,count(case when sex 女 then 1 end) as woman,count(case when age>18 then 1 end) as adult,count(case when age<18 then 1 end) as nonagefrom user 可根据自己的业务更改…

sql 按时间段统计数据个数

插入数据sql样例 insert into using_time (create_time, fid) VALUES ("2022-09-15 14:24:50","17988413a036e3c80dd97d476f9d5b2f627a2cb20d8bcaa0af7f6a94cc8f1a6a");查询sql样例 select count(*) from using_time where create_time between 2022-09-…

SQL语句统计排行前10

SQL语句统计排行前10 引言一、创建表二、插入数据三、执行查询1、统计当天迟到的人员名单2、统计当月迟到次数排行前十的人员名单 引言 场景&#xff1a;公司每天要进行打卡上班&#xff0c;每个人每天也可以多次打卡&#xff0c;所有打卡信息会记录到表A 中&#xff0c;表A中有…

SQL 根据分类进行个数统计

前言&#xff1a;使用数据库存储数据时&#xff0c;常会有根据存储数据的类型对数据的个数进行分类统计&#xff0c;可采用以下两种方法使用sql直接进行统计。 业务场景&#xff1a;消息表中存储各种消息&#xff0c;消息有多种类型&#xff0c;每条消息对应一个类型&#xff…

MySql:一条sql语句多个count统计

user表&#xff1a; 多个count统计sql语句 selectcount(case when sex 男 then 1 end) as man,count(case when sex 女 then 1 end) as woman,count(case when age>18 then 1 end) as adult,count(case when age<18 then 1 end) as nonage from user可根据自己的业务更改…

sql 统计常用的sql

统计常用的sql语句&#xff1a; 今天的所有数据&#xff1a;select * from 表名 where DateDiff(dd,datetime类型字段,getdate())0 昨天的所有数据&#xff1a;select * from 表名 where DateDiff(dd,datetime类型字段,getdate())1 7天内的所有数据&#xff1a;select * from …

sql统计表总数以及表中字段总数

sql统计表总数&#xff1a;select count() from sysobjects where type‘U’ 统计字段总数&#xff1a;select count() from syscolumns where id object_id(‘表名’)

SQL统计占比

假设access_log表有src_ip、user_agent、url三个字段&#xff0c;每一次请求产生一条记录(行)&#xff0c;现在想统计访问量前10的IP、访问量count及访问量占比percent 第一种方式&#xff1a;直接从多个表查询数据 SELECTa.src_ip,a.count,round(a.count * 100 / b.total, 2)…

sql统计count

mysql中count统计不同数据出现次数 简单数据表 如图&#xff1a; 统计有多少个不同手机进行缴费 sql统计是使用count() 进行统计 在不考虑重复的情况下&#xff0c;统计手机数 select count( phone_id) from CM_LOG ; 结果 统计出来是3个&#xff08;提示应该是2个的&…

一条sql实现统计总数、分组分别统计总数

wshanshi&#xff1a;个人使用记录… 一、 方法一 SELECT COALESCE ( sex, 总数 ), COUNT( id ) 人数 FROM test GROUP BY sex WITH ROLLUP;二、方法二 SELECT count( 1 )总数, sum( CASE WHEN sex 1 THEN 1 ELSE 0 END )男, sum( CASE WHEN sex 0 THEN 1 ELSE 0 END ) 女 …

matlab 均值滤波

在matlab中使用滤波器对图像进行滤波非常方便&#xff0c;只需要调用库函数&#xff0c;只是满足工程需要就够了&#xff1b;但是想学习图像处理的滑&#xff0c;是远远不够的&#xff0c;还要对算法的基本原理弄清楚 1-均值滤波 均值滤波也叫做线性滤波&#xff0c;规定一个…

MATLAB3*3均值滤波、5*5均值滤波和圆盘滤波

clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 im imread(‘coloredChips.png’); % 原图像 R imnoise(im(:,:,1),‘gaussian’,0,0.01); % R 白噪声 G imnoise(im(:,:,2),‘gaussian’,0,0.01); % …

matlab中blur函数_matlab-----均值滤波函数的实现

均值滤波的原理是对图像以一个区域(方形,圆形)等为模板,对该区域内的数据求平均后赋值给区域的中心 这种滤波方式原理简单,但是在滤波的同时会造成图像模糊。 本文将尝试对matlab中的filter2()均值函数用自定义函数averfilter()实现。 %x是需要滤波的图像,n是模板大小(即nn)…