恰好我最近在做用户点击行为序列有关的实验,主要方向也是对比学习,想探索图文多模态的 embedding 的语义性。如今读到 NNCLR 这篇文章时,我已经不再是几个月前对比学习自监督一无所知的状态,学会在论文之间纵向、横向对比。本文 NNCLR 主要和 SimCLR 模型对比,实验部分细节我之后结合实验后的理解补上。
Intro
文章是 21年10月发布的,提出通过利用物品之间的相似性来提升自监督的表示力。举个简单例子如,渡渡鸟🦤,更像一只鸡、鸭,与老虎、大象不相似。
论文引言部分介绍两块:前人的自监督思想、对比学习正样本是如何构造的
-
前人的自监督:尝试找到渡渡鸟与训练集其他物品的不同,本文的思想来自于同时再让模型找到图片相似性的特征,能更好的学习向量特征表示。
-
前人的对比学习正样本构造:一张图片通过不同的数据增强得到的两张图片视为一对,是正样本,其他 N-1 张图片数据增强得到的 2N - 2 张图片视为负样本。本文类似,不过在正例对的一张图上使用了 NN 找到最相似的图片向量表示,另一正例不变。参考下结构图左。
(💡 论文 idea 缘由:不论是随机裁切、颜色变化等缺点是不能提供相同物品的不同视角,eg 车头正面、车身侧面;也无法提供同一类物品的相似图片。总之,想突破数据增强的局限性)
论文的主要贡献有以下四点:
-
提出 NNCLR,能超越单例正样本的局限性
-
提高对比学习的准确率 ∼ 3.8%,在 imageNet 线性分类和用有标签初始化的半监督(finetune) 达 SOTA
-
在自监督甚至有监督(learned via supervised ImageNet pre-training) 达 SOTA
-
有 NN(nearest neighbor)后能简化对数据增强的依赖(SimCLR 依赖数据增强的复杂组合),只需要裁剪 ImageNet 就能达到 73.3%
左图是 NNCLR 结构,右图是 SimCLR 结构
Approach
support set Q Q Q
support set 是本文最核心的贡献点,主要作用体现在存储与
z
i
z_i
zi 最近邻的向量 embedding,用于构造正样本;
更新方式是按队列形式先进先出,每一次迭代训练结束后,取训练步中的 bs = n 个 embedding,放在队列的最后并抛弃前 n 个 embedding;同时 support set 非常大,能近似估计整个数据集在向量空间中的 embedding. (意思就是 support set 足够大, queue size: 98304, 大到能为每一张图片都找到相似 emb)
损失函数 NNCLR loss vs. SimCLR loss
左图是 NNCLR 的损失函数,右图是 SimCLR 的损失函数 InfoNCE。不论是 NNCLR 还是 InfoNCE,在计算 cross entropy 之前都要做 L2-norm。此外,公式都是针对一张图片的损失函数,若要计算一个 minibatch 中 N 张图片的总损失函数:求和再求平均。
NNCLR 的损失函数与 SimCLR 的类似,是一张图片 aug 后的两张图片,在一张 support set 中找到最近邻(也就是公式(3) 中的 NN
(
z
i
,
Q
)
(z_i, Q)
(zi,Q)),另一张保留(也就是公式(3) 中的
z
i
+
z_i^+
zi+ )计算 InfoNCE. 具体流程参考下图
Experiment
- 训练:
数据集:ImageNet;1000 epoch;warm up epoch: 10
LARS optimizer; weight decay 10−6
τ 0.1; queue size 98304; lr 0.3
- 线性分类:
数据集:ImageNet 线性分类;frozen 2048-d;
LARS optimizer; Nesterov momentum 0.9
batch size 4096; lr 1