Knowledge Distillation(7)——Deep Model Compression: Distilling Knowledge from Noisy Teachers

知识蒸馏与噪声教师
本文探讨了DeepModelCompression技术,通过向教师模型输出引入基于噪声的正则化,提高了学生模型的鲁棒性和性能。这种方法模拟了多教师的知识蒸馏过程,通过对教师和学生的logit输出计算带有噪声的L2损失,以增强模型训练。实验表明,此方法在简单分类任务上显著提升了基准性能。

Deep Model Compression: Distilling Knowledge from Noisy Teachers

概述

给teacher的输出加入基于噪声的正则化,提高Student Robustness获得更好的performance
在这里插入图片描述
很粗糙的一种模拟multi-teacher的方式:
在这里插入图片描述

Method

与hinton最开始的KD有两个区别吧:

  1. 只用了一个logit output作为target,计算了一个新的L2 loss,且student没用hard label
    (为什么这样用作者居然也没阐述,不过作者不是第一个这么用的,引用的是‘ Do deep nets really need to be deep?’,可能这篇论文说过,但是这篇论文是2014的,在KD之前就有了,以后可以看看吧)
  2. 在logit output加入了noise扰动,以模拟multi-teacher
    在这里插入图片描述
    在这里插入图片描述
    作者采用对teacher and student’s logit output计算L2 loss:
    在这里插入图片描述
    加入了噪声到teacher的logit输出,所以新的L2 loss:
    在这里插入图片描述
    另外,只是对其中一部分sample进行噪声扰动:
    在这里插入图片描述

实验

teacher:
在这里插入图片描述
student:
在这里插入图片描述
结果:
(实验是和不在logit加噪声对比,看github别人复现,和KD效果差不多)
在这里插入图片描述
对于一个简单的分类网络,最好的从baseline21.94提升到了18.68
不过我怎么看着像个数据增强的trick一样。。。
毕竟同样的数据,在不同的epoch,经过teacher输出后,加入的random噪声不同,也有一定概率没有加入,这不和数据增强差不多嘛。。

### 关于目标检测与知识蒸馏的研究 目标检测是一项重要的计算机视觉任务,其目的是识别图像中的对象并定位它们的位置。近年来,随着深度学习的发展,单阶段和双阶段的目标检测方法取得了显著进展[^2]。然而,在实际应用中,模型的计算复杂度和内存占用成为部署的主要瓶颈之一。为了缓解这一问题,研究人员提出了多种轻量化策略,其中一种有效的方法是利用知识蒸馏技术。 #### 知识蒸馏概述 知识蒸馏是一种模型压缩技术,通过将大型教师网络的知识迁移到小型学生网络来实现性能提升的同时降低资源消耗。具体而言,教师网络产生的软标签(soft labels)被用来指导学生网络的学习过程,从而使得学生网络能够更好地逼近教师网络的表现[^1]。 #### 结合目标检测与知识蒸馏的技术挑战 当知识蒸馏应用于目标检测领域时,存在一些独特的挑战: - **多尺度特征映射**:目标检测通常涉及多个尺度上的特征提取,这增加了跨层知识传递的难度。 - **边界框回归**:除了分类之外,目标检测还需要精确预测物体位置,因此如何有效地迁移边界框信息是一个重要课题。 - **类别不平衡问题**:真实世界数据集中往往存在严重的正负样本比例失衡现象,这对知识蒸馏算法的设计提出了更高要求。 #### 综述文章推荐 虽然当前并没有直接针对“目标检测+知识蒸馏”的专门综述论文提及到上述引用材料里,但是可以从以下几个方面寻找相关资料: 1. 阅读最新的CVPR/ECCV/ICCV会议论文集,这些顶级会议上经常会有高质量的工作讨论该主题; 2. 查找专注于模型压缩或者高效推理方向的文章,因为这类研究很可能涉及到知识蒸馏的应用场景; 3. 参考其他领域的成功案例,比如自然语言处理(NLP),看看是否有可借鉴之处用于改进现有方案。 ```python # 示例代码展示了一个简单的知识蒸馏框架伪代码 def knowledge_distillation(student_model, teacher_model, dataloader): optimizer = Optimizer(student_model.parameters()) for data in dataloader: inputs, targets = data # 计算教师模型输出作为辅助监督信号 with torch.no_grad(): teacher_outputs = teacher_model(inputs) student_outputs = student_model(inputs) loss = compute_loss(student_outputs, targets, teacher_outputs) optimizer.zero_grad() loss.backward() optimizer.step() return student_model ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值