few-shot learning

首要要明白training set 、support set和query的概念。

元学习与一般的监督学习的区别:

一般的监督学习是在训练集上训练出一个函数映射f,这个函数可以识别出哪张图片是狗,哪张是猫。输入是某张图片,输出是标签。

元学习算法则是让模型学会学习,即在训练集上学习出一个函数 F, 可以自动学习出一个函数f^{*},他可以分辨出哪张图片是狗,哪张是猫。F的输入是一个个的图片集合,输出是函数f^{*}f^{*}的输入是某张图片,输出是标签。 

一.问题是什么:目的是区分事物的异同,不是去识别是什么东西,而是去知道是相同还是不同的东西。训练完后问这两个东西是不是一样的东西。

如果要识别兔子,假如support set里没有兔子,就认不出兔子,因为模型只会判断异同。

Query与support set 一一对比,注意support set与training set(大,深度神经网络)的区别

监督学习与小样本学习的区别:监督学习是先学后用,test sample是训练集里已知类别。小样本学习的query是训练集里未知类别,只能从support set里对比。

k-way n-shot support set:k classes,每个class 有n samples,一般way越大,准确率就降低,shot越大,准确率就增高。

二.怎么解决这个问题:学一个相似函数,learn a similarity function:sim(x,x’)  sim越大,相似度越高。

先从大规模训练集中学习相似度,再在query和support set之间比较相似度。

Siame network:孪生网络(连体网络,为什么叫连体,共享了特征提取部分):在训练集里分为positive samples(Ai,Aj,1) ,negative samples(Ai,Bj,0)

few-shot learning_第1张图片f(x)为卷积神经网络来提取特征

few-shot learning_第2张图片

h1=f(x1),h2=f(x2),z=|h1-h2|,再经过全连接函数为标量。

few-shot learning_第3张图片(1)两两之间的相似度:loss=target-sim(x1,x2),反向传播计算梯度,梯度下降来更新参数(卷积层与全连接层的参数)

正样本的target=1,负样本的target=0。

梯度从损失函数传回到全连接层和向量z,再传到卷积层。

(2)triplet loss:

先定一个锚点anchor,在锚点所在的类里找个positive样本,再在锚地外的类找个negative样本。

few-shot learning_第4张图片

  • 0 范数:向量中非零元素的个数。
  • 1 范数: 向量中各个元素绝对值之和。
  • 2 范数: 向量中各个元素平方和的 1/2 次方,L2 范数又称 Euclidean 范数或者 Frobenius 范数。
  • p 范数:为 x 向量(或矩阵)各个元素绝对值 p 次方和的 1/p 次方。

few-shot learning_第5张图片

few-shot learning_第6张图片

总结:在大规模训练集中训练一个孪生网络,然后给出support set 和 query来计算其相似度和距离。

三.基础做法:在大规模数据集上预训练模型,然后在小规模的support set 上做fine-tuning微调

你可能感兴趣的:(深度学习之我是炼丹师,人工智能,深度学习)