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


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

学习资料

感谢 @Shusen Wang 大佬的分享

Few-Shot Learning 背景知识

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

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

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

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

Few-Shot Learning的目标

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

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

训练完模型后(模型学会了区分事物的异同)可以问模型,下面两张图片是不是同一个东西呢?

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


模型虽然没有见过穿山甲和哈士奇,但是模型觉得他们长得不像,应该不是同一个动物。

换一个说法

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

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


注意:Support Set里面每个类可能只有1张或者2张图片(带标签),它只能在预测的时候提供一些额外信息。

Meta Learning

)
举个例子:
小朋友来到水族馆看到一个动物,但是他从来没有见过这个动物,他很想知道这个动物是什么?

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

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

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


去动物园前小朋友就有了自主学习的能力,他知道怎么判断动物间的异同

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

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

Supervised Learning VS. Few-Shot Learning

传统监督学习

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

小样本学习

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

Few-Shot learning

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


小样本学习比传统监督学习更难,因为训练集Training Set里面没有这个类别。

所以这时我们需要给模型提供更多的信息,即Support Set。给模型看这些小卡片,每张卡片上有图片和名字。这些小卡片就叫作Support Set

通过对比Query和这些小卡片的相似度,模型发现Query与下面这张图片的相似度最高,于是模型就知道Query图片里面是个兔子

小样本学习常用术语

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

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

再比如:

Ways or Shots与Accuracy的关系

3个里面选1个正确的和6个里面选1个正确的,显然前者更简单

显然每个类样本越多,作预测更容易

如何具体解决小样本学习

Idea: Learn a Similarity Function

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

$$sim(x, x^{‘})$$

Step1:学习一个相似度函数

Learn a similarity function from large-scale training dataset.

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

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

举个例子:

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

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个不同的人手写)

)

数据集 Mini-ImageNet

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


Author: SHWEI
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source SHWEI !
评论
 Previous
联邦学习中常见的Clients数据Non-IID非独立同分布总结 联邦学习中常见的Clients数据Non-IID非独立同分布总结
写在前面在介绍联邦学习客户端之间数据Non-IID分布前,我们需要先了解Dataset Shift的概念。 联邦学习中客户端之间Non-IID分布和我们在做机器学习任务时可能遇到的训练集与测试集分布不一致其实是一个道理(因为你可以把训练集
2021-08-12
Next 
由LeetCode C++ sort函数第三个参数cmp必须声明为static 引发的思考 由LeetCode C++ sort函数第三个参数cmp必须声明为static 引发的思考
问题描述你是否在刷LeetCode时出现过下面的情况? 而如果加上static就不会报错?![](https://img-blog.csdnimg.cn/2020020922235444.png?x-oss-process=image/wa
2021-04-14
  TOC