【小样本学习】 Few-Shot Learning 基本概念

这篇文章是博主学习 Few-Shot Learning 过程中所记录的学习笔记

文章目录

学习资料

Few-Shot Learning 背景知识

【小样本学习】 Few-Shot Learning 基本概念

【小样本学习】 Few-Shot Learning 基本概念

正常人分不清穿山甲和犰狳,但是只要给他看5分钟Support Set中的图片,这时问题Query里的图片是什么,那他就能给出判断。

如果人能做到这一点,那么计算机能不能做到呢?

只靠这四个样本是不可能训练出一个深度学习网络的,对这种小样本学习你不能用传统的方法来分类

Support Set指的是一个很小的数据集,比如有两类,每类只有两类。这个集合不能用来训练一个大的网络,它只能提供一些参考信息。

Few-Shot Learning的目标

【小样本学习】 Few-Shot Learning 基本概念

Few-Shot Learning的目标不是让机器识别训练集里的图片并且泛化到测试集,而是让机器学会学习

Few-Shot Learning学习的目的是让模型学会区分事物的异同,给两张图片不是让模型识别出这两张图片具体是什么,而是让模型知道这两张图片是相同的东西还是不同的东西。

训练完模型后(模型学会了区分事物的异同)可以问模型,下面两张图片是不是同一个东西呢?
【小样本学习】 Few-Shot Learning 基本概念

模型不知道这两张图片是什么,不会识别出松鼠(因为训练集里没有松鼠),但是模型会判断事物之间的异同,模型知道这两张图片长得很像,所以很可能是相同的动物

【小样本学习】 Few-Shot Learning 基本概念

【小样本学习】 Few-Shot Learning 基本概念
模型虽然没有见过穿山甲和哈士奇,但是模型觉得他们长得不像,应该不是同一个动物。

换一个说法

神经网络拿query与support set中的6张图片进行对比,找出最相似的

比如神经网络发现query的图片与水獭Otter最相似,所以认为Query应该是水獭

【小样本学习】 Few-Shot Learning 基本概念
注意:Support Set里面每个类可能只有1张或者2张图片(带标签),它只能在预测的时候提供一些额外信息。

Meta Learning

【小样本学习】 Few-Shot Learning 基本概念【小样本学习】 Few-Shot Learning 基本概念
举个例子:
小朋友来到水族馆看到一个动物,但是他从来没有见过这个动物,他很想知道这个动物是什么?

虽然小朋友没有见过这个动物,但是他知道怎么样区分动物,他有自主学习的能力

现在,你给小朋友一堆卡片(Support Set) ,每张卡片上有动物的图片和名字,小朋友可能也没有见过卡片上的很多动物,但是他很聪明,他把卡片翻了一遍,就知道自己看到的动物是水獭了!

他作出判断的依据是“水里的动物与卡片上的水獭长得很像”

【小样本学习】 Few-Shot Learning 基本概念
去动物园前小朋友就有了自主学习的能力,他知道怎么判断动物间的异同

培养小朋友学会自主学习就是Meta Learning,即教小朋友学会区分不同的动物就是Meta Learning

靠一张卡片学会识别动物,叫做One shot learning

Supervised Learning VS. Few-Shot Learning

传统监督学习

模型虽然没见过这张图片,但是训练集中有哈士奇一类,包含上百张图片,模型很容易判断出这就是哈士奇

【小样本学习】 Few-Shot Learning 基本概念

小样本学习

模型不但没有见过这张图片,而且训练集中还没有这张图片的类别。

Few-Shot learning

  • Query samples are never seen before.
  • Query samples are from unknown classes

【小样本学习】 Few-Shot Learning 基本概念
小样本学习比传统监督学习更难,因为训练集Training Set里面没有这个类别。

所以这时我们需要给模型提供更多的信息,即Support Set。给模型看这些小卡片,每张卡片上有图片和名字。这些小卡片就叫作Support Set
【小样本学习】 Few-Shot Learning 基本概念

通过对比Query和这些小卡片的相似度,模型发现Query与下面这张图片的相似度最高,于是模型就知道Query图片里面是个兔子
【小样本学习】 Few-Shot Learning 基本概念

小样本学习常用术语

  • k-way: the support set has k classes
  • n-shot: every class has n samples

上面的例子中 k=6,n=1, 即 six way one shot learning

再比如:
【小样本学习】 Few-Shot Learning 基本概念

Ways or Shots与Accuracy的关系

【小样本学习】 Few-Shot Learning 基本概念

3个里面选1个正确的和6个里面选1个正确的,显然前者更简单
【小样本学习】 Few-Shot Learning 基本概念

【小样本学习】 Few-Shot Learning 基本概念

显然每个类样本越多,作预测更容易
【小样本学习】 Few-Shot Learning 基本概念

如何具体解决小样本学习

Idea: Learn a Similarity Function

最基本的想法是学一个函数来判断相似度

s i m ( x , x ′ ) sim(x, x^{'}) sim(x,x′)

【小样本学习】 Few-Shot Learning 基本概念

Step1:学习一个相似度函数

Learn a similarity function from large-scale training dataset.

具体地,从一个很大的训练集中学习一个相似度函数,它可以判断两张图片的相似度有多高。比如可以拿ImageNet这种大规模数据集来训练

【小样本学习】 Few-Shot Learning 基本概念

Step2:应用相似度函数来作预测

Apply the similarity function for prediction

  • Compare the Query with every sample in the Support set
  • Find the sample with the highest similarity score

【小样本学习】 Few-Shot Learning 基本概念

举个例子:

现在我求出Query与每个Support Set中的卡片的相似度(用Step1训练得到的sim函数),然后找到分数最大的样本作为预测结果

【小样本学习】 Few-Shot Learning 基本概念

【小样本学习】 Few-Shot Learning 基本概念

Meta Learning常用数据集Datasets

如果你做元学习Meta Learning的研究,需要用一些常用的数据集来评价模型的表现。介绍两个论文中常用的数据集

数据集Omniglot

Official Website: https://github.com/brendenlake/omniglot/

Tensorflow: https://www.tensorflow.org/datasets/catalog/omniglot

Omniglot数据集大小几个MB而已

Omniglot与MNIST有点像,是个手写字体数据集

MNIST是手写数字识别,有10个类,每个类有6000个样本

Omniglot的特点在于每个类的类别很多,但每个类的样本却很少

1623个类,而每个类只有20个样本(由20个不同的人手写)

【小样本学习】 Few-Shot Learning 基本概念

【小样本学习】 Few-Shot Learning 基本概念【小样本学习】 Few-Shot Learning 基本概念

数据集 Mini-ImageNet

100个类,每个类有600个样本,每个样本是84*84的图片

【小样本学习】 Few-Shot Learning 基本概念

上一篇:读研整活笔记n+1:分析greedy并更新


下一篇:【论文笔记 FSL 6】Instance Credibility Inference for Few-Shot Learning(CVPR2020)