oneshot单样本学习笔记

mxnet代码:

https://github.com/CanyonWind/Single-Path-One-Shot-NAS-MXNet

NAS ModelFLOPs# of ParamsTop - 1Top - 5Σ Normalized ScoresScriptsLogs
OneShot+ Supernet841.9M15.4M62.9084.497.09scriptlog
OneShot-S+ (ours)291M3.5M75.7592.771.9166scriptlog
OneShot+ (ours)297M3.7M75.2492.581.9937scriptlog
OneShot (ours)328M3.4M74.02*91.602scriptlog
OneShot (official)328M3.4M74.9*92.02--
FBNet-B295M4.5M74.1-2.19--
MnasNet317M4.2M74.091.82.20--
DARTS574M4.7M73.391.33.13--
NASNET-A564M5.3M74.091.63.28--
PNASNET588M5.1M74.291.93.29--

torch实现:

https://github.com/xieydd/Pytorch-Single-Path-One-Shot-NAS/blob/master/model/network.py

以下内容转自:

https://blog.csdn.net/weixin_41481113/article/details/88415546

传统观点一般认为深度神经网络通常比较擅长从高维数据中学习,例如图像或者语言,但这是建立在它们有大量标记的样本来训练的情况下。然而,人类却拥有单样本学习的能力--如果你找一个从来没有见过小铲刀的人,给它们一张小铲刀的图片,他们应该就能很成功的将它从其他厨房用具里面鉴别出来。

(从来没有进过厨房?现在你有机会来测试一下你的单样本学习能力了!右边图像中,哪个是与左边大图片相同类别的?)

这是一个人们认为很容易的飞起,但是直到我们想写一个算法让它去做这件事。。。(那就GG了) 很明显,机器学习系统很希望拥有这种快速从少量样本中去学习的能力,因为收集和标记数据是一个耗时费力的工作。我认为这是通往通用人工智能的漫漫长路中很重要的一步。

最近涌现出来很多有趣的基于神经网络的单样本样本学习论文,它们已经得到了一些不错的结果。这是一个让我激动的新领域,所以我想去对它做一个简要介绍,来让深度学习新手更好的认识它。

在这篇博客中,我想:

  • 介绍并定义单样本学习问题
  • 描述单样本分类问题的基准,并给出一个其性能的baseline
  • 给出一个少样本学习的例子并部分的实现这篇论文中提到的模型
  • 指出一些大家通常不会想到的小点子

关于数据集Omniglot!

Omniglot数据集拥有50种,1623类手写字符。对于每类字符仅有20个样本,每个样本分别由不同的人绘制而成,分辨率为105*105

上面是omniglot数据集的一些例子,如图所示,这里有很多种字符 如果你喜欢机器学习,你肯定听说过MNIST数据集.Omniglot有时被成为mnist的转置,因为它有1623类字符,每类只有20个样本,相比mnist的10个类别,每个类别都有上千样本,正好相反。omniglot还有创作的笔画数据,但是我们这里用不到它。通常,我们把样本分为30类训练样本,剩下20类作为评估。所有这些不同的字符可以组成很多种单样本学习任务,所以它确实是一个单样本学习的一个很好的评估标准。

一个单样本学习的baseline--1近邻

最简单的分类方式是使用k近邻方法,但是因为每个类别只有一个样本,所以我们需要用1近邻。这很简单,只需要计算测试样本与训练集中每个样本的的欧式距离,然后选择最近的一个就可以了:

根据Koch等人的论文,在omniglot数据集中的20类上,单样本分类,1-nn可以得到大约28%的精度,28%看起来很差,但是它已经是随机猜测(5%)的6倍精度了。这是一个单样本学习算法最好的baseline或者“合理性测试”了。

Lake等人的Hierarchical Bayesian Program Learning,层次贝叶斯程序学习(以下简称HBPL)得到了大约95.2%的精度,非常不错。我只看懂了30%,但它非常有趣,它与深度学习直接从原始像素上训练相比,是风马牛不相及的,因为:

  • HBPL使用笔画数据,而不是仅仅用原始像素
  • HBPL在omniglot数据集上学习一个笔画的生成模型,这个算法需要更加复杂的标注,所以不像深度学习能直接从狗、卡车、大脑扫描图以及小铲子等图片的原始像素上去做单样本学习,这种图片也不是由笔画构成的。 Lake等人也指出,人类可以在omniglot数据集20类样本上达到95.5%的精度,仅仅比HBPL高一点。在钻牛角尖思想的引导下,我亲自试验了一下20类任务,达到了97.2%的精度。我并不是做的真正的单样本学习,因为很多符号我本来就认识,因为我熟悉希腊字母、平假名和片假名,我把这些我本来就认识的移除,我还是得到了96.7%的精度。我认为是我从自己吓人的字迹中练就了超人般的字符识别能力。

使用深度神经网络来做单样本学习?!

如果我们单纯的训练一个用交叉熵损失的softmax分类器神经网络来做单样本学习,很明显,网络会严重过拟合。即便是每类给出上百个样本,现代的神经网络依然会过拟合。深度网络有百万级别的参数来拟合训练数据,所以它们可以学习到一个巨大的函数空间(正式来说,是因为它们有一个很高的VC维,这就是为什么它们为什么可以很好的从复杂的高维数据中学习的部分原因)。很不幸的是,神经网络这个优势又成为了它们做单样本学习的一大障碍。当有百万级的参数需要做梯度下降,有这么多可能学习到的映射关系,我们怎么能设计一个网络,让他可以从单个样本去学习呢?

人类很容易从单个样本就能学会小铲刀或者字母\ThetaΘ的意思,因为我们一辈子一直都在从相似对象中观察和学习。把一个随机初始化的神经网络与人类这种花了一辈子时间去识别物体和符号相比,的确不太公平,因为随机初始化的神经网络对数据的映射结构缺乏先验。这也是为什么我看到的单样本学习论文都是采用的从其他任务上的知识迁移方法。

神经网络非常擅长从结构化的复杂/高维数据中(例如图像)提取特征。如果给神经网络与单样本学习任务相似的训练数据,它或许能够从这些数据中学习到有用的特征,这些特征可能不需要调整就能用到单样本学习。这样,我们仍旧能叫他单样本学习,因为辅助的训练数据与单样本测试的数据不是相同的类别。

(注意:这里的特征指的是“被用来训练的数据的映射数据“(译者注:例如经过CNN提取到的特征))

接下来以一个有趣的问题就是我们如何设计一个神经网络让他来学习特征?最显而易见的方法就是用迁移学习(如果有标记数据的话)来做这件事--在训练数据上训练一个softmax分类器,然后在单样本学习任务的数据集上微调最后一层的权重。实际上,神经网络分类器在omniglot数据集上不会有什么良好的表现,因为每类的样本仅有几个,即使是微调最后一层的权重,网络也会在训练集上过拟合。但这种方法也比使用L2距离的k近邻方法要好很多了(参考Matching Networks for One shot learning 中对各种单样本学习方法的效果的比较)。

这里还是有一种方法来做单样本学习的!忘了1近邻方法?这个简单的,非参的单样本学习器计算测试集中的样本与训练集中每个样本的L2距离并选择最近的作为它的类别。这种方法是ok的,但是L2距离会陷入严重的维度灾难问题,所以它在成千维的数据上(像omniglot)上表现不太好。另外,如果你有两个接近相同的图片,如果你把其中一张图片的像素向右移动一点,那么两张图片的L2距离会从0一下子变得非常高。L2距离在这种任务上是一个非常糟糕的度量。深度学习能奏效吗?我们可以使用深度卷积神经网络来学习一种非参的近邻分类器可以使用的相似性函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值