【论文理解】Shot in The Dark: Few-Shot Learning with No Base-Class Labels


前言

双节后看到一篇有点震撼我的少样本领域论文,又是一篇针对无监督少样本学习的最新进展报告。它的实验结果真真证明了GPU在深度学习中的重要性==!因此记录一下它简单的框架和出众的实验结果。
这里是论文原文,作者来自马萨诸塞大学。


咳咳,研究背景就不介绍了,我之前的博文中有讲~详见这里

一、核心思想

文章题目中的Dark指的就是,在预训练阶段不接触大量带标签的基类样本(base classes),也就是采用无监督学习的方式(本文采用自监督学习)获得一个良好的特征提取器feature embedding。在解决少样本分类问题时,直接在feature embedding后面接一个分类头,使用少量的support set训练该分类头即可。

这个框架和我挂出去那篇论文的本质思路一样,不过我在这个基本框架上又加入了很多提高性能的技巧,更复杂一些。

然而文章用它优秀的实验结果打脸,(论文描述中)没有采用任何多余的结构,就达到了下表所示的结果。表中展示了作者在四种不同训练设置(FSL baseline、UBC-FSL、UBC-TFSL、Combined)下得到的测试精度。可以看到,在mini-ImageNet 5way-5shots下的最高精度已经达到了92.8%。吓人不…

下面我们来看这四个缩写到底代表了啥优秀的方法。

在这里插入图片描述

二、论文算法

文章中的Methods部分合起来可能也就一页纸,可见这真的是一个简单的算法,真几句话就能描述清的(我也尽量转达清楚==)我们先来熟悉一下作者定义的几个训练数据集。

1.符号介绍

D F S L D_{FSL} DFSL:有标签的基类样本(base classes)
D U B C − F S L D_{UBC-FSL} DUBCFSL:无标签的基类样本(base classes)
D U B C − T F S L D_{UBC-TFSL} DUBCTFSL:无标签的基类样本(base classes)与无标签的新类样本(novel classes)

2.方法描述

在第一节核心思想中,我已经简单描述了文章的算法框架,即:

1、先使用大量样本预训练出一个良好的特征提取器(Training phase);
2、面对N way-K shot的少样本分类任务时(Evaluation phase),在特征提取器后面接一个分类头用于分类,采用常用的分类器训练方法,使用任务中的support set训练该分类头。

我猜想,就是用的交叉熵损失直接训练的,因为文章中对分类头的训练只描述了一句话:

In the evaluation phase, we evaluate the few-shot classification performance. We learn a logistic regression classifier on top of the learned feature embedding of N ∗ m training examples and report its accuracy on the testing examples.

了解这个框架后,我们再来说前面出现的四种方法分别是什么。实际上这四个方法,仅是对预训练阶段以及获取何种特征进行了区分,后面的evaluation phase完全相同。

  1. FSL baseline(Few-Shot learning baseline):使用 D F S L D_{FSL} DFSL进行预训练,就采用通用的分类网络训练方法即可,使用CE loss。训练后取logit
    layer的输出(应该是分类结果这一个FC层,加非线性激励)作为evaluation
    phase的分类头输入特征,因为实验证明使用这一层输出作为特征比使用其前一层(应该是特征提取网络的最后一个卷积层)输出的效果更好。
  2. UBC-FSL(Unlabeled-base-class few-shot learning):使用 D U B C − F S L D_{UBC-FSL} DUBCFSL进行预训练,训练方法是 MoCo-v2自监督算法,
    就是将一张原图像变换成两个不同变种图像,分别提取特征,训练使得这两个来自于同一张原图的变种图像(称为正对)的特征距离更近,同时使得一张原图的变种和其他原图像变种(称为负对)的特征距离更远。
    损失函数如下:

在这里插入图片描述

  1. UBC-TFSL(Unlabeled-base-class transductive few-shot learning):采用UBC-FSL的训练方法,在 D U B C − T F S L D_{UBC-TFSL} DUBCTFSL上进行训练。其中Transductive就体现在预训练时,同时使用了将要用来做测试的新类样本novel classes。
    【通俗来讲,transductive指训练时同时使用训练样本和测试样本(无标签啊),那么测试时就有了一定限制,就是最好在这些参与了训练的测试样本上进行测试;一般的inductive方式指只有训练样本参与训练,训练完成后可在任何样本上测试。
    不过由于transductive方法在训练时使用了测试样本的特征,即使没有使用其标签,最终在这些样本上测试时也能获得更好的效果】
  2. Combined(Combination of FSL baseline and UBC-FSL):第四种方法是一种融合方法,取得的效果最好。它将FSL baseline和UBC-FSL方法获得的特征concat起来作为一张图像的最终特征,送入evaluation phase中的分类头中参与分类。
    concat的方式

We explore the complementarity between supervised features (from the FSL baseline) and self-supervised features (from UBC-FSL). We directly concatenate normalized supervised features and normalized self-supervised features and then do normalization again.

三、实验结果

文章的作者进行了大量的实验,应该耗时挺长;使用8块GPU,获得了最终的优秀结果。实践证明,GPU少了,难以使用现存自监督学习方法训练出来好的特征提取器。

当然实验结果不只有”肤浅“的不同方法的分类准确率对比,还有不同网络深度对结果的影响、不同数据集大小对结果的影响,以及跨域少样本学习中自监督、有监督方法的结果比较等。

下面我们用数据说话~

1.更深的网络效果更好

选一个更深的网络,可能会获得比辛苦调参更好的结果哦~

在这里插入图片描述

2.在跨域FSL中,有监督比自监督好

跨域(cross domains)指的是training phase使用的训练集和evaluation phase使用的novel classes来自于两个不同的数据集。比如预训练使用mini-ImageNet的base classes,evaluation时使用CUB-200中的novel classes。

在这里插入图片描述

3.shot数大时,自监督更好

FSL和UFSL的结果实际上相差不大,但还是可以看到shot小时,FSL更好;shot大时,UFSL(即UBC-FSL)更好。

在这里插入图片描述

4.大数据集下,自监督更好

这个意思就是,小数据集(数据集中样本数少)下,有监督的预训练效果会更好…

在这里插入图片描述


总结

现在来回顾一下作者的结论
1、对于获得一个良好的特征提取器而言,自监督学习是足够的;
2、更深的特征提取网络带来更好的效果;
3、把自监督训练获得的特征和有监督训练获得的特征结合起来,作为最终特征,效果更好;
4、有监督训练的特征在跨域测试时效果更好。
这篇论文的方法很简明,但结果很惊艳~

我感觉某些结论并不一定是正确的,只是文章作者通过实验获得了这样的结果。如果我们用其他的方法,或者调整超参数重新训练,最终的结论可能是完全相反的。所以,仅是个参考~

不过有一点是确定的,要想用常用的对比自监督方法训练出特别优秀的特征提取器,就一定要有足够的GPU资源啊,还要有时间!需要训练足够久,负样本对足够多,才能成功呀…

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值