文章目录
任务描述
- 网络压缩:使用小模型模拟大模型的预测/准确性。
- 在这个任务中,需要训练一个非常小的模型来完成HW3,即在food-11数据集上进行分类。
介绍
有许多种网络/模型压缩的类型,这里介绍两种:
- 知识蒸馏:让小模型通过观察大模型学习时的行为(预测)来学习得更好。(字面上:让小模型从大模型中提取知识)
- 设计架构:使用更少的参数来表示原始层。(例如,普通卷积 - 深度卷积和逐点卷积)
- 如果对网络剪枝感兴趣,可以查看ML-Spring2020-HW7中的Colab教程。
知识蒸馏
- 在训练小模型时,添加大模型的一些信息(例如预测的概率分布)以帮助小模型更好地学习
- 提供了一个训练良好的网络,以帮助您进行知识蒸馏(准确率约为0.855)
- 请注意,在写作业时,只能使用我们提供的预训练模型
网络设计
- 深度卷积和逐点卷积层(MobileNet中提出)
- 可以将原始卷积视为密集/线性层,但每行/每个权重是一个滤波器,原始乘法变成了卷积操作。(输入权重 - 输入滤波器)
- 深度卷积depthwise:让每个通道首先通过各自的滤波器,然后让每个像素通过共享权重的密集/线性层。
- 逐点卷积pointwise:是一个1x1卷积。
- 强烈建议使用类似的技术来设计您的模型。 ( N M k k / N k k + N M ) (NMkk / Nkk+NM) (NMkk/Nkk+NM)
参数量变少很多
Baseline
- 简单基准(2分,准确率≥0.59856,2小时)
- 只需运行代码并提交答案。
- 中等基准(2分,准确率≥0.65412,2小时)
- 完成知识蒸馏中的损失并控制 alpha 和 T。
- 强基准(1.5分,准确率≥0.72819,4小时)
- 通过深度和逐点卷积层修改模型架构。
- 可以从 MobileNet、ShuffleNet、DenseNet、SqueezeNet、GhostNet 等获取优秀的想法。
- 在 HW3 - CNN 中学到的任何技术和方法。例如,加强数据增强,修改半监督学习等。
- 通过深度和逐点卷积层修改模型架构。
- Boss Baseline (0.5 pts, acc ≥ 0.81003)
- 让教师网络更加强大。
- 如果教师网络太强大,可以考虑TAKD技术。
- 实施其他高级知识蒸馏。
- 例如,DML,关系KD ...
- 如果模型参数数量略大于约束值(100,000),可以使用网络剪枝。
- 如果对之前的技术感到困惑,可以查看去年TA的课程。(幻灯片,视频)
- 让教师网络更加强大。
实践
- group convolution: 类似于Alexnet,分成一组一组的,alexnet里面是一半一半
- depthwise,需要将groups设置成in_chs
- 语料要干净
- 由于有一个学习过的大模型,让它教导其他小模型。在实现中,让训练目标为大模型的预测,而不是地面真相。
为什么有效?
- 如果数据不干净,那么大模型的预测可能会忽略带有错误标记数据的噪声。
- 标签可能具有某些关系。例如,数字8更类似于6、9、0,而不是1、7。
- hard loss + soft loss
教师模型设置 - 提供一个经过良好训练的教师模型,以帮助进行知识蒸馏到学生模型。请注意,如果想更改转换函数,应该考虑是否适合这个经过良好训练的教师模型。
- 如果无法成功下载,请更改链接(在此Colab教程的底部提供了备用链接)。
在未标记的数据中生成伪标签是一种半监督学习的技术,它可以帮助利用未标记数据来提高模型的性能。生成伪标签的一般步骤如下:
-
使用已训练的模型进行推理:首先,使用已经在标记数据上训练好的模型对未标记数据进行推理,得出模型对这些数据的预测结果。
-
选择置信度阈值:为了生成可靠的伪标签,需要设置一个置信度阈值。只有当模型对样本的预测置信度高于这个阈值时,才会为该样本生成伪标签。
-
生成伪标签:对于那些置信度高于阈值的样本,将模型的预测结果作为它们的伪标签。
-
结合标记数据和伪标签数据:将生成的伪标签与已有的标记数据结合起来,形成一个扩充的训练集。
-
重新训练模型:使用包含标记数据和伪标签数据的扩充训练集重新训练模型,以提高模型性能和泛化能力。
需要注意的是,在生成伪标签时要谨慎选择置信度阈值,以确保伪标签的质量和对模型性能的提升有益处。