一文讲通机器学习的距离、相似度和分布散度
在机器学习中,我们经常需要回答一个基础问题:
两个对象到底有多相似,或者多不同?
这里的对象可以是两个特征向量,也可以是两张图片的embedding、两个句子的语义表示,甚至是两个概率分布
例如,在图像检索中,我们希望判断两张图片在特征空间是否接近;在聚类中,我们需要判断不同样本是否应当划分到同一个簇;在分类任务中,我们可能需要衡量模型预测分布和真实标签分布之间的差异。
为了描述这些关系,机器学习经常会用距离来度量。严格来说,距离、相似度、相异度和散度并不是完全相同的概念
距离
距离用于衡量两个对象的差异程度,值越小差异越小。具有
- 非负性、
- 同一性(两个对象完全相同,或具有可比性)、
- 对称性(x到y的距离的与y到x的距离)、
- 三角不等式(x到y的距离不超过x到y+y到z的距离)
满足者四个条件的距离,称为度量。
距离往往同时关注方向和长度,而相似度往往只关注方向
相似度
相似度通常值越大,对象差异越小。它衡量的是两个向量方向上的接近程度:方向一致是1,垂直是0,相反是-1
相异度
实际应用中通常将相似度转换为一个”越小越相似“的量,比如说 1-cos(x,y)。这个量通常不满足三角不等式,但经常用于损失函数的设计中,用于惩罚两个向量之间的偏差
散度
前面的距离和相似度通常用于比较两个向量,但我们经常需要比较两个概率分布。最经典的是KL散度,我们会在下面讲到,KL散度不满足对称性
基于绝对位移的向量距离
范数距离
这个再深度学习中比较常见。L1距离一般称为曼哈顿距离,L2距离就是下面的欧式距离。两者都属于Minkowski距离的特殊情况
一般形式为:
欧式距离
假设
每一个维度的量纲相近
每一个维度的重要性完全相同
- 特征维度之间不存在相关性
解决方法
量纲问题
这个问题从直觉上来看就是说,如果有维度A、B,维度A波动本来就大,那么在A、B同样大小的偏差下,A不应该被过度惩罚。
量纲问题很好解决:标准化(不是平时的minmax归一化)。最常用的方法是除以每个维度的标准差$\sigma_i$,则标准化距离为:
标准化欧式距离可以写成矩阵形式
其中 :
这也是加权欧式距离的表示,权重是方差的倒数
马氏距离
上述欧式距离只能解决量纲问题,但无法解决维度相关性问题。
什么是特征间的相关性?
比如说有两个特征:花瓣长度、花瓣宽度
现实中花瓣越长,通常也会越宽,存在正相关。如果我们统计下来,也许会获得这样一张图
xychart-beta
title "花瓣长度与花瓣宽度分析"
x-axis ["0.5", "1.0", "1.5", "2.0", "2.5", "3.0"]
y-axis "花瓣长度 (cm)" 0 --> 8
line [1.4, 3.0, 4.5, 5.5, 6.1, 7.3]
假设我们这里拟合 y = 2x+1 ,那么沿着这条直线,也就是主要趋势偏移是数据中最常见的变化。而垂直于这条直线偏移就显得十分异常
也就是说这里有两种移动方向,一个是平行于直线,一个是垂直于直线。这两种方向在移动长度相同的情况下,距离本应该是区分很大的,但是如果用欧式距离来算是相同的
协方差矩阵
上述问题说明,数据分布允许我们沿某些方向自由变化,但不允许我们沿另一些方向自由变化。协方差矩阵就用于描述数据沿哪些方向变化。
我们设随机向量为:
均值为:
协方差矩阵为:
在二维情况下为:
其中对角线元素表示自身波动程度,也就是该维度的方差。非对角线元素表示两个特征是否同步变化。当如果该元素大于0,也就是正相关;反之为负相关。元素的绝对值大小统一量纲后表示相关性程度,如果接近0说明它们在线性意义下缺少明显相关性。
马氏距离
所以针对相关性问题,这里的加权矩阵式上述协方差矩阵的逆。这里和加权欧式距离有些相似,对角元素是意义的,关键在于非对角元素让他可以处理特征相关性。
为什么求逆,其实蛮好理解。对于对角元素来说,方差大的移动距离大惩罚应该小,所以应该求倒数。对于非对角元素,可以应用特征分解$\Sigma
=
Q\Lambda Q^\top$,这里不多做解释,整体来说可以说明马氏距离做了两件事
- 旋转坐标系:消除不同维度之间的相关性
- 按方差缩放:消除不同方向上的量纲
所以有一个很直观的看待方式:马氏距离是白化后的欧式距离。原始空间中数据可能是一个倾斜椭圆,白化以后变成近似圆形。然后在圆形中计算欧式距离
从距离到概率模型
高斯分布
马氏距离和高斯分布的关系
多元高斯分布的概率密度为
可见指数部分就是上述马氏距离的平方。也就是说,对于高斯分布,距离均值的马氏距离越小,概率密度越高。
所以马氏距离的等距离线和高斯分布的等密度线都是椭圆。
负对数似然
对高斯密度取负对数
得到三项。其中第一项即马氏距离,衡量样本距离中心有多远,第二项用于描述高斯的分布,第三项是个常数
第二项很重要,因为假设两个高斯分布A和B,A非常集中(高瘦)而B矮胖,同一个样本到两者中心的马氏距离可能相似,但如果高斯B的覆盖范围极大,它在任何一个局部位置上的概率密度反而更低。
所以:当不同类别的协方差不同,只比较马氏距离还不够,严格来说应该比较完整的高斯似然
那么从欧氏距离到现在,我们可以建立三种模型
| 模型 | 协方差假设 | 几何形状 | 决策边界 |
|---|---|---|---|
| 最近质心 | $\sigma^2I$ | 球形 | 线性 |
| LDA | 所有类别共享 $\Sigma$ | 相同形状椭球 | 线性 |
| QDA | 每类独立 $\Sigma_k$ | 不同形状椭球 | 二次 |
GMM
单个高斯只能描述一个大致单峰的簇,而局部特征可能存在多种模式,这些特征未必形成一个椭圆形簇,而可能形成多个子簇。但单个高斯很难拟合这种多峰结构。所以我们引入了GMM
高斯混合模型
GMM假设数据并非来自一个高斯分布,而是来自多个高斯分布的混合
其中
- K是高斯成分数量
- $\pi_k$是第 k 个成分的权重,大于零且sum为1
- $\mu_k$是第 k 个高斯中心
- $\sum_k$是第 k 个高斯协方差矩阵
GMM的生成过程在直觉上可以理解成:先随机选择一个高斯成分,再从该高斯成分中采样一个数据点。这个高斯成分可以认为是一个隐变量
说到隐变量,自然想到变分推断,以及ELBO等等。这里先点到为止,以后再说。
与马氏距离的关系
也就是说,判断某个点更像哪个成分时,需要综合到该成分中心的马氏距离;该成分的协方差大小;改成份本身出现的先验概率
这里不再讲述EM算法通过交替优化学习GMM
K-means
K均值可以看作GMM的一个简化极限情况,即假设所有高斯具有相同权重,相同球形协方差,并采用硬分配(GMM采用软分配,可以直觉上理解为label smoothing)
基于方向的相似度
距离往往受到方向和长度两个因素的影响。当我们不关心绝对长度,而关心方向是否接近。比如说句子语义是否相似;对比学习的正负样本是否容易区分等等
点积
点积往往也叫做内积。这里数学知识都清楚,我们从直觉来简单讲讲就好
就是说我们:
方向越接近cos越小,值越大。但同时收到模长和方向两个因素影响.
为了消除模长的干扰,一种最简单的方法就是L2归一化,也就是将向量归一化为单位向量再计算点积。
余弦相似度
这就像是对点积进行另一种归一化对吧。为了除零错误我们通常在分母添加一个小正数
常见的余弦距离定义为:
这样值的范围为0到1
关注两个向量之间的夹角,而不是绝对长度。但经过L2归一化后,余弦距离和欧式距离排序是等价的
实际应用中我们往往会除以一个温度参数 $\tau$,尤其是在对比学习中:
例如,再一组候选样本中,可以根据相似度构造softmax概率
温度参数决定了概率分布的尖锐程度。$\tau$ 越小,相似度差距越大,softmax分布越尖锐。直觉上这就好比对比学习中的拉近正样本
角距离
不过多解释,相比余弦相似度满足三角不等式,且保留取值非负(0~pi),可以视为严格意义上的度量
概率分布之间的差异度量
这一块我觉得很信息论这门课有很大联系。OUC的大家可以试着选修信息论基础这门课,可以作为机器学习入门。不过z老师的话比较喜欢吹牛,不太会讲到重点上来(呵呵)
这是前言,现在回到正题
一个概率分布本身也可以写成向量。比如说离散分布。这样我们理论上可以计算两个概率向量之间的欧式距离,这在某些情况下没有问题,但概率分布具有额外的语义:
- 每个元素表示概率质量
- 所有元素之和必须为 1
- 某些为止概率为0时,含义特殊
- 又是还需要考虑概率质量从一个位置转移到另一个位置的代价
基础知识有:信息量(-logp)、熵($-\sum_{i=1}^Dp_ilogp_i$)
KL散度
交叉熵
我们假设真实分布是P,但我们使用另一个分布Q来描述数据,那么交叉熵定义为
用于衡量:当真实数据分布服从 P,但我们使用 Q 进行预测或编码时,平均需要付出多少代价。如果 Q 对真实高概率事件也给出较高概率,那么交叉熵偏小。如果 Q 对高概率事件给出很低概率,那么交叉熵会显著增大。
JS散度
Wasserstein距离
Hellinger距离与MMD
离散对象的距离
Hamming距离
Jaccard距离
编辑距离