资讯详情

Few-shot Learning

Few-shot Learning

前言:CSDN是癌症,已经转向博客园,博客园主页https://www.cnblogs.com/ClarkGable/

一.

1.

不同于传统的监督学习,few-shot leaning目标是让机器学会学习;使用大型数据集训练模型,在训练完成后给出两张图片,以区分这两张图片是否属于同一件事。例如,训练数据集中有老虎、大象、汽车、鹦鹉和其他图片样本。训练结束后,将两张兔子图片输入模型,以判断模型是否相同,或模型兔子和狗的图片

2.

训练的目的是依靠Support Set让模型判断提供的一点信息Query中的图片是otter虽然没有集中训练数据,但这个类别otter这个类别。

k-way n-shot Support Set

k-way: the support set has k ;

n-shot: every class has n .

k way表示支持集中的类别,n shot每个类别中包含的样本数表示支持集中

3.

随着Support Set中类别增加,分类准确率会降低

因为3选1比6选1更容易,准确率更高

同样地,Support Set中shot数量增加,分类精度提高

4.

idea:学习相似度函数

sim计算两张图片x和函数x相似度,

比如两只狗的照片x1和x2,猫的照片x3,sim(x1,x2)=1, sim(x1,x3)=0,sim(x2,x3)=0

基本思想:

(1)首先,从大样本数据中学习相似度函数

(2)然后预测相似度函数

①用query和support set逐一比较每个样本;

②找出相似度最高的样本

5.常用数据集

(1)Omniglot

https://github.com/brendenlake/omniglot or https://www.tensorflow.org/datasets/catalog/omniglot

(2)Mini-ImageNet

二.连体网络Siamese Network

两种训练Siamese Network的方法

1.每次取两个样本,比较他们的相似度

训练神经网络需要数据集来训练神经网络,并使用训练集来构建样本Positive Samples和负样本Negative Samples

Positive Samples:每次从一个类别中随机抽取两张图片,将标签设置为1,即相似度满分。这样,图片也从其他类别中抽取,标签设置为1;

Negative Samples:随机抽取一个类中的图片,排除这个类,然后从其他类中随机抽取图片,将标签设置为0,即相似度为0,从而构建负样本。

建立卷积神经网络提取特征,输入图片记录x,输出特征向量记录f(x)

训练神经网络,将准备好的图片输入神经网络f,向量记录提取的两个特征h1,h2,z = |h1-h2|,然后通过全连接层输出标量,最后使用sigmoid函数得到0~这个输出可以衡量两张图片之间的相似性,sim(x1,x2)。如果两张图片属于同一类别,则输出应接近1。如果两张图片属于不同类别,则输出应接近0。损失函数是标签Target=1与sim(x1,x2)它们之间的差异用于更新全连接层和神经网络f的参数(请注意,这里的图片输入相同的神经网络)被称为连体网络,即网络的结构头连接在一起,如下图所示

这样,一轮训练就完成了

负样本训练过程相似,只输入两张不同类型的照片和标签Target=0

训练完成后就可以做了one-shot prediction,Support Set中的六个类别都不在训练集里,将Query与Support Set相似性最高的是预测结果

2.Triplet Loss

每次从训练中选择3张图片,在这3张图片中选择一张xa, anchor(锚点),选择同一类别的另一张图片,并记录为样本x ,选择其他类别的图片,并记录负样本x-

将三张图片输入卷积神经网络ff(xa), f(x ), f(x-),计算f(xa), f(x )二范数距离d ,和f(xa),f(x-)二范数距离d-,d 应该很小,d-应该很大;

设置超参数α为margin,如果d-很大,d->d α,那么损失函数是0,因为两种图片分开得很好,相反,损失函数是0d α-d-

在预测过程中,将图片为特征向量,计算query找出距离最小的距离

三. Pretraining + Fine Tuning

大规模数据上做pretraining,小样本上fine tuning

1.Pretraining

神经网络的结构

用3-way 2-shot的SUpport Set做few-shot分类,用与训练的神经网络提取特征,将每个类别提取的两个特征向量求平均,归一化得到 μ1,μ2,μ3

提取query的特征向量,归一化得到q,将 μ1,μ2,μ3堆叠起来,得到矩阵M,M与q相乘通过softmax函数得到输出p,显然μ1与q的内积是最大的,所以会将query识别为第一类。

2.Fine Tuning

上一过程中,我们假定的W=M,b=0,其实我们可以在Support Set上学习W和b,计算Support Set所有的pj和真实标签yj之间的CrossEntropy,并使之最小,加上Regularization防止过拟合。

Trick1在初始化分类器时,可以把W初始化为M,b=0

Trick2 Regularization使用Entropy Regularization

因为输出的q是类别的概率值,左边这种情况说明分类器无法判别query属于哪一类,这种情况的entropy很高;我们希望的情况是右边的这种情况,分类器认为query属于第二类

Trick3 在通过softmax函数时,将WTq变为cos(W,q),能够提升准确率

总结

也可以在插入中间步骤Fine Tuning

标签: wtq1050f动态扭矩传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台