资讯

度量学习是什么?让模型学会什么叫“相似”

2026-11-053 分钟阅读百科
TL;DR度量学习(Metric Learning)是从数据中学习一个合适的距离或相似度函数,使相似样本距离近、不相似样本距离远的机器学习方向,经典方法有马氏距离学习、NCA、LMNN,深度度量学习使用对比损失、三元组损失等训练神经网络,广泛用于人脸识别、图像检索、推荐和向量检索。

度量学习(Metric Learning),也叫距离度量学习或相似度学习,是一类从数据中学习“如何衡量样本之间的距离或相似程度”的机器学习方法。它的目标是学到一种距离,使得在这种距离下,相似的样本彼此靠近,不相似的样本彼此远离。

为什么需要学习距离

很多机器学习方法都依赖于样本之间的距离:K 近邻分类根据最近的邻居来判断类别,K 均值聚类把距离近的样本归为一簇,图像检索要找出与查询图片最相似的图片。最常用的是欧氏距离,但它把所有的特征看作同等重要,而且只能衡量原始特征上的差异。在很多问题中,这并不符合我们对“相似”的理解。比如在人脸识别中,同一个人在不同光照、角度、表情下拍摄的两张照片,在像素上可能差别很大,欧氏距离很远;而两个不同的人在相同的光照和角度下拍摄的照片,像素上可能反而更接近。我们希望的“相似”,是指“是不是同一个人”,而不是“像素是否接近”。这就需要根据具体的任务,学习一种合适的距离。

经典的度量学习方法

早期的度量学习主要学习马氏距离:它相当于先对数据进行一个线性变换,再计算欧氏距离。学习的目标就是找到一个合适的线性变换,让同类的样本在变换后靠得更近、不同类的样本离得更远。代表性的方法有:Eric Xing 等人在 2002 年提出的方法,在“相似的样本对”和“不相似的样本对”的约束下学习距离;近邻成分分析(NCA),由 Jacob Goldberger 等人在 2004 年提出,直接优化 K 近邻分类的期望准确率;大间隔最近邻(LMNN),由 Kilian Weinberger 和 Lawrence Saul 在 2005 年提出,要求每个样本的同类近邻比异类样本至少近一个间隔。

深度度量学习

深度学习兴起之后,人们用深度神经网络来代替简单的线性变换:网络把每个输入,比如一张图片,映射成一个嵌入向量,然后在这个嵌入空间中计算欧氏距离或余弦相似度。训练的目标是让相似样本的嵌入向量靠近、不相似样本的嵌入向量远离。常用的损失函数包括:对比损失,对于每一对样本,如果它们相似,就惩罚它们之间的距离,如果不相似,就要求它们的距离至少大于一个间隔;三元组损失,每次取三个样本:一个锚点样本、一个与它相似的正样本、一个与它不相似的负样本,要求锚点到正样本的距离比到负样本的距离至少小一个间隔。谷歌在 2015 年提出的人脸识别系统 FaceNet 就使用了三元组损失。此外还有多种基于分类改进的损失,比如人脸识别中广泛使用的 ArcFace,以及自监督学习中常用的 InfoNCE 对比损失。训练时如何挑选“难”的负样本,也就是那些容易被搞混的样本,对效果有很大的影响。

应用

人脸识别和人脸验证:把人脸照片映射成嵌入向量,判断两张照片是否是同一个人,只需比较它们的向量距离,即使是训练时从未见过的人也可以处理。图像检索和以图搜图:在海量的图片中找出与查询图片相似的图片。行人重识别:在不同摄像头拍摄的画面中找出同一个人。推荐系统:学习用户和物品的嵌入,让用户与他喜欢的物品在嵌入空间中靠近。文本的语义检索:用嵌入模型把文本转换成向量,语义相近的句子在向量空间中靠近,这是检索增强生成和向量数据库的基础。CLIP 等图文模型通过对比学习,把图片和描述它的文字映射到同一个空间中,也是一种度量学习。