一文详解图像中的无监督学习

2022 年 7 月 15 日 PaperWeekly


©作者 | 凤舞九天




前言 

由于工作原因搞了相当一段时间的无监督学习,包括 CV 单模态的无监督,以及多模态的无监督学习,这里将自己重点关注的论文介绍一下,并且会附上自己在实验过程中的一点心得体会。这篇文章主要介绍图像(CV)领域内的无监督学习。


无监督学习的概念其实很早就有了,从最初的 auto-encoder,到对图像进行不同的预处理然后进行预测的无监督学习(比如旋转后预测旋转角度、mask 一部分进行复原),以及到如今对比学习(simclr、moco)、特征重构(byol,simsiam)、像素重构 MAE、甚至 low-level 的无监督预训练(IPT),可以说图像的无监督学习获得了长足的发展,而且无监督的效果已经在逐步逼近有监督的效果。


当然,截止到目前我仍然不认为无监督学习的效果能打败有监督学习,但是在大量没有标注的数据上进行无监督训练,然后再在自己的特定任务上的少量标注数据上进行 finetune,那效果确实是会好很多的,但是如果是大量的无监督训练的数据也是有标注的情况,那么效果肯定不如直接有监督训练,而且经过自己的实验,即便是先无监督再有监督、有监督无监督一起训练也不会有太大收益,所以说目前为止还是数据为王。


但是目前无论是单模态(CV、NLP)还是多模态下,都会有超大规模的预训练数据甚至能到亿级别,在这种数据量下预训练出来的模型当然会很好,但是收集整理如此量数据以及在亿级别训练数据上进行训练都是极其消耗资源的,一般的研究员都是 load 开源的模型参数再进一步 pretrain 或者 finetune。




对比学习

最初做无监督的想法很简单,类似 auto-encoder,重构像素、或者对图像做一些变换(比如旋转)然后进行预测,但是如此做并没有得到特别好的效果。自己个人感觉对比学习(SimCLR 和 MoCo)的出现算是无监督学习的一次质的飞跃,而且这些经典论文的一些思路以及结论,对其他工作都有借鉴意义,自己有关的实验也会一一介绍。


先简单介绍下对比学习的概念。我们的输入图像 ,经过两种不同的预处理(变换)之后可以得到两张图像 ,那么经过特征提取器(encoder)之后两者的特征应该是比较相近的。但是如果直接最大化两张图像特征的距离,模型很容易陷入坍塌,即特征都映射成固定特征,那么 loss 为 0。因此对比学习引入负样本的概念,对于来自同一张图像的特征,其特征距离尽可能近,而来自不同图像的特征,其特征距离要尽可能远,用学术上的话说就是最小化正样本距离,最大化负样本距离,也就是对比学习的损失函数。



这里对损失函数简单解释下,对比学习的输入是对每一张图像进行两种不同的变换,经过特征提取之后会得到两种特征,对任意特征 来说,总会有一个特征 是其正样本(同一张原始图像的两种不同的数据增强得到的特征),而一个 batch 中的其他图像提取到的特征就是负样本。

从原理上来说(其实是各种论文的实验结果),提高对比学习的效果就是提供足够大的 batch size、研究更加有效的不同预处理方式(使得经过变换后的两张图像既能保留图像最本质的信息,又尽可能不一致)以及增加模型(encoder)表达能力。下面重点讲一下对比学习领域内 MoCoSimCLR 两个最具代表性以及影响力的文章。


首先是 MoCo,MoCo 研究的重点是如何增加计算 loss 时的负样本数据,因为总显存是有限的。MoCo 设计了一种巧妙的方式,在训练的过程中维护一个队列,将历史 batch 中的特征(这里的特征由于没有梯度,所以占显存很小)存入到队列中,这样一个新的 batch 在计算的时候,可以在队列中找到足够多的负样本进行迭代优化。


但是这样有一个问题是,不同 batch 提取特征时的模型参数是在一直更新的,所以作者设计了一个 momentum-encoder,其结构与 encoder 完全相同,每次更新的时候以较小的步长从 encoder 中 copy 参数,这样 momentum-encoder 参数不是通过 loss 来进行学习的,所以提取的特征无需梯度,占用显存就比较小,同时 momentum-encoder 参数变化很缓慢,所以队列中维护负样本特征就保证了足量且相对一致(来自同一个模型参数),以保证对比学习的效果。



下来介绍的就是 SimCLR 这篇文章。SimCLR 可以说有钱任性,直接暴力加足够的机器以保证 4096 的 batch size,这样一来损失函数就可以直接计算。SimCLR 主要研究了对图像的不同变换以及特征表达的影响,SimCLR 做了大量不同的尝试,最后发现在对比学习中, 预处理效果最好。

除此之外,SimCLR 还在 encoder 之外加了 MLP 结构,进一步提升了效果(其实不知道这个为什么会有效)。其模型结构为:



MoCo 在借鉴的 SimCLR 的数据增强方式以及 MLP 结构之后形成了 MoCo-v2,效果也有很大的提升,说明 SimCLR 本身的实验结论十分 solid。


最初在看到 MoCo 这篇文章的时候确实觉得这个思路很巧妙,而且很明显作者将其做 work 了,因为论文中的指标完全可复现。不过当我复现 SimCLR 的时候设计了另外一种在一定量显存的前提下模拟大 batch size 的实现方式,简单讲就是小 batch 先不带梯度推理保存结果,再带梯度推理计算 loss,但是需要重复推理,浪费了训练时间。我们看论文的目的除了直接用论文的方法之外,还可以借鉴论文中的部分思路。


比如说 SimCLR 中的数据增强以及 MLP 结构,可以说是类似文章的标配了,而 MoCo 论文利用 momentum-encoder 以及队列来实现在小 batch size 情况下得到足够量的负样本也很值得借鉴,在我训练 CLIP(多模态对比学习)的时候采用的就是 MoCo 的思路,比如 ALBEF 这篇文章也是用了类似的思路(当然人家还有别的优化点,所以能发表论文)。


同时自己在做目标检测的时候发现了一篇 DetCo,其实就是将 MoCo 适配到了目标检测领域,设计了多尺度的对比以及增加了局部 VS 全局的对比,自己实验下来,目标检测的任务下,DetCo 确实比 MoCo 好一些。在视频领域也有由 MoCo 改进而来的 VideoMoco,不过这篇文章没实验过。


最后写一些是自己应用中的一些思考。首先是在自己的业务数据上训练类似 MoCo 或者 SimCLR 的时候,由于对比损失函数的特点,如果数据中相似数据占比较高的话最好做一下去重;其次是在多机多卡训练的过程中,正样本都是在同一机器同一张卡上计算,但是负样本会来自不同的机器,所以当 encoder 选用 ResNet 等 CNN 结构时,BN 层会有一定的信息泄漏,MoCo 中采用的是 shuffle bn,而 SimCLR 采用的是 sync bn。




特征重构


刚刚有提到,如果直接最大化两张图像特征的距离,模型很容易陷入坍塌。但是也有一些文章进行直接进行特征重构但是却能收敛(其实从原理上并不是很清楚收敛原因)。这里主要是介绍 BYOL 和 SimSiam。


BYOL 可以说是我在尝试的论文中效果最好的一个,其最显著的特点是训练的时候不需要负样本,只需要正样本就好。



BYOL 在 Simclr 的 mlp(projection)之后额外加了新的 mlp 结构(predition),利用 predition 的结果和另一种增强方式得到的 projection 直接构建 l2 loss。BYOL 中 target emcoder 其实就是 Moco 中的 momentum-encoder,其参数更新来自于 online-encoder,而不是由 loss 计算。可以说 BYOL 在 Moco-v2 的基础上直接去掉了负样本的对比,而是在正样本projection之后再进行 predition 来预测图像特征。


SimSiam 就更简单了,SimSiam 相当于在 BYOL 的基础上进一步去掉了 momentum-encoder,仅用一个 encoder,而且作者研究发现保证模型不坍塌的原因是 target 数据的梯度不回传。



BYOL 和 Simsiam 我自己也有有过尝试,开源的代码也并不复杂,确实能复现论文的效果,但是目前仍然不是很理解为何 target 网络 stop gradient 就能使得无监督训练不坍塌,对我而言仍然是有一点点玄学。




其他思路


接下来的几篇文章,是我个人觉得思路比较值得借鉴的文章,这里一并介绍下。

首先是 SwAV 这篇文章。这篇文章比较有意思的点是虽然loss采用的仍然是类似对比学习,但是其无需负样本计算 loss。具体实现方式为其中一个增强结果所提的特征会进行聚类,得到一个 one-hot 编码,我个人理解为就是为这张图像打了一个 label,然后对另一个增强结果进行分类(特征与聚类中心点乘)。


还有一个值得借鉴的点是其数据增强引入了低分辨率(小 size),一张图像经过数据增强之后可以得到 8 个不同的 view,其中两个是高分辨率,其余六个是低分辨率,view1(利用 distributed_sinkhorn 计算 q)与其余 7 个 view 计算 loss,view2(利用 distributed_sinkhorn 计算 q)与其余 7 个 view 计算 loss。其 loss 表达式和模型结构为:




其次是 MAE 这篇文章,是凯明大神继 Moco 系列之后的又一力作,其实自从 BERT、GPT 在 NLP 领域内被成功应用之后,在图像领域也有相当一部分研究集中在对图像进行一定 mask 然后重建的工作上,IGPT,BEiT 是其中的代表作。其实自己也跑过类似 IGPT 的代码,结果当然是有点惨不忍睹。凯明大神一贯作风是思路简单,效果拔群,然而能将简单的思路实现,并最终 work,才真是硬实力。MAE 选用的模型是 VIT 结构,首先对原图进行 patch 划分,mask 的粒度也是在patch上完成。AutoEncoder 的结构其实比较简单,一个 encoder,一个decoder,配合上 VIT 以及 patch 划分,整体模型结构便呼之欲出。



MAE 之所以能成功,个人认为有两个比较重要的关键点。


1. 75% mask 比例,与文本不同的是,一张图像信息是非常冗余的,如果类似于BERT 采用随机 15% 的 mask 比例的话,重建任务非常简单,模型很容易就从 mask 部分的邻域学到信息完成重建任务。


2. 非对称的 encoder、decoder 结构。在论文中指出,因为训练的目的是拿到比较好的 encoder 模型,所以 encoder 模型相对重一些(参数多),而轻量级(参数少)decoder 已经能很好的完成重建任务,与此同时,Mask token 不参与 encoder 计算,仅参与 decoder 计算,这样一来,参数多的 encoder 只输入 25% 的图像数据,而输入 100% 图像数据的 decoder 参数又比较少,能够加速计算。


最后是 IPT 这篇文章。IPT 与之前文章最大的不同点在于 IPT 模型更加关注细粒度信息,当然其负责的任务也主要是降噪、去雨、超分等 low level 的任务,其模型以及任务的设计也比较巧妙,为每个任务设计独立的 head 和 tail 模块,中间层则是共享参数的 transformer 结构,预训练任务就是人为对原始数据加噪声、缩小等各种操作进行复原,这篇文章感觉在 low level 的任务上有很好的启发意义。





总结


以上提到的大多数文章自己都有相关的实验,但是做无监督有一点点心塞的是随着自己业务上的标注数据越来越多,无监督预训练带来的收益会越来越少,所以无监督预训练在业务上应用一般是启动的时候第一版本,手中只有少量的数据,这个时候加上无监督预训练,而后随着数据回流与标注,有监督训练的效果会越来越好。同时这里介绍的这么多篇文章,自己实验下来在业务数据上效果其实并没有差很多,同时无监督预训练也需要大量的数据,而且 epoch 也要更长(其实也比较消耗资源),最好是先 load 各家在 imagenet 上预训练好的开源模型。


不过在多模态领域内,多模态无监督预训练确实能带来更大的收益,后面会再写一篇无监督预训练的相关文章。


最后贴一下自己详细介绍的几篇关于图像无监督预训练的文章,也欢迎大家关注:

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

https://zhuanlan.zhihu.com/p/395585634
https://zhuanlan.zhihu.com/p/359526033



更多阅读



#投 稿 通 道#

 让你的文字被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。


📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算


📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿


△长按添加PaperWeekly小编




🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧


·
·

登录查看更多
0

相关内容

ICLR 2022 | BEIT论文解读:将MLM无监督预训练应用到CV领域
专知会员服务
32+阅读 · 2022年3月24日
自编码器26页综述论文:概念、图解和应用
专知会员服务
27+阅读 · 2022年3月5日
专知会员服务
21+阅读 · 2021年8月10日
专知会员服务
39+阅读 · 2021年7月4日
专知会员服务
38+阅读 · 2021年5月16日
专知会员服务
63+阅读 · 2021年4月11日
最新《对比监督学习》综述论文,20页pdf
专知会员服务
82+阅读 · 2020年11月5日
别再无聊地吹捧了,一起来动手实现MAE玩玩吧!
自监督视觉特征学习
专知
0+阅读 · 2021年11月1日
再介绍一篇最新的Contrastive Self-supervised Learning综述论文
夕小瑶的卖萌屋
2+阅读 · 2021年9月22日
【自监督学习】OpenAI科学家一文详解自监督学习
产业智能官
25+阅读 · 2020年3月18日
OpenAI科学家一文详解自监督学习
新智元
18+阅读 · 2019年11月20日
【干货】Python无监督学习的4大聚类算法
新智元
14+阅读 · 2018年5月26日
国家自然科学基金
17+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
2+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
7+阅读 · 2009年12月31日
Meta-Transfer Learning for Zero-Shot Super-Resolution
Arxiv
43+阅读 · 2020年2月27日
Arxiv
19+阅读 · 2018年3月28日
VIP会员
相关VIP内容
ICLR 2022 | BEIT论文解读:将MLM无监督预训练应用到CV领域
专知会员服务
32+阅读 · 2022年3月24日
自编码器26页综述论文:概念、图解和应用
专知会员服务
27+阅读 · 2022年3月5日
专知会员服务
21+阅读 · 2021年8月10日
专知会员服务
39+阅读 · 2021年7月4日
专知会员服务
38+阅读 · 2021年5月16日
专知会员服务
63+阅读 · 2021年4月11日
最新《对比监督学习》综述论文,20页pdf
专知会员服务
82+阅读 · 2020年11月5日
相关资讯
相关基金
国家自然科学基金
17+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
2+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
7+阅读 · 2009年12月31日
Top
微信扫码咨询专知VIP会员