使用未标记数据的半监督图像分类
已发表: 2022-03-11在过去的十年中,监督学习一直处于计算机视觉和深度学习研究的前沿。
在监督学习环境中,人类需要手动注释大量数据集。 然后,模型使用这些数据来学习数据和标签之间复杂的潜在关系,并在给定数据的情况下开发预测标签的能力。 深度学习模型通常需要大量数据,并且需要大量数据集才能获得良好的性能。 不断改进的硬件和大型人工标记数据集的可用性一直是深度学习最近取得成功的原因。
监督式深度学习的一个主要缺点是它依赖于大量人工标记的数据集进行训练。 这种奢侈并非在所有领域都可用,因为获得由专业人员注释的庞大数据集在逻辑上可能很困难且非常昂贵。 虽然获取标记数据可能是一项具有挑战性且成本高昂的工作,但我们通常可以访问大量未标记的数据集,尤其是图像和文本数据。 因此,我们需要找到一种方法来利用这些未充分利用的数据集并将它们用于学习。
从预训练模型迁移学习
在没有大量标记数据的情况下,我们通常会求助于迁移学习。 那么什么是迁移学习?
迁移学习意味着使用来自类似任务的知识来解决手头的问题。 在实践中,这通常意味着使用从类似任务中学习的深度神经网络权重作为初始化,而不是从权重的随机初始化开始,然后在可用的标记数据上进一步训练模型以解决手头的任务。
迁移学习使我们能够在小至几千个示例的数据集上训练模型,并且可以提供非常好的性能。 预训练模型的迁移学习可以通过三种方式执行:
1. 特征提取
通常,神经网络的最后几层正在执行最抽象和任务特定的计算,这些计算通常不容易转移到其他任务。 相比之下,网络的初始层学习了一些基本特征,如边缘和常见形状,这些特征很容易跨任务转移。
下面的图像集描述了卷积神经网络 (CNN) 中不同级别的卷积核本质上是在学习什么。 我们看到了一种分层表示,初始层学习基本形状,并且逐渐地,更高层学习更复杂的语义概念。
一种常见的做法是采用在大型标记图像数据集(例如 ImageNet)上预训练的模型,并在最后切断完全连接的层。 然后根据所需的类数量附加和配置新的全连接层。 转移的图层被冻结,新图层根据您的任务可用的标记数据进行训练。
在这个设置中,预训练模型被用作特征提取器,顶部的全连接层可以被认为是浅分类器。 这种设置比过拟合更稳健,因为可训练参数的数量相对较少,因此当可用的标记数据非常稀缺时,这种配置效果很好。 多大的数据集才算非常小的数据集,这通常是一个棘手的问题,需要考虑很多方面,包括手头的问题和模型主干的大小。 粗略地说,我会将此策略用于包含数千张图像的数据集。
2.微调
或者,我们可以从预训练网络传输层,并在可用的标记数据上训练整个网络。 此设置需要更多标记数据,因为您正在训练整个网络,因此需要大量参数。 当数据稀缺时,这种设置更容易过度拟合。
3. 两阶段迁移学习
这种方法是我个人最喜欢的,并且通常会产生最好的结果,至少在我的经验中是这样。 在这里,我们训练新附加的层,同时将转移的层冻结几个 epoch,然后对整个网络进行微调。
微调整个网络而不给最终层几个时期可能会导致有害梯度从随机初始化的层传播到基础网络。 此外,微调需要相对较小的学习率,两阶段方法是一种方便的解决方案。
对半监督和无监督方法的需求
这通常适用于大多数图像分类任务,因为我们拥有像 ImageNet 这样的庞大图像数据集,覆盖了很大一部分可能的图像空间——通常,从中学习到的权重可以转移到自定义图像分类任务中。 此外,预训练的网络很容易现成可用,从而促进了这一过程。
但是,如果您的任务中的图像分布与训练基础网络的图像大不相同,则此方法将无法正常工作。 例如,如果您正在处理由医学成像设备生成的灰度图像,则从 ImageNet 权重进行迁移学习不会那么有效,并且您将需要数千张标记图像来训练您的网络以达到令人满意的性能。
相反,您可能可以访问大量未标记的数据集来解决您的问题。 这就是为什么从未标记数据集中学习的能力至关重要的原因。 此外,未标记数据集的种类和数量通常比最大的标记数据集要大得多。
在 ImageNet 等大型基准上,半监督方法已显示出优于监督方法的性能。 Yann LeCun 著名的蛋糕类比强调了无监督学习的重要性:
半监督学习
这种方法利用标记和未标记的数据进行学习,因此被称为半监督学习。 当您有少量标记数据和大量未标记数据时,这通常是首选方法。 有一些技术可以同时从标记数据和未标记数据中学习,但我们将在两阶段方法的背景下讨论该问题:对未标记数据进行无监督学习,以及使用上述策略之一解决分类任务的迁移学习.
在这些情况下,无监督学习是一个相当混乱的术语。 从某种意义上说,这些方法并不是真正无监督的,因为有一个监督信号可以指导权重的学习,但因此监督信号是从数据本身导出的。 因此,它有时被称为自我监督学习,但这些术语在文献中可以互换使用来指代相同的方法。
自我监督学习中的主要技术可以按照它们如何从数据中生成这种监督信号来划分,如下所述。
生成方法
生成方法旨在通过瓶颈后对数据进行准确的重建。 这种网络的一个例子是自动编码器。 他们使用编码器网络将输入减少到低维表示空间,并使用解码器网络重建图像。

在此设置中,输入本身成为训练网络的监督信号(标签)。 然后可以提取编码器网络并将其用作构建分类器的起点,使用上一节中讨论的迁移学习技术之一。
同样,另一种形式的生成网络——生成对抗网络(GAN)——可用于对未标记数据进行预训练。 然后,可以采用鉴别器并为分类任务进一步微调。
判别方法
判别方法训练神经网络来学习辅助分类任务。 选择了一个辅助任务,以便监督信号可以从数据本身导出,而无需人工注释。
此类任务的示例包括学习图像块的相对位置、对灰度图像进行着色或学习应用于图像的几何变换。 我们将更详细地讨论其中的两个。
学习图像块的相对位置
在这种技术中,从源图像中提取图像块以形成类似拼图的网格。 路径位置被打乱,打乱的输入被馈送到网络中,该网络被训练以正确预测网格中每个补丁的位置。 因此,监督信号是网格中每条路径的实际位置。
在学习这样做的过程中,网络学习对象的相对结构和方向以及颜色等低级视觉特征的连续性。 结果表明,通过解决这个拼图游戏学习到的特征可以高度转移到图像分类和对象检测等任务中。
学习应用于图像的几何变换
这些方法将一小组几何变换应用于输入图像,并训练分类器通过单独查看变换后的图像来预测应用的变换。 这些方法的一个示例是对未标记的图像应用 2D 旋转以获得一组旋转图像,然后训练网络来预测每个图像的旋转。
这个简单的监督信号迫使网络学习定位图像中的对象并了解它们的方向。 通过这些方法学习的特征已被证明是高度可转移的,并且在半监督设置中为分类任务产生了最先进的性能。
基于相似性的方法
这些方法将图像投影到固定大小的表示空间中,其中相似的图像更靠近,不同的图像相距更远。 实现这一点的一种方法是使用基于三元组损失的孪生网络,它可以最小化语义相似图像之间的距离。 Triplet loss 需要一个anchor、一个正例和一个负例,并试图使正例比负例更接近潜在空间中的欧几里得距离。 锚点和正例来自同一类,负例是从剩余的类中随机选择的。
在未标记的数据中,我们需要想出一种策略,在不知道图像类别的情况下生成这三组锚正样本和负样本。 这样做的一种方法是使用锚图像的随机仿射变换作为正例,并随机选择另一张图像作为负例。
实验
在本节中,我将关联一个实验,该实验凭经验确定无监督预训练用于图像分类的潜力。 这是我去年春天在纽约大学与 Yann LeCun 一起参加的深度学习课程的学期项目。
- 数据集。 它由 128K 个标记示例组成,其中一半用于训练,另一半用于验证。 此外,我们还提供了 512K 未标记的图像。 数据总共包含 1,000 个类。
- 无监督预训练。 AlexNet 使用 63 个 epoch 的广泛数据增强对旋转分类进行了训练。 我们使用了 Rotnet 在他们的论文中记录的超参数。
- 分类器训练。 从第四个卷积层提取特征,并附加三个全连接层。 这些层被随机初始化并以预定的递减学习率进行训练,并实施了提前停止以停止训练。
- 全网微调。 最终,我们微调了在整个标记数据上训练的网络。 之前分别训练的特征提取器和分类器都以 15 个 epoch 的小学习率进行了微调。
我们训练了 7 个模型,每个模型在每个类中使用不同数量的标记训练示例。 这样做是为了了解训练数据的大小如何影响我们的半监督设置的性能。
我们能够获得 82% 的旋转分类预训练准确率。 对于分类器训练,前 5% 的准确率在 46.24% 附近饱和,整个网络的微调得到了 50.17% 的最终数字。 通过利用预训练,我们获得了比监督训练更好的性能,后者提供了 40% 的 top 5 准确率。
正如预期的那样,验证准确度随着标记训练数据的减少而降低。 然而,性能的下降并不像人们在监督环境中所期望的那样显着。 训练数据从每类 64 个示例减少 50% 到每类 32 个示例,只会导致验证准确度降低 15%。
通过每类仅使用 32 个示例,我们的半监督模型实现了优于使用每类 64 个示例训练的监督模型的性能。 这为在低资源标记数据集上进行图像分类的半监督方法的潜力提供了经验证据。
包起来
我们可以得出结论,无监督学习是一种强大的范式,能够提高低资源数据集的性能。 无监督学习目前处于起步阶段,但将通过从廉价且易于访问的未标记数据中进行学习,逐步扩大其在计算机视觉领域的份额。
进一步阅读 Toptal 工程博客:
- 使用 Python/NetworkX 进行图形数据科学