自监督学习

自监督学习

自监督学习(self-supervised learning)可以被看作是机器学习的一种“理想状态”,模型直接从无标签数据中自行学习,无需标注数据。本文主要对当前自监督学习涉及到的一些方面进行总结(笔记)。

自监督学习简介

  1. 自监督学习的核心,在于如何自动为数据产生标签。例如输入一张图片,把图片随机旋转一个角度,然后把旋转后的图片作为输入,随机旋转的角度作为标签。再例如,把输入的图片均匀分割成3*3的格子,每个格子里面的内容作为一个patch,随机打乱patch的排列顺序,然后用打乱顺序的patch作为输入,正确的排列顺序作为label。类似这种自动产生的标注,完全无需人工参与。
  2. 自监督学习如何评价性能?自监督学习性能的高低,主要通过模型学出来的feature的质量来评价。feature质量的高低,主要是通过迁移学习的方式,把feature用到其它视觉任务中(分类、分割、物体检测...),然后通过视觉任务的结果的好坏来评价。目前没有统一的、标准的评价方式。
  3. 自监督学习的一个研究套路。前面说到,自监督学习的核心是如何给输入数据自动生成标签。之前的很多工作都是围绕这个核心展开的。一般的套路是:首先提出一个新的自动打标签的辅助任务(pretext task,例如:旋转图片、打乱patch顺序),用辅助任务自动生成标签,然后做实验、测性能、发文章。每年都有新的辅助任务被提出来,自监督学习的性能也在不断提高,有的甚至已经接近监督学习的性能。总体上说,或者是提出一种完全新的辅助任务,或者是把多个旧的辅助任务组合到一起作为一个“新”的辅助任务。

从扩展性的角度看自监督学习的发展

从扩展性(scalability)的角度看,需要搞清楚自监督学习和以下三方面的关系:

  1. 扩展数据集。主要研究的问题是:训练自监督学习模型的数据集的大小,跟性能是否有某种关系?能否通过增大数据集来提升性能?
  2. 扩展模型复杂度。自监督学习,本质上是要训练出来一个feature提取器(一个CNN网络)。这个CNN网络的复杂度,跟性能是否有某种关系?能否通过增大网络复杂度来提升性能?(比如ResNet50比AlexNet复杂,用ResNet50,效果比AlexNet好吗?)
  3. 扩展辅助任务的难度。自监督学习的核心,是用一个辅助任务(pretext task)来自动为数据生成标签。这个辅助任务的难度,跟性能是否有某种关系?能否通过增大辅助任务的难度来提升性能?(比如拼图这个辅助任务,把图片分割成2x2个patch,还是4x4个patch?4x4个patch的难度更大)

Facebook AI Research的这篇文章,对以上3个方面进行了深入的研究:

Scaling and Benchmarking Self-Supervised Visual Representation Learningarxiv.org

文中对今后的研究趋势也做了预测:

We believe future work should focus on designing tasks that are complex enough to exploit large scale data and increased model capacity.
编辑于 2019-05-17