InstDisc
提出了个体判别任务,而且利用这个代理任务与NCE Loss去做对比学习从而得到了不错的无监督表征学习的结果;同时提出了别的数据结构——Memory Bank来存储大量负样本;解决如何对特征进行动量式的更新
翻译:
有监督学习的结果激励了我们的无监督学习方法。对于来自豹的图像,从已经训练过的神经网络分类器中获得最高响应的类都是视觉上相关的,例如,美洲虎和猎豹。无关语义标记,而是数据本身明显的相似性使一些类比其他类更接近。我们的无监督方法将这种按类判别的无监督信号发挥到了极致,并学习了区分单个实例的特征表示。
总结:
把每个实例(也就是图片)都看作一个类别,目标是学一种特征,从而让我们能把每一个图片都区分开来
翻译:
这是无监督特征学习方法的整体流程。我们使用主干CNN将每张图像编码为特征向量,将其投影到128维空间并进行L2归一化。最优的特征嵌入是通过实例级判别来学习的,它试图最大限度地将训练样本的特征分散在128维单位球面上。
总结:
通过CNN把所有图片编码成特征,希望这些特征在最后的特征空间里能够尽可能的分开
利用对比学习训练CNN,正样本是图片本身(可能加一些数据增强),负样本则是数据集中其他图片
大量的负样本特征存在哪呢?运用Memory Bank的形式,把特征存进去,有多少特征就有多少行,因此特征的维度不能太大
Memory Bank随机初始化维单位向量
正样本利用CNN降低维度后,从Memory Bank中随机抽取负样本,然后可以用NCE Loss计算这个对比学习的目标函数,更新完网络后,可以把这些数据样本对应的特征放进Memory Bank更换掉
Proximal Regularization
给模型加了个约束,从而能让Memory Bank中的那些特征进行动量式的更新
Unlike typical classification settings where each class has many instances, we only have one instance per class.During each training epoch, each class is only visited once.
Therefore, the learning process oscillates a lot from random sampling fluctuation. We employ the proximal optimization method [29] and introduce an additional term to encourage the smoothness of the training dynamics. At current iteration t, the feature representation for data xi is computed from the network v (t) i = fθ(xi). The memory bank of all the representation are stored at previous iteration V = fv (t−1)g. The loss function for a positive sample from Pd is:
翻译:
与每个类有许多实例的典型分类设置不同,我们每个类只有一个实例。在每个训练阶段,每个类只访问一次。因此,学习过程在随机抽样波动中振荡很大。我们采用了最接近优化方法[29],并引入了一个额外的术语来鼓励训练动态的平滑性。在当前迭代t中,数据xi的特征表示是从网络v (t) i = fθ(xi)中计算出来的。所有表示的存储库都存储在前一次迭代V = fv (t−1)g。Pd阳性样本的损失函数为:
As learning converges, the difference between iterations, i.e. v (t) i − v (t−1) i , gradually vanishes, and the augmented loss is reduced to the original one. With proximal regularization, our final objective becomes:
翻译:
随着学习的收敛,迭代之间的差值即v (t) i - v (t - 1) i逐渐消失,增广损失减小到原始损失。通过近端正则化,我们的最终目标变成:
InvaSpreed
对于相似的图片,它的特征应该保持不变性;对不相似的图片,它的特征应该尽可能分散开
端到端;不需要借助外部数据结构去存储负样本
同样的图片通过编码器后得到的特征应该很相似,而不同的则不相似
对X1来说,经过数据增强的X1‘就是它的正样本,负样本则是其他所有图片(包括数据增强后的)
为什么要从同一个mini-batch中选正负样本呢?这样就可以用一个编码器去做端到端的训练
图片过编码器再过全连接层,把特征维度降低,目标函数则使用NCE Loss的变体
之所以被SimCLR打败,是因为没有钞能力:mini-batch太小,导致负样本太少
CPC
以上两个都使用个体判别式的代理任务,CPC则是使用生成式的代理任务
不光可以处理音频,还可以处理文字、图片、以及在强化学习中使用
我们有一个语音序列,从xt-3到xt代表过去到现在的输入,将其全扔给一个编码器,把编码器返回的特征喂给一个自回归模型gar(RNN或LSTM),得到ct(上下文的特征表示),如果ct足够好,那么认为它可以对未来的zt+1到zt+4做出合理预测
这里的正样本是未来的输入通过编码器得到的未来时刻的特征输出,也就是真正正确的zt+1到zt+4
负样本的定义倒是很广泛,任意输入通过编码器得到的特征输出都是负样本
CMC
定义正样本的方式更广泛:一个物体的很多视角都可以当作正样本
是比较早的做多视角的对比学习,不仅证明了对比学习的灵活性,而且证明了多视角多模态的可行性
Abstract
Humans view the world through many sensory channels, e.g., the long-wavelength light channel, viewed by the left eye, or the high-frequency vibrations channel, heard by the right ear. Each view is noisy and incomplete, but important factors, such as physics, geometry, and semantics, tend to be shared between all views (e.g., a “dog” can be seen, heard, and felt). We investigate the classic hypothesis that a powerful representation is one that models view-invariant factors. We study this hypothesis under the framework of multiview contrastive learning, where we learn a representation that aims to maximize mutual information between different views of the same scene but is otherwise compact.
Our approach scales to any number of views, and is viewagnostic. We analyze key properties of the approach that make it work, finding that the contrastive loss outperforms a popular alternative based on cross-view prediction, and that the more views we learn from, the better the resulting representation captures underlying scene semantics. Our approach achieves state-of-the-art results on image and video unsupervised learning benchmarks.
翻译:
人类通过许多感官通道来观察世界,例如,左眼看到的长波长光通道,或右耳听到的高频振动通道。每个视图都是嘈杂和不完整的,但重要的因素,如物理,几何和语义,倾向于在所有视图之间共享(例如,可以看到、听到和感觉到“狗”)。我们研究了一个经典的假设,即一个强大的表示是一个模型的观点不变的因素。我们在多视图对比学习的框架下研究这一假设,在多视图对比学习中,我们学习的表征旨在最大化同一场景的不同视图之间的相互信息,但除此之外是紧凑的。
我们的方法适用于任意数量的视图,并且是视图不可知论的。我们分析了使其有效的方法的关键属性,发现对比损失优于基于交叉视图预测的流行替代方案,并且我们学习的视图越多,结果表示捕获底层场景语义的效果就越好。我们的方法在图像和视频无监督学习基准上取得了最先进的结果。
总结:
增大所有视觉间的互信息,从而学得一个能抓住不同视角下的关键因素的特征
选取的NYU RGBD数据集有四个视角,分别是原始的图像、图像对于的深度信息、surface normal(表面法线)、物体的分割图像
虽然输入来自于不同的视角,但都属于一张图片,因此这四个特征在特征空间中应该尽可能靠近,互为正样本;不配对的视角应该尽可能远离
MoCo
把之前对比学习的方法都归纳总结成了一个字典查询问题
翻译:
动量对比(MoCo)通过使用对比损失将编码查询q与编码键的字典进行匹配来训练视觉表示编码器。字典键{k0;k1;k2...}是由一组数据样本动态定义的。字典被构建为一个队列,当前的小批量进入队列,最老的小批量退出队列,将其与小批量大小解耦。键由一个缓慢推进的编码器编码,由查询编码器的动量更新驱动。这种方法为学习视觉表示提供了一个大而一致的字典。
总结:
提出队列+动量编码器形成一个又大又一致的字典,帮助更好地对比学习
队列取代Memory Bank作为额外的数据结构存储负样本
动量编码器取代原来loss中的约束项,从而能达到动量式更新编码器的目的,而不是动量地更新特征
Technical details
We adopt a ResNet [33] as the encoder, whose last fully-connected layer (after global average pooling) has a fixed-dimensional output (128-D [61]). This output vector is normalized by its L2-norm [61]. This is the representation of the query or key. The temperature τ in Eqn.(1) is set as 0.07 [61]. The data augmentation setting follows [61]: a 224×224-pixel crop is taken from a randomly resized image, and then undergoes random color jittering, random horizontal flip, and random grayscale conversion, all available in PyTorch’s torchvision package.
翻译:
我们采用ResNet[33]作为编码器,其最后一个全连接层(经过全局平均池化)具有固定维输出(128-D[61])。该输出向量由l2范数归一化[61]。这是查询或键的表示形式。设Eqn.(1)中的温度τ为0.07[61]。数据增强设置如下[61]:从随机调整大小的图像中截取224×224-pixel裁剪,然后经历随机颜色抖动,随机水平翻转和随机灰度转换,这些都可以在PyTorch的torchvision包中使用。
总结:
MoCo的实现细节与InstDisc是十分相似的,[61]就是InstDisc的论文
Introduction
总结:
用队列解决大字典的问题,用动量编码器解决字典特征不一致的问题
SimCLR
有一个mini-batch的图片x,对它们做不同的数据增强得到xi与xj,为正样本;其余图片及其数据增强则为负样本
通过f对正负样本进行编码,f是共享权重的
SimCLR的一个创新点是在得到特征后加了一个projector,也就是g函数,只有一个全连接+ReLu,但是让最终结果提升了10个点;只在训练阶段使用g函数,测试阶段只用h
SimCLR与InvaSpreed的区别
• Composition of multiple data augmentation operations is crucial in defining the contrastive prediction tasks that yield effective representations. In addition, unsupervised contrastive learning benefits from stronger data augmentation than supervised learning.
• Introducing a learnable nonlinear transformation between the representation and the contrastive loss substantially improves the quality of the learned representations.
• Representation learning with contrastive cross entropy loss benefits from normalized embeddings and an appropriately adjusted temperature parameter.
• Contrastive learning benefits from larger batch sizes and longer training compared to its supervised counterpart.
Like supervised learning, contrastive learning benefits from deeper and wider networks.
翻译:
•多个数据增强操作的组合对于定义产生有效表示的对比预测任务至关重要。此外,与有监督学习相比,无监督对比学习受益于更强的数据增强。
•在表示和对比损失之间引入可学习的非线性变换,大大提高了学习到的表示的质量。
•具有对比交叉熵损失的表示学习受益于规范化嵌入和适当调整的温度参数。
•与监督学习相比,对比学习受益于更大的批处理规模和更长的训练时间。与监督式学习一样,对比式学习也受益于更深入、更广泛的网络。
总结:
还是没钱,支撑不起数据增强与batch size
数据增强
使用了很多方法
哪些数据增强有用,哪些没用,作者做了详细的消融实验;最好的是crop和color
projector
linear是不加relu,non-linear是加relu,none是不加MLP层;效果与维度几乎无关,因此一般选低一点的维度
MoCo v2
Contrastive unsupervised learning has recently shown encouraging progress, e.g., in Momentum Contrast (MoCo) and SimCLR. In this note, we verify the effectiveness of two of SimCLR’s design improvements by implementing them in the MoCo framework. With simple modifications to MoCo— namely, using an MLP projection head and more data augmentation—we establish stronger baselines that outperform SimCLR and do not require large training batches. We hope this will make state-of-the-art unsupervised learning research more accessible. Code will be made public.
翻译:
对比无监督学习最近取得了令人鼓舞的进展,例如动量对比(MoCo)和SimCLR。在本文中,我们通过在MoCo框架中实现SimCLR的两项设计改进来验证它们的有效性。通过对MoCo进行简单的修改,即使用MLP投影头和更多的数据增强,我们建立了比SimCLR更强的基线,并且不需要大量的训练批次。我们希望这将使最先进的无监督学习研究更容易获得。代码将被公开。
总结:
把SimCLR的projector和数据增强搬到MoCo上
MoCo相比于SimCLR的优越性:MoCo占用内存更少,训练更快
SimCLR v2
第一部分是自监督SimCLR;第二部分是利用有标签数据做有监督的微调,获得teacher模型后生成伪标签;第三部分是利用生成的伪标签做自学习
从v1到v2
1. To fully leverage the power of general pretraining, we explore larger ResNet models. Unlike SimCLR [1] and other previous work [27, 20], whose largest model is ResNet-50 (4×), we train models that are deeper but less wide. The largest model we train is a 152-layer ResNet [25] with 3× wider channels and selective kernels (SK) [28], a channel-wise attention mechanism that improves the parameter efficiency of the network. By scaling up the model from ResNet-50 to ResNet-152 (3×+SK), we obtain a 29% relative improvement in top-1 accuracy when fine-tuned on 1% of labeled examples.
因为用更大的模型无监督的效果会更好,所以换成了ResNet152,同时使用SK net
2. We also increase the capacity of the non-linear network g(·) (a.k.a. projection head), by making it deeper.2 Furthermore, instead of throwing away g(·) entirely after pretraining as in SimCLR [1], we fine-tune from a middle layer (detailed later). This small change yields a significant improvement for both linear evaluation and fine-tuning with only a few labeled examples. Compared to SimCLR with 2-layer projection head, by using a 3-layer projection head and fine-tuning from the 1st layer of projection head, it results in as much as 14% relative improvement in top-1 accuracy when fine-tuned on 1% of labeled examples (see Figure E.1).
把projector的MLP变深会怎么样?实验发现两层就够了,fc+BN+relu+fc+BN,效果最好
3. Motivated by [29], we also incorporate the memory mechanism from MoCo [20], which designates a memory network (with a moving average of weights for stabilization) whose output will be buffered as negative examples. Since our training is based on large mini-batch which already supplies many contrasting negative examples, this change yields an improvement of ∼1% for linear evaluation as well as when fine-tuning on 1% of labeled examples (see Appendix D).
使用动量编码器,但只提了一个点,作者解释原因是他们的mini-batch非常大,负样本相当多,不论是从字典大小还是字典里特征的移植性来说,SimCLR v2都已经做得很好了,所以作用不是很大
SwAV
SwAV算是卷积神经网络里用Res50分刷的最高的一篇工作
给定同一张图片,如果去生成不同的视角,我希望可以用一个视角得到的特征去预测另一个视角得到的特征,因为按道理来说这些不同视角的特征应该是相近的
原始的对比学习拿图片和图片的特征做对比学习,每个图片都是一个类,所以比较浪费资源
SwAV的作者思考能不能借助一些先验信息,不去和大量的负样本比,而是去和一些更简洁的东西比呢?跟聚类的中心比,也就是图中的c,是DxK的矩阵,D是特征维度,K是聚类中心个数
用聚类的好处
(1)图片特征对比需要大量负样本,而聚类中心只需几百几千(图片本身也没那么多类)
(2)聚类中心是有明确语义含义的,而如果只是随机抽取负样本会出现负样本类别不均衡、抽到正样本等问题
表里做的是ImageNet的linear evaluation(只训练全连接层),SwAV的微调只比在ImageNet上训练的有监督模型低1个点,效果可以说是特别好了
右图是把Res50变宽,发现SwAV的分数还能涨
trick:Multi-crop: Augmenting views with smaller images
之前的对比学习方法都是两个crop,也就是一个正样本对x1、x2,crop的重叠区域比较大,难以利用局部特征,但使用多个crop则会导致计算复杂度过大,如何解决?减小crop大小,多几个crop。例如2x224变成2x160+4x96,计算代价差不多,也增加了局部特征
在利用聚类的模型上这个trick的效果更加明显
BYOL
没有用任何形式的负样本,它是如何解决学习坍塌的问题的呢?
两个f编码器结构相同,但不再是权重共享的,而是不同的;fθ是随着梯度更新而更新的,而fξ是用moving average的形式更新的,也就是动量编码器
projecor的g函数(MLP)同f函数
以往的对比学习方法得到z之后就做让相似的尽可能接近,不相似的尽可能远离;但BYOL又加了一层predicter,也是MLP,得到q(zθ),他们想让q(zθ)与底下的zξ’做预测任务,预测标签为q(zθ),真实标签为zξ’,损失函数为两个向量之间的MSE。上面紫色部分相当于query编码器,下面粉色部分相当于key编码器,相当于是用一个视角的特征预测另一个视角的特征
//表示更新时没有梯度
不用负样本为什么学习不坍塌?
这篇博客的作者复现时根据MoCo v2复现BYOL,所以MLP中少了一个BN,结果学习坍塌了
在不同地方加BN与加Layer Norm和不加的比较,由图可知关键在于BN
BN是把一个batch中的所有样本的特征拿过来算均值方差后做归一化,这意味着你在算某个正样本loss时,其实也看到了其他样本的特征,信息泄露了。也就是正样本其实在BN中与平均图片做对比了
但BYOL的作者很快写了一篇论文回应BN对BYOL的影响
详细的实验表明:BN确实对BYOL很重要,但并不是因为信息泄露,因为拥有BN的BYOL和缺少BN的SimCLR都出现了学习坍塌
最后作者解释:如果一开始模型的初始化比较好,后面的训练即使离开了BN也没问题
SimSiam
既不需要负样本,不需要大的batch size,也不需要动量编码器。即使在这种情况下也不会学习坍塌,而且还能取得很好的结果
之所以称为Siamese network孪生网络,是因为它有两个编码器,彼此网络结构一般是一样的,一般要共享参数,整体架构与BYOL基本是一样的,唯一不一样的地方在于没有使用动量编码器
Hypothesis
Our hypothesis is that SimSiam is an implementation of an Expectation-Maximization (EM) like algorithm. It implicitly involves two sets of variables, and solves two underlying sub-problems. The presence of stop-gradient is the consequence of introducing the extra set of variables.
翻译:
我们的假设是SimSiam是一种类似于期望最大化(EM)算法的实现。它隐含地涉及两组变量,并解决两个潜在的子问题。stop-gradient的存在是引入额外变量集的结果。
总结:
stop-gradient使这一个训练过程被人为的劈成了两份,相当于解决两个子问题;防止了学习坍塌
上图把所有孪生网络的做法都归纳做总结和对比
SimSiam学得快,但还是BYOL效果最好,毕竟动量编码器确实好用
MoCo v3
相当于MoCo v2和SimSiam的合体
主干网络从Res换成ViT,发现batch size小时平滑,但batch size大了之后会出现突然暴跌的现象
A Trick for Improving Stability
查看梯度发现暴跌时梯度有波峰,出现在第一层的patch projection(把图片划分成patch)
作者尝试随机一个patch projection然后冻住,发现问题解决了
DINO
完全不用任何标签信息训练出来的ViT,如果把它的自注意力图拿出来可视化,可以发现它能准确的抓住每个物体的轮廓
student网络预测teacher网络,具体的前向过程跟BYOL或SimSiam都是极其相似的,为了避免模型坍塌,DINO加了个centering:把batch的样本算均值,然后减去均值