1. 高维世界里的“远近”与“美丑”
做AI这行久了,我常常觉得,给高维向量计算相似度,就像是在一个我们无法直接感知的抽象世界里,为事物建立一套独特的“审美”体系。我们人类理解三维空间里的远近,靠的是直觉——两点之间,直线最短。但当你处理动辄成百上千维的向量时,比如一段文本的嵌入向量、一张图片的特征向量,这个“远近”就变得极其微妙和复杂。它不再是简单的“直线距离”,而更像是在衡量两个抽象概念在语义、特征或模式上的“亲疏关系”。
这背后,是一系列精妙的数学工具在支撑,我们称之为“距离度量”或“相似度度量”。很多人初学时会觉得,这不就是套公式算个数吗?欧氏距离、余弦相似度,选一个用就是了。但实际踩过坑你就会发现,选错了度量方式,你的推荐系统可能把完全不相关的东西推给用户,你的图像检索系统可能对明显的相似性视而不见。这不仅仅是技术问题,更是一种“美学”选择——你如何定义这个高维空间里的“美”?是追求绝对的、坐标轴上的接近,还是追求方向上的“志同道合”?不同的度量方法,构建了不同的空间“几何”与“美学”。
所以,今天我想和你聊聊的,就是这份“高维向量相似度计算的艺术”。我们不止要弄明白这些距离公式怎么算,更要理解它们背后的“性格”和“审美观”,知道在什么场景下,该请哪位“艺术家”出场,才能让你的模型性能既“稳”又“美”。
2. 直观派艺术家:显式距离度量
这类方法最直接,它们像严谨的工程师,只关心向量每个维度上数值的差异,然后按照某种规则把这些差异汇总起来。它们构建的世界观是“坐标中心主义”,优点是计算简单、直观,但缺点也很明显——对数据的尺度(量纲)和分布非常敏感。
2.1 基础计数员:汉明距离
汉明距离是我最早接触的距离之一,简单到令人发指。它只适用于二进制向量(或字符串),干的事情就是数一数两个向量在相同位置上,有多少个值不一样。比如 [1, 0, 1, 1, 0] 和 [1, 1, 1, 0, 0],它们在第二个和第四个位置不同,所以汉明距离就是2。
我最初在通信领域做纠错码时,天天和它打交道。它的“美学”非常纯粹:非黑即白,只论对错,不论差距。一个比特错了,和错得离谱,在它眼里都是“1”的差异。这种纯粹性既是它的优点,也是它的局限。在需要精细衡量差异的连续值高维空间里,它就力不从心了。但在一些特定的场景,比如比较两个哈希指纹(如SimHash)是否相近,汉明距离依然是快速筛选候选者的利器。它的“美”,在于那种二进制世界里的简洁与确定。
2.2 城市漫步者:曼哈顿距离
如果把汉明距离从离散的二进制世界扩展到连续的实数世界,就得到了曼哈顿距离。它的计算方式是求两个向量在每个维度上差值的绝对值之和。想象一下在曼哈顿的棋盘式街道上,从A点到B点,你不能斜穿大楼,只能沿着街道走,走过的总路程就是曼哈顿距离。
它的公式是:distance = sum(|x_i - y_i|)。相比汉明距离,它保留了差异的“量”,但丢掉了“方向”(正负号通过绝对值被抹去了)。在数据各维度相对独立,且你希望所有维度上的微小误差都能被平等累积时,曼哈顿距离很合适。比如在计算两个颜色向量(RGB)的总体差异时,曼哈顿距离就比欧氏距离更符合一些色彩差异的感知。它的“美学”是线性的、可加的,有一种朴素的公平感。
2.3 几何直觉派:欧氏距离
这大概是最广为人知的距离了,直接来源于我们三维空间的直线距离概念。在高维空间,它就是所有维度上差值平方和的平方根:distance = sqrt(sum((x_i - y_i)^2))。
欧氏距离构建了一个标准的“球形”空间。在这个空间里,距离原点等远的点构成一个球面。它的“美”在于符合我们的几何直觉,并且在很多情况下,当数据分布近似于各向同性的球形高斯分布时,它的效果非常好。很多传统的聚类算法(如K-Means)和最近邻搜索都默认使用它。
但它的“罪”也很突出。它对大的差异非常敏感,因为平方项会放大异常值的影响。更重要的是,它隐含了一个强假设:所有维度都是同等重要且相互正交(无关)的。如果数据的某个维度取值范围很大(比如“年薪”从几万到几百万),而另一个维度很小(比如“年龄”在0-100之间),那么欧氏距离会完全被大尺度维度所主导,小尺度维度的差异几乎被忽略。这在高维数据中几乎是常态。
2.4 高阶调和者:闵可夫斯基距离
闵可夫斯基距离是曼哈顿距离和欧氏距离的推广,它引入了一个阶数参数 p:distance = (sum(|x_i - y_i|^p))^(1/p)。
- 当
p=1时,它就是曼哈顿距离。 - 当
p=2时,它就是欧氏距离。 - 当
p趋近于无穷大时,它就变成了切比雪夫距离(只取所有维度差值中最大的那个)。
通过调整 p,你实际上是在调整对“差异”的惩罚力度。p 越大,对大差异的惩罚就越重,模型会变得更关注那些差异最大的维度。这给了我们一种调控“审美”的旋钮。但在实践中,除了1和2,其他 p 值的使用场景需要非常谨慎的调优和验证,因为其几何意义不那么直观。
2.5 极限聚焦者:切比雪夫距离
切比雪夫距离只关心所有维度中最大的那个绝对差值:distance = max(|x_i - y_i|)。
这种“美学”非常极端——它认为两个向量的相似度,完全由它们最不相似的那个维度决定。这听起来有点“一票否决”的味道。它的典型应用场景是棋盘格移动(国际象棋中国王的移动)或者某些工业场景(比如一个零件的多个尺寸公差,只要有一个超差,零件就报废)。在这种场景下,切比雪夫距离完美地刻画了“木桶效应”。它的“美”是一种极致和纯粹,只盯着最短板,忽略其他所有长板。
显式距离的“罪与罚”总结: 这些方法共同的问题是,它们都严重依赖于向量的坐标表示。如果我对向量做一个简单的旋转变换,或者只是把某个维度的数值放大十倍,计算出来的距离就会发生天翻地覆的变化,尽管向量所代表的“本质”可能没变。它们缺乏对数据内在结构的洞察力。
3. 洞察派艺术家:隐式(归一化)距离度量
为了克服显式距离的弊端,我们需要更聪明的“艺术家”。它们不再盲目地相信原始坐标,而是先对数据进行一番“洞察”和“归一化”,试图抓住数据背后更本质的关系。它们衡量的是方向、相关性,或者是在考虑了数据分布后的“矫正”距离。
3.1 标准化欧氏距离:粗糙的归一化
这是对欧氏距离最直接的修补。思路很简单:既然不同维度尺度不一,那我就先把每个维度都标准化(减去均值,除以标准差),让它们都变成均值为0、标准差为1的“标准身材”,然后再用欧氏距离。
公式是:distance = sqrt(sum(((x_i - y_i) / sigma_i)^2)),其中 sigma_i 是第 i 维的标准差。
这相当于给每个维度加了一个权重,方差小的维度(数据更集中)权重更大。它的进步在于消除了量纲的影响。但它的假设依然很强:它认为各个维度是相互独立的。如果“身高”和“体重”这两个维度高度相关,这种简单的独立标准化仍然会扭曲空间中的真实关系。所以,它像是一件不太合身的均码衣服,能解决一些基本问题,但不够精致。
3.2 马氏距离:协方差的智慧
马氏距离是欧氏距离的一次重大升级,它真正考虑到了数据维度之间的相关性。它的核心思想是:在计算距离之前,先用数据的协方差矩阵的逆矩阵对向量进行一个线性变换。这个变换的神奇之处在于,它能把原始数据分布“拉伸”和“旋转”成一个各维度不相关、方差都为1的标准球形分布。
公式是:distance = sqrt((X - Y)^T * S^(-1) * (X - Y)),其中 S 是协方差矩阵。
我举个例子你就明白了。假设我们在二维空间衡量两个人的数据,维度是“身高(米)”和“体重(公斤)”。这两个维度显然相关,而且数值尺度差几十倍。欧氏距离在这里会完全被“体重”主导。马氏距离则会先分析身高和体重的联合分布,发现它们大致呈椭圆状。然后,它会把这个椭圆“捏”成一个正圆。在这个新的圆里,一个在椭圆长轴方向(身高体重都偏离)的点,和一个在短轴方向(只有体重轻微偏离)的点,可能会被计算为等距。这更符合我们的直觉:一个又高又重的人和一个只是微胖的人,与“标准身材”的“综合差异”可能是相似的。
马氏距离的“美”,在于它构建了一个与数据分布自适应的度量空间。它的缺点是计算协方差矩阵及其逆矩阵开销较大,且在数据维度很高、样本不足时,协方差矩阵估计不准,会导致问题。
3.3 皮尔逊相关系数:趋势的共鸣
皮尔逊相关系数完全不关心向量的绝对位置,它只关心两个向量的变化趋势是否一致。它的值在-1到1之间。1表示完全正相关(一个变大,另一个也同比变大),-1表示完全负相关(一个变大,另一个同比变小),0表示没有线性关系。
它的计算基于协方差和标准差:corr = cov(X, Y) / (sigma_X * sigma_Y)。
在推荐系统中,我们常用它来衡量用户兴趣的相似性。用户A和用户B对物品的评分绝对值可能差异很大(A喜欢打高分,B喜欢打低分),但只要他们对物品喜好程度的排序是一致的(都觉得电影1比电影2好),那么他们的皮尔逊相关系数就会很高。它的“美学”是“英雄所见略同”,追求的是模式上的同步,而非数值上的接近。
3.4 余弦相似度:方向的契合
余弦相似度是我在NLP和图像领域用得最多的度量之一。它只计算两个向量夹角的余弦值,完全忽略它们的模长(长度)。
公式是:similarity = (X·Y) / (||X|| * ||Y||)。
这带来一个巨大的优势:它对向量的绝对大小不敏感。比如在文本分析中,一篇长文档和一篇短文档,只要它们讨论的主题词分布比例相似,它们的词向量余弦相似度就会很高,尽管长文档的向量每个维度的值可能大得多。它的“美学”是“志同道合”,只问方向,不问强弱。在衡量文档主题、图片风格、用户兴趣偏好时,这种方向的一致性往往比绝对数值的接近更重要。
隐式度量的“秘密”关联: 一个有趣的结论是,当数据已经进行了标准化(均值为0,标准差为1)后,余弦相似度、皮尔逊相关系数、以及基于标准化向量的欧氏距离的某种变换,在数学上是等价的。它们都在衡量“中心化”后向量的夹角关系。这揭示了这些方法内在的统一性:它们都在试图剥离掉量纲和绝对数值的干扰,去捕捉更本质的关联模式。
4. 信息论与集合论的美学延伸
除了基于向量坐标的计算,还有一些方法从更抽象的角度定义“相似”或“距离”,它们为我们打开了另一扇窗。
4.1 从混乱到距离:KL散度与交叉熵
熵,这个概念从热力学走来,在信息论中生根,如今是机器学习损失函数的常客。信息熵衡量的是一个概率分布本身的“混乱程度”或“不确定性”。交叉熵则衡量了用估计的分布 Q 去编码真实分布 P 所需的平均编码长度。而KL散度(相对熵),就是交叉熵减去信息熵,它专门衡量两个概率分布 P 和 Q 之间的差异。
KL(P||Q) = sum(P_i * log(P_i / Q_i))
KL散度不是对称的,即 KL(P||Q) != KL(Q||P),所以它不是一个严格意义上的“距离”。但它极其深刻地刻画了“用一个分布去近似另一个分布”所造成的信息损失。在训练分类模型时,我们最小化预测分布与真实标签分布(通常是one-hot形式)之间的交叉熵,本质上就是在最小化它们之间的KL散度(因为真实分布的信息熵是固定的)。
它的“美”在于其深厚的信息论根基。它度量的不是空间中的点与点的距离,而是整个分布形态的差异。当你关心模型输出的概率分布是否逼近真实情况时,KL散度及其相关的交叉熵提供了无可替代的“审美”标准。
4.2 集合的握手:杰卡德相似系数
杰卡德系数完全跳出了向量的数值框架,回到了最朴素的集合论。它衡量两个集合 A 和 B 的相似度,公式是交集大小除以并集大小:J(A, B) = |A ∩ B| / |A ∪ B|。
在推荐系统中,如果用户 A 喜欢的物品集合是 Set_A,用户 B 的是 Set_B,那么杰卡德系数就是他们共同喜欢的物品数,除以他们喜欢的所有不重复物品数。它简单、可解释,特别适合处理非数值型的、存在与否的二元特征。它的“美”是集合论那种清晰、确定的美,不涉及任何权重或强度,只关心“有”或“无”的重合度。
5. 实战中的美学选择:如何为你的场景挑选“艺术家”
理论很美,但落地时怎么选?我结合自己的经验,给你一些实在的建议。
场景一:图像特征匹配与检索
- 常用度量:余弦相似度、欧氏距离(在特征经过L2归一化后,两者等价)。
- 美学思考: 深度神经网络提取的图像特征向量,其模长往往与图像的对比度、亮度等信息相关,而这些信息可能与语义内容无关。使用余弦相似度可以忽略模长,专注于特征方向,这通常与视觉语义的相似性更吻合。许多预训练模型(如ResNet, CLIP)产出的特征都默认或建议进行L2归一化后再计算余弦相似度。
场景二:基于用户行为的协同过滤推荐
- 常用度量:皮尔逊相关系数、余弦相似度、改进的余弦相似度(减去用户平均分)。
- 美学思考: 这里核心是消除用户评分习惯(严苛或宽松)带来的偏差。皮尔逊相关系数天然地做了中心化(减去均值),直接衡量评分趋势的相关性,是经典选择。改进的余弦相似度(减去用户平均分)能达到类似效果。而杰卡德系数则适用于只有“点击/未点击”、“购买/未购买”这类二元隐式反馈数据。
场景三:概率模型与生成式AI
- 常用度量:KL散度、JS散度、Wasserstein距离(推土机距离)。
- 美学思考: 当你处理的是整个概率分布,例如在比较生成模型产生的图像分布与真实图像分布时,KL散度及其变体是理论上的自然选择。但KL散度不对称且可能无限大,JS散度对其进行了改进。而Wasserstein距离则提供了更平滑的梯度,在训练GAN等生成模型时表现更稳定,它衡量的是将一个分布“搬土”成另一个分布的最小“工作量”,其几何意义非常直观优美。
场景四:高维稀疏数据(如文本TF-IDF向量)
- 常用度量:余弦相似度。
- 美学思考: 文本向量通常是高维且极度稀疏的(大部分维度为0)。欧氏距离会对非零维度的具体数值非常敏感,而两个长文档可能因为长度不同导致向量模长差异巨大,但主题相似。余弦相似度再次成为赢家,它只关心非零维度方向的相对比例。
一个重要的实操技巧:归一化先行 无论你最终选择哪种度量,在计算之前,认真考虑对数据进行归一化或标准化,这往往是提升模型稳定性和性能最简单有效的一步。对于基于坐标的距离(如欧氏、曼哈顿),使用Z-score标准化或Min-Max缩放常有必要。对于余弦相似度,进行L2归一化(使向量模长为1)可以简化计算,并使其与欧氏距离在某些条件下等价。
选择距离度量,没有绝对的银弹。它取决于你的数据特性、任务目标,甚至是你对“相似”这个词的业务定义。最好的方式,就是理解每种方法背后的“美学”假设,然后像挑选合适的镜头一样,为你的数据世界选择一个最能呈现其本质结构的“视角”。多实验,多分析,在验证集上看看不同的距离度量如何影响你的最终目标(准确率、召回率等),这才是将这份“艺术”落地的务实之道。
905




被折叠的 条评论
为什么被折叠?



