Supervised Contrastive Learning论文笔记

Supervised Contrastive Learning

Motivation

  • 交叉熵损失是监督学习中应用最广泛的损失函数,度量两个分布(标签分布和经验回归分布)之间的KL散度,但是也存在对于有噪声的标签缺乏鲁棒性、可能存在差裕度(允许有余地的余度)导致泛化性能下降的问题。而大多数替代方案还不能很好地用于像ImageNet这样的大规模数据集。
  • 在对比学习中,核心思想是拉近某一个锚点与其正样本之间的距离,拉远锚点与该锚点其他负样本之间的距离,通常来说,一个锚点只有一个正样本,其他全视为负样本。

Contribution

  • 提出了一个新的扩展对比损失函数,允许每个锚点有多个正对。因此,将对比学习适应于完全监督的setting。

  • 作者通过梯度计算的角度说明了文中提出的loss可以更好地关注于 hard positives and negatives,从而获得更好的效果。
    Supervised Contrastive Learning论文笔记_第1张图片

Method

  1. 表征学习框架

    总的来说,有监督对比学习框架的结构类似于表征学习框架,由如下几个部分组成:

    1. 数据增强模块

      A ( ⋅ ) A(\cdot) A()的作用是将输入图像转换为随机增强的图像 x ˉ \bar x xˉ,对每张图像都生成两张增强的子图像,代表原始数据的不同视图。数据增强分为两个阶段:第一阶段是对数据进行随机裁剪,然后将其调整为原分辨率大小;第二阶段使用了三种不同的增强方法,具体包括:(1)自动增强,(2)随机增强,(3)Sim增强(按照顺序进行随机颜色失真和高斯模糊,并可能在序列最后进行额外的稀疏图像扭曲操作)。

    2. 编码器网络

      编码器网络 E ( ⋅ ) E(\cdot) E()的作用是将增强后的图像 x ˉ \bar x xˉ映射到表征空间,每对子图像输入到同一个编码器中得到一对表征向量,本文用的是ResNet50和ResNet200,最后使用池化层得到一个2048维的表征向量。表征层使用单位超球面进行正则化。

    3. 投影网络

      投影网络 P ( ⋅ ) P (\cdot) P()的作用是将表征向量映射成一个最终向量 z z z进行loss的计算,本文用的是只有一个隐藏层的多层感知器,输出维度为128。同样使用单位超球面进行正则化。在训练完成后,这个网络会被一个单一线性层取代。

  2. 对比损失

    本文的数据是带有标签的,采用mini batch的方法获取数据,首先从数据中随机采样 N N N个样本对,记为 { x k , y k } k = 1 , 2 , … , N {\left\{x_k , y_k\right\}}_{k = 1,2,\dots,N} {xk,yk}k=1,2,,N , y k y_k yk x k x_k xk的标签,之后进行数据增强获得 2 N 2N 2N个数据样本 { x ˉ k , y ˉ k } k = 1 , 2 , … , 2 N {\left\{\bar x_k , \bar y_k\right\}}_{k = 1,2,\dots,2N} {xˉk,yˉk}k=1,2,,2N,其中, x ˉ 2 k \bar x_{2k} xˉ2k x ˉ 2 k − 1 \bar x_{2k−1} xˉ2k1是分别用两种随机增强方法得到的数据对,在数据增强过程中,标签信息始终不会改变。

    1. 自监督对比损失

      本文的自监督对比损失与SimCLR的loss相类似,不过使用的是点积刻画样本之间的相似性,具体表达式如下:
      L s e l f = ∑ i ∈ I L i s e l f = − ∑ i ∈ I log ⁡ exp ⁡ ( z i ⋅ z j ( i ) / τ ) ∑ a ∈ A ( i ) exp ⁡ ( z i ⋅ z a / τ ) \mathcal{L}^{self}=\sum\limits_{i\in I}\mathcal{L}_i^{self}=-\sum\limits_{i\in I}\log\frac{\exp(z_i\cdot z_{j(i)}/\tau)}{\sum\limits_{a\in A(i)}\exp(z_i\cdot z_{a}/\tau)} Lself=iILiself=iIlogaA(i)exp(ziza/τ)exp(zizj(i)/τ)

      其中 z l = P r o j ( E n c ( x ˉ l ) ) \mathcal{z_l}=Proj(Enc(\bar x_l)) zl=Proj(Enc(xˉl))是表征学习得到的特征。 ⋅ \cdot 为计算内积操作。 A ( i ) A(i) A(i)为出了下标为i之外的其他所有样本组成的集合。 τ \tau τ是一个进行优化的温度参数。下标为 i i i对应anchor样本,下标为 j ( i ) j(i) j(i)对应数据扩充得到的正样本。其他的 2 N − 2 2N-2 2N2个样本为负样本。

    2. 有监督的对比损失

      有监督对比损失是对自监督对比损失的推广,从公式中很容易可以看出,有监督对比损失拓展了 x ˉ i \bar x_i xˉi正对的数量,将所有标签信息相同的子数据都视为正对,计算了 x ˉ i \bar x_i xˉi与其所有正对之间的相似性,之后进行加权平均。文中提出了两种方式计算损失。
      L o u t s u p = ∑ i ∈ I L o u t , i s e l f = ∑ i ∈ I − 1 ∣ P ( i ) ∣ ∑ p ∈ P ( i ) log ⁡ exp ⁡ ( z i ⋅ z p / τ ) ∑ a ∈ A ( i ) exp ⁡ ( z i ⋅ z a / τ ) \mathcal{L}^{sup}_{out}=\sum\limits_{i\in I}\mathcal{L}_{out,i}^{self}=\sum\limits_{i\in I}\frac{-1}{|P(i)|}\sum\limits_{p\in P(i)}\log\frac{\exp(z_i\cdot z_{p}/\tau)}{\sum\limits_{a\in A(i)}\exp(z_i\cdot z_{a}/\tau)} Loutsup=iILout,iself=iIP(i)1pP(i)logaA(i)exp(ziza/τ)exp(zizp/τ)

      L i n s u p = ∑ i ∈ I L i n , i s e l f = ∑ i ∈ I − log ⁡ { − 1 ∣ P ( i ) ∣ ∑ p ∈ P ( i ) exp ⁡ ( z i ⋅ z p / τ ) ∑ a ∈ A ( i ) exp ⁡ ( z i ⋅ z a / τ ) } \mathcal{L}^{sup}_{in}=\sum\limits_{i\in I}\mathcal{L}_{in,i}^{self}=\sum\limits_{i\in I}-\log\left\{\frac{-1}{|P(i)|}\sum\limits_{p\in P(i)}\frac{\exp(z_i\cdot z_{p}/\tau)}{\sum\limits_{a\in A(i)}\exp(z_i\cdot z_{a}/\tau)}\right\} Linsup=iILin,iself=iIlogP(i)1pP(i)aA(i)exp(ziza/τ)exp(zizp/τ)

      前者的求和操作在 log ⁡ \log log外部,而后者在内部。其中, P ( i ) ≡ { p ∈ A ( i ) : y ˉ p = y ˉ i } P(i)\equiv\left\{p\in A(i):\bar y_p=\bar y_i\right\} P(i){pA(i):yˉp=yˉi}代表所有与下标为i的样本label相同的样本集合(正样本集合), ∣ P ( i ) | |P(i)| P(i)为该集合的大小。

      相比自监督对比损失,两种方式都有如下特性:

      • 使用了大量正样本

        自监督学习仅仅将data augmentation得到的样本作为正样本,而在有监督的设置中,通过data augmentation得到的正样本以及与anchor标签一样的正样本都对公式中的分子有贡献。

      • 负样本越多,对比性越强

        保留了对于负样本的求和,噪声样本越多,对比的效果越好。

      • 具有发掘难正/负样本的内在能力

        这两个损失函数的梯度鼓励从hard positive和hard negative中学习。

      Experiments

      实验比较了他们的方法与其他使用交叉熵的有监督方法的Top-1与Top-5精度,同时对比了他们的架构使用交叉熵损失的表现,可以看到,综合来说他们的方法实现了最好的效果,同时,他们的架构在使用交叉熵损失时的表现就不是非常好,相对来说,他们的架构在改进loss的情况下,Top-1精度提升了3.8/2.8个点,Top-5精度提升了1/2.3个点。
      Supervised Contrastive Learning论文笔记_第2张图片

你可能感兴趣的:(人工智能,机器学习,人工智能,深度学习)