大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
对毕设有任何疑问都可以问学长哦!
本次分享的课题是
元学习方法的小样本图像分类算法
1980年,Kunihiko Fukushima提出了第一个卷积神经网络。从那时起,随着计算能力的增强和机器学习圈的持续探索,深度学习算法在计算机视觉任务上不断显示出其强大性能。
2015年,在微软的何恺明及其团队宣布,在ImageNet的图像分类任务上,他们的模型甚至超越了人的表现!在当时,有人可能会说,这有啥了不起的,计算机只是在学习了针对特定任务的数十亿张图像后,才在该任务下表现得比我们更好
但是,除了像Google、Facebook这样的大公司,大部分人无法建立如此庞大的数据集。很多时候,当你从事计算机视觉的分类任务时,可能每个分类标签仅包含一个或两个示例。如果仅用这些少量数据训练Resnet50,结果将会很糟糕。像这样仅从几个样本中进行学习的问题被称为小样本学习(Few-shot Learning)。
几年来,小样本学习问题引起了研究圈越来越广泛的关注,并且已经提出了一些不错的解决方法。目前最流行的方法是使用元学习。
小样本图像分类任务
首先,我们对问题进行定义:
支持集(Support Set):类似训练集,包含N个分类标签,每个标签有K张图片
查询集(Query Set):类似测试集,包含Q张未分类图片
我们的任务是在已有支持集的基础上,如何对查询集中的图像进行准确分类。
我们将上述任务称为N-way K-shot图像分类任务。
当K值很小时(一般K<10),该任务就是小样本图像分类任务了。当K=1时,该任务即为单样本图像分类任务。
图 1 小样本图像分类任务示例
如上图所示,给定支持集中N = 3,K = 2,我们希望将查询集中的Q = 4条狗依次标记为圣伯纳德犬、拉布拉多、哈巴狗、哈巴狗。即使你从未见过任何哈巴狗,圣伯纳德犬或是拉布拉多,这项任务对你来说也不难。但是要令AI解决此问题,就需要使用元学习。
什么是元学习?
1998年,Thrun和Pratt指出,给定一个待解决的任务,若算法“在该任务上的性能随着经验的增加得到提高”,我们认为它在学习;而当给定一系列待解决的任务,我们则认为当一个算法“在每个任务上的性能随着经验的增加和任务数量的增加而提高”时,它能够学会如何学习(Learning to learn),我们将这样的算法称为元学习算法。
元学习并不是学着如何去解决一个特定的任务,而是通过先后学习多个任务逐步提高性能。每次学习新任务时,它就越有能力解决新任务:它在学会如何学习。
一般来说,如果我们要用元学习算法解决任务 T ,那么我们将需要在一系列任务 {Tᵢ} 上进行训练。元学习算法在尝试解决这些任务的过程中获得经验,从而最终解决任务 T 。
我们拿图1中的分类任务来举例,它通过 3 x 2 = 6 张标记图像中的信息来将图片分类为圣伯纳德犬、拉布拉多和哈巴狗。一个训练任务 Tᵢ 可以使用 3 x 2 = 6 张标记图像进行拳狮犬,拉拉布拉多贵宾犬和罗特威尔犬的分类。元训练过程是依次学习任务 Tᵢ 的过程,每次都会有不同品种的狗。我们希望“随着经验和任务数量的增加”,元学习模型将变得更好。最后,我们在任务 T 上评估模型性能。
图 2 元学习举例
如图2所示,我们仅在圣伯纳德犬、拉布拉多和哈巴狗分类任务上评估了元学习模型,但我们在其他所有品种上进行了训练。
那么我们该怎么做呢?
如果我们要解决任务 T(拉布拉多,圣贝纳德和哈巴狗的分类任务),我们需要一个包含不同品种狗的图片的元训练数据集。例如,我们可以使用斯坦福Dogs Dataset,其中包含了从ImageNet提取的2万多张狗的图片。我们将这个数据集称为 D 。请注意,D 中不需要包含任何拉布拉多,圣伯纳德犬或哈巴狗的图片。
我们从 D 中采样,组成一系列episodes。一个episode就是一次选择support set和query set的过程,即选择某几个类别的数据训练一次模型,下一个episode,再选择其他几个类训练模型。一个epoch中存在多个episode。每个episode对应着一个N-way K-shot图像分类任务分类任务 Tᵢ , Tᵢ 通常与任务 T 有相同的 N 和 K 。模型每完成一个episode,模型参数就会更新一次。一般通过反向传播来完成参数更新。
通过这种方式,模型可以从各任务中学习经验,以解决新的小样本分类任务。在传统的分类任务中,模型将学习“图像→标签”的映射关系,而元学习算法通常学习“ 支持集 → c(.) ”的映射,其中 c(.) 是“ 查询集 → 标签 ”的映射。
元学习算法
现在呢,我们已经知道了什么是元学习,但是还有一个问题:元学习模型如何解决小样本分类任务呢?当然了,解决方法有很多种,我们在这里介绍几种最常用的。
度量学习(Metric Learning)
度量学习的基本思想是学习单个数据(如图像)之间的距离函数。它已被证明对于解决小样本分类任务非常有效:度量学习算法通过将查询集图像与已标记的支持集图像进行比较来进行分类。
图 3 右侧图片来自查询集,将它与支持集的每个图像进行比较,查询集图片的类别标签将取决于支持集中哪个图像与其最接近。
当然了,我们不能对图像进行逐像素的比较,因此我们通过特征来比较图片。为了让大家更好地理解,下面我们来看看如何通过度量学习来解决小样本分类任务:
1. 我们从支持集和查询集的所有图像中提取embeddings(通常使用卷积神经网络)。从而,数据集中的每张图像都转变成了对应的一维向量。
2. 查询集中的每张图像都根据它与支持集图像的距离来进行分类。有多种距离函数和分类方法可以选择,比如欧几里德距离和KNN算法。
3. 在元训练过程中,在每个episode结束后,CNN的参数通过损失函数(通常是交叉熵损失)的反向传播进行更新。
注:正如我们之前定义的那样,分类任务包含一个支持集和一个查询集,支持集由已标记图片组成,查询集由待分类图片组成。
在实践中,针对小样本分类任务,度量学习算法可以达到非常好的效果。通过改进特征提取算法和匹配算法,每年都会产生许多新的度量学习方法。
图 4 一种匹配网络。对于支持集图像(左侧)和查询集图像(底部),网络采取了不同的特征提取算法,使用余弦相似度来比较相似性,最后用softmax进行分类
上图所示的匹配网络是由Oriol Vinyals等人提出的第一个使用元学习的度量学习模型[1]。在这种算法中,对于支持集图像和查询集图像,我们采取不同的特征提取算法。Oriol Vinyals团队来自Google DeepMind,他们使用LSTM提取图像特征,将各个类别的样本作为序列输入到LSTM中,从而令模型纵观所有的样本去自动选择合适的特征去度量,他们将其称为全上下文嵌入(Full Context Embedding)。这使得该模型比令所有图像都通过一个简单的CNN时表现得更好,但它对训练时间和GPU资源的需求也更大。
而现在,我们不会将查询集图像与支持集中的每个图像进行比较。多伦多大学的研究人员提出了原型网络(Prototypical Networks)。它从图像中提取特征后,为每个类别计算一个原型。为此,他们分别对每个类计算图像嵌入的平均值。得到原型后,仅需通过计算图像嵌入到原型的欧式距离即可进行分类(如下图所示)。
图 5 在原型网络中,我们将查询集图像X标记为距离最近的原型的标签。
尽管很简单,原型网络仍然能产生SOTA结果(state-of-the-art )。此后,研究人员提出了许多更复杂的度量学习网络,比如表示距离函数(而不是欧式距离)的神经网络,准确率得到了少许提升。但我相信,到目前为止,原型这一想法是在度量学习领域中对小样本图像分类任务最有价值的想法(如果你不赞同,可以在评论中赐教)。
与模型无关的元学习(MAML)
最后,我们来聊一聊与模型无关的元学习(Model-Agnostic Meta-Learning , MAML)模型[2]。MAML是目前最elegant 和最有研究前景的元学习算法之一。它采取了最纯粹的元学习形式,并通过神经网络进行两级反向传播。
MAML的核心思想是训练一个神经网络,使其在少量训练样本的情况下,能够快速地适应一个新的分类任务。接下来我们来看看,MAML是如何在元训练的一个episode中运作的:
假设你有一个神经网络M,其参数为Θ,训练过程如下图所示,
图 6 MAML在元学习中的训练过程
分为4步:
1. 创建 M 的副本(此处命名为 f )并用 Θ 初始化(图中Θ0=Θ)。
2. 在支持集上快速fine-tune网络 f(仅需几次梯度下降)。
3. 在查询集上应用经过fine-tune网络 f。
4. 通过损失函数对网络 M 进行反向传播,并更新参数 Θ 。
然后,在下一个episode中,我们创建一个更新后的模型 M 的副本,在一个新的小样本分类任务上重复上述训练过程。
在元训练过程中,MAML的初始化参数使模型能够快速有效地适应新的小样本分类任务。
说实话,在主流小样本图像分类的评价标准上,MAML目前性能不如度量学习。由于它的两级训练过程,在实践中训练难度很大,因此超参搜索要比普通模型复杂得多。另外,元反向传播需要计算梯度的梯度,所以目前只能通过计算其近似值才能在标准GPU上进行训练。出于这些原因,大家在实际应用中可能更愿意使用度量学习算法。
但之所以MAML模型受到那么多关注,是因为它是模型不可知的。这意味着它实际上可以应用于任何神经网络,任何任务。掌握MAML意味着能够训练任何一个神经网络,使其快速适应新的任务,而且只需要很少的训练样本。MAML的作者Chelsea Finn和Sergey Levine,将其应用于有监督的小样本分类、有监督的回归和强化学习。但只要多努努力,你就可以用它把任何一个神经网络转换成一些高效的神经网络!
海浪学长的作品示例:
大数据算法项目
机器视觉算法项目
微信小程序项目
Unity3D游戏项目
为帮助大家节省时间,如果对开题选题,或者相关的技术有不理解,不知道毕设如何下手,都可以随时来问学长,我将根据你的具体情况,提供帮助。