Self-training with Noisy Student

date
May 6, 2022
Last edited time
Mar 27, 2023 09:01 AM
status
Published
slug
Self-training_with_Noisy_Student
tags
DL
summary
type
Post
Field
Plat

What is self-training?

Self-training 是最简单的半监督方法之一,其主要思想是找到一种方法,用未标记的数据集来扩充已标记的数据集。算法流程如下:
(1)首先,利用已标记的数据来训练一个好的模型,然后使用这个模型对未标记的数据进行标记。
(2)然后,进行伪标签的生成,因为我们知道,已训练好的模型对未标记数据的所有预测都不可能都是好的,因此对于经典的 Self-training,通常是使用分数阈值过滤部分预测,以选择出未标记数据的预测标签的一个子集。
(3)其次,将生成的伪标签与原始的标记数据相结合,并在合并后数据上进行联合训练。
(4)整个过程可以重复 n 次,直到达到收敛。
notion image

What is Noisy Student?

Self-training 是利用未标记数据的好方法。但这篇来自 Google 的文章却强调了 Noisy Student。怎么回事?它与经典方法有什么不同吗?
Noisy Student 的作者发现,要使这种方法发挥作用,student model 在训练过程中应加噪声,如 dropout, stochastic depth andaugmentation 等。而 teacher model 在产生伪标签时不应加噪声。因为 Noisy 是整个算法的一个重要部分,所以他们称之为 “Noisy Student”。
Noisy Student 与经典的自学习算法相似,但主要区别在于使用不同的方法给学生增加噪音。需要注意的是,当生成伪标签时,教师并没有被噪声干扰。
notion image
除了噪音,还有两点对 Noisy Student 来说很重要。
(1)尽管教师和学生的结构可以相同,但学生模型的容量应该更高。为什么?因为它必须适合一个更大的数据集(标签和伪标签)。因此,学生模型必须大于教师模型。
(2)平衡数据:作者发现,当每个类的未标记图像数量相同时,学生模型效果良好。

Experiment Details

  • Labeled dataset
对于标签数据集,使用了非常著名的 ImageNet 数据集。
  • Unlabeled dataset
未标记图像是从 JFT 数据集获得的,该数据集有大约 3 亿张图像。虽然这些图像是在原始数据集中是标记的,但是需要丢弃了这些标签,因为训练中将这些图像视为未标记的数据集。因为需要对这个数据集进行平衡和过滤,我们使用最初在 ImageNet 上训练的 EfficientNet-B0 来预测标签,并且只考虑那些标签的置信度高于 0.3 的图像。对于每个类,选择 130K 个样本,对于少于 130K 个样本的类,随机复制一些图像。
  • Architecture
作者使用 EfficientNet 作为 baseline models。考虑到 EfficientNet 比 resnet 好得多,容量也更高,因此使用它们作为基线模型是有意义的。
作者还放大了 EfficientNet-B7,得到了三个不同的网络:EfficientNet-L0、L1 和 L2
  1. EfficientNet-L0 比 EfficientNet-B7 更宽更深,但使用的分辨率较低,使得该网络的训练速度与 B7 相似。
  1. 通过增加宽度,EfficientNet-L1 从 EfficientNet-L0 按比例放大。
  1. 还记得 EfficientNets 中引入的复合缩放的概念吗?作者使用相同的复合标度技术对 EfficientNet-L1 进行放大,得到 EfficientNet-L2。EfficientNet-L2 在模型大小方面非常大,训练时间大约是 EfficientNet-B7 的训练时间的 5 倍。
  • Training details
训练使用的 batchsize = 2048 ,但是他们发现当使用 512、1024 或 2048 的时,性能是相同的。当学生模型大于 EfficientNet-B4,包括 EfficientNet-L0、l1 和 L2 时,它被训练为 350 个 epoch,而不是 700 个 epoch。训练集包含已标记和未标记的数据集,并使用平均交叉熵损失。
  • Iterative Training
(1)首先,EfficientNet-B7 作为教师模型和学生模型来提高其准确性。
(2)优化后 EfficientNet-B7 现在被用作教师,EfficientNet-L0 被用作学生模型。
(3)再使用 EfficientNet-L0 作为教师,而 EfficientNet-L1 作为学生模型,它比 L0 更宽。
(4)然后,EfficientNet-L1 被用作教师,EfficientNet-L2 作为最大的模型被用作学生。
(5)EfficientNet-L2 是最终的 model。
  • Results
notion image

Rethink Noisy

给 student model 增加 “Noisy” 是不是不是必要的?这是个很好的问题。
在我们开始讨论之前,让我们退一步思考一下,当同一个模型同时作为教师和学生使用时的情况,由于伪标签是使用相同的教师模型生成的,因此一个合理的假设是,在这种情况下,学生模型在未标记数据上的交叉熵损失将为零,那么,学生模型最终将不再学习新东西。而对学生加 noisy,可以确保 student model 的任务更难完成,而不仅仅是学习 teacher model 的知识,这也是 Noisy 能够带来提升的一个原因。
进一步研究,作者在两个不同大小的未标记数据集上进行了两个实验。在这两种情况下,对于未标记的图像,噪声是逐渐去除的,而对于有标记的图像则保持噪声,这样我们就可以隔离噪声对未标记数据的影响,并防止对标记数据的过度拟合。结果如下,可以看到加入 Noisy 后,性能提升明显。
notion image

Conclusion

总的来说,这是一篇很好的论文。这不仅表明在 Self-training 方向还有很多需要探索的地方,也再次证明了 augmentation、dropout 和 stochastic depth 的重要性。但是,正如文中所述,
“Our largest model, EfficientNet-L2, needs to be trained for 3.5 days on a Cloud TPU v3 Pod, which has 2048 cores.”
考虑到用于此的计算量,我认为许多人将无法复制和调整它以进行进一步的实验。
References
  1. https://arxiv.org/abs/1911.04252
  1. [https://medium.com/@nainaakash012/self-training-with-noisy-student-f33640edbab2](https://link.zhihu.com/?target=https%3A//medium.com/%40nainaakash012/self-training-with-noisy-student-f33640edbab2)

© Lazurite 2021 - 2024