受新冠疫情影响意甲将暂停青年联赛及杯赛

北京时间11月7日凌晨,意甲联盟已经批准,暂停意甲青年队联赛以及青年杯比赛。

意大利目前疫情形势非常严峻,意甲联盟为了保护球员和工作人员健康,将会暂停青年队比赛,并且未来几日将会研究恢复比赛的方案。

在BYOL之前,多数自我监督学习都可分为对比学习或生成学习,其中,生成学习一般GAN建模完整的数据分布,计算成本较高,相比之下,对比学习方法就很少面临这样的问题。对此,BYOL的作者这样说道:

接下来,我们使用BYOL对ResNet18模型进行预训练。在这次实验中,我选择epoch为50,学习率依然是1e-4。注:该过程是本文代码耗时最长的部分,在K80 GPU的标准Colab中大约需要45分钟。

通过这种方式,模型准确率提高了约2.5%,达到了87.7%!虽然该方法需要更多的代码(大约300行)以及一些库的支撑,但相比其他自监督方法仍显得简洁。作为对比,可以看下官方的SimCLR或SwAV是多么复杂。而且,本文具有更快的训练速度,即使是Colab的免费GPU,整个实验也不到一个小时。

映射,非线性层,将输出映射到更低维空间。

可以看到,使用Pythorch Lightning可以方便的构建并训练模型。只需为训练集和测试集创建DataLoader对象,将其导入需要训练的模型即可。本实验中,epoch设置为25,学习率为1e-4。

BYOL包含两个相同的编码器网络。第一个编码器网络的权重随着每一训练批次进行更新,而第二个网络(称为“目标”网络)使用第一个编码器权重均值进行更新。在训练过程中,目标网络接收原始批次训练数据,而另一个编码器则接收相应的转换数据。两个编码器网络会分别为相应数据生成低维表示。然后,我们使用多层感知器预测目标网络的输出,并最大化该预测与目标网络输出之间的相似性。

接下来编写BYOL的训练代码。我选择使用Pythorch Lightning开源库,该库基于PyTorch,对深度学习项目非常友好,能够进行多GPU培训、实验日志记录、模型断点检查和混合精度训练等,甚至在cloud TPU上也支持基于该库运行PyTorch模型!

上述代码通过Kornia实现数据转换,这是一个基于 PyTorch 的可微分的计算机视觉开源库。当然,你可以用其他开源库实现数据转换扩充,甚至是自己编写。实际上,可微分性对BYOL而言并没有那么必要。

据此前《罗马体育报》报道,包括尤文、国米和都灵在内,目前多支球队正在推动意甲的停赛工作。

首先是数据转换增强的编码。BYOL的作者定义了一组类似于SimCLR的特殊转换:

接下来,我们编写编码器模块。该模块负责从基本模型提取特征,并将这些特征投影到低维隐空间。具体的,我们通过wrapper类实现该模块,这样我们可以轻松将BYOL用于任何模型,无需将模型编码到脚本。该类主要由两部分组成:

对比方法对图像增强的方式非常敏感。例如,当消除图像增强中的颜色失真时,SimCLR表现不佳。可能的原因是,同一图像的不同裁切一般会共享颜色直方图,而不同图像的颜色直方图是不同的。因此,在对比任务中,可以通过关注颜色直方图,使用随机裁切方式实现图像增强,其结果表示几乎无法保留颜色直方图之外的信息。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

也许有人会想,我们不是应该直接比较数据转换之前和之后的隐向量表征吗?为什么还有设计多层感知机?假设没有MLP层的话,网络可以通过将权重降低到零方便的使所有图像的表示相似化,可这样模型并没有学到任何有用的东西,而MLP层可以识别出数据转换并预测目标隐向量。这样避免了权重趋零,可以学习更恰当的数据表示!

下文我们将在STL10数据集上对BYOL进行实验验证。因为该数据集同时包含大量未标记的图像以及标记的训练和测试集,非常适合无监督和自监督学习实验。STL10网站这样描述该数据集:

特征提取通过hooks实现(如果你不了解hooks,推荐阅读我之前的介绍文章How to Use PyTorch Hooks)。除此之外,代码其他部分很容易理解。

手把手教你编码BYOL

为了实现对比方法,我们必须将每个样本与其他许多负例样本进行比较。然而这样会使训练很不稳定,同时会增大数据集的系统偏差。BYOL的作者显然明白这点:

BYOL最小化样本表征和该样本变换之后的表征间的距离。其中,不同变换类型包括0:平移、旋转、模糊、颜色反转、颜色抖动、高斯噪声等(我在此以图像操作来举例说明,但BYOL也可以处理其他数据类型)。至于是单一变换还是几种不同类型的联合变换,这取决于你自己,不过我一般会采用联合变换。但有一点需要注意,如果你希望训练的模型能够应对某种变换,那么用该变换处理训练数据时必要的。

STL-10数据集是一个用于研究无监督特征学习、深度学习、自学习算法的图像识别数据集。该数据集是对CIFAR-10数据集的改进,最明显的便是,每个类的标记训练数据比CIFAR-10中的要少,但在监督训练之前,数据集提供大量的未标记样本训练模型学习图像模型。因此,该数据集主要的挑战是利用未标记的数据(与标记数据相似但分布不同)来构建有用的先验知识。

AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

通过Torchvision可以很方便的加载STL10,因此无需担心数据的下载和预处理。

类似ResNet这样的模型中,ML从业人员过于依赖预先训练的权重。虽然这在一定情况下是很好的选择,但不一定适合其他数据,哪怕在STL10这样与ImageNet高度相似的数据中表现也不如人意。因此,我迫切希望将来在深度学习的研究中,自监督方法能够获得更多的关注与实践应用。

然后,我们使用新的ResNet18模型重新进行监督学习。(为彻底清除BYOL中的前向hook,我们实例化一个新模型,在该模型引入经过训练的状态字典。)

本文要点总结如下。首先也是最重要的,BYOL是一种巧妙的自监督学习方法,可以利用未标记的数据来最大限度地提高模型性能。此外,由于所有ResNet模型都是使用ImageNet进行预训练的,因此BYOL的性能优于预训练的ResNet18。STL10是ImageNet的一个子集,所有图像都从224×224像素缩小到96×96像素。虽然分辨率发生改变,我们希望自监督学习能避免这样的影响,表现出较好性能,而仅仅依靠STL10的小规模训练集是不够的。

训练结束后,舍弃目标网络编码器,只保留一个编码器,根据该编码器,所有训练数据可生成自洽表示。这正是BYOL能够进行自监督学习的关键!因为学习到的表示具有自洽性,所以经不同的数据变换后几乎保持不变。这样,模型使得相似示例的表示更加接近!

通过对比方法,同一图像不同视图的表示更接近(正例),不同图像视图的表示相距较远(负例),通过这样的方式减少表示的生成成本。

不仅仅是颜色失真,其他类型的数据转换也是如此。一般来说,对比训练对数据的系统偏差较为敏感。在机器学习中,数据偏差是一个广泛存在的问题(见facial recognition for women and minorities),这对对比方法来说影响更大。不过好在BYOL不依赖负采样,从而很好的避免了该问题。

特征抽取,获取模型最后一层的输出。

由于不需要负采样,BLOY有更高的训练效率。在训练中,每次遍历只需对每个样本采样一次,而无需关注负样本。 BLOY模型对训练数据的系统偏差不敏感,这意味着模型可以对未见样本也有较好的适用性。

BYOL的目标与对比学习相似,但一个很大的区别是,BYOL不关心不同样本是否具有不同的表征(即对比学习中的对比部分),仅仅使相似的样品表征类似。看上去似乎无关紧要,但这样的设定会显著改善模型训练效率和泛化能力:

同时,我们使用监督学习方法作为基准模型,以此衡量本文模型的准确性。基线模型也可通过Lightning模块轻易实现:

雷锋网版权文章,。详情见转载须知。

上述代码部分源自Pythorch Lightning提供的示例代码。这段代码你尤其需要关注的是training_step,在此函数实现模型的数据转换、特征投影和相似性损失计算等。

经训练,仅通过一个非常小的模型ResNet18就取得约85%的准确率。但实际上,我们还可以做得更好!