其他分享
首页 > 其他分享> > 【小样本学习】 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学习的目的是让模型学会区分事物的异同,给两张图片不是让模型识别出这两张图片具体是什么,而是让模型知道这两张图片是相同的东西还是不同的东西。

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

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

在这里插入图片描述

在这里插入图片描述
模型虽然没有见过穿山甲和哈士奇,但是模型觉得他们长得不像,应该不是同一个动物。

换一个说法

神经网络拿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

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

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

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

小样本学习常用术语

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

再比如:
在这里插入图片描述

Ways or Shots与Accuracy的关系

在这里插入图片描述

3个里面选1个正确的和6个里面选1个正确的,显然前者更简单
在这里插入图片描述

在这里插入图片描述

显然每个类样本越多,作预测更容易
在这里插入图片描述

如何具体解决小样本学习

Idea: Learn a Similarity Function

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

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

在这里插入图片描述

Step1:学习一个相似度函数

Learn a similarity function from large-scale training dataset.

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

在这里插入图片描述

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

Apply the similarity function for prediction

在这里插入图片描述

举个例子:

现在我求出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的图片

在这里插入图片描述

标签:Shot,样本,学习,Few,Learning,图片
来源: https://blog.csdn.net/qq_43827595/article/details/111592746