半监督学习与PyTorch和SESEMI

简介: 半监督学习与PyTorch和SESEMI

在开发机器学习解决方案时,需要清除的最大障碍一直是数据。像ImageNet和COCO这样的大规模、干净、完全注释的数据集并不容易获得,特别是对于小众任务。这在深度学习中尤其如此,而且随着深度学习的日益普及,这种情况会越来越明显。为了克服标记数据瓶颈,研究人员和开发人员正在开发各种技术,如迁移学习、领域适应、合成数据生成以及许多半监督和自监督技术。

半监督和自监督技术的世界是一个特别迷人的领域,因为它看起来几乎像魔术。我们如何利用世界上看似无穷无尽的无标记数据来帮助我们解决监督学习问题?事实证明,这些技术比你想象的更容易理解,你可以立即开始应用它们。

Self-Supervised学习

在我们深入研究之前,让我们先定义这些术语的含义。自监督学习本质上是从完全无标记的数据中提取监督信息来创建监督学习任务的实践。基本上,我们创建了一个“人工”监督学习任务,它具有以下特性:

它鼓励网络学习关于数据的语义上有用的信息。

它的标签可以从数据扩充中派生出来。

一个最简单,但仍然非常有效的从无标记数据学习的技术来自于一篇由Gidaris等人发表的题为“Unsupervised Representation Learning by Predicting Image Rotations”的论文。这个辅助任务非常直观:给定一个输入图像,随机旋转0、90、180或270度。然后训练您的模型来预测一个“0”、“90”、“180”或“270”的标签。

在这里工作的理论是,随机旋转的图像引入标签,同时保留有用的语义信息。例如,给一只狗一张旋转了90度的图片,人们可以清楚地看出图片已经旋转了,因为狗不会站在墙上!然而,像苍蝇、窗户和绘画这样的东西是可以立在墙上的。图像中的语义信息包含了旋转的线索。该理论是,通过试图预测图像的方向,模型必须了解物体的预期方向,从而隐式学习这些物体的语义特征,然后可能适用于其他任务。

640.png

自监督可以采取多种形式,比如图像的修复、着色和超分辨率,视频的帧预测,以及自然语言处理中的单词或序列预测。

Semi-Supervised学习

半监督学习是使用标记数据和未标记数据来训练任务的实践。半监督学习技术通常在两个任务上交替进行训练,首先是应用于有标记数据的标准监督任务,然后是利用无标记数据和某种数据扩充的辅助任务。一个这样的辅助任务可以是预测图像旋转,就像我们之前讨论的那样。在很多情况下,半监督学习本质上就像是将自监督训练和监督训练结合起来。

一个特别值得注意但又有些不同的例子是来自谷歌Research论文的FixMatch。这里的辅助任务实际上和目标任务是一样的:给定一个图像,预测它的类别。然而,我们不能用标记数据来解决这个问题。相反,未标记的输入图像被增强了两次:一次是一个微弱的增强量(例如翻转和移位),第二次是一个强大的增强。然后,该模型预测弱增强图像和强增强图像的标签。对弱增强图像的预测(如果它通过一个置信阈值)作为一个伪“ground truth”标签,我们以此评估强增强图像的标签。这里的目标是鼓励网络变得更加健壮,以极端增强,并鼓励它学习更强大的功能,而无需技术上需要标记数据。

640.png

FixMatch。对输入图像(上图)进行弱增广,生成模型预测。如果预测超过了一个给定的阈值,就会分配一个“伪标签”。然后,对同一幅图像进行强增强,生成另一幅预测。FixMatch丢失函数鼓励此预测与之前的“伪标签”之间达成一致。

论文中应用了一种最新的半监督学习技术——一致性正则化。首先对你的数据进行扩充,以保留它的语义内容(例如,“这张猫的图片看起来还像猫吗”。然后,通过明确的监督或惩罚对这些变化的敏感性的损失函数的术语,鼓励你的网络对非语义的增强变得有弹性。通过利用数据增强,实际上可以通过自我监督将任何监督学习任务变成半监督任务。

SESEMI

在这篇文章的其余部分,我们将关注一种叫做SESEMI的特殊技术,一种由Flyreel AI Research发布的半监督训练技术。本文中描述的想法与图像旋转任务非常相似,除了一些关键的区别。首先,他们为水平镜像和垂直镜像添加了两个额外的类。更重要的是,这种方法联合训练被监督和自监督的目标,将自监督的目标作为一种自我监督的正规化形式。因此,损失函数看起来像一个典型的正则化损失函数,除了加权和未加权项都是应用于数据不同子集的标准交叉熵损失。

640.png

SESEMI损失函数由监督项和自监督项组成,用一个权重项w进行平衡。最左边的项(未加权)是应用于标签子集和softmax预测向量上的损失。最右边的(加权的)项是应用于带有我们的辅助标签及其softmax预测向量的数据的无标签子集的损失。这两项都是标准的交叉熵损失。

这种技术的优雅之处在于它的简单性。与其他需要大量超参数调优的先进的一致性正则化技术不同,SESEMI唯一需要的超参数是两个损失项之间的权重,无论如何,作者建议将其设置为1.0。使用这种技术不需要专门的理论、损失函数或自定义模型层。任何对深度学习技术有初步了解的人都可以成功地应用这种技术。

我提供了一个简单的谷歌Colab笔记本,您可以在其中快速尝试这种技术。在它中,我使用torchvision中方便的预训练的ResNet模型将SESEMI技术应用到CIFAR-10数据集。它唯一的主要依赖项是‘torch’和‘torchvision’。这个Colab笔记本说明了SESEMI技术对非常小的数据集所能产生的差异,而只需要很少的代码修改和几乎不需要额外的超参数调优。

640.png

完整代码:https://github.com/FlyreelAI/sesemi

colab:https://colab.research.google.com/drive/1b1sbKo3mb16e_yBgfELMVT_kBAWtYn9f?usp=sharing

目录
相关文章
|
6月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
关于Tensorflow!目标检测预训练模型的迁移学习
这篇文章主要介绍了使用Tensorflow进行目标检测的迁移学习过程。关于使用Tensorflow进行目标检测模型训练的实战教程,涵盖了从数据准备到模型应用的全过程,特别适合对此领域感兴趣的开发者参考。
74 3
关于Tensorflow!目标检测预训练模型的迁移学习
|
6月前
|
机器学习/深度学习 数据采集 TensorFlow
TensorFlow与迁移学习:利用预训练模型
【4月更文挑战第17天】本文介绍了如何在TensorFlow中运用迁移学习,特别是利用预训练模型提升深度学习任务的性能和效率。迁移学习通过将源任务学到的知识应用于目标任务,减少数据需求、加速收敛并提高泛化能力。TensorFlow Hub提供预训练模型接口,可加载模型进行特征提取或微调。通过示例代码展示了如何加载InceptionV3模型、创建特征提取模型以及进行微调。在实践中,注意源任务与目标任务的相关性、数据预处理和模型调整。迁移学习是提升模型性能的有效方法,TensorFlow的工具使其变得更加便捷。
|
机器学习/深度学习 人工智能 算法
基于 PyTorch 的图像特征提取
基于 PyTorch 的图像特征提取
|
6月前
|
机器学习/深度学习 PyTorch 调度
迁移学习的 PyTorch 实现
迁移学习的 PyTorch 实现
|
存储 缓存 自然语言处理
几个常见的小技巧加快Pytorch训练速度
几个常见的小技巧加快Pytorch训练速度
597 0
几个常见的小技巧加快Pytorch训练速度
|
机器学习/深度学习 算法 PyTorch
使用Pytorch实现对比学习SimCLR 进行自监督预训练
SimCLR(Simple Framework for Contrastive Learning of Representations)是一种学习图像表示的自监督技术。 与传统的监督学习方法不同,SimCLR 不依赖标记数据来学习有用的表示。 它利用对比学习框架来学习一组有用的特征,这些特征可以从未标记的图像中捕获高级语义信息。
1053 1
|
PyTorch 算法框架/工具 异构计算
Pytorch实现经典模型AlexNet模型
Pytorch实现经典模型AlexNet模型
115 0
|
机器学习/深度学习 PyTorch TensorFlow
PyTorch 深度学习实战 |用 TensorFlow 训练神经网络
为了更好地理解神经网络如何解决现实世界中的问题,同时也为了熟悉 TensorFlow 的 API,本篇我们将会做一个有关如何训练神经网络的练习,并以此为例,训练一个类似的神经网络。
239 0
PyTorch 深度学习实战 |用 TensorFlow 训练神经网络
|
机器学习/深度学习 PyTorch API
Pytorch实现手写数字识别
Pytorch实现手写数字识别
114 0
|
机器学习/深度学习 人工智能 PyTorch
【Pytorch神经网络理论篇】 39 Transformers库中的BERTology系列模型
词表文件:在训练模型时,将该文件当作一个映射表,把输入的单词转换成具体数字。(文本方式保存)
224 0
下一篇
无影云桌面