-------------------------------------------------------------------------------------------------------
更新(2021.7.6):元学习(meta-learning)与机器学习(machine learning)
machie learning: 通常是单任务学习,每个任务有训练集和测试集,在训练集上训练模型,在测试集上测试模型。
meta-learning:是多任务学习。把所有的任务划分为训练任务和测试任务。每个训练任务都包含自己的训练集和测试集。每个测试任务也包含自己的训练集和测试集。
meta-learning的训练分为两个阶段:
阶段1:利用每个训练任务的训练集预更新网络参数,计算预更新后的参数在这个训练任务的测试集上的损失。
阶段2:汇总所有预训练任务测试集损失正式更新网络参数。
tip1:训练任务的测试集参与训练
tip2:测试任务完全不参与训练
------------------------------------------------------------------------------------------------------
最近读文献,发现有人用any-shot learning 的方法做异常检测问题,不理解什么意思,所以上网查了一下。
在网上搜索“any-shot learning”关键词时,发现提到最多的就是这篇文章:《f-VAEGAN-D2: A Feature Generating Framework for Any-Shot Learning》,这篇文章里是这么提到“any-shot learning”的: “In this paper, we tackle any-shot learning problems i.e. zero-shot and few-shot, in a unified feature generating framework that...”。可见文章是把any-shot learning作为zero-shot learning 和 few-shot learning的统称。
什么是few-shot learning和zero-shot learning 呢?
shot: 发射;炮弹;射手;镜头。 在这里可以理解为“样本”的意思。few-shot和zero-shot的意思就是:在分类任务中,针对某个特定类别,在训练集中仅仅只有少量属于该类别的样本(few-shot)或没有属于该类别的样本(zero-shot)。one-shot learning 是few-shot learning的一个特例,即该在训练集中仅有一个属于该类别的样本。
few-shot learning,zero-shot learning,one-shot learning,any-shot learning可以翻译为如下(个人认为):
- few-shot learning : 少样本学习。 (许多人喜欢翻译为小样本学习,我觉得翻译为小样本容易引起误导为:小“尺寸”样本学习)
- one-shot learning:单样本学习
- zero-shot learning:零样本学习
- any-shot learning:任意样本学习。(个人理解,可以理解成是对few-shot 情况和zero-shot情况都适用的学习方法,或者也对大量样本情况也适用的学习方法,或者,适应于极端样本不平衡情况的学习方法。)
一个关于few-shot learning 的形象的示意图,
few-shot learning 中涉及到的一些概念:
N-way, K-shot: 在我们的训练集中共有N个类别,每个类别只有K个样本。即,我们的训练集中一共只有N*K个样本。示意图如下(5-way 1-shot 情况,图片来自论文《Optimization as a Model for Few-Shot Learning.》):
Meta-learning(元学习):在没有任何背景先验知识的情况下进行few-shot learning是非常困难的,即使人也不可能。所以解决few-shot learning的常用策略是使用迁移学习,先在一个别的、与few-shot任务有关联的任务上训练网络,使网络先具有一些先验知识(prior,meta Knowledge(元知识)),然后再在few-shot任务上进行训练。
这个在相关联的其他任务上训练网络的过程称为元学习的训练阶段meta-training(元学习训练过程)。该阶段学到的知识称为meta Knowledge(元知识)。
将元学习训练阶段得到的模型在当前任务上在训练的过程,称为元学习的测试阶段meta-testing.
比如,我们要训练一个网络去识别熊猫,但是我们只有一张熊猫的照片,如果只用这一张熊猫的照片去从零训练一个网络,那么这个网络的泛化性很可能会不好(很可能只能认识这一张照片是熊猫,熊猫换个姿态或测面就不认识了,也有可能把猪,狗等也误判成熊猫,一切都有可能)。 但是我们有大量的猪,狗,鸡,鸭,鱼,鹅,鸟的标记图片,我们可以先用这些图片去训练网络,使网络对这些类别有识别能力,即使网络具有一些识别目标的初级能力。这个训练过程就是元学习或meta-training,这个阶段学到的知识就叫元知识。然后,我们可以用熊猫图片去训练已具有元知识的网络。这样我们可以期待新训练得到的网络在对熊猫的识别任务上具有较好的泛化能力(不但认识训练集中的熊猫图片,熊猫换个姿势,角度也能认识)。这个用熊猫图片训练网络的过程称为meta-testing。
元学习过程,尤其meta-training阶段,一般是一个多任务学习,即,训练一个网络,使这个网络能完成多种相关任务。每一个元学习过程中的任务都包含自己的训练集和测试集。为了避免每个任务的“训练集”与“测试集”的命名与meta-training和meta-testing混淆,我们把每个元学习任务中的训练集称为 support set, 测试集称为 query set.
如下图所示:
few-shot learning 作为一个单独的研究方向,具有多个数据集:如miniImagenet,tiered-imagenet,omniglot,CIFAR-FS,CUB-200-2011。这些数据集包含很多类别的样本,每个类别也有许多样本。在使用这些数据集做few shot learning时,通常的策略是:在meta-training 阶段,从所有类别中随机抽取N个类别,每个类别提取K个样本作为 support sets,这N个类别的剩余样本或剩余样本的采样作为query sets。这就是N-way K-shot的问题了。
示例说明如下:
如上描述,就是 meta-training阶段使用的数据,就是meta-testing阶段使用的数据。无论是还是都包含support set与query set。
参考博客:few-shot learning是什么
备注:我不是做few shot learning方向的,以上仅是我的课题有算法涉及到这方面的知识,所以了解一下,并不深入。如果有理解错误的地方希望指正。