当前位置: 首页 > article >正文

《Partial-label learning with a guided Prototypical classifier》23年CVPR 文献速读

论文地址

1. 引言

本文介绍了一种用于部分标签学习(Partial-Label Learning, PLL)的新框架 PaPi(Partial-label learning with a guided Prototypical classifier),旨在提高在视觉任务中处理部分标签数据时的性能。部分标签学习是指在训练数据中,每个实例仅有一个包含未知真实标签的候选标签集合,而没有明确的真实标签。该框架通过改进表示学习,显著提升了PLL在图像分类任务中的性能,尤其是在高歧义水平和实例依赖歧义的情况下。

2. 背景知识

部分标签学习(PLL)是机器学习中的一个重要问题,它模拟了现实世界中常见的场景,即数据标注者可能无法准确判断实例的真实标签,而只能提供多个可能的候选标签。例如,在图像分类中,标注者可能难以区分“鹰”和“隼”,因此将两者都标记为可能的标签。PLL的目标是从这些带有歧义的标签中学习出准确的分类模型。

3. 研究方法

PaPi框架的核心思想是通过一个引导性的原型分类器来优化表示学习,从而提高类别间的区分能力。具体来说,PaPi框架包含以下几个关键部分:

3.1 原型对齐(Prototypical Alignment)

PaPi通过计算样本与类别原型之间的相似度分布,并将其与线性分类器预测的概率分布进行对齐,从而优化表示学习。具体而言,对于每个样本,PaPi计算其在低维空间中与各类别原型的距离,并通过softmax函数生成一个基于原型的相似度分布。与此同时,PaPi利用线性分类器的预测结果,通过后处理生成一个去歧义的概率分布。PaPi通过最小化这两个分布之间的KL散度来优化表示学习:

s i j l = exp ⁡ ( z i l ⋅ c j / τ ) ∑ k = 1 K exp ⁡ ( z i l ⋅ c k / τ ) , s_{i j}^{l} = \frac{\exp \left(z_{i}^{l} \cdot c_{j} / \tau\right)}{\sum_{k=1}^{K} \exp \left(z_{i}^{l} \cdot c_{k} / \tau\right)}, sijl=k=1Kexp(zilck/τ)exp(zilcj/τ),
其中, l ∈ { 1 , 2 } l \in \{1, 2\} l{1,2}表示不同的增强视图, τ \tau τ是温度参数, z i l z_{i}^{l} zil表示低维空间中的样本表示, c j c_{j} cj是类别原型,使用余弦相似度作为距离度量。

3.2 原型演化(Prototype Evolving)

PaPi采用移动平均的方式更新类别原型,使得原型能够更好地反映当前学习到的类别表示:

c k = γ c k + ( 1 − γ ) z j , if  j ∈ I k , c_{k} = \gamma c_{k} + (1 - \gamma)z_{j}, \quad \text{if } j \in I_{k}, ck=γck+(1γ)zj,if jIk,
其中, I k I_{k} Ik表示伪标签为类别 k k k的样本的索引集, γ \gamma γ是平衡因子。

3.3 标签去歧义(Label Disambiguation)

PaPi通过线性分类器的自教学(self-teaching)方式来逐步识别出真实的标签。在每个学习阶段,线性分类器都会根据当前的表示和原型来预测样本的标签,并将这些预测结果用于后续的学习。

3.4 数据增强(Data Augmentation)

PaPi采用了强弱两种数据增强策略,通过Mixup技术进一步增强模型的鲁棒性。Mixup生成新样本的方式为:

x ^ i = ϕ x i + ( 1 − ϕ ) x m ( i ) , \hat{x}_{i} = \phi x_{i} + (1 - \phi)x_{m(i)}, x^i=ϕxi+(1ϕ)xm(i),
其中, ϕ ∼ Beta ( α , α ) \phi \sim \text{Beta}(\alpha, \alpha) ϕBeta(α,α) α \alpha α是一个超参数, x i x_{i} xi x m ( i ) x_{m(i)} xm(i)分别是样本和从同一小批量中随机选取的另一样本。

4. 实验

作者在多个图像分类数据集上进行了广泛的实验,包括Fashion-MNIST、SVHN、CIFAR-10、CIFAR-100和Mini-Imagenet,并在均匀部分标签(uniform partial labels)和实例依赖部分标签(instance-dependent partial labels)两种生成方式下进行了测试。

4.1 关键结论
  1. 性能提升:PaPi在所有基准数据集上均显著优于现有的PLL方法,尤其是在高歧义水平(如 q = 0.7 q=0.7 q=0.7)和实例依赖歧义的情况下。例如,在CIFAR-100数据集上,当 q = 0.2 q=0.2 q=0.2时,PaPi比当前最先进的方法高出3.72%。

  2. 与监督学习的比较:PaPi在许多情况下与监督学习模型的性能相当接近,表明其在标签去歧义方面取得了显著的成功。即使在高歧义水平下,PaPi的性能下降也远小于其他基线方法。

  3. 表示学习的有效性:通过计算类内相似度和类间相似度,PaPi能够产生更紧密的类内聚类和更可区分的表示,这表明PaPi学习到的表示能够更好地反映视觉相似性。

  4. 原型分类器的性能:PaPi学习到的原型分类器在高歧义水平下表现出色,例如在CIFAR-100( q = 0.2 q=0.2 q=0.2)上,PaPi的原型分类器比PiCO高出40.29%。

  5. 数据增强的影响:实验表明,强弱数据增强的组合能够取得最佳性能,这进一步证明了PaPi在不同数据增强策略下的竞争力。

5. 总结

PaPi框架通过改进表示学习和标签去歧义的策略(去除了对比学习模块),在部分标签学习任务中取得了显著的性能提升。它在多种数据集和歧义水平下均表现出色,尤其是在面对高歧义和实例依赖歧义时。此外,PaPi还展示了其在学习有效表示和原型分类器方面的优势。未来的工作可以进一步探索PaPi在其他领域(如自然语言处理或语音识别)中的应用,或者研究如何进一步优化PaPi以处理更复杂的数据分布和标注噪声。

6. 相关工作

在深度学习时代,部分标签学习(PLL)在多个研究中得到了广泛探索,包括:

  • PRODEN:利用一致的风险估计器完成模型更新和标签识别。
  • VALEN:应用标签增强技术,探索实例依赖部分标签学习。
  • PiCO:提出了一种新的框架,PaPi在表征学习方面提供了显著的改进。

7. PaPi框架的核心设计

PaPi框架的设计核心在于通过反向的指导关系,利用线性分类器来优化原型分类器。以下是PaPi与PiCO框架的对比:

7.1 PiCO框架

在PiCO框架中,**原型分类器(prototypical classifier)用于指导线性分类器(linear classifier)**的更新。原型分类器基于类别原型(class prototypes)来识别真实标签,并通过这种方式帮助线性分类器更好地学习。换句话说,原型分类器在PiCO中扮演“老师”的角色,而线性分类器是“学生”,由原型分类器来引导其学习方向。

7.2 PaPi框架

而在PaPi框架中,这一指导关系被反转,线性分类器成为了“老师”,通过自教学的方式优化原型分类器。

8. 自教学方法

自教学(Self-teaching)是一种半监督学习或弱监督学习中的策略,用于在缺乏完整标注数据的情况下,通过模型自身生成的伪标签(pseudo-labels)来指导自身的训练过程。它是一种迭代学习方法,模型在训练过程中会不断利用自身预测的结果来更新和改进自身的参数,从而逐步提高性能。

8.1 自教学的基本原理

自教学的核心思想是:模型在训练过程中,利用自身对数据的预测结果来生成伪标签,然后将这些伪标签作为“软监督”信息,进一步优化自身的参数

8.2 自教学的具体流程
  1. 初始化模型

    • 选择一个初始模型,并用现有的标注数据进行初步训练。
  2. 生成伪标签

    • 模型对未标注数据或部分标注数据进行预测,生成伪标签。
  3. 更新模型

    • 将生成的伪标签作为额外的监督信息,结合原有的标注数据,重新训练模型。
  4. 迭代优化

    • 重复上述步骤,逐步改进模型的性能。
8.3 自教学在PaPi框架中的应用
  • 线性分类器的自教学:通过线性分类器的预测结果优化原型分类器。
  • 原型分类器的优化:根据线性分类器生成的伪标签来调整类别原型。

9. 总结与挑战

自教学能够有效地利用未标注数据,逐步改进模型的预测能力,并具有较强的适应性。然而,伪标签的质量、模型的收敛性及计算开销也是自教学方法面临的挑战。


http://www.kler.cn/a/597074.html

相关文章:

  • Linux中mutex机制
  • 【CXX-Qt】2.2 生成的 QObject
  • 语法基础课1.1 变量、输入输出、表达式和顺序语句
  • Spring6:6 单元测试-JUnit
  • Cursor从小白到专家
  • redis操作
  • 超硬核区块链算法仿真:联盟链PBFT多线程仿真实现 :c语言完全详解版
  • 集成学习之随机森林
  • 全面总结:编程中的上下文(Context)
  • c#获取使用串口信息
  • 新版 React19使用 react-quill
  • 使用C++在Qt框架下调用DeepSeek的API接口实现自己的简易桌面小助手
  • 【transformer理论+实战(三)】必要的 Pytorch 知识
  • qt介绍之qscreen
  • OpenLayers集成天地图服务开发指南
  • uni-app集成保利威直播、点播SDK经验FQ(二)|小程序直播/APP直播开发适用
  • k8s的存储
  • 遇到一个奇怪问题,页面请求不到后端
  • TCP的“四次挥手“与TIME_WAIT状态详解
  • Linux vim mode | raw / cooked