【王树森】Few-Shot Learning小样本学习 (1/3): 基本概念(个人向笔记)
前言
- 下面是犰狳和穿山甲的一些图片。现在要你判断右边给定的图片是犰狳和穿山甲。我相信应该不知道犰狳和穿山甲长啥样,但是在看了左边的 Support Set 之后,你就有能力从两者之间辨别出来。
- 既然人可以通过这四张图片分辨出犰狳和穿山甲。那么计算机能不能做到呢?显然四张图片的数据量根本不足以训练一个深度学习网络
- 本节课要讲的小样本学习就是用来解决这样的问题的
- 小样本学习的目标是让机器学会自己学习,小样本学习并不追求能够分辨没见过的食物,只求能分辨出事物的异同,让它能够在被给定两张图片的情况下分辨是不是一个东西
分辨能力
- 在数据集中并没有针对松鼠进行训练,但是模型学会了判别事物的异同,所以可以推断出这两个事物是一个东西
- 同理对于兔子来说,模型并不知道兔子是什么,因为在训练集中没有兔子,但是模型能分辨出两者是一个事物:
- 对于在训练集中没有的穿山甲和斗牛犬,模型能够识别出两者不是同一种动物
- 给定一个询问和一个 Support Set,模型可以分辨出询问和 Support Set 中的哪张图最像:
Meta Learning
- 小样本学习其实是一种 Meta Learning,但是这里直接把 Meta Learning 直接看成小样本学习就可以了
- Meta Learning 的实际含义是:Learn to learn,自己学会学习
- 举个例子:对于一个小朋友来说,它既没有见过水獭,也没有见过卡片上的动物,但是小朋友能够有区分不同事物的能力,所以小朋友能把眼前的事物和卡片上的匹配
- 在 Meta Learning 的术语中,小朋友眼前的动物就是 Query,卡片上的动物就是 Support Set,而 Meta Learning 就是培养小朋友的自主学习能力
- 如果Support Set 每个类别只有一张图片,那么就是 One-Shot Learning,如果有几张图片,就是 Few-Shot Learning
Supervised Learning vs. Few Shot Learning
- Supervised Learning: 在训练集里面有很多哈士奇的图片,模型认识哈士奇,所以能够分辨出哈士奇
- Few Shot Learning: 训练集里面没有兔子,模型根本就不认识兔子。所以我们给模型提供更多信息:Support Set,而有了 Support Set,模型就能认出 Query 和 Support Set 里面的兔子是一样的
k k k-way n n n-shot Support Set
- k k k-way:一共有 k k k 个类别
- n n n-shot:每个类别有 n n n 张图片
Prediction Accuracy
- 做 Few-Shot Learning 的时候,预测的准确率会受到类别的影响,类别越多,准确率越低:
- 而 shot 增加,预测的准确率随之增加
Basic Idea
- Few-Shot Learning 的想法是学习一个相似度函数:
- 首先可以在 Image-Net 这种大数据集先做训练,用学到的相似度函数来做预测
- 在预训练后,在 Support Set 中找出相似度最高的作为预测的结果:
- 预测实例:
- 常用数据集1:Omniglot。这个数据集不大,只有几兆,很适合学术界使用。这是个手写数字数据集,特点在于类别多,但是每个类别的样本比较少。有很多种字母表,每个字母表都有很多不同的字符,一共有1623种不同的字符,每个字符都由20个不同的人手写。
- 常用数据集2:Mini-ImageNet: