什么是few-shot learning
- Few-shot learning is a kind a meta learning
- meta learning: learn to learn
与传统监督算法的不同
- 传统监督算法:要求模型识别训练数据,并且泛化到测试数据。
- meta learning的目标是自己学会学习。
教小朋友判断动物的异同,就是元学习。具备了这个能力之后。
给小朋友support set让他自己去学习,
他有能力把support set与query对应起来。
few-shot learning 预测的是新的类别,没见过
而监督学习训练的时候是见过这个类别的。
few-shot learning通过对比support set 与 Query的相似度 来判断是什么类别
few-shot leaning 术语
- k-way: the support set has k classes
- n-shot: every class has n samples
3-way is easier than 6-way
学一个函数来判断相似度
- 从一个很大的训练集上学习相似度函数(它可以判断两张图片的相似度有多高)
- 训练结束之后,可以用训练得到的相似度函数进行预测
meta learning的标准数据集:评价模型的表现
- Ominiglot:1600 class 20 sample
50 个字母表 字母
50 个字母表:拉丁语,希腊语。。。
每个字母表有很多字符:希腊语(24个)字符
每个字符由20个人手写。
每个样本是105x105的小图片
训练集一共有30个字母表, 包含946个字符(类别),总共19280个样本
测试机一共有20个字母表,包含659个类别,总共有13180个样本
- Mini-ImageNet
100个类别:每个类别有600个样本。 84x84的小图片。
使用
思想:在大规模数据集上做预训练,在小规模的support-set做fine-tune
操作:
把query 和 support set 中的图片都映射成特征向量, 比较他们在特征空间上的相似度。
在support set 上学习W,b 进行fine-tuning.
用cross Entropy来衡量yj 与 pj的差别有多大。
support set中的每个样本都对应一个cross entropy loss, 把这些cross entropy loss 加起来,作为目标函数。也就是说我们用suuport set里面所有图片和标签 来学习这个分类器。让目标函数做minimization,让预测pj尽量接近真实标签yj
support set太少了,最好加一个regularization 来防止过拟合
Trick 1: A Good Initialization
- Prediction made by Softmax classifier: 我们想要从support set中学习这样一个softmax分类器
p = softmax(w.f(x) + b) 矩阵W和向量b是分类器参数 参数的初始化很重要,set中的样本数量太少了
可以把W初始化为矩阵M,把b初始化为全零向量
Trick 2: Entropy Regularization
- Entropy: 衡量概率分布p的信息量
- 对于每一个query,求出一个entropy,然后再取平均
- 我们希望Entropy Regularization 越小越好,这样置信度高的很高,低的很低