0%

度量学习

Metric Learning

度量学习(metric learning)的目的是度量样本之间的相似性,同时使用最优距离度量进行学习任务

传统的度量学习方法通常使用线性投影,在解决非线性特征的现实世界问题时受到限制(例如典型的文本中的语义相似度问题,很难保证直接通过线性变换的方式使得相似的样本在转换后的特征空间也相似)。在传统的度量学习中常使用核方法来解决这个问题。近年来,深度度量学习通过激活函数为数据的非线性变换提供了更好的解决方案,引起了许多领域研究人员的关注。本文旨在揭示深度度量学习的重要性,并结合近年来的研究发现深度度量学习存在的问题。在这一领域的研究中,现有的研究大多是受到Siamese和Triplet网络的启发,在深度度量学习中使用共享权值来实现样本间的关联。这些网络的成功是基于它们理解样本之间相似关系的能力。此外,采样策略、合适的距离度量和网络结构是研究人员提高网络模型性能的挑战性因素。这篇文章的重要性在于,它是第一个将这些因素作为一个整体进行系统的分析和评价,并通过比较方法的定量结果来支持的综合性研究。

总结:metric learning研究的是通过对原始数据进行变换使得变换后的数据能够满足我们人工认定的某种相似度度量,这里的度量可以是简单的计算指标,例如文本相似度中的cosine similarity,overlap similarity,jaccard similarity,也可以是复杂的人工判定,例如语义相似度,情感相似度等等;

传统的机器学习技术受到原始数据处理能力的限制。因此,它们需要特征工程,如在分类或聚类任务之前的预处理和特征提取步骤。所有这些步骤都需要专业知识。而深度学习直接在分类结构中学习更高层次的数据。这种观点显示了传统机器学习方法和深度学习之间的根本区别。与传统的机器学习方法不同,深度学习需要大量的数据才能获得成功的结果,因为深度学习在数据量较低的情况下不够成功。

各种距离计算原理与代码

马氏距离讲的很好

欧式距离

image-20220505192219871

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch
import torch.nn as nn
import torch.nn.functional as F

def euclidean_dist(x,y):
m,n = x.size(0),y.size(0)
xx = torch.pow(x,2).sum(1,keepdim=True).expand(m,n)
yy = torch.pow(y,2).sum(dim=1,keepdim=True).expand(n,m).t()
dist = xx + yy
dist.addmm_(1,-2,x,y.t())
dist = dist.clamp(min=1e-12).sqrt()

return dist

余弦距离

严格来讲余弦距离不是距离,而只是相似性。其他距离直接测量两个高维空间上的点的距离,如果距离为0则两个点“相同”;余弦的结果为在[0,1]之中,如果为 1,只能确定两者完全相关、完全相似。

假设两用户同时对两件商品评分,向量分别为(3,3)和(5,5),这两位用户对两件商品的喜好其实是一样的,余弦距离此时为1,欧式距离给出的解显然没有余弦值直观。

对于点X和点Y,其余弦距离:

在这里插入图片描述

余弦距离在给文本分类的词袋模型中使用,例如给一篇文章一共出现过6000个词,则用一个6000维度的向量X表示这篇文章,每个维度代表各个字出现的数目;另外一篇文章也恰好只出现过这6000字,用向量Y表示该文章,则这两篇文章相似度可以用余弦距离来测量。

优点:余弦距离根据向量方向来判断向量相似度,与向量各个维度的相对大小有关,不受各个维度直接数值影响。
某种程度上,归一化后的欧氏距离和余弦相似性表征能力相同。

1
2
3
4
5
6
7
8
9
def cosine_dist(x,y):
bs1, bs2 = x.size(0),y.size(0)
frac_up = torch.matmul(x,y.transpose(0,1))
frac_down = (torch.sqrt( torch.pow(x,2).sum(dim=1) ).view(bs1,1).repeat(1,bs2)) * \
(torch.sqrt( torch.pow(y,2).sum(dim=1).view(1,bs2).repeat(bs1,1) ) )
cosine = frac_up/frac_down
cos_d = 1 - cosine
return cos_d

Deep metric learning的pipeline(使用步骤)

深度度量学习的pipeline主要包括三个主要部分:

1.输入样本的选择和准备;

2.网络模型结构的设计;

3.度量损失函数的设计和选择

deep metric leanring的核心在于最小化同类的类内距离,最大化不同类的类间距离

deep metric learning的研究中主要集中在loss function的设计和选择上,但是在实际应用中,输入样本选择和准备,在分类或聚类中也起着非常重要的作用。合理的样本输入是提高deep metric learning成功的最重要因素之一。

而deep metric learning中研究的loss function则复杂得多,因为deep metric learning的核心目标是类内更近,类间更远,所以其loss function基本上是围绕这个目标来设计的。 当然,这种方法和常规的方法之间的切换成本不高,因为我们要做的其实就是 准备好适合这种loss function的输入样本的形式,例如从 二元组输入到三元组输入,网络结构不变,改变loss function,开发成本不高的

image-20220428160601946