Few-Shot Learning:Pretraining(预训练) + Fine Tuning

用 pretraining (预训练) + Fine Tuning解决小样本学习。虽然这类方法很简单,但是准确率与最好的方法相当。

在大规模数据上预训练模型,在小规模数据Support Set上做Fine Tuning。

Cosine Similarity

计算两个向量的相似度

1.x和w向量长度相等都为1,cosθ等于x和w的内积,Cosine Similarity=cosθ=x与w的内积,表示x投影到w上的截距,范围是-1到1。

在这里插入图片描述

2.如果x和w的向量长度不为1,则需要归一化把长度变成1,计算Cosine Similarity的公式如下如下:

在这里插入图片描述

我们把query和Support Set中的图片都映射成特征向量,就可以比较二者在特征空间的相似度,计算两两的cosine similarity,选择相似度最高的类别作为分类结果。

Softmax Function

是一个激活函数,把一个向量映射成一个概率分布

输入k维向量Φ,将Φ中每一个元素做指数变换得到k个大于0的数,然后对结果做归一化使k个数相加等于1,把得到的k个数记为向量p,即为函数的输出

在这里插入图片描述

Softmax函数会让大的值变大,让小的值变小。相比max更温和。

在这里插入图片描述

Softmax分类器

分类器的输入是特征向量x,把x乘到参数矩阵W上再加上向量b,得到的向量做softmax变换得到输出向量p,p中最大的值即为分类结果。

在这里插入图片描述

矩阵w和向量b是这一层的参数,他们可以从训练数据中学习。w有k行,代表类别的数量为k,每行对应一个类别。

CNN预训练完成few-shot 预测

神经网络有很多卷积层和pooling层以及一个flatten层,也可以有全连接层。神经网络f的输入是一张图片x,输出是提取的特征向量f(x)。

在这里插入图片描述

可以用不同的方法预训练神经网络,比如传统的监督学习,训练好之后把全连接层都可以去掉了,也可以用孪生网络。 神经网络的结构和训练方法都会对最终结果产生影响。

下图是一个3-way 2-shot Support Set。首先将Support Set中的图片输入神经网络,输出特征向量,对同一类别的两个特征向量取平均得到一个特征向量,将平均后的特征向量再进行归一化,方便接下来的softmax分类。

请添加图片描述

做预测时,将query图片提取特征向量并归一化后得到特征向量,设M为u1,u2,u3向量构成的矩阵。

请添加图片描述

令W=M,b=0,向量p中最大的值即为分类结果。

请添加图片描述

Fine-Tuning

对神经网络完成预训练后,再做Fine-Tuning可以进一步提高预测准确率。
请添加图片描述

Fine-Tuning就是在support set上学习W和b,使损失函数的总和最小。yj是真实标签,pj是预测标签。

因为Support set比较小,为防止过拟合加上Regularization

请添加图片描述

1.初始化W和b

令W=M,b=0

2.Entropy Regularization

请添加图片描述

Entropy Regularization越小越好:

请添加图片描述

3.cosine similarity + softmax classifier

用cosine similarity替换内积,也就是内积做归一化,能够进一步提高准确率

请添加图片描述

替换后的softmax函数如下:
请添加图片描述

总结:
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

Step2即Fine-Tuning能大大提高预测准确率!

猜你喜欢

转载自blog.csdn.net/Bluebro/article/details/127834822
今日推荐