自监督学习(Self-Supervised Learning)
自监督学习(Self-Supervised Learning)
Self-Supervised Learning.
自监督学习(Self-Supervised Learning) 是一种无监督表示学习方法,旨在根据无标签数据集中的一部分信息预测剩余的信息,并以有监督的方式来训练该数据集。
自监督学习的优势包括:
- 能够充分利用大型无标签数据集,利用数据集本身以较低成本构造大量标签;
- 能够学习携带语义或结构信息的数据特征表示,从而有益于下游任务。
自监督学习已被广泛应用在自然语言处理任务中,比如语言模型默认的预训练任务就是根据过去的序列预测下一个单词。本文主要关注计算机视觉领域的自监督学习方法,即如何构造适用于图像数据集的自监督任务,包括:
- 前置任务(pretext task) :通过从数据集中自动构造伪标签而设计的对目标任务有帮助的辅助任务,如Exemplar-CNN , Context Prediction , Jigsaw Puzzle , Image Colorization , Learning to Count , Image Rotation , Evolving Loss , Jigsaw Clustering 。
- 对比学习(contrastive learning) :
- 掩码图像建模(masked image modeling) :
⭐扩展阅读:
1. 基于前置任务的自监督学习方法
前置任务(pretext task) 也叫代理任务(surrogate task) ,是指通过从数据集中自动构造伪标签而设计的对目标任务有帮助的辅助任务。
⚪ Exemplar-CNN
Exemplar-CNN 从图像数据集的梯度较大区域(通常覆盖边缘并包含目标的一部分)中采样32 \times 32大小的图像块;对每一个图像块应用不同的随机图像增强,同一个图像块的增强样本属于同一个代理类别;自监督学习的前置任务旨在区分不同的代理类别。

⚪ Context Prediction
随机在图像中选取一个图像块;然后考虑以该图像块为中心的3\times 3网格,随机选择其8个邻域图像块中的一个;则自监督学习的前置任务是预测后者属于哪个邻域的八分类任务。

⚪ Jigsaw Puzzle
随机打乱图像中的九个图像块,通过共享权重的模型分别处理每一个图像块,并根据预定义的排列集合输出图像块排列的索引概率,则自监督学习的前置任务是一种多分类任务。

⚪ Image Colorization
着色 是指把输入灰度图像转化为彩色图像,即将灰度图像映射到量化颜色值输出的分布上。彩色图像设置在Lab* 颜色空间,其中取值0-100的整数值 L 匹配人眼对亮度的感知, ab 值控制不同的颜色取值,量化为313种颜色对。则自监督学习的前置任务构造为在量化颜色值上预测概率分布的交叉熵损失。

⚪ Learning to Count
把图像的特征看作一种标量属性,如果把一幅图像划分成2\times 2的图像块,则四个图像块中特征的数量之和应该与原始图像的特征数量相同。把模型看作特征计数器\phi(\cdot),对于输入图像x定义2\times下采样操作D(\cdot)和2\times 2图像块划分操作T_i(\cdot),i=1,2,3,4,则自监督学习的前置任务定义为如下目标函数:
\mathcal{L} = ||\phi(D \circ x) - \sum_{i=1}^4 \phi(T_i \circ x)||_2^2 + \max(0,c-||\phi(D \circ y) - \sum_{i=1}^4 \phi(T_i \circ x)||_2^2)

⚪ Image Rotation
对输入图像随机地旋转四种不同的角度:,则自监督学习的前置任务是预测图像旋转哪种角度的四分类任务。

⚪ Evolving Loss
本文提出了一种用于视频表示学习的多模态多任务框架。该方法处理四种数据模态:RGB 、光流图像、灰度图像和音频;对每种模态设置七种自监督学习任务;并且构建其他模态网络对处理RGB 网络的数据蒸馏。

⚪ Jigsaw Clustering
Jigsaw Clustering 把一批图像拆分成m\times m的图像块,打乱后构成一批新的图像,并通过卷积网络提取每个图像块的特征。则自监督学习的前置任务包括:聚类损失:对于每一个图像块特征z_i,属于同一个原始图像的特征z_j为正样本,其余特征为负样本;定位损失:每个图像块的位置可以构造一个mm分类问题。

2. 基于对比学习的自监督学习方法
对比学习(Contrastive Learning) 旨在学习一个特征嵌入空间,使得相似的样本对(正样本对)彼此靠近,不相似的样本对(负样本对)相互远离。在无监督形式的对比学习中,可以通过数据增强 等方法构造样本对,从而实现有意义的特征表示学习。
(1)对比损失函数
对比学习中的损失函数可以追溯到监督学习中的深度度量学习,通过给定类别标签构造正负样本对,最小化正样本对(x,x^+)的嵌入距离,最大化负样本对(x,x^-)的嵌入距离。
⚪ Noise Contrastive Estimation (NCE)
噪声对比估计 是一种统计模型的参数估计方法,其想法是运行逻辑回归来区分目标样本x和噪声。逻辑回归模型f(\cdot)通过Sigmoid 激活建模属于目标而不是噪声的概率,进而建立二元交叉熵损失:
\mathcal{L}_{NCE} = - \Bbb{E}_{x \text{~~} p_{\text{data}}} [\log f(x)] - \Bbb{E}_{\tilde{x} \text{~~} p_{\text{noise}}} [\log(1-f(\tilde{x}))]
⚪ Contrastive Predictive Coding (CPC)
对比预测编码 把二元NCE 损失扩展为多元InfoNCE 损失。给定上下文向量c,正样本通过p(x|c)构造,N-1个负样本通过p(x)构造;使用类别交叉熵损失区分正样本和噪声样本:
\begin{aligned} \mathcal{L}_{InfoNCE} &= - \Bbb{E}_{x \text{~~} p_{\text{data}}} [\log\frac{f(x,c)}{\sum_{x' \text{~~} p_{\text{data}}} f(x',c)}] \ &= - \Bbb{E}_{x,x^+,{x^-_i}_{i=1}^N} [\log\frac{e^{f(x)^Tf(x^+)}}{e^{f(x)^Tf(x^+)}+\sum_{i=1}^N e^{f(x)^Tf(x^-_i)}}] \end{aligned}
⚪ CPC v2
把InfoNCE 应用到图像数据集中,把输入图像x的每个图像块压缩为潜在表示z_{i,j},从中构造上下文特征c_{i,j}=g_{\phi}(z_{\leq i,\leq j}),并进一步预测潜在表示\hat{z}_{i+k,j} = W_kc_{i,j}。
\begin{aligned} \mathcal{L}_N = - \sum_{i,j,k} \log\frac{\exp(\hat{z}_{i+k,j}^Tz_{i+k,j})}{\exp(\hat{z}_{i+k,j}^Tz_{i+k,j}) + \sum_l \exp(\hat{z}_{i+k,j}^Tz_{l})} \end{aligned}
⚪ Alignment and Uniformity
对比学习的损失函数具有两种性质:对齐性(Alignment) 和一致性(Uniformity) 。对齐性用于衡量正样本对之间的相似程度;一致性用于衡量归一化的特征在超球面上分布的均匀性。
\begin{aligned} \mathcal{L}_{align}(f;\alpha) &= \Bbb{E}_{(x,y)\text{~~}p_{pos}} [||f(x)-f(y)||_2^{\alpha}] \ \mathcal{L}_{uniform}(f;t) &= \log \Bbb{E}_{(x,y)\text{~~}p_{data}} [e^{-t||f(x)-f(y)||_2^2}] \end{aligned}
⚪ Debiased Contrastive Loss
由于样本的真实标签是未知的,因此负样本可能采样到假阴性样本。在构造对比损失时,对负样本项进行偏差修正:
g(x,{u_i}_{i=1}^N,{v_i}_{i=1}^M) = \max(\frac{1}{\eta^-}(\frac{1}{N}\sum_{i=1}^N \exp(f(x)^Tf(u_i))-\frac{\eta^+}{M}\sum_{i=1}^M \exp(f(x)^Tf(v_i))),\exp(-1/\tau)) \ \mathcal{L}_{unbiased} = \Bbb{E}_{x,{u_i}_{i=1}^N\text{~}p;x^+,{v_i}_{i=1}^M\text{~}p_x^+} [-\log \frac{\exp(f(x)^Tf(x^+))}{\exp(f(x)^Tf(x^+))+Ng(x,{u_i}_{i=1}^N,{v_i}_{i=1}^M)}]
⚪ Hard Negative Samples
对对比损失中的负样本对项进行加权,权重正比于负样本与anchor 样本的相似度,设置为:
⚪ FlatNCE
对比学习损失在批量较小时效果较差的原因之一是损失和梯度计算的浮点误差。把对比损失修改为:
\begin{aligned} \mathcal{L}_{FlatNCE} &= - \Bbb{E}_{x,x^+,{x^-_i}_{i=1}^N} [\log\frac{e^{f(x)^Tf(x^+)}}{\sum_{i=1}^N e^{f(x)^Tf(x^-_i)}}] \end{aligned}
(2)并行数据增强 Parallel Augmentation
基于并行数据增强 的对比学习方法为anchor 样本同时生成两个数据增强样本,并使得它们共享相同的特征表示。
⚪ Invariant and Spreading Instance Feature (InvaSpread)
InvaSpread 对于一批样本进行数据增强,把样本x的增强样本视为正样本,其余所有样本视为负样本;正样本特征应具有不变性,负样本特征应尽可能地分开。
\mathcal{L}_{\text{InvaSpread}} = -\sum_i \log \frac{\exp(f_i^T\hat{f}_i/\tau)}{\sum_{k=1}^N\exp(f_k^T\hat{f}_i/\tau)}-\sum_i \sum_{j\neq i} \log(1- \frac{\exp(f_i^Tf_j/\tau)}{\sum_{k=1}^N\exp(f_k^Tf_j/\tau)})

⚪ Simple Framework for Contrastive Learning of Visual Representation (SimCLR)
SimCLR 随机采样N个数据样本,对每个样本应用两次同一类的不同数据增强,构造2N个增强样本;对于任意样本,为正样本,其余2(N-1)个样本为负样本。通过编码网络f(\cdot)和映射层g(\cdot)提取特征表示,并构造对比损失:
\mathcal{L}^{(i,j)}_{\text{SimCLR}} = -\log \frac{\exp(\text{sim}(z_i,z_j)/\tau)}{\sum_{k=1,...,2N;k\neq i}\exp(\text{sim}(z_i,z_k)/\tau)}

⚪ SimCLRv2
SimCLRv2 在SimCLR 的基础上采用更大的卷积网络和更深的映射头,并通过微调和数据蒸馏实现半监督学习:

⚪ Bootstrap your own latent (BYOL)
BYOL 没有构建负样本对,而是使用参数为\theta的在线网络和参数为\xi的目标网络分别从图像x的两个增强版本中提取特征z,z',根据z预测z'(或交换顺序后根据z'预测z)。损失函数设置为归一化特征的均方误差损失,更新参数\theta,参数\xi是参数\theta的滑动平均:。
\begin{aligned} \mathcal{L}_{\text{BYOL}} \propto -2(\frac{

⚪ Simple Siamese Representation Learning (SimSiam)
SimSiam 使用孪生网络f从图像x的两个增强版本x_1,x_2中提取特征z_1,z_2,并使用预测头h根据一个特征预测另一个特征。损失函数设置为负余弦相似度:

⚪ Swapping Assignments between multiple Views (SwAV)
SwAV 使用样本特征和预定义的K个原型向量(聚类中心) 进行对比学习。给定两个数据样本x_t,x_s,构造特征向量z_t,z_s,并进一步构造编码q_t,q_s。则损失函数定义为聚类预测和编码之间的交叉熵:
\mathcal{L}_{\text{SwAV}} = -\sum_k q_s^{(k)} \log \frac{\exp(z_t^Tc_k/ \tau)}{\sum_{k'} \exp(z_t^Tc_{k'}/ \tau)} -\sum_k q_t^{(k)} \log \frac{\exp(z_s^Tc_k/ \tau)}{\sum_{k'} \exp(z_s^Tc_{k'}/ \tau)}

⚪ Pixel-level Contrastive Learning (PixContrast)
PixContrast 是一种像素级的对比学习方法。对于一幅图像中的目标,分别选取两个子图像,则两个图像中对应同一个目标位置的像素可以看作正样本对。

⚪ Barlow Twins
Barlow Twins 把数据样本x的两个增强版本x^A,x^B喂入同一个神经网络以提取特征表示z^A,z^B,并使得两组输出特征的互相关矩阵接近单位矩阵。
\mathcal{L}_{\text{BT}} = \sum_i (1-\mathcal{C}_{ii})^2 + \lambda \sum_i \sum_{j\neq i} \mathcal{C}_{ij}^2 , \quad \mathcal{C}_{ij} = \frac{\sum_bz^A_{b,i}z^B_{b,j}}{\sqrt{\sum_b(z_{b,i}^A)^2}\sqrt{\sum_b(z^B_{b,j})^2}}

⚪ Self-distillation with no labels (DINO)
DINO 使用学生网络f_s和滑动平均更新的教师网络f_t从图像x的两个增强版本x_1,x_2中提取特征f_s(x_1),f_t(x_2)。为教师网络的预测特征引入centering 操作,然后把特征f_s(x_1),f_t(x_2)通过softmax 函数映射为概率分布。则损失函数构建为两个概率分布的交叉熵:

(3)存储体 Memory Bank
基于存储体(Memory Bank) 的对比学习方法把所有样本的特征向量存储在内存中,以减小计算开销。
⚪ Instance-level Discrimination (InstDisc)
InstDisc 把每一个数据样本看作一个类别,把样本的特征向量存储在Memory Bank 中。每次更新时从Memory Bank 中采样负样本,采用NCE 的形式区分不同样本类别:
\begin{aligned} \mathcal{L}_{InstDisc} = &\- \Bbb{E}_{p_{\text{data}}} [\log h(i,v_i^{(t-1)})-\lambda ||v_i^{(t)}-v_i^{(t-1)}||_2^2] \ & \- M \cdot \Bbb{E}_{P_N} [\log(1-h(i,v'^{(t-1)}))] \end{aligned}

⚪ Momentum Contrast (MoCo)
MoCo 通过编码器f_q(\cdot)构造查询样本x_q的查询表示q=f_q(x_q),通过滑动平均更新的矩编码器f_k(\cdot)构造键表示k_i=f_k(x_k^i),并维持一个存储键表示的先入先出队列。
\mathcal{L}_{\text{MoCo}} = -\log \frac{\exp(q \cdot k^+/\tau)}{\sum_{i=0}^{N}\exp(q \cdot k_i/\tau)}

⚪ MoCo v2
MoCo v2 在MoCo 的基础上引入了映射头、采用更多数据增强、余弦学习率策略和更长的训练轮数。
⚪ MoCo v3
MoCo v3 把矩对比方法应用到视觉Transformer 的自监督训练中,没有采取MoCo 中的队列设计,而是根据每批样本构造正负样本对,并在编码器后引入预测头。
给定一批样本x,分别做两次数据增强得到x_1,x_2,通过编码器构造q_1,q_2,通过矩编码器构造k_1,k_2。则对比损失对称地构造为:
\mathcal{L}_{\text{MoCov3}} = -\log \frac{\exp(q_1 \cdot k_2^+/\tau)}{\sum_{i=0}^{N}\exp(q_1 \cdot k_2^i/\tau)}-\log \frac{\exp(q_2 \cdot k_1^+/\tau)}{\sum_{i=0}^{N}\exp(q_2 \cdot k_1^i/\tau)}
(4)多模态 Multi-Modality
⚪ Contrastive Multiview Coding (CMC)
CMC 把来自不同传感器的多模态数据之间视为正样本,对于样本x的M种不同的模态,可构造任意两种模态之间的对比损失:
\mathcal{L}^{(i,j)}_{\text{CMC}} = -\log \frac{\exp(f(v_i)^Tf(v_j)/\tau)}{\sum_{k}\exp(f(v_i)^Tf(v_j^k)/\tau)} -\log \frac{\exp(f(v_j)^Tf(v_i)/\tau)}{\sum_{k}\exp(f(v_j)^Tf(v_i^k)/\tau)}

⚪ Contrastive Language-Image Pre-training (CLIP)
CLIP 方法用于在图像和文本数据集中进行匹配。给定N个图像-文本对,首先计算任意一个图像和文本之间的余弦相似度矩阵,尺寸为N \times N;通过交叉熵损失使得匹配的N个图像-文本对的相似度最大,其余N(N-1)个相似度最小。

(5)应用 Applications
⚪ Contrastive Unsupervised Representations for Reinforcement Learning (CURL)
CURL 把对比学习应用到强化学习领域。它采用MoCo 方法学习强化学习任务的视觉表示,通过随机裁剪构造观测o的两个数据增强版本o_q,o_k。

⚪ Contrastive Unpaired Translation (CUT)
CUT 是一种基于对比学习的图像到图像翻译方法。它构造输入图像x和生成图像\hat{y}特征的PatchNCE 损失:特征的每个像素位置对应原始图像的一个图像块;则两个相同位置的特征向量为正样本对,其余位置的特征向量为负样本。

⚪ Background Augmentation
Background Augmentation 是一种增强对比学习的性能表现的数据增强策略。使用显著性图生成方法提取图像的前景区域,并调整图像的背景区域。

3. 基于掩码图像建模的自监督学习方法
⭐ 参考文献
- Self-Supervised Representation Learning(Lil'Log)一篇介绍自监督学习的博客。
- Awesome Self-Supervised Learning:(github) A curated list of awesome self-supervised methods.
- An Overview of Deep Semi-Supervised Learning:(arXiv2006)一篇深度半监督学习的综述。
- Discriminative Unsupervised Feature Learning with Exemplar Convolutional Neural Networks:(arXiv1406)通过Exemplar-CNN实现判别无监督特征学习。
- Unsupervised Visual Representation Learning by Context Prediction:(arXiv1505)通过上下文预测实现无监督视觉表示学习。
- Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles:(arXiv1603)通过解决拼图问题实现无监督视觉表示学习。
- Colorful Image Colorization:(arXiv1603)通过彩色图像着色实现无监督特征学习。
- Representation Learning by Learning to Count:(arXiv1708)通过学习计数实现无监督表示学习。
- Unsupervised Representation Learning by Predicting Image Rotations:(arXiv1803)通过预测图像旋转角度实现无监督表示学习。
- Unsupervised Feature Learning via Non-Parametric Instance-level Discrimination:(arXiv1805)通过非参数化实例级判别实现无监督特征学习。
- Representation Learning with Contrastive Predictive Coding:(arXiv1807)通过对比预测编码进行表示学习。
- Unsupervised Embedding Learning via Invariant and Spreading Instance Feature:(arXiv1904)通过不变和扩散的实例特征实现无监督嵌入学习。
- Data-Efficient Image Recognition with Contrastive Predictive Coding:(arXiv1905)通过对比预测编码实现数据高效的图像识别。
- Contrastive Multiview Coding:(arXiv1906)对比多视角编码。
- Momentum Contrast for Unsupervised Visual Representation Learning:(arXiv1911)MoCo:无监督视觉表示学习的矩对比。
- Evolving Losses for Unsupervised Video Representation Learning:(arXiv2002)无监督视频表示学习的进化损失。
- A Simple Framework for Contrastive Learning of Visual Representations:(arXiv2002)SimCLR:一种视觉对比表示学习的简单框架。
- Improved Baselines with Momentum Contrastive Learning:(arXiv2003)MoCo v2:改进矩对比学习。
- CURL: Contrastive Unsupervised Representations for Reinforcement Learning:(arXiv2004)CURL:强化学习的对比无监督表示。
- Understanding Contrastive Representation Learning through Alignment and Uniformity on the Hypersphere:(arXiv2005)通过超球面上的对齐和一致性理解对比表示学习。
- Big Self-Supervised Models are Strong Semi-Supervised Learners:(arXiv2006)SimCLRv2:自监督大模型是强半监督学习器。
- Bootstrap your own latent: A new approach to self-supervised Learning:(arXiv2006)BYOL:通过在隐空间应用自举法实现自监督学习。
- Unsupervised Learning of Visual Features by Contrasting Cluster Assignments:(arXiv2006)SwAV:通过对比聚类指派实现无监督视觉特征学习。
- Debiased Contrastive Learning:(arXiv2007)偏差修正的对比学习。
- Contrastive Learning with Hard Negative Samples:(arXiv2010)使用难例负样本进行对比学习。
- Exploring Simple Siamese Representation Learning:(arXiv2006)SimSiam:探索简单的孪生表示学习。
- Contrastive Learning for Unpaired Image-to-Image Translation:(arXiv2007)无配对数据图像到图像翻译中的对比学习。
- Propagate Yourself: Exploring Pixel-Level Consistency for Unsupervised Visual Representation Learning:(arXiv2011)探索无监督视觉表示学习中的像素级一致性。
- Barlow Twins: Self-Supervised Learning via Redundancy Reduction:(arXiv2103)Barlow Twins:通过冗余度消除实现自监督学习。
- Learning Transferable Visual Models From Natural Language Supervision:(arXiv2103)CLIP: 对比语言图像预训练。
- Characterizing and Improving the Robustness of Self-Supervised Learning through Background Augmentations:(arXiv2103)通过背景增强改进自监督学习的鲁棒性。
- An Empirical Study of Training Self-Supervised Vision Transformers:(arXiv2104)MoCo v3:训练自监督视觉Transformer的经验性研究。
- Emerging Properties in Self-Supervised Vision Transformers:(arXiv2104)DINO:自监督视觉Transformer的新特性。
- Jigsaw Clustering for Unsupervised Visual Representation Learning:(arXiv2104)无监督视觉表示学习的拼图聚类方法。
- Simpler, Faster, Stronger: Breaking The log-K Curse On Contrastive Learners With FlatNCE:(arXiv2107)FlatNCE: 避免浮点数误差的小批量对比学习损失函数。
