查阅了一些资料,知道contrastive learning和metric learning的目标都是学习这样一个embedding空间,相似的样本对靠得很近,不同的样本对很远。但是度量学习和对比学习有什么区别呢?我无法理解。
有人可以给些建议吗?谢谢。
根据 ,“度量学习算法基本上旨在找到度量的参数,使其最好地同意(不同意)某些约束,以努力近似底层语义度量”。
根据带有代码的论文,“度量学习的目标是学习将对象映射到嵌入空间的表示函数。嵌入空间中的距离应保持对象的相似性——相似的对象靠近,不同的对象远离. 已经为Metric Learning开发了各种损失函数,例如contrastive loss引导同一类的对象映射到同一点,不同类的对象映射到距离大于margin的不同点。 triplet loss也很流行,它要求锚样本和正样本之间的距离小于锚样本和负样本之间的距离。”
在我看来,对比学习是一种度量学习。
在我看来,度量学习的目的是学习一个嵌入函数,这样两个在概念上(或语义上,即在高层,而不是像素层)相似的样本也应该是在嵌入空间中关闭,其中嵌入通常是 d 维向量。
如果模型正确捕获了相似性函数,您应该能够通过对嵌入空间上的欧几里德距离这样简单的东西进行推理来“比较”样本。
度量学习的一种流行方法是 Siamese Networks,其中您有两个神经网络,其中第二个是第一个的副本(即相同的层和权重)。在训练期间,您以 (anchor, positive) 和 (anchor, negative) 的形式提供数据样本对:基本上,您强制正样本对共享一个公共嵌入,而负样本与锚点分开。实际上,存在这种想法的变体,例如三元组损失和一个或多个“边距”的引入(以防止崩溃的嵌入和明显的解决方案。)
度量学习的主要动机是比较输入空间中的两个数据点通常是无意义和模棱两可的(例如,由于蓝天而不是飞机本身,可以发现飞机图像相似),因为你不能捕获数据的高级(或语义)特征。
相反,对比学习 尝试约束模型以学习输入数据的合适表示。
总而言之,度量学习用于比较数据以了解它们的相似性(如人脸识别),而对比学习则处理学习更好的表示以在各个方面改进模型。我可以补充一点,对我来说,这两个领域都属于所谓的表示学习,这是一个非常通用和广泛的概念。