自监督学习(Self-Supervised Learning)多篇论文解读(下)

之前的研究思路主要是设计各种各样的pretext任务,比如patch相对位置预测、旋转预测、灰度图片上色、视频帧排序等等。CVPR19和ICCV19上,Google Brain的几个研究员发表了两篇论文,从另外的视角分析和研究self-supervised learning问题。两篇paper名字分别是:Revisiting Self-Supervised Visual Representation Learning (CVPR19)和S^4L: Self-Supervised Semi-Supervised Learning (ICCV19) 。

两篇文章的链接地址分别是:

http://openaccess.thecvf.com/content_CVPR_2019/papers/Kolesnikov_Revisiting_Self-Supervised_Visual_Representation_Learning_CVPR_2019_paper.pdf

http://openaccess.thecvf.com/content_ICCV_2019/papers/Zhai_S4L_Self-Supervised_Semi-Supervised_Learning_ICCV_2019_paper.pdf

Revisiting这篇paper研究了多种网络结构以及多种self-supervised的任务的组合,得到了一些启发性的经验结论:

1.  与supervised learning不同的是,self-supervised learning在不同task上的结果依赖于网络结构的选择,比如对于rotation预测,RevNet50性能最好,但是对于Patch预测,ResNet50v1性能最好。

2.  以前的self-supervised方法通常表明,alexnet的最后几层特征性能会下降。但是这篇paper结论是对于skip-connection(resnet)结构的网络,高层的特征性能并不会下降。

3.  增加filter数目和特征大小,对于性能提升帮助很大。

4.  衡量无监督性能最后训练的线性分类器非常依赖学习率的调整策略。

S^4L这一篇paper,非常像上面图(a)中multitask learning的策略,即有标签数据上面加一个正常的分类损失,无标签数据上加一个self-supervised的损失,具体公式如下:

作者提出了两个算法,一个是 S^4L-Rotation,即无监督损失是旋转预测任务;另一个是S^4L-Exemplar,即无监督损失是基于图像变换(裁切、镜像、颜色变换等)的triplet损失。

所有的实验在10%或者1%标签的Imagenet上进行,同时作者自己从训练集划分出一小部分作为验证集进行参数调节。实验过程中,作者观察到weight decay的调节和学习率策略对最终性能有很重要的影响。

比较有意思的是,Revisiting和S^4L的作者是同一拨人,只是作者顺序不同,并且所有作者都是equal contribution。

Momentum Contrast for Unsupervised Visual Representation Learning

https://arxiv.org/abs/1911.05722

首先,我们可以完全忘掉过去AutoRegressive预测未来的观点;或切Patch预测图片结构。MoCo完全专注在 Contrastive Loss 上,将这个问题想象成有一个很大的 Dictionary ,Network 的目的就是一个 Encoder 要将图片 Encode 成唯一的一把 Key ,此时要如何做到让Key Space Large and Consistent 是最重要的。

首先借鉴了另一篇SSL 的文章Memory Bank ,建一个 Bank 来存下所有的 Key (或称为 Feature) 。此方法相对把所有图塞进 Batch少用很多内存,但对于很大的 Dataset 依旧难以 Scale Up。

Unsupervised Feature Learning via Non-Parametric Instance-level Discrimination

https://arxiv.org/abs/1805.01978

MoCo改善了 Bank,用一个 Dynamic Queue 来取代,但是单纯这样做的话是行不通的,因为每次个 Key 会受到 Network 改变太多,Contrastive Loss 无法收敛。因此 MoCo将种子 feature extractor 拆成两个独立的 Network:Encoder 和 Momentum Encoder。

MoCo Algorithm

我们可以想象成这样的情境,Momentum Encoder随着 Training Update 很慢,因此能提供很稳定的 Key ,也就是 Momentum Encoder 把这个Key Space 先摆好; 当新的 Positive经过 Encoder 进来时,跟所有其他的 Negative Sample 计算 Similarity ,如果New Key 与原本的 Key 太近容易混淆,这时候的 Loss 绝大部分会 Update 给 Encoder (相当于找一个比较空的区域放 Key, 而不影响原本的其他 Key)。

等Encoder Update 完后,在用 Momentum Update Slow Encoder。并将这次的 Batch 放进 Dynamic Queue 中。

从以下实验可以看到,MoCo的表现几乎与暴力将 Batch Size 增大得到的效果一样,但是 Batch Size 没办法 Scale Up; Memory Bank 与 MoCo 有着一样的 Scaling Property,但 MoCo 的 Momentum Update 提供稳定的Key Space 让整体 Performance 可以提升约 2%。

SimCLR:Simple Framework for Contrastive Learning

在MoCo 之后发出来的论文是出自今年 (2020) 产量很高的 Hinton 之手。并且达到SSL 当前 Linear Protocol State-of-The-Art 的记录。

A Simple Framework for Contrastive Learning of Visual Representations

https://arxiv.org/abs/2002.05709

文章更专注在Contrastive Loss ,并且发现几点重要因素,包括先前已知的 Batch Size, Embedding Size (与 Normalization)。

另外两点相当有意思,一点是Data Augmentation 对 Contrastive Learning 的重要性; 一点是利用一个 Non-Linear Map来避免 Feature 的 Information Loss。

SimCLR的算法相当简单

SimCLR做了大量的Augmentation ,并且是 Augmentation 的组合。

用几种常见的Data Augmentation

在实验中发现,Color Distortion + Random Crop 效果提升的相当显著。这是因为原本的Random Crop切出来的图片 Distribution 其实相差不大,可以说是无效的 Patch (尤其对于 Contrastive Learning 来说相当不好),这两种 Operation 混合后会让 Distribution 大相径庭,能产生更多有效的 Negative Samples。

如果有仔细看CPC原文的读者也会发现,CPC 中提到的使用 Layer Normalization 取代 Batch Normalization 以避免 Model 太容易受到 Patch 的统计性质混淆有异曲同工之妙。

文章另一个亮点是,在算Loss 之前加上一个 Layer,避免 Visual Representation 直接丢给 Contrastive Loss Function 计算。原因是这种比较 Similarity 的 Loss Function 可能会把一些信息给丢掉。

Bag of Tricks and A Strong Baseline for Deep Person Re-identification

文中做了一些实验,像是颜色、旋转这种信息,就会大幅度的被删除;而加上一个 Nonlinar Map,这样可以大幅度地保存 Information。这跟 ReID 中一篇有名的文章 Bag of Tricks and A Strong Baseline for Deep Person Re-identification的一种架构有点相似,让不同层的 Feature 给不同的 Loss 免于 Information Loss。

最后呢,有钱人的研究也是朴实无华且枯燥的,这就是标题Simple 的来源。

这张图表现出了一件事, Contrastive Learning是一种能从 Data 本身获取信息的 Loss Function ;而且 Data 本身的信息量远远多出 Label 很多,因此就算经过非常长时间的 Training,Model 并没有任何 Overfit 的迹象。

各方法用到的Resources

Self-Supervised Learning到目前为止展现了相当大的潜力,尤其是Contrastive Learning 的方法,在资源丰沛的情况下,可以佣简单的架构便达到逼近 Supervised Learning 的效果,甚至在Model Capacity 增加的情况下,能与 Supervised Learning 平起平坐。但如果要完全超过 Supervised Learning 的表现要怎么做呢?

Semi-Supervised Learning

Teacher-Student

Teacher-Student (Knowledge Distillation)是一种相当有效率的做法,他的精神类似 SSL 并且能从 Data 本身获取更多的信息。

Billion-scale semi-supervised learning for image classification

https://arxiv.org/abs/1905.00546

利用有Label 的数据训练 Teacher,并让 Teacher 标记 Unlabel Data ,再交给 Student 学习。在实验上也可以发现,这种方法能随这数据量越多越有效,并且在 Supervised Learning 方法已经 Overfit 时,Semi-Supervised 还可以继续学习。

Noisy-Student

Google也在这个方法上做了修改,让Student 随着过程中能增大,并且加入更多干扰,确保学到的东西能 General 到真实情况。

Self-training with Noisy Student improves ImageNet classification

https://arxiv.org/abs/1911.04252

这里的干扰有两个:Data 上的 Augmentation和 Architecture 上的 Randomness。

Deep Networks with Stochastic Depth

https://arxiv.org/abs/1603.09382,

RandAugment:Practical automated data augmentation with a reduced search space

https://arxiv.org/abs/1909.13719

一方面让Student 有 Ensemble 的特性; 一放面让 Student 随着 Knowledge 增加可以增大。此方法下能达到目前 ImageNet 最高分 Top-1 Accuracy 88.4%。

最后用这张图总结数据与Network 的发展:

  • 如果在单纯Supervised Learning 的情况下,研究 Architecture 带来的效果是相当显著的,人类目前得到 10% 的进步。
  • 如果在限定架构的情况下,通过有效率的Training 流程,从 Data 本身学习 (Unlabelled Data) ,也能得到显著提升。从76%能到81.2%; 从 85.5% 能到当前 SOTA (88.4%)

Self-Supervised Learning与 Semi-Supervised Learning 想传达的概念不尽相同,如果我们能从 Data本身中,有效率的获取信息,那将比传统的 Manual Labelling 表现更好、学到的信息更丰富并且更能随着问题 Scaling Up。

References

1.Unsupervised Representation Learning by Predicting Image Rotations

2.Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles

3.Tracking Emerges by Colorizing Videos

4.Conditional Image Generation with PixelCNN Decoders

5.Representation Learning with Contrastive Predictive 编码

6.Learning Deep Representations of Fine-grained Visual Descriptions

7.Data-Efficient Image Recognition with Contrastive Predictive 编码编码

8.Contrastive Multiview 编码

9.Revisiting Self-Supervised Visual Representation Learning

10.Momentum Contrast for Unsupervised Visual Representation Learning

11.Unsupervised Feature Learning via Non-Parametric Instance-level
Discrimination

12.A Simple Framework for Contrastive Learning of Visual Representations

13.Billion-scale semi-supervised learning for image classification

14.Self-training with Noisy Student improves ImageNet classification

15.Deep Networks with Stochastic Depth

16.RandAugment:Practical automated data augmentation
with a reduced search space

自监督学习(Self-Supervised Learning)多篇论文解读(下)的更多相关文章

  1. 自监督学习(Self-Supervised Learning)多篇论文解读(上)

    自监督学习(Self-Supervised Learning)多篇论文解读(上) 前言 Supervised deep learning由于需要大量标注信息,同时之前大量的研究已经解决了许多问题.所以 ...

  2. (转载)[机器学习] Coursera ML笔记 - 监督学习(Supervised Learning) - Representation

    [机器学习] Coursera ML笔记 - 监督学习(Supervised Learning) - Representation http://blog.csdn.net/walilk/articl ...

  3. 1-3.监督学习(supervised learning)

    定义:监督学习指的就是我们给学习算法一个数据集,这个数据集由“正确答案”组成,然后运用学习算法,算出更多的正确答案.术语叫做回归问题 [监督学习可分为]:回归问题.分类问题.两种 例:一个学生从波特兰 ...

  4. NIPS 2016上22篇论文的实现汇集

    http://blog.csdn.net/jiandanjinxin/article/details/54087592 日前,LightOn CEO 兼联合创始人 Igor Carron 在其博客上放 ...

  5. A brief introduction to weakly supervised learning(简要介绍弱监督学习)

    by 南大周志华 摘要 监督学习技术通过学习大量训练数据来构建预测模型,其中每个训练样本都有其对应的真值输出.尽管现有的技术已经取得了巨大的成功,但值得注意的是,由于数据标注过程的高成本,很多任务很难 ...

  6. 【论文解读】【半监督学习】【Google教你水论文】A Simple Semi-Supervised Learning Framework for Object Detection

    题记:最近在做LLL(Life Long Learning),接触到了SSL(Semi-Supervised Learning)正好读到了谷歌今年的论文,也是比较有点开创性的,浅显易懂,对比实验丰富, ...

  7. 论文解读(ClusterSCL)《ClusterSCL: Cluster-Aware Supervised Contrastive Learning on Graphs》

    论文信息 论文标题:ClusterSCL: Cluster-Aware Supervised Contrastive Learning on Graphs论文作者:Yanling Wang, Jing ...

  8. 监督学习Supervised Learning

    In supervised learning, we are given a data set and already know what our correct output should look ...

  9. Machine Learning Algorithms Study Notes(4)—无监督学习(unsupervised learning)

    1    Unsupervised Learning 1.1    k-means clustering algorithm 1.1.1    算法思想 1.1.2    k-means的不足之处 1 ...

随机推荐

  1. Blade模板引擎教程-常用语法格式

    打印变量或者默认值,这个语法会自动转义变量内容中的html标记,使得html标签原样输出Welcome, {{ $name or 'California' }} 打印变量原始内容,不进行转义的用法{! ...

  2. 【VritualEnv】虚拟环境的介绍和基本使用

    一.virtualenv的介绍: 在python开发中,我们可能会遇到一种情况,就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突,而virtualenv就是解决 ...

  3. SSDT表概念详解

    SSDT 的全称是 System Services Descriptor Table,系统服务描述符表. 这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来 ...

  4. PAT 乙级 -- 1008 -- 数组元素循环右移问题

    题目简述 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--AN-1)变换为(AN-M -- AN ...

  5. Windows核心编程笔记之错误处理

    0x01 GetLastError() 函数用于获取上一个操作的错误代码 #include <Windows.h> #include <iostream> using name ...

  6. 【python】Leetcode每日一题-不同的子序列

    [python]Leetcode每日一题-不同的子序列 [题目描述] 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数. 字符串的一个 子序列 是指,通过删除一些(也可以 ...

  7. unity怎么把工程打包成unitypackage文件

    unity怎么把工程打包成unitypackage文件 想探讨问题的原因 上课的时候,看到老师的磁盘都要爆满了,主要的原因是同学们提交的2DGameKit,工程文件太大了. 文件没有压缩,占用空间是2 ...

  8. pr2019快键键

    pr快捷键 平时用到就更新一下(持续更新),算是日积月累吧.虽然是pr2019,但是其他的版本估计差不多 视频剪辑的时候,快速预览--L(英文输入法).按一次,速度*2,如果想恢复原来速度,按空格键暂 ...

  9. MySQL关于日期为零值的处理

    前言: 前面文章我们介绍过日期和时间字段的查询方法,最近遇到日期值为零的问题.原来了解过和 sql_mode 参数设置有关,但还不是特别清楚,本篇文章将探究下MySQL怎么处理日期值为零的问题. 1. ...

  10. 有哪些适用于律师事务所的CRM系统?

    中国的经济发展和政治稳定给律师行业带来了巨大的空间.而互联网的发展也让律师事务所遍地开花.如何在大大小小的律所中脱颖而出,是每个律所都迫切需要解决的问题.为了让您的律师事务所在激烈的竞争中脱颖而出,今 ...