N-Shot Learning: 用更少的数据学习更多

        如果人工智能是新电力,那么数据就是新的煤炭。不幸的是,就像我们已经看到可用煤量的危险消耗一样,许多AI应用程序很少或根本没有可访问的数据。新技术弥补了物质资源的不足; 同样,需要新技术以允许具有少量数据的应用程序令人满意地执行。 这是一个非常受欢迎的领域的核心问题:N-shot Learning。

N-Shot Learning

        无论如何,你可能会问,到底什么是shot?很好的问题。one-shot只是一个可用于训练的例子,所以在N-shot学习中,我们有N个训练样本。而few-shot learning中的few一般是0到5之间包括0和5.这就是如果有0个样本那就是zero-shot learning, 一个样本就是 one-shot learning,以此类推。所有的这些变体,都试图使用不同的数量的训练样本解决同一个问题。

Why N-Shot?

         我们都已经在ImageNet中出现不到4%的错误时,为什么还需要这个呢?首先,ImageNet的数据集包含大量机器学习的样本,在医学成像,药物发现和许多其他AI非常重要的领域并非总是如此。典型的深度学习架构依赖于大量数据来获得好的结果 - 例如,ImageNet需要在准确评估新图像作为热狗之前训练数百个热狗图像。一些数据集,就像7月4日庆祝活动后的冰箱,在热狗方面非常缺乏。

         有许多用于机器学习的情景,其中数据稀缺,这就是这种技术的用武之地。我们需要训练一个深度学习模型,该模型具有数百万甚至数十亿个参数,都是随机初始化的,以学习使用不超过5个图像训练样本来对看不见的图像进行分类。简而言之,我们的模型必须使用非常有限数量的热狗图像进行训练。

          要处理像这个问题一样复杂的问题,我们需要首先明确定义它。在N-shot学习中,我们有对k类中,每一类有n个训练样本,既:一共有N*K个训练样本,我们把这个叫做支持集(support set S). 我们必须有一个查询集(Query Set Q), 其中每一个实例是这K类中的某一类。N-shot 学习有三个主要的子集:zero-shot learning, one-shot learning and few-shot learning.每个人都值得个别关注。

Zero-Shot Learning

对我来说,这是最有趣的子领域。它的目标是在没有单个训练示例的情况下对看不见的类进行分类。

机器如何在无需使用任何数据情况下“学习“?这样想吧。 你可以在没有看到它的情况下对物体进行分类吗?

                                                                                        在夜空的仙后座

是的,如果您有足够的有关其外观,属性和功能的信息,则可以。回想一下你是如何从小就理解这个世界的。你可以在阅读了它的颜色和那天晚上的位置之后在夜空中发现火星,或者从仅被告知“这基本上是一个畸形的'W'”中识别出仙后座。

      根据今年的NLP趋势,zero-shot学习将变得更加有效。

      机器利用图像的元数据来执行相同的任务。 元数据只是与图像相关的功能。 以下列出了该领域的一些论文,取得了很好的成果。

One-Shot Learning

在one-shot学习中,我们每个类只有一个训练样本。现在的任务是使用该约束将任何测试图像分类到类。为实现这一目标,我们开发了许多不同的架构,例如Siamese Neural Networks,它带来了重大进步并取得了卓越的成果,然后是匹配网络,这也帮助我们在这一领域取得了巨大的飞跃。

现在有很多优秀论文可以理解一次性学习,如下所示。

Few-Shot Learning

Few-shot学习只是one-shot学习的一个灵活版本,其中我们有多个训练样本(通常是两到五个图像,尽管大多数上述模型也可用于few-shot 学习)。

在2019CVPR期间提出了针对 Few-Shot Learning的元转移学习,该模型开创了未来研究的先河; 它给出了最先进的结果,并为更复杂的元转移学习方法铺平了道路。许多这些元学习和强化学习算法与典型的深度学习算法相结合,以产生显着的结果。 Prototypical networks 是最流行的深度学习算法之一,并且经常用于此任务。

在本文中,我们将使用Prototypical Networks完成此任务,并了解其工作原理及其工作原理。In this article, we’ll accomplish this task using Prototypical Networks and understand how it works and why it works.

The Idea Behind Prototypical Networks

                               

                 Prototypical Networks的功能图。编码器将图像映射到嵌入空间中的矢量(黑圈)。支持图像用于定义原型(星星)。原型和编码以后的查询图像的距离被用来分类他们。

与典型的深度学习架构不同,原型网络不直接对图像进行分类,而是在度量空间中学习图像的映射。

对于需要联系数学的人来说,度量空间处理“距离”的概念。它没有明显的“起源”点; 相反,在度量空间中,我们只计算一个点到另一个点的距离。因此,您缺少向量空间中的加法和标量乘法运算(因为与向量不同,点只表示坐标,添加两个坐标或缩放坐标是没有意义的!)。点击 this 去学习更多关于向量空间和度量空间的不同。

现在我们已经有了这样的背景,我们可以开始理解原型网络如何不直接对图像进行分类,而是学习图像在度量空间中的映射。从上图中可以看出,编码器将相同类别的图像映射到相近的位置,而不同的类别以相当大的距离间隔开。这意味着无论何时给出新的示例,网络只检查最近的集群并将示例分类到其对应的类。将图像映射到度量空间的原型网络中的基础模型可以称 “Image2Vector”模型,其是基于卷积神经网络(CNN)的架构。

现在对于那些对CNN知之甚少的人,你可以在这里阅读更多内容:

A brief Introduction to Prototypical Networks

简单地说,他们的目标是训练分类器。然后,该分类器可以对关于在训练期间不可用的新类进行一般化,并且仅需要每个新类的少量示例。因此,训练集包含一组类的图像,而我们的测试集包含另一组类的图像,这些图像与前一类完全不同。在此模型中,示例被随机分为支持集和查询集。

Overview of Prototypical Network

Few-shot prototypes Ckare computed as the mean of embedded support examples for each class. The encoder maps new image(XX) and classifies it to the closest class like C2C2 in the above image. Source

在few-shot learning的背景下,一个训练迭代成为一个episode,一个episode只不过是我们训练网络一次,计算损失并反向传播错误的一步。在每一个episode下, 我们随机的从训练集中选择Nc个类, 对于每一个类,我们随机的取样Ns张图片。这些图像属于支持集(support set)并且学习模型被称为Ns-shot模型。获得另一些随机采样的Nq张图像,其属于查询集(query set)。这里Nc,Ns和Nq只是模型中的超参数,其中Nc是每次迭代的类数,Ns是每个类的支持示例数,Nq是每个类的查询示例数。之后,我们把支持集图像传入Image2Vector模型生成D-维的点。此模型对度量空间中对应点的图像进行编码。对于每个类,我们现在有多个点,但我们需要将它们表示为每个类的一个点。因此,我们计算每个类的几何中心,即点的平均值。 之后,我们还需要对查询图像进行分类。为此,我们首先需要将查询集中的每个图像编码为一个点。 之后,计算从每个质心到每个查询点的距离。 最后,预测每个查询图像位于最接近它的类中。 这就是模型的总体运作方式。

但现在的问题是,这个“Image2Vector”模型的架构是什么?

Image2Vector function

                                                        Image2vector CNN architecture used in the paper.

出于所有实际目的,使用4-5个CNN块。如上图所示,每个块由CNN层和批量标准化组成,然后由ReLu激活函数组成,该函数通向最大池层。在所有块之后,剩余的输出被压平并返回结果。这个结构是用在 paper中的你可以使用你喜欢的任意结构。有必要知道虽然我们称之为“Image2Vector”模型,但它实际上将图像转换为度量空间中的64维点。要了解更多的区别, 点击 math stack exchange 

Loss function

                                                       The working of negative log-likelihood. Source.

现在我们知道模型是如何工作的,您可能想知道我们将如何计算损失函数。我们需要一个足够强大的损失函数,使我们的模型能够快速有效地学习表示。原型网使用log-softmax损失,只是在softmax上的log而已。当log-softmax无法预测正确的类时,它会对模型产生严重的惩罚,这正是我们所需要的。要了解有关损失函数的更多信息,请访问此处here 这是关于softmax和log-softmax的非常好的讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值