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

前言

Supervised deep learning由于需要大量标注信息,同时之前大量的研究已经解决了许多问题。所以近期大家的研究关注点逐渐转向了Unsupervised learning,许多顶会包括ICML, NeurIPS, CVPR, ICCV相继出现一些不错的paper和研究工作。

这里主要关注Unsupervised learning一类特定的方法:Self-supervised learning(自监督学习)。自监督学习的思想非常简单,就是输入的是一堆无监督的数据,但是通过数据本身的结构或者特性,人为构造标签(pretext)出来。有了标签之后,就可以类似监督学习一样进行训练。

今年(2020) Self Supervised Learning (SSL) 的研究来到了新的高峰。

不仅在AAAI 上 LeCun, Bengio 与 Hinton 都对这领域寄与厚望;最近发表的文章也显示 SSL 得到的模型表现在 ImageNet dataset 上逐渐逼近了传统 Supervised Learning 的表现了。

近年ResNet-50在 ImageNet 上的表现

比较知名的工作有两个,一个是:Unsupervised Visual Representation Learning by Context Prediction (ICCV15),如图一,人为构造图片Patch相对位置预测任务,这篇论文可以看作是self-supervised这一系列方法的最早期paper之一;另一个是:Unsupervised Representation Learning by Predicting Image Rotations (ICLR18),如图二,人为构造图片旋转角度预测任务,这篇论文因为想法极其简单在投稿到ICLR之后受到了极大关注,最终因为实验结果非常全面有效最终被录用。

在实际应用中(例如业界中已经部署的模型), Self Supervised Learning 未必能直接有效的提升 Performance ,但阅读这些文章还是能得到不少启发。例如我们能对以下 Supervised Learning 问题有更多想法:

  • 如果将 Deep Network 学习到有用的信息,人工标记 (Manual-Label) 是必要的吗?
  • 数据( Data) 本身带有的信息是否比标记 (Label) 更加丰富?
  • 我们能将每张图视为一个类别(Class);甚至每一个 Pixel 都视为一个类别吗?

以上问题可能有点天马行空,如果在实际应用上我们能思考:

  • 在Representation Learning 中,如何能等价的增大 Batch Size?如何能维持 Embedding Space 的稳定性?
  • 在Deep Network 一定是最后一层具有最丰富的 Representation 吗?
  • 听说Deep Network 的 Capacity 很强大 ,但时至今日,我们是否已经达到 Model 能负荷的上限?(例如ResNet-50有 24M 个参数,号称拥有 '大数据' 的人们,是否已经触碰到 Effective Upper-Bound of ResNet-50's Model Complexity?)
  • 如果Model Complexity 远超乎我们想象,那什么样的 Training Procedure 能最有效率的将信息储存于Deep Network 中?
  • Data Augmentation是学习 Deep Learning 一定会接触到的方法,它只是一个方便 Training 的 Trick 呢?还是他对 Network 有特殊意义?

这些问题目前没人能给出确切答案,但在接下来的文章中必然能带来更多想法与启发。

Before SSL Revolution:Pretext Task

早期在探索SSL的想法相对单纯,如果没有得到 Label ,就利用 Rule-Based 的方法生成一些 Label 。比较著名的方法为

  • Rotation
  • Jigsaw Puzzle
  • Colorization

"Unsupervised Representation Learning by Predicting Image Rotations"一文中提出 Rotation 可谓是 SSL 之滥觞。将给定的 Image 旋转固定的0, 90, 180, 270 四种角度,让 Network 预测看到的图是原图被转了几度后的结果。

这里重点介绍最近的几篇self-supervised learning相关的paper。第一篇是RETHINKING DATA AUGMENTATION: SELF-SUPERVISION AND SELF-DISTILLATION

论文地址:https://arxiv.org/pdf/1910.05872.pdf

这篇论文的思想非常直观,如图所示。首先,Data Augmentation相关的方法会对通过对原始图片进行一些变换(颜色、旋转、裁切等)来扩充原始训练集合,提高模型泛化能力;Multi-task learning将正常分类任务和self-supervised learning的任务(比如旋转预测)放到一起进行学习。作者指出通过data augmentation或者multi-task learning等方法的学习强制特征具有一定的不变性,会使得学习更加困难,有可能带来性能降低。因此,作者提出将分类任务的类别和self-supervised learning的类别组合成更多类别(例如 (Cat, 0),(Cat,90)等),用一个损失函数进行学习。

比较有意思的一点是,作者通过简单变换证明:如果 ,论文方法就退化成Data Augmentation;如果,论文方法就退化成Multi-task Learning的方法,这里 u,v,w是对应的分类器权重。所以,作者提出的方法本身就包含了Data Augmentation和Mult-task Learning方法,同时具有更大的使用范围。

在实际物体分类过程中,可以将不同旋转角度的分类结果进行加和,即: p(Cat) = p(Cat,0)+p(Cat,90) +p(Cat,180)+p(Cat,270),但是这样测试时间会变成原来的4倍。所以,作者提出了第二个模块,self-distillation(自蒸馏),distillation思想最早是hinton在nips14年提出来的。如下图,self-distillation思路是在学习的过程中限制不同旋转角度的平均特征表示和原始图片的特征表示尽可能接近,这里使用KL散度作为相似性度量。

最终,整个方法的优化目标如下:

第一项和第二项分别对应图(a)和图(b),第三项是正常的分类交叉熵损失,作为一个辅助loss。

Unsupervised Representation Learning by Predicting Image Rotations

https://arxiv.org/pdf/1803.07728.pdf

预测旋转角度挺没意思的,但是如果Training Data 是整个 ImageNet 时,这样的任务就变成相当有趣了。Network 必须了解了什么是对象后,才能了解旋转。这也贯策了 SSL 的基本想法:Knowledge Before Task.

Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles

https://arxiv.org/abs/1603.09246

后来的Jigsaw与 Colorization 基本上延续了这种探索 Image 本质的想法,设计出能帮助理解 Content 的辅助任务,因此这类方法统称为 Pretext Task (委托任务)。其中Colorization 这个方法,能延伸出 Tracking 的效果,着实让人震惊。

Huge Improvement:Contrastive Learning

"Data-Centric" Loss

另一派做法是从设计Loss Function 下手,找出能探索数据本身性质的 Loss。

其中Energy-Based Model 算是 LeCun 从以前到现在不断推广的,这种模型与具有强烈的物理意义,可能会是明日之星;而这篇文章整理的是另一种以 Mutual Information 为主的 Loss Function。

AutoRegressive Model

说到理解数据,最直观的机率模型就是建立Data Likelihood,而在Computer Vision 的领域中,最强大的莫过于 PixelCNN 这种 Pixel-by-Pixel 的建模方法了。使用Chain Rule,Network 能够完整 Encode 所有信息。

Conditional Image Generation with PixelCNN Decoders

https://papers.nips.cc/paper/6527-conditional-image-generation-with-pixelcnn-decoders.pdf

但是Representation Learning 在乎的并不是整个Data Distribution; 而是怎么得到更抽象、High-level 的表示法。End-to-End Training 让人们发现,Deep Neural Network 是有能力解构数据的 Hierarchical Internal Representation 的,何不利用这种强大的能力呢?

也就是Learn the dataset, not the data points.

InfoNCE

DeepMind在2017 年(https://arxiv.org/abs/1807.03748)提出一种基于Mutual Information修改 AutoRegrssive 的 Loss Function,称为 InfoNCE 。

https://arxiv.org/abs/1807.03748

从图上说明是相当直观的,模型基于看过的Data 提取 Context (也就是 Feature) 并且对未来做预测。并且Loss Function的目标是让 Data 和 Context 的 Mutual Information 越大越好。

Mutual Information是广义上的 Correlation Function。(当我们完全不了解系统的Dynamics 或更深入的行为时,Mutual Information 依旧能作为估算) 它量化了我们能从 Context 中得到多少 Data 的信息,称为 Data 与 Context 之间的 Mutual Information。

首先,为了最大化Mutual Information 让 Network Model Distribution Ratio (而不像 generative model 是单纯model distribution);并且用简单的 Linear Map 作为从 Context 到Future Data 的预测函数。

InfoNCE写法如下。其实他与常用的 Cross Entropy Loss 并没有太大区别,差异只在于这个 Loss 并不是用于分类,而是注重在对数据的本身做预测。如果用先前 Time Series 的例子就是预测未来。

Learning Deep Representations of Fine-grained Visual Descriptions

我们把所唯一正确的预测称为Positive Sample; 其它的预测通通为 Negative Samples。文章接下来都使用 Contrastive Loss 来表示这种 Training 方法。

另外InfoNCE有一个 Weak Lower-Bound 在描述 N 的重要,也就是越多的 Negative Samples 时,Loss Function 越能控制 Mutual Information,并且是以 Log 的方式 Scale (这给了 Metric Learning 一点 Hint, Batch Size 可能随着 log scale)。

CPC:Contrastive Predictive

第一个成功在Image Classification实践出 InfoNCE 的是 CPC 这篇文章 (基本上是 DeepMind 同一个 team 的作品)。很直观的利用在图片上裁切 Patch的方式,做出 Positive & Negative samples,实现 Contrastive Loss 。

Data-Efficient Image Recognition with Contrastive Predictive

https://arxiv.org/abs/1905.09272

这边用到了三个Network,分别是 feature extractor, context prediction 跟 downstream task network。这是因问 SSL 的 evaluation 方式不同的关系,这边简单说明一下。

SSL训练出来的模型基本上不能直接使用,通常只能作为很强的 Pretrained Model。因此要评估Pretrained Model 好坏通常做 Linear Evaluation ,Fine-tune 一个 Linear Classifier 看能达到多少的准确度(为了公平,通常这个 classifier 会用 grid search 得到)。

研究后来发现, SSL Pretrained Model 不仅得到 Linear Separable 的 Feature Space; 并且这些 Feature是很丰富的,因为只需要少量的 Data 就可以达到很好的效果,这称为 Efficient Classification Evaluation。像常常会测试,拿ImageNet (有 1000类一千四百万张图片) 1% 的资料量(也就是每个类别 Randomly choose 12 张图片) 来训练。这种Evaluation 凸显出 Feature 是能广泛描述各种类别的,因此只要取少少的 Samples 就可以达到效果。

第三种Evaluation 就是将 Pretrained Model 运用在各种Vision Task 上,例如拿到 Object Detection 或 Segmentation 任务上依旧能表现不错。

回到CPC 这篇文章,ResNet-50 Linear Protocol 能达到 Top-1 71.5% 的准确率;在 Efficient Classification Protocol上,能比原本 Supervised Learning 的方式省掉至少 50% ~ 80% 的资料(这边是参数更多的 ResNet)。意味着通过SSL Pretrained Model,我能够少一些人工标记一样能达到原本 Supervised Learning 的准确度。

What Important

CPC带来巨大的好处,但什么事情是重要的?难道以后都需要将一张图切很多 Patch 来预测吗?并不尽然。

在CMC 这边文章中表明了,使用不同场景 (View Point, Depth, Color Space) 来计算 Contrastive Loss 能达到非常好的效果,因此 Contrastive 本身 (也就是辨认 Positive & Negative Sample 之间的 Consistency) 才是关键。

Contrastive Multiview

https://arxiv.org/abs/1906.05849

另外Google做了大规模的定性实验,找出了几个对 Visual Representation 最有影响的因子,因为篇幅关系就节录下列重点

  • Pretext Task不一定能在 Downstream Task 上達到好的效果
  • ResNet的 skip-connection能防止 feature quality 下降
  • 增大Model Size 和增加 Embedding Dimension 能有效提升 Performance

Revisiting Self-Supervised Visual Representation Learning

https://arxiv.org/abs/1901.09005

到目前为止基本上定调了SSL 的走向

1.  Contrastive Learning能从Data 中获得相当丰富的信息,不需要拘泥在 Patch 上

2.  使用ResNet这种 Backbone (而非早期 paper 强调VGG 能得到更好的 representation)

接下来的文章,都基于这样的前提来Improve 。

MoCo:Momentum Contrast

这篇 MoCo 是 Kaiming He 在 FAIR (又是与 RGB 一起)第一次对 SSL 问题提出的文章。算是一个相当 Engineering的解法,来有效增加 Batch Size,提升 Performance。

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

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

    自监督学习(Self-Supervised Learning)多篇论文解读(下) 之前的研究思路主要是设计各种各样的pretext任务,比如patch相对位置预测.旋转预测.灰度图片上色.视频帧排序等 ...

  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. 《T-GCN: A Temporal Graph Convolutional Network for Traffic Prediction》 论文解读

    论文链接:https://arxiv.org/abs/1811.05320 最近发现博客好像会被CSDN和一些奇怪的野鸡网站爬下来?看见有人跟爬虫机器人单方面讨论问题我也蛮无奈的.总之原作者Misso ...

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

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

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

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

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

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

  9. 监督学习Supervised Learning

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

随机推荐

  1. nginx 完美解决tp3.2.3 404问题

    最近我把Apache给换成nginx,当我把tp项目搬过去运行的时候发现404 错误 ,原来是因为nginx不支持 pathinfo 模式,需要自己配置 下面我配置 在server配置里面 locat ...

  2. 【Navicat】获取表结构的DDL语句以及获取更新表字段的操作的DDL

    1.获取表结构的DDL语句 2.获取修改表结构某一字段的DDL语句  设计表-修改表字段(记住不要保存)-SQL预览

  3. Windows PE 第一章 熟悉OD(顺便破解一个小工具)

    熟悉OD(顺便破解一个小工具) 上一节了解了OD的简单使用,这次就练习下,目标是破解一款小软件(入门练手用的,没有壳什么的). 首先我们来看一下这个小软件: 我们的目的是输入任何字符串都可以成功注册, ...

  4. vscode插件(摸鱼神器-小霸王游戏机

    vscode插件(摸鱼神器-小霸王游戏机 步骤 vscode扩展搜索小霸王,点击下载即可. 使用 默认有一个demo小游戏,即超级玛丽. 本地仓库 可以通过local菜单上的添加按钮添加本地nes r ...

  5. Webpack5构建速度提升令人惊叹,早升级早受益

    为什么要升级? webpack4用的好好的,运行稳定,为什么要升级到webpack5, 每次升级,都要经历一场地震,处理许多loader和plugin API的破坏性改变. 请给我们一个充分的升级理由 ...

  6. 关于MDI多文档程序的一些思考

    MDI程序的框架 客户窗口是一个预定义的窗口类(MDICLIENT),它是框架窗口的子窗口同时也是各个子文档窗口的父窗口.框架窗口和各个子文档窗口都是自定义的窗口类. MDI程序中的一些要点 窗口中的 ...

  7. Solon 的过滤器 Filter 和两种拦截器 Handler、 Interceptor

    在web开发中,过滤器.拦截器是经常用到的功能.它可以帮我们限制流量.验证是否登陆.记录日志以及统计执行效率等等. 今天主要交流一下 Solon 框架中的过滤器和拦截器. Solon 是什么框架? S ...

  8. 【Matlab】BASK的调试与解调仿真

    索引 一.BASK的调制 1.1 曼彻斯特码 1.2 增益控制 1.3 常量求和 1.4 与载波相乘 1.5 波形预览 1.6 参数设置(参考) 二.BASK的解调 2.1 滤波 2.2 信号比较 2 ...

  9. [DB] Spark Core (2)

    RDD WordCount处理流程 sc.textFile("/root/temp/data.txt").flatMap(_.split(" ")).map(( ...

  10. 中间件系列一 RabbitMQ之安装和Hello World Demo

    https://blog.csdn.net/hry2015/article/details/79016854 1. 概述 RabbitMQ是一个由erlang开发的AMQP(Advanced Mess ...