Self Distillation 自蒸馏论文解读

news2024/11/28 14:53:33

paper:Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self Distillation

official implementation: https://github.com/luanyunteng/pytorch-be-your-own-teacher

前言

知识蒸馏作为一种流行的压缩方法,通过让参数较少的学生模型学习参数量更大的教师模型的知识,可以有效提高学生模型的性能,甚至比教师模型更好,在实际应用中用学生模型替代教师模型从而实现压缩和加速的效果。

但是存在两个问题,一是知识传递的效率较低,学生模型很难学习到教师模型的所有知识,通过蒸馏后性能优于教师模型的情况仍是极少数。二是如何设计和训练合适的教师模型仍是一个难题,现有的蒸馏方法需要大量的实验来找到教师模型的最优架构,非常耗时。

本文的创新点

为了克服传统蒸馏的缺点,本文提出了一种新的自蒸馏架构。和传统蒸馏需要两个步骤即首先训练一个教师模型,然后将知识从教师模型蒸馏到学生模型的方法不同,本文提出的方法只需要一步,训练点直指学生模型,大大减少了训练时间(比如在CIFAR100上,从26.98个小时到5.87个小时,速度快了4.6倍),同时获得了更高的精度(比如ResNet50从传统蒸馏的79.33%的精度提升至81.04%)。

方法介绍

完整的架构如下图所示

以 ResNet50为例,根据深度将其分为四个部分,在每部分后接一个分类器,这个分类器由一个bottleneck、一个全连接层、一个softmax层构成,该分类器只在训练时使用,推理时可以去掉。bottleneck的作用是为了减轻每个浅层分类器之间的影响,并与hints(即特征图)之间计算L2损失。在训练阶段,每个浅层的分类器可以当做学生模型,深层的当做教师模型,从而实现知识的蒸馏。

训练过程中一共有三种损失:

  • 标签之间的交叉熵损失。不仅是最深层即原本模型最终的分类输出,每个浅层分类器的softmax输出也与标签计算CE损失,通过这种方式,隐含在数据集中的知识直接从标签引入到所有的分类器中。

  • KL散度损失。计算学生和教师softmax之间的散度损失。注意教师只有一个,即最深层的输出

  • 和hints之间的L2损失。通过计算最深层分类器和每个浅层分类器特征之间的L2损失,引入feature map中的implicit knowledge,使得每个浅层分类器的bottleneck中的特征图都去拟合最深层分类器bottleneck中的特征图。

完整的损失如下所示

其中 \(\lambda\) 和 \(\alpha\) 是平衡各项损失的权重超参,对于最深层分类器 \(\lambda\) 和 \(\alpha\) 都为0。

实验结果

Compared with Standard Training

在CIFAR100和ImageNet上的结果分别如表1、2所示,其中集成结果通过对各个分类器输出加权求和得到。

从结果可以看出

  1.  通过自蒸馏,所有网络的精度都得到了提升。CIFAR100上评价提升了2.65%,ImageNet上平均提升了2.0.%。
  2. 网络越深,性能提升越大。比如ResNet101提升了4.05%,ResNet18提升了2.58%。
  3. 一般来说集成结果在CIFAR100上提升较大,在ImageNet上提升较小,这可能是由于浅层分类器的精度损失较大。
  4. 分类器的深度在ImageNet中起着更重要的作用,这表明对于复杂任务网络的冗余较小。

Compared with Distillation

与其他蒸馏方法的对比如表3所示,可以看出本文提出的自蒸馏获得了最高的精度。同时如图1所示,因为不用通过实验选择合适的教师模型以及训练教师模型,整个训练时长也大大减小。

Compared with Deeply Supervised Net

深度监督网络和自蒸馏的最大区别是,自蒸馏不仅是用标签训练浅层分类器,还以深层分类器作为教师模型进行知识的蒸馏。结果对比如表4所示,可以看出,自蒸馏在每个分类器的结果都优于深度监督。

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

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

相关文章

与Windows 10更新大同小异!一步一步教你如何更新Windows 11

如果你想让你的Windows 11设备获得最佳性能,那么定期更新是至关重要的。即使是最好的电脑如果不更新也会受到影响,因为更新会应用软件调整,帮助你的设备更快、更平稳地运行。它还提高了安全性,意味着你可以从Microsoft的最新功能中…

自动驾驶学习笔记(十一)——高精地图

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 高精地图 地图采集 底图制作 地图…

OpenFeign入门

OpenFeign是Spring Cloud OpenFeign,是Spring Cloud团队开发的基于Feign的框架 1、OpenFeign功能升级 OpenFeign在Feign的基础上提供了以下增强和扩展功能 (1)便于集成Spring Cloud组件:OpenFeign与Spring Cloud其他组件&#…

TCP/IP协议、三次握手、四次挥手

TCP/IP TCP/IP协议分层TCP头部三次握手TCP四次挥手常见问题1、什么是TCP网络分层2、TCP为什么是三次握手,不是两次或者四次?3、TCP为什么是四次挥手,为什么不能是三次挥手将第二次挥手和第三次挥手合并?4、四次挥手时为什么TIME_W…

汽车电子 - UDS

汽车电子 - UDS 概念基本概念分类请求与响应寻址信息物理寻址功能寻址 协议格式???750/758厂家自定义的吗???, 所有的UDS服务都在这里边吗???,代码…

Redis-缓存设计

缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的…

Linux:docker容器操作(4)

docker的基础操作 Linux:docker基础操作(3)-CSDN博客https://blog.csdn.net/w14768855/article/details/134616198?spm1001.2014.3001.5501 我这里准备了两个镜像 镜像加载到容器 docker create [选项] 镜像 运行的程序 -i 让容器的标准输…

基于单片机的可升降助眠婴儿床(论文+源码)

1.系统设计 本课题为基于单片机的可升降助眠婴儿床系统,在设计目标上确定如下: 1. 可以实现婴儿床的升降,摇床功能控制; 2. 具有音乐播放功能,并且有多首曲目; 3. 用户可以通过按键或者红外遥控&#x…

6.12找树左下角的值(LC513-M)

算法: 这道题适合用迭代法,层序遍历:按层遍历,每次把每层最左边的值保存、更新到result里面。 看看Java怎么实现层序遍历的(用队列): /*** Definition for a binary tree node.* public clas…

openpnp - 给底部相机加防尘罩

文章目录 openpnp - 给底部相机加防尘罩概述笔记END openpnp - 给底部相机加防尘罩 概述 设备标定完, 看着底部相机, 有点担心掉进去东西, 万一从吸嘴掉下去的料(或者清理设备台面时, 不小心掉进去东西)将顶部相机搞短路怎么办. 就想加个防尘罩, 如果有东西掉进去, 可以掉到机…

【机器学习 | 开山篇】打造坚实基础、Kaggle 登榜之路

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

提示工程-Prompt Engineering

提示工程 提示工程 1、概述 Prompt Engineering: 提示工程 通过自然语言(英语、汉语等)来给AI下达指示,从而让AI完成你指定给他的工作的过程都可以称之为提示工程。(面向自然语言编程) 提示词要素 指令&…

线程的常用方法-wait和notify以及线程的结束方式

再复习一下Java中的线程的状态图 wait和sleep的区别是:wait需要先持有锁(wait需要再synchronized代码块中执行),执行后会让出锁。而sleep不需要先持有锁,执行后也不会释放锁(有锁的话抱着锁睡觉&#xff09…

2024年天津天狮学院食品质量与安全专业《普通化学》考试大纲

2024年天津天狮学院食品质量与安全专业高职升本入学考试《普通化学》考试大纲 一、考试性质 《普通化学》专业课程考试是天津天狮学院食品质量与安全专业高职升本入学考试 的必考科目之一,其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《…

这一款 Mac 系统终端工具,已经用的爱不释手了!

🔥🔥🔥作为程序员或者运维管理人员,我们经常需要使用终端工具来进行服务器管理及各种操作,比如部署项目、调试代码、查看/优化服务、管理服务器等。 相信大家用的最多的终端工具就是 Xshell、iTerm2和Mobaxterm&#…

Vue框架学习笔记——计算属性

文章目录 前文提要代码需求描述插值语法实现methods实现 计算属性getter执行时间:setter 计算属性简写形式(只读不改,才能如此简写)slice截取元素,限制输入字符数量 前文提要 本人仅做个人学习记录,如有错…

vue3(二)-基础入门

一、列表渲染 of 和 in 都是一样的效果 html代码&#xff1a; <div id"app"><ul><li v-for"item of datalist">{{ item }}</li></ul><ul><li v-for"item in dataobj">{{ item }}</li></u…

聚观早报 |红魔9 Pro支持165W快充;2023Q3欧洲手机市场报告

【聚观365】11月22日消息 红魔9 Pro支持165W快充 2023Q3欧洲手机市场报告 长安汽车官宣加入蔚来换电体系 网龙战略投资Rokid IBM推出5亿美元的风险基金 红魔9 Pro支持165W快充 截至目前&#xff0c;除了已经发布或即将亮相的几款骁龙8 Gen3常规旗舰外&#xff0c;游戏手机…

梯度详解与优化实战

什么是梯度 对所有自变量求偏微分构成的向量&#xff0c;它是一个向量&#xff08;有大小和函数值增长方向&#xff09; 导数是一个标量 找最小值点坐标的案例 import torchimport numpy as np import matplotlib.pyplot as plt def himmelblau(x):return (x[0]**2x[1]-11)…

MFC 绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、正弦函数曲线实例

MFC 绘制三种不同圆形以及绘制正弦函数曲线 本文使用visual Studio MFC 平台实现绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线. 关于基础工程的创建请参考 01-Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 02-vis…