patch 神经网络_「神经网络就像任性的小孩」港中文MMLab博士揭开OpenSelfSup自监督学习的秘密...

港中文MMLab开源的OpenSelfSup提供了一站式自监督学习解决方案,涵盖多种框架与任务。文章深入探讨了自监督学习的定义、目的、方法及如何设计有效任务,强调了避免捷径、解决歧义性和任务难度的重要性,并介绍了OpenSelfSup的统一框架、标准化评测和高效率训练特性,助力自监督学习研究与应用。
摘要由CSDN通过智能技术生成

8baff4d264617dd7771f669c6f0ae085.png

最近,港中文MMLab开源自监督表征学习代码库OpenSelfSup,号称「一行命令跑评测」,并在各大Benchmark上复现结果。

2bf0da899235c3144585dec0cda5b7fc.png

OpenSelfSup 使用 PyTorch 实现,支持基于分类、重建、聚类、memory bank、contrastive learning 的多种自监督学习框架。目前收录了 Relative Location、Rotation Prediction、DeepCluster、OnlineDeepCluster、NPID、MoCo、SimCLR 等一系列表现较好的自监督表征学习方法,后续还将陆续跟进学术界最新算法。

OpenSelfSup推出后受到不少人关注,但也有不少人对如何上手这个代码库表示有一些疑惑。新智元邀请香港中文大学多媒体实验室的詹晓航博士,为我们解读关于自监督学习的归纳、思考和展望。

如何定义自监督学习?

自监督学习是指用于机器学习的标注(ground truth)源于数据本身,而非来自人工标注。如下图,自监督学习首先属于无监督学习,因此其学习的目标无需人工标注。其次,目前的自监督学习领域可大致分为两个分支。

第一个是用于解决特定任务的自监督学习,例如上次讨论的场景去遮挡,以及自监督的深度估计、光流估计、图像关联点匹配等。另一个分支则用于表征学习。有监督的表征学习,一个典型的例子是ImageNet分类。而无监督的表征学习中,最主要的方法则是自监督学习。典型的方法包括:解决Jigsaw Puzzles、运动传播、旋转预测,以及最近很火的MoCo等等。

33b9fb22b39f8c80002daa159a56f0a1.png

判断一个工作是否属于自监督学习,除了无需人工标注这个标准之外,还有一个重要标准,就是是否学到了新的知识。举个简单的例子,例如image inpainting是否属于自监督学习?

如果一篇image inpainting的论文,其主要目的是提升inpainting的效果,那么它就不属于自监督学习,虽然它无需额外标注。但是如果它的目的是借助inpainting这个任务来学习图像的特征表达,那么它就是自监督学习(参考论文:Context Encoders)。

如下图,以自监督表征学习为例,我们通常需要设计一个自监督的proxy task,我们期望在解决这个proxy task的过程中,CNN能学到一些图像高级的语义信息。然后我们将训练好的CNN迁移到其他目标任务,例如图像语义分割、物体检测等等。

24a1b52e89222473bce9522d403b21b3.png

那么,自监督的proxy task有哪些呢?如下图,第一行中的思路是将图像以某种方式破坏,然后用神经网络来学习恢复原图的过程。然而,将图像破坏,可能带来预训练的domain和目标任务domain不一致的问题。而第二行中的proxy tasks则无需破坏原图,因此避免了domain的问题。第三行中的方法是利用运动信息等多模态信息来学习图像特征。当然除了图中这些例子之外,还有各种各样其他有趣的自监督任务。

df58868a71e78b485f61818f9f797e74.png

为什么自监督学习能学到新信息?

1. 先验

我们的世界是在严格的物理、生物规则下运行的,那么对这个世界的观测结果(图像)也必然存在一些先验规律。例如图像上色任务,就是利用了物体类别和物体颜色分布之间的关联;image inpainting,则是利用了物体类别和形状纹理之间的关联;旋转预测任务,利用了物体类别和其朝向之间的关联。通过挖掘更多的先验,我们也能设计自己的自监督学习任务。

那么什么样的先验更有效呢?结论是,低熵的先验。如下图,左边的运动预测任务(ICCV 2015: Dense Optical Flow Prediction From a Static Image) ,是从单张图片中直接预测运动场,其利用的先验是物体的运动倾向性。

而运动倾向性是比较歧义的,例如人在半蹲状态,难以预测下一时刻会站起来还是继续下蹲。因而,运动倾向性是一个高熵的先验。而右图的运动传播任务(CVPR 2019: Self-Supervised Learning via Conditional Motion Propagation),从给定的稀疏运动来恢复完整运动场,利用的则是物体的运动学属性先验。

运动学属性,例如头部是刚体,四肢是铰接体等,是较为确定的先验,那么这就是一个低熵的先验。从实验结果也可以发现,在transfer到分割任务上,运动传播比运动预测更好。

6985d2ec6ccf540d243c5aa316dd69bb.png

2. 连贯性

图片具有空间连贯性,视频具有时空连贯性。那么就可以利用这些特点来设计自监督任务。如下图:

8bf437aaa42d8cd926ab5e56a2b4b883.png

3. 数据内部结构

目前很火的基于contrastive learning的方法,我们可以将它们统一为instance discrimination任务。如下图,这类任务通常对图片做各种变换,然后优化目标是同一张图片的不同变换在特征空间中尽量接近,不同图片在特征空间中尽量远离。

c69383f9efd9f758520e4785623378d2.png

对于这类任务,下图提供了两种可能的优化后的特征空间。这两种结果都是符合instance discrimination优化目标的,即同一张图片的不同变换在特征空间中尽量接近,不同图片在特征空间中尽量远离。

然而,我们发现,实际的优化结果更偏向于第二种而非第一种,也就是说,虽然我们在解决instance discrimination的过程中并没有用的物体的类别标签,但是在优化后的特征空间中,同类的物体还是相对能够靠拢。这就证明了,数据之间是具有结构性和关联性的。Instance discrimination则是巧妙地利用了这种结构性和关联性。

42232914fd9c167e198d4a742e1cf695.png

设计一个自监督学习任务还需要考虑什么?

1.捷径(shortcuts)

以jigsaw puzzles为例,如下图,如果我们让划分的patch之间紧密挨着,那么神经网络只需要判断patch的边缘是否具有连续性,就可以判断patch的相对位置,而不需要学到高级的物体语义信息。这就是一种捷径,我们在设计任务的过程中需要避免这样的捷径。

33b4bc2d7076e870d3a1ae7979038126.png

图八,解决jigsaw puzzles时,patch之间不能紧密挨着

避免的方式也很简单,我们只需要让patch之间产生一些随机的间隔就行,如下图。

be500d5d1b45a9f055c8f6729f0c3673.png

图9,让patch之间产生随机间隔

Solving jigsaw puzzles的其他捷径还包括色差、彗差、畸变、暗角等可以指示patch在图像中的相对位置的信息。解决方案除了想办法消除这些畸变外,还可以让patch尽量靠近图像中心。

cd3128723c11625942ca73c3dc1315ac.png

图10,色差、彗差、畸变、暗角等可利用的捷径

2.歧义性(Ambiguity)

大多数利用先验来设计的自监督任务都会面临歧义性问题。例如colorization中,一种物体的颜色可能是多种多样的,那么从灰度图恢复颜色这个过程就具有ambiguity;再例如在rotation prediction中,有的物体并没有一个通常的朝向(例如俯拍放在桌上的圆盘子)。有不少已有工作在专门解决特定任务的歧义性问题,例如CVPR 2019的Self-Supervised Representation Learning by Rotation Feature Decoupling。另外就是设计低熵的先验,因为低熵的先验也具有较低的歧义性。

3.任务难度

ff3b9142227ebab4dafb53f3e3c1f4e3.png

图11,solving jigsaw puzzles中的不同难度

神经网络就像一个小孩,如果给他太简单的任务,他学不到有用的知识,如果给他太难的任务,他可能直接就放弃了。设计合理的难度也是一个需要考虑的方面。

如何上手?OpenSelfSup: 通用的自监督表征学习代码库

上手自监督学习是一件非常有难度的事情,主要体现在3个方面:

  1. 由于自监督学习任务复杂多样,不同方法各有各的专用训练代码,难以结合、复用和改进
  2. 评价方案不统一,不同的方法难以在公平环境下对比
  3. 动辄百万千万的训练数据量,训练效率是个大问题

针对这些问题,香港中文大学多媒体实验室和南洋理工大学开源了一套通用的自监督学习代码库,链接如下:

https://github.com/open-mmlab/OpenSelfSup

1.统一的框架

这套代码库设计了一个统一的代码框架,支持基于分类、重建、聚类、memory bank、contrastive learning的多种自监督学习模式,目前收录了Relative Location, Rotation Prediction, DeepCluster, OnlineDeepCluster, NPID, MoCo, SimCLR等一系列表现较好的自监督表征学习方法。

87fe97273c67c0485937688147395ef4.png

2.标准化的评测方案

OpenSelfSup目前支持ImageNet/Place205 Linear Classification, ImageNet Semi-Supervised Classification, PASCAL VOC07 Linear SVM, PASCAL VOC / COCO Object Detection等多个标准的评测方案。

3.高效率的分布式训练

OpenSelfSup中收录的算法全部都实现了多机多卡的分布式训练。

4.容易上手

环境配置,数据配置都有from scratch的脚本或者详细的指导,简单易行。训练和测试现有算法,都只需要一行命令搞定。

5.模块化设计:高度灵活性和可扩展性

OpenSelfSup用config文件来定义各种参数和模块,方便参数调节和模块修改。采用高度模块化的设计,使得开发自己的自监督学习算法变得非常方便。

config中还支持一些较复杂的调整,比如data augmentation的组合、learning rate schedule、独立调整某些网络参数的优化参数等。例如,你希望单独调整head中fully-connected layer的momentum和learning rate,或者backbone中某几层的weight decay等等,可以在config中optimizer: paramwise_option下用正则表达式筛选出对应网络参数然后指定这些值,而不需要改动代码。如下是DeepCluster中指定head (fc layer)的momentum为0的设置。

8ee68ad5e2de93ecfa5c4e026cafe96f.png

具体介绍,可参考:

https://zhuanlan.zhihu.com/p/148782886

这个总结主要基于自己的思考,也许不一定非常到位,权当抛砖引玉。最后,希望大家都能够设计出有趣又有用的自监督学习任务,为这个领域添砖加瓦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值