度量学习:让相似更近、异异更远

很多任务的核心不是「这是什么类」,而是「这两样有多像」。推荐去重、以图搜图、人脸验证,本质都在比较。度量学习(Metric Learning)的目标就是学出这样一个距离函数:把判断任务需要的「相似」直接编码进空间结构里,让同类样本自动聚拢、异类自然散开。

与分类、孪生网络的关系

分类模型学的是「输入到类别」的映射,最后一层往往绑定了固定的类别集合,换个新类就得重训。度量学习则学「输入到向量」的映射,相似度由向量间的距离给出,类别是开放可扩展的。孪生网络是实现度量学习的一种经典结构:它的对比损失、三元组损失,本质上都是在优化这个嵌入空间里的距离关系。

常用损失函数

最主流的优化目标有这样几类:

  • 对比损失:成对训练,同类拉近、异类推远到边界之外。
  • 三元组损失:锚点、正例、负例三者约束,要求正例比负例更近,并保留一个间隔。
  • 分类式损失(如基于 softmax 的嵌入):把嵌入送入一个可学习的度量头,间接优化区分度。

其中难例挖掘很关键:一味用容易区分的样本训练,模型学不到边界信息;挑出「靠得近的异类」与「离得远的同类」重点打磨,空间质量会明显提升。

嵌入空间里的取舍

一个好度量并不只是「分开了」就行,还要兼顾:

  • 泛化:对没见过的新类也要保持合理的距离关系。
  • 紧凑:向量维度不宜过高,否则距离计算昂贵且容易过拟合。
  • 稳定:同一个体的不同拍摄、不同表述应当映射到邻近区域,不能因无关变化而跳变。

这往往需要在损失里同时约束类内紧凑与类间可分,而不是只盯住一边。

落地场景

度量学习常见于人脸识别、商品检索、声纹验证、文本语义匹配等需要「比较而非列举」的场景。它特别适合类别多、新增频繁或每类样本少的业务:新增一个类别不需要重新训练整套分类器,只要把新样本嵌入后参与比较即可。

小结

度量学习把目标从分类转为学习距离函数,让同类在嵌入空间聚拢、异类散开。它与孪生网络一脉相承,靠对比或三元组等损失优化空间结构,并以难例挖掘提升边界质量,因此在开放类别、少样本与检索匹配类任务中格外有用。

参考与延伸阅读

  • Kulis, Belongie 等关于度量学习的综述与近邻约束方法。已核验。
  • Schroff et al. FaceNet(CVPR 2015)中的三元组损失实践。已核验。
  • 各开源度量学习库对采样策略与默认超参的实现差异,以对应项目文档为准。待核实。
本文累计阅读