半监督学习在图像分类上的基本工作方式

本文回顾了一些常见的半监督算法,随后介绍了作者在 NIPS 2017 展示的 Mean Teacher 项目。

  • Mean Teacher 的论文地址:https://arxiv.org/abs/1703.01780;
  • Mean Teacher 的 GitHub 地址:https://github.com/CuriousAI/mean-teacher/

半监督学习即将迎来黄金时代。

深度学习模型已在多年来展示了超越人类能力的表现。但是,使用标准监督技术进行训练需要大量正确标记的数据。若有能力使用未标记的数据,将为许多新的应用打开大门,例如医疗成像、气候建模、自动驾驶中的感知等。

幸运的是,在今年,半监督图像分类方法已经改进,从而使用未标记的数据变得实际可行。另外,其中最好的方法出乎意料地简单。

今年,半监督图像分类的准确率有了飞跃性的提高。以下是 4000-label CIFAR-10 中的当前最佳结果的更新:

  • (测试误差:31.9)In 2012 :https://arxiv.org/abs/1206.6407
  • 测试误差:20.4)In 2015 :https://arxiv.org/abs/1507.02672
  • 测试误差:15.6)In 2016 :https://arxiv.org/abs/1606.03498
  • 测试误差:12.4)In 2017:Π model :https://arxiv.org/abs/1610.02242
  • 测试误差:12.2)In 2017:Temporal ensembling :https://arxiv.org/abs/1610.02242
  • 测试误差:10.6)In 2017:Virtual Adversarial Training + EntMin :https://arxiv.org/abs/1704.03976
  • 测试误差:10)In 2017:CT-GAN :https://openreview.net/forum?id=SJx9GQb0-
  • 测试误差:6.3)In 2017:Mean Teacher + ResNet :https://arxiv.org/abs/1703.01780
  • 测试误差:2.9)In 2017:All labels, state of the art :https://arxiv.org/abs/1705.0748

实际上,所有新方法都使用了相同的基础:他们使用模型本身创建代理标签,并将其作为除真实标签之外的目标。让我们看看它是如何工作的。

举个例子,我们的任务是识别猫、狗和马的图像。因此,输入如下图像:


输出则是一个预测,表示为本图像从属于每个类别的概率。例如,分类器可能会给出这样一个预测:这个图片有 50% 的概率是猫,30% 的概率是狗,20% 的概率是马。我们可以在一个三角形中将其可视化表示:


而我们希望分类器通过训练,能将上述图像高概率地标记为狗:


如果我们知道图像的标签,我们可以使用标准的监督学习技术来训练分类器。我们可以想象,这个真实的标签将预测拉向其方向,就像这样:


但是,如果我们的训练集只包含少数标签呢?我们不希望再标记更多的图像(或者,在添加标签后,我们可能还留下了很多无标签的图片,而我们想要使用这些图片)。如果不知道图像的真实标签,我们要如何训练分类器呢?预测的方向应该朝何方向靠近?


我们需要一个标签的代理,它可以将预测拉向一个有用的方向。代理不需要成为标签的完全准确近似。只要能将预测拉向正确的大方向,就能够帮助模型训练。那么,什么是一个好的代理?

也许,我们能想到的最简单的代理,就是将预测拉向最邻近的类别,无论是否正确。这正是 Entropy Minimization 所做的:


乍一看这似乎没什么用。毕竟,我们并未改变实际的预测类别,只是预测的自信度提高了(例如,从 70% 可能是狗,提升为 75% 可能是狗)。但是,如果我们考虑图像的全部特征,这一方案是有用的。我们鼓励分类器学习这样的特征——它们不仅能解释标记图片的类别,而且能解释未标记图片的类别。因此,对某些类别的强预测因素的特征将会变得更强,而给出混合预测的特征将会被逐渐弱化。

最近的新想法是让模型做出两个预测。让我们把他们称为学生和教师(其中之一或两者可能不同于原始预测)。然后,我们可以训练学生去预测教师。


只有学生能向教师学到有用的东西,才有意义。为了做到这一点,我们可以让学生的任务变难,或者让教师的任务变简单。

我们可以通过某种方式给输入加上扰动,从而使得任务更难完成:


我们可以根据扰动的输入进行预测,并训练它模拟无扰动的预测。这就是 Γ version of Ladder Networks(https://arxiv.org/abs/1507.02672)所做的:


因此,网络学会给出与扰动无关的预测。从另一个角度看,它强化了对噪声鲁棒的特征,除去了其他特征。如果我们同时使用带标签的信息训练监督学习模型,我们会找到更好的特征,即它们既可以预测标签又对噪声鲁棒。两个任务之间的相互作用共同提高了两者的准确性。

通过仔细选择扰动类型,我们能更进一步。一方面,我们可以为网络添加各种有用的不变量来训练。例如,如果知道图像的颜色并非有用的指标,我们可以用随机颜色抖动来增强图像训练。最近有几篇论文(https://openreview.net/forum?id=rkpoTaxA-)就使用了这种技术进行区域自适应(domain adaptation)。例如,在只看过手写数字标签后,能成功对街景数字进行分类。

我们也可以调整扰动,使其对特定的分类器具有特别的挑战性。虚拟对抗训练(Virtual Adversarial Training)使用反向传播和梯度上升来将噪声样本作为对抗样本(即,与原始十分接近的一个输入,但是分类器对此给出了一个非常不同的预测)。然后,我们可以让无扰动的预测成为基于对抗样本预测的学习目标。


除了让学生的任务更难,我们也可以使教师的任务变得简单。假定预测由其他预测的集合进行补充。每个预测都以自己的方式工作,因此不够准确。所以,如果我们将它们的结果结合起来,就可以提高准确性,减少每个预测的负担。

首先需要考虑的是不同噪声实例的集合。无扰动预测通常不是一个很好的预测,因为噪声可以将预测变得更好。一个更具鲁棒性的预测,是对图像的所有噪声版本的平均预测。显然,我们无法做到这一点。但是,我们可以对噪声采样,这几乎能达到同样好的效果。因此,与其让无扰动预测拉动扰动预测,不如让两个扰动预测相互牵拉。在 Pseudo-Ensemble Agreement (2014)、the Π model (2017)、以及 CT-GAN (2017)(其中混合了 guess-what)中,就运用了这种方法:


我们其实还可以改进。除了噪声集合,我们还能使用模型集合。单个训练中的具体模型会对许多图像做出不准确的预测。如果我们有很多模型,我们可以结合它们的预测,并得到一个更好的预测。但是事实上,我们并不想训练很多模型,那样会让训练变慢。那么,应该怎么办?

假设我们在每个训练步骤都保存了模型参数,然后,我们可以使用模型的不同版本进行预测,并结合这些预测结果。最新版本是最好的,但是在一些情况下,最新模型也会犯错,而早期的模型却能给出正确结果。因此,一个加权平均(其中最新版本权重较大)的模型应该能工作得较好。

当然,这种方法十分昂贵。那该怎么办呢?不必保存模型的不同版本,我们可以保存一个平均模型,这就是 Temporal Ensembling (2017) a 和 Mean Teacher (2017) 所做的工作,不过它们的工作方式不同。将这一点和以前的思想相结合,我们可以得到一个带噪声的教师预测的伪集合,以拉动带噪声的学生预测:


Temporal Ensembling 和 Mean Teacher 都使用指数移动平均进行训练。其区别在于,Temporal Ensembling 对预测值进行平均(分别对每个图像),而 Mean Teacher 对模型权重进行平均,又名 Polyak-averaging。Mean Teacher 在大多数情况下表现较好:无论数据集大小如何,它都可以工作;有时候,仅需较少的标签就能达到同样的精确度。

在我们的论文中,我们展示了 Mean Teacher(可能还有其他类似的方法)也适用于更加大型且更实际的数据集。以下是在 ImageNet 中使用 10% 的标签的顶尖技术进展:

  • (top-5 验证误差:35.4)In 2016: Variational Auto-Encoder :https://arxiv.org/abs/1609.08976
  • (top-5 验证误差:9.1)In 2017: Mean Teacher + ResNet:https://arxiv.org/abs/1703.01780
  • (top-5 验证误差:3.8)All labels, state of the art :https://arxiv.org/abs/1709.01507

这些方法也非常容易实现和训练。例如,Mean Teacher 包含了以下步骤:

1. 采用现有的监督学习模型。

2. 将其复制一份。让我们将原始的称为「学生」,复制品称为「教师」。

3. 在每个训练步骤中,让「教师」和「学生」一起评估一个小批量。在两个预测之间添加一致性代价函数(例如交叉熵)。

4. 在每个训练步骤中,只用优化器训练「学生」权重。

5. 在每个训练步骤后,将「教师」权重更新为「学生」权重的指数移动平均值。


如果你想试试看,可以参考 Mean Teacher 的 GitHub。

原文链接:https://thecuriousaicompany.com/mean-teacher/

入门
暂无评论
暂无评论~
返回顶部