一文弄懂零样本和少样本学习

智能科技扫地僧 2024-06-20 07:29:59

01

引言

嗨,各位朋友,在正式开始之前,我想请大家回答一个简单的问题。下图中的物体是什么?

是的,你是对的。这是一张流浪猫的图片。给你一张图片,你很容易就能认出流浪猫,因为你已经见过成千上万只流浪猫的照片了。但是,让我们把这个问题变得更难一些。你从没见过我家的猫,肥狸。现在,我想通过提供一些有关肥狸的辅助信息,让大家在不同的猫中一眼认出来。

肥狸是一只矮胖的狸花猫,它的毛色是豹纹的式样,就像一个行走的小豹子。他圆滚滚的肚子显示他从不错过一顿饭。它的样子既调皮可爱又有威严。

好吧。鉴于上述关于我家猫的额外信息,我想让大家从下面不同的猫中认出它来。现在让我们来回答,你认为下面哪只猫是肥狸?

如果你选择了第二项,那么恭喜你。你是一名优秀的零样本学习高手!

作为人类,我们是天生的零样本学习者。通过我向大家提供的关于我的猫的关键细节,大家成功地从猫的空间中分辨出了肥狸。这背后的原因是:你知道这些单词在视觉上代表什么,因此大家能正确地将语言语义信息与图像联系起来。

那么,关键问题来了:计算机也能运用同样的策略吗?

02

为什么需要零样本学习?

传统的图像分类任务只是期望模型可以预测未见过图像的类别,而零样本学习则旨在预测从未见过的类别。对于原始图像分类任务来说,为每个类别收集大量训练数据对于最终拥有一个稳健的模型非常重要。然而,要获得大量的标注数据并不总是那么容易。例如,你可能想训练一个分类器来识别一种非常罕见的野生动物。在这种情况下,为这类生物收集大量视觉数据可能并不容易。但是,通过零样本学习,模型可以使用新物种的描述或属性(如栖息地、物理特征和行为)对其进行正确分类,即使它以前从未见过这种物种。

对于非专业人员来说,区分所有这些树种相当复杂

另一方面,有时标注过程的成本很高。在某些情况下,区分类别的关键特征可能非常复杂,只有一些领域专家才知道。同样,在这种情况下,拥有大量标注数据并不容易。零样本学习可以使模型将现有类别中的知识归纳到新的、未标记的类别中,从而减少对此类大量数据集的依赖。

03

应用零样本学习

在零样本学习中,数据被分为三大类:

Seen Classes: 用于训练模型的类别。Unseen Classes: 未知类别,模型需要能够在没有任何特定训练的情况下进行分类的类别。在训练过程中没有使用这些类别的数据。Auxiliary Information:辅助信息;由 Word2Vec 等技术提供的关于所有未见类别的描述、语义信息或嵌入向量。这对于解决 "零样本学习"问题十分必要,因为我们没有未知类别的标注示例。

零样本学习包括训练和推理两个步骤。在训练过程中,模型学习已标注好的数据样本集。在推理过程中,模型利用这些知识和辅助信息对一组新的类别进行分类。

训练阶段非常简单:我们使用ImageNet等通用数据集来训练分类模型,其中包括我们已知类别的样本。如前所述,我们没有任何未知类别的图像样本。此时,我们利用辅助信息来表示未见类别。

使用 Word2Vec 向量来表示类别嵌入是一种合适的方法。在 Word2Vec向量空间中,用两个向量表示的两个词在同一文档中经常出现或具有语义关系,那么这两个向量的位置就很可能很接近。

最后,我们要做的就是:我们将使用图像嵌入(图像特征向量)及其相关类别单词嵌入(单词 Word2Vec)来训练。这样,网络基本上就能学会如何将给定的输入图像映射到 Word2Vec 空间中的向量上。训练完成后,当网络获得属于零样本类别的物体图像时,网络就能提取一个向量作为输出。然后,通过使用该输出向量(测量其与我们拥有的所有类别向量(包括训练样本和零样本数据)的距离),我们就能对其进行分类。

简而言之,创建零样本学习分类器就是简单地学习从未知空间(用于图像识别的视觉特征)到已知空间(文本特征或其他类型的辅助信息)的映射函数。整个过程如上图所示。即使没有 "Dog"类别的标注训练样本,在推理过程中向网络提供 "Dog"类别的测试图像时,它也会在类别嵌入空间中被映射到相对接近于 "Dog"类的向量。最终,通过计算预测向量与所有标签向量的距离,网络将能够正确地对模型在训练过程中从未展示过的 "Dog"类测试图像进行分类。

04

少样本学习

我们刚刚学习了零样本学习的关键概念,即预测一个在训练中从未见过的类别。现在,我们要研究一种类似但稍好的情况。如果某个类别没有训练样本,可以通过零样本学习来解决,但如果某个类别的数据量非常少呢?让我们再举一个例子:

在这里,我一共向大家展示了 4 幅图片。左边两张是犰狳,右边两张是穿山甲。您可能从未听说过这两种动物,但这并不重要。只需注意它们的不同之处,并试着区分这两种动物。

现在我给你一张图片,请回答:你认为这是犰狳还是穿山甲?

没错,这是穿山甲。你可能从未听说过这两种动物,但您却能仅凭 4 张图片样本就将它们区分开来。同样,作为人类,我们是天生的少样本学习高手。我们有能力根据这么少的数据做出预测。那么,这部分的关键问题就来了:计算机也能做到这一点吗?

这种情况相比标准分类问题更难。我们拥有的样本数量太少,无法训练深度神经网络。请牢记前两张图提供的术语:Support Set和 Query。

Support Set集是一个很小的样本集,对于训练传统分类模型来说太小了。少样本学习就是基于这非常有限的样本量进行预测的问题。从这个角度看,少样本学习的目标与传统图像分类问题有所不同。传统分类问题的目标是让模型识别训练集中的图像,然后将其泛化到测试集中。

标准图像分类示例。测试样本是已知类别中未见过的图像。

相反,少量学习的目标是学会学习。在这里,我们并不指望模型知道什么是老虎或大象。我们的目标不是学习类别之间的区分界限。相反,我们的目标是了解物体之间的相似性。训练完成后,我们可以将两张图片作为输入展示给模型,并询问这两张图片是否是同类物体。

05

少样本学习示例

我们来举个例子针对少样本学习进行更加详细的说明,训练数据如下:

参考上述图像,在少样本学习中。训练数据共有 5 个类别,其中不包括水獭类别。因此,模型无法识别水獭。但是,当我们提供两张水獭图片作为输入时,即使模型从未见过水獭,它也能非常有把握地判断出这两张图片是同一类物体。利用这一策略,我们就能在推理过程中轻松利用少样本学习模型--它能为我们提供两个物体之间的相似度得分。

我有这样一张上述查询图片。我把它给模型看,然后问:这张图片中的物体是什么?目前,模型无法回答我的问题,因为它在训练过程中从未见过这种物体。然后,我向模型提供了这些附加信息。

我向模型展示了另外6幅辅助图像,并进一步告诉它们分别是狐狸、松鼠、兔子、仓鼠、水獭和海狸。此时,模型就可以轻松回答我的问题了。模型会将查询图像与Support Set中的 6 幅图像逐一进行比较。由于我们的模型经过训练,知道两个对象之间的相似性,因此它可以正确地分类出查询图像是水獭。

06

少样本学习过程

在少样本学习中,数据有三种不同的表示方式:训练集、支持集和查询样本:

查询样本是以前从未见过的属于未知类别。上图中,查询样本是一只兔子。它不属于训练时使用的类别。因此,模型不知道查询样本的类别是什么。为了解决这个问题,我们为模型提供了额外的信息。我们向它展示了支持集,即一组带有图像和相应标签的数据。通过比较查询,模型可以找到与兔子最相似的查询。

07

孪生网络

我们已经了解了少样本学习方法的核心思想。现在,我们将学习如何建立一个能够识别两个物体之间相似度的网络。孪生网络Siamese Network的名字来源于连体双胞胎,用于计算两个物体之间的相似度得分。连体婴儿是指两个出生时身体相连的婴儿。因此,连体网络就是相互连接的多个相同网络。

观察上面看到孪生网络示例的可视化效果。其处理流程如下:

首先,从子神经网络中提取两幅输入图像的特征。它可以是多种 CNN 架构之一,如视觉领域的 VGG、ResNet 等。(请注意,上述两张老虎图像的输入都来进入同一个 f 函数。在这里,使用同一个网络进行图像特征提取)。然后,计算出表示特征向量之间差值的向量 z。之后,会使用几个全连接层来处理这个z向量。最后,应用sigmoid激活函数得出0-1之间的最终相似度得分。

要训练这样一个网络,需要一个由正负图像对组成的训练集。假设有三个名为 x1、x2 和 x3 的样本,其中 x1 和 x2 属于同一类别,而 x3 属于不同类别。我们需要在成对的图像中,相同类别的图像相似度得分为 1,不同类别的图像相似度得分为 0。因此,最终的训练集应该如下所示:

如果我们回到有 5 个类别的原始训练数据,我们最终可以得到一个样本训练集,用于训练孪生网络示例样本如下:

通过使用这个训练集和一个适当的损失函数来训练孪生网络,我们最终可以获得一个网络来评估两个输入对象之间的相似性。利用这个网络,计算机甚至可以像我们人类一样,在极少的监督下识别物体。

08

总结

本文重点介绍了零样本和少样本学习的原理及核心思想,可以帮助大家提升对这些概念的认知!

您学废了吗?

0 阅读:0

智能科技扫地僧

简介:感谢大家的关注