【小样本基础】N-way K-shot 模式和训练策略

本篇博客对元学习 N-way K-shot 模式进行了介绍,通过具体的例子说明了取值问题等细节。对元学习基础知识 (Support set,Query set)不太理解的读者可以先看这篇文章: 【小样本基础】元学习(Meta Learning)为什么能解决小样本问题(Few-shot Learning):一个例子搞懂

目录

  • 1. N-way K-shot 介绍
  • 2. N-way K-shot 细节
  • 3. N和K如何确定
  • 4. N-way K-shot任务构建举例

  • 小样本的训练不同于其他的模型训练, 小样本分类的最终目的是实现对只有少量标签样本的全新类别进行分类
  • 标签样本丰富的类别被称为 Base class ,标签样本较少的类别被称为 Novel class。样本数量之间有很严重的不平衡问题。
  • 即使Base class有很多的标注数据,但是在训练过程中每一次只会选择非常少的几个样本参与训练,以保证Base class 与 Novel class之间的平衡。

那么,为什么不能够尽可能地将已知类别的样本全部投入模型的训练,一次性学习更多的样本,从而使得模型更有可能得到更好的分类效果呢❓
以图神经网络为例:

  1. 受制于模型。用GNN来解决小样本时,图结构对节点数是有最大限值的,这也是 GNN 多年来一直不断研究想要改进的部分,节点越多,图网络越庞大,一次学习
    得到的各种参数矩阵也会越来越多,所以,网络学习起来也就会变得十分困难,一味地增加样本量会使模型效果适得其反。
  2. 小样本特有的分类目的,是为了实现新类别样本的分类。 初始太多的标签样本投入, 即使保证训练时标签样本量每次都一样, 但是如果测试时, 新类别标签样本不足, 也就是说, 测试阶段所构建的图结构与训练阶段不同,且比训练阶段的图结构更小。这与模型所学习得到的先验能力相悖, 仅仅通过测试阶段的微调也是不足以让模型很快适应新的图结构, 所以自然会得不到好的分类结果。

1. N-way K-shot 介绍

  • N-way K-shot 问题是小样本领域与元学习领域中常出现的分类问题。
  • N-way K-shot是指元测试集中有N个类别,每个类别有K个样本。
  • 这种特殊的分类模式是为了适应缺失标签数据集分类的情况, 方便构建切合实际的分类任务。 小样本场景下我们面临的问题首先是不足的标签样本, 一般解决办法有人工打标和迁移学习两种, 但是1️⃣人工打标方法的实现会费时费力, 甚至是很难在需求时间内完成。而2️⃣迁移学习方法在迁移时仍旧需在源域借助大量的数据, 并且我们并不能保证迁移的源域与目标域数据分布相似,所以,元学习从最基础的问题出发,一开始就不使用过多的数据,而是通过在训练阶段采用“以小见大” 的思想,实现模型的泛化。元学习方法的核心是在构建多个小的分类任务后,可以使得模型更快的适应新的类别进而实现分类。
  • 标签样本丰富的类别被称为 Base class ,标签样本较少的类别被称为 Novel class。在 Base class 上通过丰富标签数据集随机采样不断构建小的分类任务(每个小任务的训练数据被称为Support set,测试数据称为Query set), 叠加训练实现模型的泛化,从而实现后续在 Novel class 上的分类。 即使我们采用的是较少的标签样本进行训练也没有关系。 多个、 相同模式下的episode 能够很好地保证网络对于新类别少量标签的适应。

下图所示,无论是元学习还是元测试阶段,每一次都是采样2个类别,每个类别采样2个样本,因此下图个例子是2-way 2-shot模式。
【小样本基础】N-way K-shot 模式和训练策略_第1张图片
为避免上图出现歧义,有必要进行以下说明:
有的论文中将meta-trainning 部分的训练数据集称为sample set ,meta-testing 部分的训练数据集称为Support set。更一般的说法是将meta-trainning 和meta-testing中的训练数据集都统称为Support set。(只是名字不一样而已,简单易起见,博主还是更喜欢统称为Support set)

2. N-way K-shot 细节

这一部分介绍N-way K-shot 中 容易出现误导的点

1. 训练集和测试集不交叉

  • 在大规模监督学习方法中,训练集和测试集是混合后按比例随机切分,训练集和测试集的数据分布一致。以分类问题为例,切分后训练集中的类别和测试集中的类别相同,区别是样本数量不同。但是,在少样本领域,训练集和测试集是不交叉的,也就是说测试集中的类别在训练集中没有出现。为什么要这样设置呢?因为元学习模型需要具备learn to learn(学会学习)能力,当遇到未知类别时只需给出少数几个样本,模型就能归纳总结该类别的特征,所以测试集中的类别不能在训练集中出现。也就是说,训练集的数据并不是真正意义上的缺失标签的数据集, 它的作用是辅助我们建立一个少量样本训练模型。

2. 训练集中样本数目和类别没有限制

  • 需要明确的是N-way K-shot是指测试集中有N个类别,每个类别有K个样本。对训练集中的类别和样本数量没有限制,但是在训练过程中每次迭代需要遵守N-way K-shot设置。元学习中训练集需划分为support set和query set,但是实际上,我们是在每个batch中,从训练集中采样N个类别,每个类别采样K+Q个样本。然后将这个batch的数据分为support set和query set,其中support set包含N个类别,每个类别K个样本,query set包含N个类别,每个类别Q个样本。

  • 举个例子:比如,训练集可以有x个类,每个类别y个样本,训练时,每一次从x个类别中随机挑选5个类别,每个类别随机挑选2个样本进行训练,构成5-way 2-shot。这里的x和y没有限制(至少比5和2大就行),可以是100个类里面挑选5类样本中的2个,也可以是10000个类挑选5类中的2个。训练时N和k取值很小,知识为了将就测试集,测试集中的样本数目太少,而元学习中训练模式与测试模式必须保持一致。

3. N和K如何确定

通过以上介绍,我们初步了解了 N-way K-shot 模式是怎样运作的。下面来介绍它们的取值。

  • 整个任务中,决定 N 与 K 更关键的是看 Meta-testing 阶段的采样情况,所以, 要确定 N 和 K 为多少, 需要通过元测试阶段中采样的情况去判断,一般情况下,主要依据 Support set 部分的数据分布确定值。
  • 元测试与元训练始终保持的是相同的采样方式,在分类任务的构建上也是相似的
  • 在小样本的各种分类实验中,N 与 K 的值时常是 5 和 1,实际上,N 的值增加,会提升分类任务的难度,由此使得预测的准确率下降;而随着 K 的值增加,对于度量学习来讲,这样会减小有偏的情况,降低期望风险。

【小样本基础】N-way K-shot 模式和训练策略_第2张图片

上图展示了集中算法在 N 与 K 的值改变后,得到的分类准确度。

  • 在图 (a)中, 对于 N 值的增加, 各算法普遍都呈准确度降低的趋势。 在 N 较小的时候得到的效果最好,这也不难理解,减少分类的类别在一定程度上减少了模型的学习压力。
  • 在图 (b)中可以看出各模型的预测精度随着 K 值的增加,一开始呈现着不错的分类效果,但是 K 值逐渐增大后,开始不断震荡饱和。
  • 所以,在进行准确度的比对时,小样本分类领域中的各种实验常采用 5way-1shot 与5way-5shot 去进行训练和测试,并在这两种模式上进行准确度的比较分析。

4. N-way K-shot任务构建举例

在这个小节中,会通过一个简单的的例子来理解小样本场景下,基于元学习的方法是如何来构建N-way K-shot任务,进而理解元学习如何仅利用少量标签样本且不用过分关注数据分布实现分类。

【小样本基础】N-way K-shot 模式和训练策略_第3张图片

  • 将原本 64 个类别的分类问题的训练集, 建立了 50000 个五分类任务, 每个任务当中所学习的类别及样本都是随机采样得到的, 实际参与训练的只有 50 个样本, 这对于十万千万级的数据量来讲微乎其微, 由此建立了所谓的 “小样本的训练模式”。
  • 当然在这样一个五分类中,也同样将数据分为了两部分,也就是之前所介绍的 N-way K-shot 模式中的 Support set 和 Query set, 表面上看, 我们也是从 50 张样本, 不断采样训练, 使得模型实际上学习到了 250 万张样本, 从根本上就在让模型学习如何在接收新类别,且只有 50 张样本下怎样做分类的能力。
  • 本质上,每个五分类任务的采样组合都不相同, 模型也就相当于学习了多个模型, 在不断叠加训练的基础上, 让模型学习到五分类任务如何更好地获得类内与类间关系,实现后续分类。
    【小样本基础】N-way K-shot 模式和训练策略_第4张图片
  • 元测试阶段,新的小样本类别进来时,采用与训练阶段相同的采样方法,构建的五分类任务框架也是相同的。通过 25 张有标签的样本微调模型,让模型快速适应新的类别。从而对后续的 25 张无标签的样本实现分类。

参考:

  1. 基于GNN的小样本分类算法研究_宋小池
  2. https://blog.csdn.net/qq_27668313/article/details/118192492

你可能感兴趣的:(#,小样本,小样本学习)