自监督学习整理

2021-08-18  本文已影响0人  赵小闹闹

1. 自监督学习定义

自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。
SSD: A UNIFIED FRAMEWORK FOR SELFSUPERVISED OUTLIER DETECTION
本文中对比式自监督学习的定义非常精准:训练一个一个特征提取器将样本与其他样本区分开,使用图像变换(数据增强)将每张图片生成两个视角(原图+增强图),将增强图看作正样本,优化模型使得每张图像的的原图与增强图距离更近,与其他样本的距离更远,其他样本看作为负样本。


image.png

2.自监督学习的核心

在于如何自动为数据产生标签。例如输入一张图片,把图片随机旋转一个角度,然后把旋转后的图片作为输入,随机旋转的角度作为标签。再例如,把输入的图片均匀分割成3*3的格子,每个格子里面的内容作为一个patch,随机打乱patch的排列顺序,然后用打乱顺序的patch作为输入,正确的排列顺序作为label。类似这种自动产生的标注,完全无需人工参与。

3.自监督学习如何评价性能?

自监督学习性能的高低,主要通过模型学出来的feature的质量来评价。feature质量的高低,主要是通过迁移学习的方式,把feature用到其它下游视觉任务中(分类、分割、物体检测...),然后通过视觉任务的结果的好坏来评价。目前没有统一的、标准的评价方式

4. 自监督学习的一个研究套路。

前面说到,自监督学习的核心是如何给输入数据自动生成标签。之前的很多工作都是围绕这个核心展开的。一般的套路是:首先提出一个新的自动打标签的辅助任务(pretext task,例如:旋转图片、打乱patch顺序),用辅助任务自动生成标签,然后做实验、测性能、发文章。每年都有新的辅助任务被提出来,自监督学习的性能也在不断提高,有的甚至已经接近监督学习的性能。总体上说,或者是提出一种完全新的辅助任务,或者是把多个旧的辅助任务组合到一起作为一个“新”的辅助任务。

5.自监督学习性能的可能提升角度

6 自动编码器与自监督学习

无监督学习中被广泛采用的方式是自动编码器(autoencoder)。编码器将输入的样本映射到隐层向量,解码器将这个隐层向量映射回样本空间。我们期待网络的输入和输出可以保持一致(理想情况,无损重构),同时隐层向量的维度大大小于输入样本的维度,以此达到了降维的目的,利用学习到的隐层向量再进行聚类等任务时将更加的简单高效。对于如何学习隐层向量的研究,可以称之为表征学习(Representation Learning)。
但这种简单的编码-解码结构仍然存在很多问题,基于像素的重构损失通常假设每个像素之间都是独立的,从而降低了它们对相关性或复杂结构进行建模的能力。尤其使用 L1 或 L2 损失来衡量输入和输出之间的差距其实是不存在语义信息的,而过分的关注像素级别的细节而忽略了更为重要的语义特征。对于自编码器,可能仅仅是做了维度的降低而已,我们希望学习的目的不仅仅是维度更低,还可以包含更多的语义特征,让模型懂的输入究竟是什么,从而帮助下游任务。而自监督学习最主要的目的就是学习到更丰富的语义表征。

7 自监督学习的挑战

对于大量的无标签数据,如何进行表征学习?
从数据的本身出发,如何设计有效的辅助任务 pretext?
对于自监督学习到的表征,如何来评测它的有效性?

8 监督学习与自监督学习的流程对比

image.png
image.png

9 自监督学习的代理任务(pretext task)

10 对比式自监督学习主流算法

DIM的损失函数看起来与我们上面描述的对比损失函数完全一样。给定一个锚图像x,

f(x)为全局特征。
f(x+)为同一图像(正样本)的局部特征。
f(x−)是指来自另一幅图像(负样本)的局部特征。
DIM的应用还延伸到了其他领域,如graph和RL。对DIM的后续研究,即增强多尺度DIM (Bachman et al., 2019),使用线性分类协议评估时,使用无监督训练在ImageNet上实现了68.4%的Top-1准确率。


image.png

T(x)是正样本
T(x′)其中x′是随机的图像或数据,是负样本
增强多尺度DIM (AMDIM,Bachman et al., 2019)使用标准的数据增强技术作为转换集,表示应该对不同的增强方法具有不变性。
对比多视图编码(CMC, Tian et al., 2019)使用同一幅图像的不同视图(深度、亮度、亮度、色度、表面法线和语义标签)作为变换集,其表示也应该是不变的。


image.png

左:AMDIM学习数据增强(如随机裁剪)之间的不变的表示。右:CMC学习图像的不同视图(通道)之间不变的表示

在表征层和最后的损失层增加了一个非线性映射可以增加性能 (这个地方我比较好奇,希望能有大佬给出更直观的解释)。
数据增广对于自监督学习是有益的,不同数据增广方式的结合比单一增广更好。
自监督学习需要更大的 batch 和更长的训练时间,batch size很大,这样保证了batch中的都当negatives样本的丰富性。

image.png

大容量:使用memory bank保留了已看到的所有批次的历史记录,增加了负样本的数量,并且当前mini-batch被压入bank,bank中较早的mini-batch则被移除。
一致性:Moco维护了encoder和moment encoder,每次梯度传播只更新 encoder的参数,而momentum encoder其实是用encoder来做一个moving average。这样键值表示特征的连续性相对memory bank就会好很多;


image.png image.png

个人理解对比损失函数中负对的一个目的是防止mode collapse,而BN会根据学习到的平均值和标准差重新分配,这样就避免了mode collapse。所以BYOL能够work的关键是MLP中的BN

所有这些方法(BYOL除外)都已融合使用相似性度量和NCE损失。 NCE损失分为两个部分:分子和分母。 分子鼓励相似的向量靠在一起,而分母将所有其他向量推开。

BYOL中没有负样本,直接使用L2损失。

10 一些思考

上一篇 下一篇

猜你喜欢

热点阅读