Meta-Learning for Semi-Supervised Few-Shot Classification. (用于半监督少样本分类的元学习)

1. 摘要

在少样本分类中,我们关注于学习一个可以用很少的标记数据训练一个分类器的算法。最近的少样本分类任务以使用元学习为主要特征。元学习中一个算法对应的一个参数化模型在表示不同分类任务的 episode (剧集,情节) 上面定义和训练,每一个 episode 中有自己的少量标记样本的训练集和对应的测试集。本文中,我们把这种少样本分类的范式推广到一种新的场景:每个 episode 中未标记的数据也是可用的。 我们考虑两种场景:

  1. 每个 episode 中未标记的样本属于本 episode 中的类,也就是说在这个 episode 中,虽然这些未标记的样本的具体 label 未知,但是我们知道它肯定属于这个 episode 中类别的某一个。(最简单的示例,这个 episode 我们分类鸡鸭鱼,这些未标记的样本具体属于哪一个不知,但是肯定是鸡鸭鱼中的某一个)
  2. 一个更具有挑战性的情况:这个 episode 中的未标记样本可能根本就不属于这个 episode 中的任意一类。(最简单的示例,这个 episode 我们分类鸡鸭鱼,某个未标记的样本可能是猪)

为了解决上述两种场景的问题,我们对原型网络(Prototypical Networks)进行了扩展,使其在产生原型的时候具有使用未标记样本的能力。这个模型在 episode 上以端到端的形式进行训练,成功学习利用未标记的样本。

本文还有一大贡献就是对 ImageNet 进行了一种新的切割,包含大量的类别,并且具有层级结构。

本文实际就是对 Meta-Learning 进行了半监督的扩展,正如期望那样,半监督可以提升少样本分类的性能。另外上文中的 episode 我个人更喜欢理解为 task,为了与之前论文一致,后文都使用 task(任务)。元学习的方法很多,作者选择的是对原型网络进行扩展,因此而且可以看成属于 meta-learning 中的度量学习 (Metric Learning)。

(推荐阅读以下链接,对理解本文很有帮助:
https://blog.csdn.net/weixin_37589575/article/details/92801610
https://blog.csdn.net/weixin_37589575/article/details/92768668

2. 介绍

大量可用的标记数据使得深度学习方法在很多人工智能相关的任务上取得了巨大的成功,然而这也导致现在的深度学习模型陷入了一个问题:如果标记样本太少怎么办?具体而言,现在的深度学习模型擅长解决一个具有大量标记数据的单一任务,而可以解决各种具有很少标记样本的方法很少。另一方面,我们人类却可以快速学习新的类别,例如当我们参观一个热带国家见到一种新的水果的时候。这一人类智能和机器学习之间的巨大鸿沟为深度学习的发展提供了新的契机。

由于上述原因,最近越来越多的研究关注于少样本学习,他们考虑设计一种学习算法,专门用于在很少的训练数据问题上快速泛化。这里我们主要关注于少样本分类问题,分类问题假设每个类中仅仅包含很少的有标记样本。一种解决少样本问题的方法称为元学习 (Meta-Learning),元学习通过执行在由大量可用的标记数据上产生的大量各种分类任务上的迁移学习来对一个在训练时前所未见的类别分类任务上进行泛化。

已有大量的元学习方法提出,并且取得了很大的进步。然而,这些工作中对每个少样本学习任务进行了限制,本文从两个方法进行了推广:

  1. 每个任务中的训练集中有未标记的样本。这符合标准的半监督学习方式,但是常规的半监督没有 few-shot 以及推广到新的类这一限制。
  2. 一个更具有挑战性的情况:这个任务中的未标记样本可能根本就不属于这个任务中的任意一类。

在这里插入图片描述
如图所示,这个图所示的就是一个 2-way 1-shot 的分类任务,但是和以前的任务有一些不同,我们加一些未标记的数据,这里虽然不再只有 2*1 = 2 个样本,但是我们标记的样本只有两个,未标记数据虽然在 support 集中,但是不计入我们 shot 数中。两种情况分别对应:

  1. 红色虚线中的金鱼和鲨鱼加入到我们的 support 中去,这 4 张图片虽然没有标记,但是如以前的半监督学习一样,可以提升性能。简单说,就是我们可以先预测这 4 张图片的类(虽然不一定准确),但是本质上可以增加我们的 support 样本,也就可以增加我们的 shot 数,显然 shot 越多,效果越好。
  2. 上一种情况太过于理想化,我们考虑另外一种更接近现实的情况,比如我们在所有的未标记集合中任意选 4 张。显而易见,我们可能选到狮子之类的图片,把他们放在 support 集中。问题出现了,我们如果先预测这个图片,然后使用它来训练我们的模型,有可能使准确率反而下降,因为这根本就是错误的信息。这种具有误导信息的样本我们称为干扰项(distractor)

本文的贡献:(1)第一篇在少样本学习任务上研究半监督的论文。(2)在常规的数据集 Omniglot 和 miniImageNet 进行实验,提供了问题定义和基准方法。(3)在具有干扰项和不具有干扰项的情况下进行了大量的实验,并且验证了半监督学习方式可以提升少样本分类任务的性能,扩展的原型网络比单纯的原型网络在此问题上表现更佳。

2. 背景

2.1 少样本学习:

本文的少样本学习方式是标准的方式。Meta-training classes: C train \mathcal{C}_{\text{train}} Ctrain,其中具有大量标记数据。但是我们的最终任务实在全新的类 Meta-testing classes: C test \mathcal{C}_{\text {test}} Ctest 上进行分类任务,并且 C test \mathcal{C}_{\text {test}} Ctest 中每个类只有很少的有标记样本。基于 episode 的范式就是使用 meta-training classes 中的大量样本模拟 meta-testing classes 上的少样本学习任务。具体而言,比如我们模拟 N N N-Way K K K-Shot 的任务。步骤如下:

  1. C train \mathcal{C}_{\text{train}} Ctrain 中随机抽取 N N N 个类
  2. 每个类采样 K K K 个样本,也就是一共 N ∗ K N*K NK 个样本作为我们的 support set: S = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N × K , y N × K ) } \mathcal{S}=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots,\left(\boldsymbol{x}_{N \times K}, y_{N \times K}\right)\right\} S={ (x1,y1),(x2,y2),,(xN×K,yN×K)}
  3. 再随机采样另外 T T T 个样本作为我们的 query set: Q = { ( x 1 ∗ , y 1 ∗ ) , ( x 2 ∗ , y 2 ∗ ) , … , ( x T ∗ , y T ∗ ) } \mathcal{Q}=\left\{\left(\boldsymbol{x}_{1}^{*}, y_{1}^{*}\right),\left(\boldsymbol{x}_{2}^{*}, y_{2}^{*}\right), \ldots,\left(\boldsymbol{x}_{T}^{*}, y_{T}^{*}\right)\right\} Q={ (x1,y1),(x2,y2),,(xT,yT)}

本质上来说,这就是一个 task,也就是一个 episode。我们常见的范式是在这个任务的 support set 上面进行训练,然后在 query 上进行测试。但是元学习不一样,元学习把这一整个任务看成一个 meta-training task,然后在大量类似的任务上学习,最后测试是在一个新的任务上面。新的任务之所以新,是因为里面的类是全新的,和所有的 meta-training 中的类别都不同。

问题设置参考上面提到的博客:
在这里插入图片描述
简单画了一个示意图,前面三个是三个 meta-training task (当然实际需要很多这样的 meta-training tasks 才能学到我们需要的先验知识),最后一个就是 meta-testing task。我们最后评价我们的 meta-learning 方法的好坏就是在红色标记部分上的 performance。

2.2 原型网络

原型网络简单且效果好。原型网络使用 support set 为每个类别提取原型,然后根据 query 中样本相对于各个原型的距离进行分类。具体而言,原型网络目的是学习一个 embedding 函数 h ( x ) h(\boldsymbol{x}) h(x),也就是一个参数化的神经网络,将样本映射到一个度量空间里面,其中相同类的距离近,不同类的距离远。原型网络的所有参数都在这个 embedding 函数中。
首先计算每个类的原型:直观的说,support set 中某个类所有样本的均值就是这个类的原型:例如类别 c c c 的原型 p c \boldsymbol{p}_{c} pc 计算如下:

p c = ∑ i h ( x i ) z i , c ∑ i z i , c , \boldsymbol{p}_{c}=\frac{\sum_{i} h\left(\boldsymbol{x}_{i}\right) z_{i, c}}{\sum_{i} z_{i, c}}, pc=izi,cih(xi)zi,c, where z i , c = 1 [ y i = c ] z_{i, c}=\mathbb{1}\left[y_{i}=c\right] zi,c=1[yi=c]

然后对 query 中某个新的样本 x ∗ x^{*} x 进行类别预测:直观的说,用相同的 h ( x )

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值