【度量学习 · 一】度量学习是什么?
图像分类可以说是人工智能技术最经典的一个应用了,简单一点的像手写数字识别、手写汉字识别,已经大规模地应用在我们的日常生活中了。如下图所示,就是一个经典的手写数字识别的数据集MNIST,其中包括了0到9的十类不同的数字。
更复杂一点的图像分类任务区分的则是一些日常生活中常见的物体,如猫、狗、汽车、飞机等等。从早期的CIFAR数据库,到近年来已经有被刷爆趋势的ImageNet数据库,都属于这个范畴。下图中展示了目前最常用的一个版本的ImageNet数据库,包括1000个不同的类别。在这种复杂的情况下,即使是有经验的人,在对图像进行分类的时候,精度也只能达到97%左右(说出5个标签,有一个标签和图像的内容匹配就算对)。而相比之下,目前我们最先进的算法已经能够达到98%以上的精度了,从某种意义上说已经超越了人类的能力。
但是目前的AI算法也并非是万能的,在做上面这些分类任务的时候,模型的结构往往是如下图所示的。以MNIST手写数字识别的数据为例,目前最主流的做法是使用卷积神经网络(Convolutional Neural Network, CNN)。在这个模型中,网络的前端包含一些卷积、池化、非线性运算操作;网络的后端则是一些全连接层。其中,最后一个全连接层包含的节点数量与数据库上类别的数量相同,用来输出样本属于每个类别的概率。在这个例子中,由于MNIST数据库包含10个不同的类别,所以最后一个全连接层的节点数也是10个。类似地,在ImageNet数据库上,由于数据库包含1000个类别,所以要使用CNN对图像进行分类的话,最后一个全连接层包含的节点数也要是1000个。
我们不妨来深入地分析一下上面这个例子。从介绍中可以看出,在这个结构中,CNN中最后一个全连接层的节点数量等于类别数,这就造成了两个问题:(1)全连接层的可学习参数数量与节点数成正比,也就是说,节点数越多,全连接层的参数也越多;而参数越多,模型也就越容易过拟合到训练集上,即模型在训练集上的表现很好,预测非常精确,但是在新数据上的表现则非常差。(2)模型训练的时候只见过数据库中已经有了的类别,而没出现过的类别则从来没见过,如果真的遇到了这样的样本,模型还是会尽职尽责地输出一组概率值(样本属于训练数据中的类别的概率),但是这样的概率值显然是没有意义的。
为了更好地理解这两个问题,我们来举个直观一些的例子。我们都知道,世界上现在生活着超过70亿人,也就是说有超过70亿张不同的人脸。如果我们要按照上面的方式训练一个模型来识别这70亿人,那么我们就要对全世界的每个人都收集一些照片,这个的难度就已经不是任何人能够办到的了。而且,模型的最后一个全连接层要包含70亿个节点,模型的参数总量将达到上万亿的数量级,这些参数占用的内存将达到TB级别,恐怕连Google和Facebook这样的巨头公司都难以把这个模型读入内存中,就更不要说训练这个模型了。另一方面,世界上每时每刻都有人在出生,也有人在死去,难道为了识别这70亿人,我们还要一直持续不断地去除去世的人的节点,添加出生的人的节点么?恐怕这也是不现实的。
从上面这个例子可以看出来,尽管使用CNN做图像分类任务已经取得了一些成功,但是这种做法并不是万能的,由于参数量和可扩展性两方面的问题,还有很多问题是不适合用这种图像分类算法解决的。
一种解决这个问题的思路就是使用度量学习。与图像分类任务不同,在度量学习任务中,CNN中的最后一层节点数量与类别数的关系要弱得多。我们可以这样理解,度量学习的目标是把样本变换到一个固定维度的特征空间中。在对模型进行训练的过程中,通过施加约束,来保证同类的样本在这个空间中离得近,不同类的样本在这个空间中离得远。就像下边图中展示的这样,在原始的输入空间中(例如图像),不同的类别的样本可能都是混在一起的,但是经过对CNN的训练后,CNN就可以将不同类的样本变换到一个公共的特征空间中,并且在这个公共的特征空间中,同类的样本(相同颜色的图形)都离得比较近,而不同类的样本则自然地分开。
从中不难看出,由于特征空间的维度是固定的,只需要在CNN的最后使用一个固定维度的全连接层即可实现从图像到特征空间的变换,因此度量学习方法的模型对于类别数量并不敏感(当然通常来说,为了区分不同的类别,类别越多特征空间的维度也会越高,但是这个维度的增长速度远没有图像分类中那么恐怖)。另一方面,如果训练数据选取的比较合适,训练目标的设置也比较合理,那么在见到视觉上比较相似的新类别的时候,度量学习模型自然而然地也能将新类型的样本都变换到特征空间中的同一个区域(实际中由于各种干扰因素,并不能完全保证这一点),因此相比于图像分类的模型,在扩展到新类别上的时候效果往往要更好一些。
经过了几十年的发展,学术界在很多应用上都尝试使用了度量学习方法,相应地也提出了很多种不同的度量学习模型训练的目标函数。之后的几次更新中,我会再详细地介绍不同的度量学习方法,以及度量学习方法在计算机视觉领域的一些经典应用。
- 点赞
- 收藏
- 关注作者
评论(0)