Neighborhood Contrastive Learning for Novel Class Discovery (CVPR 2021)

Neighborhood Contrastive Learning for Novel Class Discovery (CVPR 2021)

摘要

在本文中,我们解决了新类发现(NCD)的问题,即给定一个具有已知类的有标签数据集,在一组未标记的样本中揭示新的类。我们利用ncd的特性构建了一个新的框架,称为邻域对比学习(NCL),学习对聚类性能至关重要的判别表示。我们的贡献是双重的。首先,我们发现在标记集上训练的特征提取器会生成表示,其中一个通用查询样本和它的邻居可能共享同一个类。我们利用这一观察结果,通过对比学习来检索和聚集伪正对,从而鼓励模型学习更多有区别的表示。其次,我们注意到大多数实例都很容易被网络识别,对对比损失的贡献较小。为了克服这一问题,我们提出了通过在特征空间中混合带标签和无标签样本来产生困难反例的方法。

Baseline for NCD

在baseline中,我们采用和之前工作相似的三阶段学习流程。第一,通过自监督学习,我们同时在有标签数据集和无标签数据集上学习一个没有标签参与的图像表征模型,这种方式已经被证明可以很好的在网络模型的前几层提取低级特征。
接着,无有标签数据集学习高级特征。给定一个样本和对应的标签 ( x , y ) ∈ D l (x,y) \in D^l (x,y)Dl,我们用交叉熵优化该模型:
ℓ c e = − 1 C l ∑ i = 1 C l y i log ⁡ ϕ i l ( Ω ( x ) ) \ell_{c e}=-\frac{1}{C^{l}} \sum_{i=1}^{C^{l}} y_{i} \log \phi_{i}^{l}(\Omega(x)) ce=Cl1i=1Clyilogϕil(Ω(x))
最后,我们简化聚类发现的步骤,不再采用统计排名的方式估计两两伪标签,而是采用特征之间的余弦相似度。我们发现,这种修正方式在我们的方法里可以产生相似结果,但是更加高效以及容易实现。具体来说,给定一对从 D u D^u Du中采样的图像 ( x i u , x j u ) (x^u_i,x^u_j) (xiu,xju),我们提取特征 ( z i u , z j u ) (z^u_i,z^u_j) (ziu,zju)并计算余弦相似度 δ ( z i u , z j u ) = z i u ⊤ z j u / ∥ z i u ∥ ∥ z j u ∥ \delta\left(z_{i}^{u}, z_{j}^{u}\right)=z_{i}^{u \top} z_{j}^{u} /\left\|z_{i}^{u}\right\|\left\|z_{j}^{u}\right\| δ(ziu,zju)=ziuzju/ziu zju ,两两伪标签可以通过以下方式分配:
y ^ i , j = 1 [ δ ( z i u , z j u ) ≥ λ ] \hat{y}_{i, j}=\mathbb{1}\left[\delta\left(z_{i}^{u}, z_{j}^{u}\right) \geq \lambda\right] y^i,j=1[δ(ziu,zju)λ]
其中 λ \lambda λ是表示两个样本分配到同一潜在类别的最小相似度阈值。接着,两两伪标签与无标签头的输出结果之间的内积比较 p i , j = ϕ u ( z i u ) T ϕ u ( z j u ) p_{i,j}=\phi_u(z^u_i)^T\phi_u(z^u_j) pi,j=ϕu(ziu)Tϕu(zju)。该模型可以用二元交叉熵优化:
ℓ b c e = − y ^ i , j log ⁡ ( p i , j ) − ( 1 − y ^ i , j ) log ⁡ ( 1 − p i , j ) \ell_{b c e}=-\hat{y}_{i, j} \log \left(p_{i, j}\right)-\left(1-\hat{y}_{i, j}\right) \log \left(1-p_{i, j}\right) bce=y^i,jlog(pi,j)(1y^i,j)log(1pi,j)
我们baselin的最后一个构建块是一致性损失,它迫使网络对图像 x i x^i xi及其相关视图 x ^ i \hat{x}^i x^i产生类似的预测。这对于无标签数据尤其重要。尽管如此,我们发现一致性对标注和未标注的样本都有帮助。这一步采用均方误差:
ℓ m s e = 1 C l ∑ i = 1 C l ( ϕ i l ( z l ) − ϕ i l ( z ^ l ) ) 2 + 1 C u ∑ j = 1 C u ( ϕ j u ( z u ) − ϕ j u ( z ^ u ) ) 2 . \begin{aligned}\ell_{m s e}= & \frac{1}{C^{l}} \sum_{i=1}^{C^{l}}\left(\phi_{i}^{l}\left(z^{l}\right)-\phi_{i}^{l}\left(\hat{z}^{l}\right)\right)^{2}+ \\& \frac{1}{C^{u}} \sum_{j=1}^{C^{u}}\left(\phi_{j}^{u}\left(z^{u}\right)-\phi_{j}^{u}\left(\hat{z}^{u}\right)\right)^{2} .\end{aligned} mse=Cl1i=1Cl(ϕil(zl)ϕil(z^l))2+Cu1j=1Cu(ϕju(zu)ϕju(z^u))2.
总体损失表示如下:
ℓ b a s e = ℓ c e + ℓ b c e + ω ( t ) ℓ m s e \ell_{b a s e}=\ell_{c e}+\ell_{b c e}+\omega(t) \ell_{m s e} base=ce+bce+ω(t)mse
在这里插入图片描述

邻里对比学习法(Neighborhood Contrastive Learning, NCL)

给定一系列随机图像变换方式,我们保证一个无标签样本的两个相关视图 ( x u , x ^ u ) (x^u,\hat{x}^u) (xu,x^u)被当作正对(positive pair)。接着,我们从视图中用模型提取特征 ( z u , z ^ u ) (z^u,\hat{z}^u) (zu,z^u),在大小为 B B B的批量数据上执行相同的操作。维持一个查询列表 M u M^u Mu存储过往训练过程中的特征,这些特征最初被认为是不是同一类的,用 z ˉ u \bar{z}^u zˉu表示。正对的对比损失写作:
ℓ ( z u , z ^ u ) = − log ⁡ e δ ( z u , z ^ u ) / τ e δ ( z u , z ^ u ) / τ + ∑ m = 1 ∣ M u ∣ e δ ( z u , z ˉ m u ) / τ \ell_{\left(z^{u}, \hat{z}^{u}\right)}=-\log \frac{e^{\delta\left(z^{u}, \hat{z}^{u}\right) / \tau}}{e^{\delta\left(z^{u}, \hat{z}^{u}\right) / \tau}+\sum_{m=1}^{\left|M^{u}\right|} e^{\delta\left(z^{u}, \bar{z}_{m}^{u}\right) / \tau}} (zu,z^u)=logeδ(zu,z^u)/τ+m=1Mueδ(zu,zˉmu)/τeδ(zu,z^u)/τ
其中 δ ( ⋅ , ⋅ ) \delta(\cdot, \cdot) δ(,)表示余弦相似度, τ \tau τ是控制分布尺度的温度参数。
不幸的是,对比学习一个出名的缺点就是即使样本属于同一类也会被认为是不同类,由于缺少标签的信息。然而,直观地说,如果正对和负对对应于所期望的潜在类,则表示的质量应该是有益的。一个缓解该问题方式就是模型自身生成伪正对的样本,例如,考虑将表征向量 z u z^u zu的邻居作为同一类的样本。选择合理的伪正对是一项艰巨的任务,特别是在训练开始时,当表征的质量较差。然而,在NCD中,我们可以利用标记的数据集 D l D^l Dl来引导表示,然后使用它们来推断 D u D^u Du中无标签数据之间的关系。
准确来说就是,给定baseline中前两个阶段预寻训练的网络 Ω \Omega Ω。我们可以在查询列表中选择和查询向量 z u z^u zu最相近的 t o p − k top-k topk个相似特征:
ρ k = argtop ⁡ z ˉ u ( { δ ( z u , z ˉ i u ) ∣ ∀ i ∈ { 1 , … , ∣ M u ∣ } } ) \rho_{k}=\underset{\bar{z}^{u}}{\operatorname{argtop}}\left(\left\{\delta\left(z^{u}, \bar{z}_{i}^{u}\right) \mid \forall i \in\left\{1, \ldots,\left|M^{u}\right|\right\}\right\}\right) ρk=zˉuargtop({δ(zu,zˉiu)i{1,,Mu}})
假设 ρ k \rho_{k} ρk中的样本都是假负(实际和 z u z^u zu属于同一类),我们可以将它们视为伪正,并将它们在对比损失中的贡献写如下:
ℓ ( z u , ρ k ) = − 1 k ∑ z ˉ i u ∈ ρ k log ⁡ e δ ( z u , z ˉ i u ) / τ e δ ( z u , z ^ u ) / τ + ∑ m = 1 ∣ M u ∣ e δ ( z u , z ˉ m u ) / τ \ell_{\left(z^{u}, \rho_{k}\right)}=-\frac{1}{k} \sum_{\bar{z}_{i}^{u} \in \rho_{k}} \log \frac{e^{\delta\left(z^{u}, \bar{z}_{i}^{u}\right) / \tau}}{e^{\delta\left(z^{u}, \hat{z}^{u}\right) / \tau}+\sum_{m=1}^{\left|M^{u}\right|} e^{\delta\left(z^{u}, \bar{z}_{m}^{u}\right) / \tau}} (zu,ρk)=k1zˉiuρklogeδ(zu,z^u)/τ+m=1Mueδ(zu,zˉmu)/τeδ(zu,zˉiu)/τ
最后,总体损失写作:
ℓ n c l = α ℓ ( z u , z ^ u ) + ( 1 − α ) ℓ ( z u , ρ k ) \ell_{n c l}=\alpha \ell_{\left(z^{u}, \hat{z}^{u}\right)}+(1-\alpha) \ell_{\left(z^{u}, \rho_{k}\right)} ncl=α(zu,z^u)+(1α)(zu,ρk)
其中, α \alpha α控制两个部分的权重。

有监督对比学习

在有标签数据 D l D^l Dl中,我们不需要用网络去挖掘为伪正样本,对于一个样本 x i l x^l_i xil对应特征 z i l z^l_i zil,我们可以直接用真实标签检索查询列表 M l M^l Ml取出正例特征:
ρ = { z ˉ j l ∈ M l : y i = y j } ∪ z ^ i l \rho=\left\{\bar{z}_{j}^{l} \in M^{l}: y_{i}=y_{j}\right\} \cup \hat{z}_{i}^{l} ρ={zˉjlMl:yi=yj}z^il
注意, ρ \rho ρ包含相关视图 x ^ i L \hat{x}^L_i x^iL z ^ i L \hat{z}^L_i z^iL和属于同一类的其他样本的特征。利用这种监督方法,可以将邻域对比损失简化为监督对比损失:
ℓ s c l = − 1 ∣ ρ ∣ ∑ z j l ∈ ρ log ⁡ e δ ( z i l , z ˉ j l ) / τ e δ ( z i l , z ^ i l ) / τ + ∑ m = 1 ∣ M l ∣ e δ ( z i l , z ˉ m l ) / τ \ell_{s c l}=-\frac{1}{|\rho|} \sum_{z_{j}^{l} \in \rho} \log \frac{e^{\delta\left(z_{i}^{l}, \bar{z}_{j}^{l}\right) / \tau}}{e^{\delta\left(z_{i}^{l}, \hat{z}_{i}^{l}\right) / \tau}+\sum_{m=1}^{\left|M^{l}\right|} e^{\delta\left(z_{i}^{l}, \bar{z}_{m}^{l}\right) / \tau}} scl=ρ1zjlρlogeδ(zil,z^il)/τ+m=1Mleδ(zil,zˉml)/τeδ(zil,zˉjl)/τ

Hard Negative Genration

在这里插入图片描述

He等人证明了拥有一个极大内存覆盖大量负面样本对对比学习的重要性。最近有研究发现,负面样本和查询样本之间有极低的相似度。我们用实验证明了该现象在出现在我们将对比学习应用在NCD领域中时。我们发现从查询列表中移除最近的消极样本并不会影响性能,这表示这样的消极样本在训练过程中贡献极少。但是并不是我们想要的,这样会浪费内存和计算量。另一方面,自动选择困难的负面样本非常困难,因为我们并没有无标签数据中潜在类别的信息。因此我们可以选择积极样本。然而,在NCD中,我们假设有标签数据和无标签数据中的类别集合是不相交的。这要求一个集合的所有样本对另一个集合的样本是消极的的,反之亦然。受到使用图像/特征混合的正则化技术的进步的启发,我们使用这个概念,通过混合有标签和无标签的样本来生成困难的消极样本。

给定图像的一个视角 x u x^u xu属于无标签数据集,它在特征空间的表征是 z u z^u zu,,我们可以选择简单的负面样本通过查看队列中相似性最小的特征:
ε k = argtop ⁡ z ˉ i u ( { − δ ( z u , z ˉ i u ) ∣ ∀ i ∈ { 1 , … , ∣ M u ∣ } } ) \varepsilon_{k}=\underset{\bar{z}_{i}^{u}}{\operatorname{argtop}}\left(\left\{-\delta\left(z^{u}, \bar{z}_{i}^{u}\right) \mid \forall i \in\left\{1, \ldots,\left|M^{u}\right|\right\}\right\}\right) εk=zˉiuargtop({δ(zu,zˉiu)i{1,,Mu}})
注意相似性的负号。由于网络可以自信地从查询中区分这些样本,我们可以安全地假设它们很可能是真正的负面样本,即它们与查询不属于同一类。请注意,这与最近关于挖掘困难的负面样本的文献形成了对比,后者对困难的负面样本进行采样,从而引发了假的负面样本的问题。
让我们也考虑一个查询队列 M l M^l Ml,它包含从过去的训练步骤中存储的有标签样本。如上所述,根据定义,这些是关于 x u x^u xu的真的负面样本。我们的想法是,通过线性插值这两个集合的样本,我们可以产生新的,更有希望有信息的负面样本。在实践中,对于每个 z ˉ u ∈ ε k \bar{z}^{u} \in \varepsilon_{k} zˉuεk,我们随机抽样一个特征 z ˉ u ∈ M l \bar{z}^{u} \in M^l zˉuMl,并计算如下:
ζ = μ ⋅ z ˉ u + ( 1 − μ ) ⋅ z ˉ l \zeta=\mu \cdot \bar{z}^{u}+(1-\mu) \cdot \bar{z}^{l} ζ=μzˉu+(1μ)zˉl
其中, μ \mu μ是混合因子。通过遍历 ε k \varepsilon_{k} εk重复操作 N N N次,这样得到的混合消极样本 η \eta η包含 k × N k \times N k×N特征。接着,最苦难的负面样本用余弦相似度从 η \eta η中筛选出来:
η k = argtop ⁡ ζ i ( { δ ( z u , ζ i ) ∣ ∀ i ∈ { 1 , … , k × N } } ) \eta_{k}=\underset{\zeta_{i}}{\operatorname{argtop}}\left(\left\{\delta\left(z^{u}, \zeta_{i}\right) \mid \forall i \in\{1, \ldots, k \times N\}\right\}\right) ηk=ζiargtop({δ(zu,ζi)i{1,,k×N}})
困难的负面样本集合 η k \eta_{k} ηk有以下属性:

  1. 它们几乎就是真正的反例;
  2. 对网络来说,很难将它们和查询样本区分开。
    最后,我们将新生成的混合反例添加到查询列表 M u M^u Mu
    M u ′ = M u ∪ η k M^{u^{\prime}}=M^{u} \cup \eta_{k} Mu=Muηk
    然后将上述计算损失值的函数中的 M u M^{u} Mu替换成 M u ′ M^{u^{\prime}} Mu
    在这里插入图片描述

总体损失

考虑基线模型、无标签数据的邻域对比学习、有标签数据的监督对比学习、无标签数据的困难反例生成,我们模型的总体损失为:
ℓ a l l = ℓ b a s e + ℓ n c l + ℓ s c l \ell_{a l l}=\ell_{b a s e}+\ell_{n c l}+\ell_{s c l} all=base+ncl+scl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7982.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter之事务控制器实践

目录 前言 事务控制器 JMeter控制器添加路径: Generate parent sample 1、不勾选任何选项: 2、勾选【Generate parent sample】 3、Include duration of timer and pre-post processors in generated sample 小结 前言 在JMeter中,事…

Linux下GO IDE安装和配置(附快捷键)

目前,GoLand、VSCode 这些 IDE 都很优秀,但它们都是 Windows 系统下的 IDE。在 Linux 系统下我们可以选择将 Vim 配置成 Go IDE。熟练 Vim IDE 操作之后,开发效率不输 GoLand 和 VSCode。有多种方法可以配置一个 Vim IDE,这里我选…

基于免疫优化算法的物流配送中心选址规划研究(Matlab实现)

目录 1 概述 2 物流配送中心选址规划研究 3 Matlab代码 4 结果 1 概述 影响物流配送中心选址的因素有很多,精确选址优化问题亟待解决。通过充分考虑货物的配送时间,将免疫算法加入其中,介绍了物流配送选址模型的构建以及免疫算法实现的相关步骤,最后利用matlab软件进行分析,提出…

UE5.2 LyraDemo源码阅读笔记(二)

UE5.2 LyraDemo源码阅读笔记(二) 创建了关卡中的体验玩家Actor和7个体验玩法入口之后。 接下来操作关卡中的玩家与玩法入口交互,进入玩法入口,选择进入B_LyraFrontEnd_Experience玩法入口,也就是第3个入口。触发以下请…

web学习1--maven--项目管理工具

写在前面: 这学期搞主攻算法去了,web的知识都快忘了。开始复习学习了。 文章目录 maven介绍功能介绍maven安装jar包搜索仓库 pom文件项目介绍父工程依赖管理属性控制可选依赖构建 依赖管理依赖的传递排除依赖可选依赖 maven生命周期分模块开发模块聚合…

算法的时间复杂度

算法的时间复杂度 什么是时间复杂度 时间复杂度是衡量算法执行时间随输入规模增长而增长的度量标准。它描述了算法运行时间与问题规模之间的关系,用于评估算法的效率和性能。 通常情况下,时间复杂度表示为大O符号(O)&#xff0…

限时等待的互斥量

本文结束一种新的锁&#xff0c;称为 timed_mutex 代码如下&#xff1a; #include<iostream> #include<mutex> #include<thread> #include<string> #include<chrono>using namespace std;timed_mutex tmx;void fun1(int id, const string&a…

C/C++的发展历程和未来趋势

文章目录 C/C的起源C/C的应用C/C开发的工具C/C未来趋势 C/C的起源 C语言 C语言是一种通用的高级编程语言&#xff0c;由美国计算机科学家Dennis Ritchie在20世纪70年代初期开发出来。起初&#xff0c;C语言是作为操作系统UNIX的开发语言而创建的。C语言的设计目标是提供一种功…

基于Springboot+Vue的手机商城(源代码+数据库)081

基于SpringbootVue的手机商城(源代码数据库)081 一、系统介绍 本项目前后端分离&#xff08;该项目还有ssmvue版本&#xff09; 本系统分为管理员、用户两种角色 用户角色包含以下功能&#xff1a; 登录、注册、商品搜索、收藏、购物车、订单提交、评论、退款、收货地址管…

【C++】vector模拟实现

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f681; 个人主页&#xff1a;不 良 &#x1f525; 系列专栏&#xff1a;&#x1f6f8;C &#x1f6f9;Linux &#x1f4d5; 学习格言&#xff1a;博观而约取&#xff0…

比亚迪车载Android开发岗三面经历~

前言 首先&#xff0c;我想说一下我为什么会想去比亚迪这样的车企做车载Android开发。我是一名有5年经验的Android开发工程师&#xff0c;之前一直在互联网软件公司工作&#xff0c;做过移动端App和IoT产品的开发。但我一直对汽车领域很感兴趣&#xff0c;也希望自己的技术能应…

(并查集) 685. 冗余连接 II ——【Leetcode每日一题】

并查集基础 并查集&#xff08;Union-find Sets&#xff09;是一种非常精巧而实用的数据结构&#xff0c;它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的Kruskal算法和求最近公共祖先&#xff08;LCA&#xff09;等。 并查集的基本操作主…