【笔记】关于N-Way K-Shot 分类问题的理解

  • Time: 2019年10月27日
  • Author:Veagau

在看讲Repitle的论文【On First-Order Meta-Learning Algorithm】时,实验环节对N-Way K-Shot分类问题的SetUp进行的描述引发了个人二度思考,之前对这个问题的理解感受没摸透,以此为契机,从新思考得出了一种理解。算法

所谓N-Way K-Shot 分类问题就是指用少许样本构建分类任务。主要应用于少样本学习(Few-Shot Learning)领域样本数据不足的状况,后来逐渐延伸到元学习(Meta-Learning)领域。性能

元学习须要经过在大量的任务上进行学习,学习到泛化能力强大的模型算法,以快速适应新的任务,即学会学习学习

由于元学习是以一个个的任务(如分类任务)做为本身的训练数据的,传统的基于大量数据的训练任务显然不适用于目前的研究(算力约束)。测试

从字面上理解,N-Way就是N-路或N-类K-Shot就是K-次或K-个code

每次在构建分类任务时,从数据集里抽取N-类的数据,每一类数据由K-个样本构成。这样就造成了一个小型分类任务的数据集,实际上就是原始数据集的一次采样。it

那这个小型分类任务的训练集和测试集具体是怎么划分的呢?io

其实这个问题也是困扰我好久的,看了几篇文献都没明白。训练过程当中用的是什么数据?测试过程当中呢?直到我看到这篇论文中的描述:table

If we are doing K-shot, N-way classification, then we sample tasks by selecting N classes from C and then selecting K + 1 examples for each class. We split these examples into a training set and a test set, where the test set contains a single example for each class.class

其中关键的一点就是,在取数据时对于N类数据,每一类其实取了K+1个样本,而不是K个!test

而后就是这个+1引出了个人理解。

以5-Way 5-Shot分类问题为例,在构建一个任务的数据集时的具体流程应该以下:

  1. 从元数据集(Meta-dataset)中随机抽取5类(Way)样本,每一类样本随机抽取5+1个(Shot)实例

    元数据集:也就是总体数据集中,能够理解为传统的大型数据集,其中的数据类别>>N-Way,每一类的实例数量>>K-Shot.

  2. 从这5类样本的6个实例中,每类样本随机抽取5个实例一块儿做为Training Set(→Support Set),每一类剩下的一个实例一块儿组成Testing Set(→Query Set)。

    因为元学习是以任务(Task)做为本身的训练数据的,即元学习的实际训练集和测试集是由一个个的Task组成的,因此为了进行区分,每一个任务内部的训练集(Training Set)改名为支持集(Support Set)、测试集改名为查询集(Query Set)

  3. 训练:从Support Set中每一类随机选取一个实例,一块儿够成一组训练数据,输入到模型中,进行训练。

  4. 测试:从Query Set中随机抽取一个实例,用模型判断其属于哪一类。

    这个判断过程其实能够视为一种查询过程,给定了支持集,只要让模型可以准确的查询到其属于支持集中的哪一类便可证实模型性能较好。

  5. 重复几轮,最终得出该任务模型的准确率,实际上便是元学习参数肯定的模型在该任务上的损失

  6. 损失梯度反向传播到元学习参数,对其进行更新,也即元学习过程。

图示以下:

Way 1
(C1)
Way 2
(C2)
Way3
(C3)
Way 4
(C4)
Way5
(C5)
C~11~ C~21~ C~31~ C~41~ C~51~ Support
C~12~ C~22~ C~32~ C~42~ C~52~ Support
C~13~ C~23~ C~33~ C~43~ C~53~ Support
C~14~ C~24~ C~34~ C~44~ C~54~ Support
C~15~ C~25~ C~35~ C~45~ C~55~ Support
C~16~ C~26~ C~36~ C~46~ C~56~ Query
相关文章
相关标签/搜索