N-Shot学习:用最少的数据训练最多的模型。
田字一中(郑州大学)和野调(江苏科技大学)
点评|李唐,皮塔
如果把AI比作电,那么数据就是创造电的煤。
不幸的是,正如我们看到可用的煤炭是消耗品一样,许多人工智能应用程序很少或没有数据可访问。
新技术弥补了物质资源的不足;还需要新的技术来保证程序在数据很少的情况下正常运行。这正在成为一个非常热门的领域,核心问题:N-shot学习。
1.n次学习
你可能会问,什么是镜头?好问题。shot只使用一个样本进行训练。在N-shot学习中,我们有N个训练样本。“小样本学习”这个术语中的“小”通常在0到5之间,也就是说,训练一个没有样本的模型叫做零拍,一个样本就是一拍学习,以此类推。
1-1为什么需要N拍?
我们在ImageNet中的分类错误率小于4%。我们为什么需要这个?
首先,ImageNet的数据集包含许多机器学习的例子,但在医学成像、药物发现和AI可能至关重要的许多其他领域,情况并非总是如此。典型的深度学习架构依赖于大量的数据训练来获得可靠的结果。例如,ImageNet需要训练数百张热狗图像,才能判断一张新图像是否是热狗。有些数据集,像7月4日庆典后冰箱里没有热狗,非常缺乏图像。
机器学习的很多案例数据非常匮乏,这也是N-Shot技术发挥作用的地方。我们需要训练一个深度学习模型,有几百万甚至几十亿个参数(都是随机初始化的),但是可以用来训练的图像不超过五个。简单来说,我们的模型必须用非常有限的热狗图像进行训练。
处理这么复杂的问题,首先需要知道N拍的定义。
对我来说,最有趣的子领域是零拍学习。该领域的目标是在没有训练图像的情况下对未知类别进行分类。
在没有任何数据可用的情况下,如何训练和学习?
想想这种情况。你能给一个未知的物体分类吗?
夜空中的仙后座(来源:/constellation/仙后座)
可以,如果你对这个物体的外观、属性、功能有足够的了解,就可以实现。想想你小时候是怎么理解这个世界的。晚上知道火星的颜色和位置后,就可以在夜空中找到火星。或者你可以通过知道仙后座基本上是天空中一个变形的‘W’来识别仙后座。
按照今年NLP的趋势,零射学习会变得更有效(/ten-trends-in-deep-learning-NLP/# 9-Zero-shot-learning-will-been-more-effective)。
计算机使用图像的元数据来执行相同的任务。元数据只是与图像相关联的功能。以下是这方面的几篇论文,取得了优异的成绩。
在一次性学习中,我们每个类别只有一个例子。现在的任务是用一幅图像进行训练,最后将测试图像分成不同的类。为了实现这个目标,出现了许多不同的体系结构,例如连体神经网络(/questions/1 149 40/what ' s difference-between-metric-spaces-and-vector-spaces)。
现在我们已经了解了这个背景,可以开始了解原型网络是如何不直接对图像进行分类,而是在度量空间中寻找图像之间的映射关系的。如上图所示,同一类的图像经过编码器映射后彼此距离很近,而不同类的图像距离很远。这意味着无论何时给出新的示例,网络只需要检查新示例的最接近的图像集,并将示例图像分类到其相应的类别中。原型网络中把图像映射到度量空间的基本模型可以称为“Image2Vector”模型,这是一种基于卷积神经网络(CNN)的架构。
现在,对于那些不知道CNN的人,你可以在这里阅读更多内容:
简单来说,他们的目标是训练分类器。然后,分类器可以概括训练期间不可用的新类别,并且只需要每个新类别的几个示例。因此,训练集包含一个类别的图像,而我们的测试集包含另一个类别的图像,这与之前的组完全无关。在该模型中,实例被随机分为支持集和查询集。
少数镜头原型ck计算为每类嵌入支持示例的平均值。编码器映射新图像(X)并将其分类到最接近的类中,例如上图中的C2(source:/questions/64 5672/what-is-a-point-and-a-vector)。
负对数概率原理,来源:/brendenlake/omnilot)
该网络在Omniglot数据集(/brendenlake/omniglot)上进行训练。Omniglot数据集是专门为开发更类似于人类学习的算法而设计的。它包含50个不同的字母,1623个不同的手写字符。为了增加类别数,将所有图像分别旋转90度、180度和270度,每个旋转后的图像视为一个新的类别。所以总类数达到了6492 (1,623+4)类。我们用4200类图像作为训练数据,剩下的用于测试。对于每个集合,我们根据64个随机选择的类中的每个示例来训练模型。我们对模型进行了1小时的训练,达到了88%左右的准确率。官方文件显示,经过几个小时的训练和一些参数的调整,准确率达到了99.7%。
是时候自己动手了!
您可以通过访问以下链接轻松运行该代码:
代码地址:/hsankesara/prototypic-networks
运行地址:/run?template =/Hsankesara/prototypic-Networks
让我们深入学习代码!(向左滑动查看完整代码)
以上代码是Image2Vector CNN结构的一个实现。其输入图像的尺寸为28*28*3,其返回的特征向量的长度为64。
上面的代码片段是原型网络中单个结构的实现。如果您有任何问题,请在评论中提问或在此提问。非常欢迎您的参与和评论。
网络概述。来源:/n-shot-learning/
本文由雷锋字幕组成员翻译,这是一个由AI爱好者组成的字幕翻译团队。团队成员包括大数据专家、算法工程师、图像处理工程师、产品经理、产品运营、IT顾问、在校师生;志愿者来自IBM、AVL、Adobe、阿里、百度等知名企业,以及北大、清华、港大、中科院、南卡罗来纳大学、早稻田大学等国内外高校的科研院所。了解字幕组请加微信~