中文笔记:对比学习-MoCo学习笔记
对比学习与无监督学习概述
对比学习(Contrastive Learning)是一种旨在无需图片内容(标签信息)前提下,将相似图像的特征拉近,同时将不同图像的特征尽量拉远的技术。代理任务(Pretext Task)作为一种没有明确语义的任务,目的是生成自监督信号,充当虚拟的标签信息。比如说在计算机视觉任务中,通过人为规则定义哪些图像是相似的,哪些是不相似的。
Instance Discrimination 方法
在对比学习的框架下,Instance Discrimination 是一种物体判别任务。对于同一张图片,query 和 key 是来自该图片的不同视角。通过裁剪和增强(augmentation)生成图片的不同版本,即正样本,集合内的其他图片则视为负样本。这种方法将每一张图片视为一个独立的类,从而训练模型区分正负样本。
大规模无监督预训练的意义
无监督学习的核心目标是在没有标注数据的情况下,学到具有良好迁移性的特征,使其在下游任务中能够表现优异。相比自然语言处理(NLP)领域,视觉任务中的无监督学习更加困难。这是因为自然语言属于离散空间,便于通过 tokenization 构建字典;而视觉数据则是连续信号,并且位于高维空间,难以直接建模。对比学习的一个重要动机在于,通过构建动态字典(dynamic dictionary)来解决这一挑战。
MoCo 方法解析
MoCo(Momentum Contrast) 是为计算机视觉无监督对比学习设计的一种方法,核心目标是构建一个大且一致的字典(large + consistent dictionary)。为此,MoCo 引入了两个关键技术:将队列作为字典(queue)和 动量编码器(momentum encoder)。
大规模字典的优势
在视觉任务中,字典越大,表示的视觉信息越丰富。通过从连续高维空间采样更多 key,模型可以更容易找到区分性本质特征。如果字典较小,模型可能会学到捷径(shortcut),导致泛化能力较差。
字典的一致性
为了保持字典内 key 的一致性,所有 key 必须由相同或相似的编码器生成。否则,query 在字典中查询时,可能会匹配到非语义相似的 key,从而导致模型学习到错误的特征。
队列数据结构
MoCo 采用了先进先出(FIFO)的队列数据结构,队列大小即为字典大小。每次迭代时,只需更新部分 key 而非整个字典,移除最过时的 key 来保持字典的有效性。
Momentum Encoder 的引入
动量编码器的设计是为了保证字典的 key 由一致的编码器生成。具体来说,动量编码器基于当前时刻的编码器参数 () 初始化,使用以下公式更新:
动量参数 m 较大时,编码器更新缓慢,从而使得字典中的 key 不会随着当前编码器的快速变化而改变,确保字典的特征一致性。
InfoNCE 损失函数
在InfoNCE这项工作中,它将多类分类问题转换为一系列二分类问题(正样本或负样本),并使用 SoftMax 作为激活函数。MoCo 使用了 InfoNCE 损失函数,这是一种噪声对比估计(Noise Contrastive Estimation)。实际上,InfoNCE 损失函数可以被看作是交叉熵损失(Cross-Entropy Loss)。
MoCo 与其他方法的对比
MoCo 主要与两种方法对比:端到端学习 和 memory bank。端到端学习中的字典大小受限于计算资源,且优化困难,因为大的字典需要更大的 mini-batch size,导致收敛困难。而 memory bank 方法虽然可以保存全部特征,但其更新特征时使用不同时间点的编码器,导致特征一致性差。此外,memory bank 需要一个 epoch 来更新字典中的所有 key,使得 key 和 query 之间的特征差距较大。
进一步说明了MoCo 提出的两点改进的意义:
- 队列形式的字典:解决了字典大小受限于 mini-batch size 的问题。
- 动量编码器:解决了特征一致性的问题。
总结与科研启示
这篇 MoCo 论文展示了一种对比学习的科学思路,首先确定代理任务和目标函数,再设计输入和模型。通过构建大且一致的字典,MoCo 在无监督学习中实现了更好的特征提取,具备更强的迁移性和泛化能力。