笔者碎碎念:书接上回,最近看了SwAV这篇论文被这个聚类的方法震惊,这种与传统方法结合的工作实在令人耳目一新(虽然不是一篇新的文章)。 当然,由于笔者能力有限,可能解读有所错误,还请各位看官海涵。 2022/4/7

paper: Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
codebase: github代码

介绍

本文提出了一个online的方法无监督学习,也即不需要很大的数据集进行离线的训练,可以不断地添加数据改善模型的表现。
此外还提出了一个叫Multi-Crop的数据增强方法,能够在保证计算量不大幅增加的情况下,提高样本的多样性。

Intuition

对于对比学习来说,要计算Contrastive loss需要对比样本的Embedding之间的差异,为了提高模型的表现需要大的batch size和高维的特征表示,这就对内存(SimCLR提出的memory bank等)和计算量提出了高的要求。

作者想到,能不能使用聚类的方法将需要对比的样本数量缩小,而且这个聚类不能是单向的,也就是说不但要从feature到聚类中心,也要求聚类中心一定程度地反映feature的分布。

为了避免模型的坍塌,即所有的聚类中心都坍塌到特征空间的一个点上,作者提出了Swap,交换投影方向。

而且作者为了提升模型的性能,考虑加入更多数据增强之后的图像,但是受限于内存,这些新增强的图像不会保持原图像的大小,从而保证计算量不会增加太大。

模型结构

image.png

传统的对比学习

对于传统的对比学习(左图),一幅图像经过两个不同的数据增强得到两个view(这两个view我们称之为正样本),输入进网络之后得到两个表示(representation),同样一个batch中的其他图像也会得到这样的表示,但是它们算作负样本。

这样在对比的过程中,正样本的表示应当接近,负样本的表示应当远离,这就是传统的Instance level的对比学习。

这样的想法很简单也很有效,但是仔细想想,负样本中也可能包含与正样本相接近的图像,这样的对比学习方法其实还有优化的空间。 对于这样的问题有关的研究还有很多,待以后有时间会仔细讨论这个问题。

本文的做法

下面给出一些定义:
SwAV论文解读 - 图4是特征(feature),SwAV论文解读 - 图5是带参数的网络,SwAV论文解读 - 图6是你需要维护的prototype(或者你可以叫它code book),SwAV论文解读 - 图7是codes(需要尽可能与SwAV论文解读 - 图8相似),SwAV论文解读 - 图9是projection。

作者在这里引入了prototype(图中SwAV论文解读 - 图10)。在这里你可以理解为特征空间中的特征向量(不一定正交),所有的表示都可能被这个东西描述。所以,这里的SwAV论文解读 - 图11越具有描述性,就能把这个特征空间撑得越开。
所以,到这里你就可以明白SwAV论文解读 - 图12就是一个个vector组成的矩阵,它用来和你网络输出的feature相乘得到projection(特征空间的投影),这样就实现了我们在Intuition部分说的减少由于对比样本之间的差异带来的巨大的计算开销的作用。

这里或许有读者意识到,这个方法和SVM的kernel method的方法很接近。

Loss

说了这么多,我们的任务到底是构造一个什么样的loss呢?
作者在这里告诉我们,是一个交叉熵函数。
image.png
这个式子就告诉我们,这就是个交叉熵的函数。
一个分布是SwAV论文解读 - 图14,一个分布是SwAV论文解读 - 图15,我们这里先暂时不管SwAV论文解读 - 图16怎么来的,只需要知道它是code就行。SwAV论文解读 - 图17是标准化之后的projection分布,这样的CE loss就能够实现SwAV论文解读 - 图18尽可能与SwAV论文解读 - 图19相似。

Swap

image.png
从这个式子你就可以看出Swap的就是交换了上下两支,也就是SwAV论文解读 - 图21

怎么得到SwAV论文解读 - 图22

为了得到这里的SwAV论文解读 - 图23(并且是online的),作者将其定义为OT问题,也就是一张图片分配到更近的聚类空间的问题。
我们现在就已经把上下文连上了,详见Sinkhorn算法简介
Sinkhorn算法简介与推导
image.png
作者使用Sinkhorn算法
image.png
对于SwAV论文解读 - 图26这一项可以理解为一个正则化项。
对于前面一项SwAV论文解读 - 图27,我们需要将其拆成两份SwAV论文解读 - 图28SwAV论文解读 - 图29。第一项是转移矩阵,第二项是你的projection,SwAV论文解读 - 图30是矩阵的迹。
这个式子就要求找到一个合适的SwAV论文解读 - 图31使其与SwAV论文解读 - 图32尽可能相似,但是还不能照抄SwAV论文解读 - 图33还必须满足下面的第二个式子,每个batch中的图像尽可能用到每个prototype,这样就能够发挥prototype的作用了。

SwAV论文解读 - 图34怎么得到

熟悉VQ-VAE的读者这里可能就很熟悉,这里的SwAV论文解读 - 图35是被初始化成可学习的矩阵,随着网络的更新而更新(是可以算梯度的)。

Multi-crop

We propose a multi-crop strategy where we use two standard resolution crops and sample _V _additional low resolution crops that cover only small parts of the image.

说白了就是使用一些小块的图片(patch),相当于增加了样本的多样性。
SwAV论文解读 - 图36
但是作者这里只对于全尺寸的图像计算code,作者这里说明小的patch也计算code会导致模型的表现恶化,可能是由于小的patch会导致prototype assignment的不准确。

表现

美丽的数字
半监督
image.png
迁移学习
image.png
在小的batch上的效果
image.png
使不使用Multi-crop
image.png

伪代码

image.png