Wasserstein距离

devtools/2024/10/11 0:20:37/

Wasserstein距离(Wasserstein distance),又称为推土机移动距离(Earth Mover’s Distance, EMD),是度量理论中用来比较两个概率分布之间差异的一种距离度量。它源自最优传输问题(Optimal Transport Problem),用于衡量将一个概率分布“转换”为另一个概率分布所需的最小“代价”。

直观理解

Wasserstein距离的直观解释可以类比于在地球上移动泥土的过程:

  • 假设我们有两个堆积不同形状的土堆,表示两个概率分布。
  • 我们想通过移动泥土,将一个土堆转化为另一个。
  • 每一单位的土堆都需要一定的“代价”来移动,而这个代价通常与距离成正比。
  • Wasserstein距离就是完成这种转换所需的最小移动总代价。

数学定义

假设我们有两个定义在度量空间上的概率分布 P P P Q Q Q,即它们是两个概率测度。我们考虑如何将分布 P P P 转换为分布 Q Q Q 的问题。

  • 一阶Wasserstein距离(Wasserstein-1 distance),常用公式为:

    W 1 ( P , Q ) = inf ⁡ γ ∈ Π ( P , Q ) ∫ X × X d ( x , y ) d γ ( x , y ) W_1(P, Q) = \inf_{\gamma \in \Pi(P, Q)} \int_{X \times X} d(x, y) \, d\gamma(x, y) W1(P,Q)=γΠ(P,Q)infX×Xd(x,y)dγ(x,y)

    其中:

    • d ( x , y ) d(x, y) d(x,y) 是空间中点 x x x y y y 之间的距离度量(如欧几里得距离)。
    • Π ( P , Q ) \Pi(P, Q) Π(P,Q) 表示所有以 P P P Q Q Q 为边缘分布的联合分布集合。直观来说, γ ( x , y ) \gamma(x, y) γ(x,y) 表示从分布 P P P 中的 x x x 移动到分布 Q Q Q 中的 y y y 所需的概率质量。

Wasserstein距离的核心在于找到一种最优的方式,即以最小的代价将 P P P 转换为 Q Q Q,而这个代价通过测度 γ \gamma γ 来描述。

特别情况:离散分布

在离散分布的情况下,如果 P = { p 1 , p 2 , … , p n } P = \{p_1, p_2, \dots, p_n\} P={p1,p2,,pn} Q = { q 1 , q 2 , … , q n } Q = \{q_1, q_2, \dots, q_n\} Q={q1,q2,,qn} 是两个离散的概率分布,并且点之间的距离是欧几里得距离,Wasserstein距离则可以通过计算“最优传输计划”来得到,类似于线性规划问题中的最小化问题。

Wasserstein距离的类型

根据距离函数的幂次不同,Wasserstein距离可以有不同的形式:

  • 一阶Wasserstein距离(Wasserstein-1 distance):度量两个分布的平均移动距离,最常见。
  • 二阶Wasserstein距离(Wasserstein-2 distance):度量的是平均平方移动距离,也很常用。

二阶Wasserstein距离的公式如下:
W 2 2 ( P , Q ) = inf ⁡ γ ∈ Π ( P , Q ) ∫ X × X d ( x , y ) 2 d γ ( x , y ) W_2^2(P, Q) = \inf_{\gamma \in \Pi(P, Q)} \int_{X \times X} d(x, y)^2 \, d\gamma(x, y) W22(P,Q)=γΠ(P,Q)infX×Xd(x,y)2dγ(x,y)

应用

Wasserstein距离在多个领域有重要应用,特别是在以下几个方面:

  1. 机器学习和深度学习:在生成对抗网络(GANs)中,Wasserstein距离被用来衡量生成分布与真实分布之间的差异。Wasserstein GAN (WGAN) 是改进的生成对抗网络,使用Wasserstein距离代替传统的Jensen-Shannon散度来增强稳定性。
  2. 图像处理:Wasserstein距离可用于衡量图像之间的差异,特别是在图像匹配和图像分类任务中,用来度量不同图像的概率分布差异。
  3. 概率论与统计学:它被用来比较两个随机变量或两个概率分布的差异,特别是在度量分布的集中趋势或重心时。

小结

Wasserstein距离提供了一种非常直观且严谨的方法来衡量两个概率分布之间的差异,特别适用于那些涉及空间结构的应用场景。在优化和机器学习等领域,它是一种强大的工具。

让我们通过一个简单的例子来直观展示如何计算两个离散分布之间的Wasserstein距离。

示例:离散分布间的Wasserstein距离

假设我们有两个简单的离散分布 P P P Q Q Q ,定义在一维空间上。它们的分布如下:

  • 分布 P P P :在点 x 1 = 1 x_1 = 1 x1=1 x 2 = 3 x_2 = 3 x2=3 上分别有概率质量 p 1 = 0.4 p_1 = 0.4 p1=0.4 p 2 = 0.6 p_2 = 0.6 p2=0.6
  • 分布 Q Q Q :在点 y 1 = 2 y_1 = 2 y1=2 y 2 = 4 y_2 = 4 y2=4 上分别有概率质量 q 1 = 0.5 q_1 = 0.5 q1=0.5 q 2 = 0.5 q_2 = 0.5 q2=0.5
问题:计算一阶Wasserstein距离 W 1 ( P , Q ) W_1(P, Q) W1(P,Q)

步骤 1:定义运输方案

我们希望通过某种“最优”方式将分布 P P P 的质量分配给 Q Q Q。假设质量从 P P P 中的点 x i x_i xi 移动到 Q Q Q 中的点 y j y_j yj ,并且移动的“代价”是它们的距离(使用一维欧几里得距离),即 d ( x i , y j ) = ∣ x i − y j ∣ d(x_i, y_j) = |x_i - y_j| d(xi,yj)=xiyj

下面我们用 γ i j \gamma_{ij} γij 表示从 P P P 的点 x i x_i xi 移动到 Q Q Q 的点 y j y_j yj 的质量。

步骤 2:计算欧几里得距离

我们计算点之间的距离:

d ( x 1 , y 1 ) = ∣ 1 − 2 ∣ = 1 , d ( x 1 , y 2 ) = ∣ 1 − 4 ∣ = 3 d(x_1, y_1) = |1 - 2| = 1, \quad d(x_1, y_2) = |1 - 4| = 3 d(x1,y1)=∣12∣=1,d(x1,y2)=∣14∣=3
d ( x 2 , y 1 ) = ∣ 3 − 2 ∣ = 1 , d ( x 2 , y 2 ) = ∣ 3 − 4 ∣ = 1 d(x_2, y_1) = |3 - 2| = 1, \quad d(x_2, y_2) = |3 - 4| = 1 d(x2,y1)=∣32∣=1,d(x2,y2)=∣34∣=1

步骤 3:分配质量

为了使总移动成本最小化,我们需要确定怎样从 P P P 的两个点 ( 1 , 3 ) (1, 3) (1,3) 分配质量给 Q Q Q 的两个点 ( 2 , 4 ) (2, 4) (2,4) 。我们有以下的约束:

  • 移动的质量不能超过各点原本的概率质量。即:
    γ 11 + γ 12 = p 1 = 0.4 \gamma_{11} + \gamma_{12} = p_1 = 0.4 γ11+γ12=p1=0.4
    γ 21 + γ 22 = p 2 = 0.6 \gamma_{21} + \gamma_{22} = p_2 = 0.6 γ21+γ22=p2=0.6
    γ 11 + γ 21 = q 1 = 0.5 \gamma_{11} + \gamma_{21} = q_1 = 0.5 γ11+γ21=q1=0.5
    γ 12 + γ 22 = q 2 = 0.5 \gamma_{12} + \gamma_{22} = q_2 = 0.5 γ12+γ22=q2=0.5

同时,我们需要最小化移动代价:
Total Cost = γ 11 ⋅ 1 + γ 12 ⋅ 3 + γ 21 ⋅ 1 + γ 22 ⋅ 1 \text{Total Cost} = \gamma_{11} \cdot 1 + \gamma_{12} \cdot 3 + \gamma_{21} \cdot 1 + \gamma_{22} \cdot 1 Total Cost=γ111+γ123+γ211+γ221

步骤 4:解最优分配问题

我们通过简单推导和分配方案,得到一个可能的最优方案:

  1. 0.4 0.4 0.4 的质量从 x 1 = 1 x_1 = 1 x1=1 移动到 y 1 = 2 y_1 = 2 y1=2
  2. 0.1 0.1 0.1 的质量从 x 2 = 3 x_2 = 3 x2=3 移动到 y 1 = 2 y_1 = 2 y1=2
  3. 0.5 0.5 0.5 的质量从 x 2 = 3 x_2 = 3 x2=3 移动到 y 2 = 4 y_2 = 4 y2=4

这个方案符合所有约束条件,接下来我们计算总的移动代价:

Total Cost = ( 0.4 ⋅ 1 ) + ( 0.1 ⋅ 1 ) + ( 0.5 ⋅ 1 ) = 0.4 + 0.1 + 0.5 = 1.0 \text{Total Cost} = (0.4 \cdot 1) + (0.1 \cdot 1) + (0.5 \cdot 1) = 0.4 + 0.1 + 0.5 = 1.0 Total Cost=(0.41)+(0.11)+(0.51)=0.4+0.1+0.5=1.0

因此,Wasserstein距离 W 1 ( P , Q ) = 1.0 W_1(P, Q) = 1.0 W1(P,Q)=1.0

小结

在这个简单的例子中,我们通过最优传输的方式计算了两个离散分布 P P P Q Q Q 之间的Wasserstein距离。Wasserstein距离表示将一个分布转换为另一个分布所需的最小移动成本。在这个案例中,我们发现将 P P P 转换为 Q Q Q 所需的最小成本为1。

假设是两个连续的分布呢?

这个过程可以推广到连续分布和更复杂的多维场景,但其核心思想仍然是通过“最优传输”来测量两个分布的相似性或差异。

当我们考虑连续概率分布之间的Wasserstein距离时,基本思路依然是最优传输问题,不过需要通过积分来计算,而不是简单的质量分配。在这里,我们将以两个连续的概率分布为例,展示如何计算它们的Wasserstein距离

示例:计算两个一维连续分布的Wasserstein-1距离

假设我们有两个定义在实数轴 R \mathbb{R} R 上的概率分布:

  1. 分布 P P P 是一个标准正态分布 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1)
  2. 分布 Q Q Q 是一个正态分布 N ( 1 , 1 ) \mathcal{N}(1, 1) N(1,1) ,即均值为1,方差为1。
问题:计算这两个分布的一阶Wasserstein距离 W 1 ( P , Q ) W_1(P, Q) W1(P,Q)

步骤 1:定义Wasserstein距离公式

在一维情况下,如果我们有两个连续分布 P P P Q Q Q累积分布函数(CDF) F P F_P FP F Q F_Q FQ,则一阶Wasserstein距离 W 1 ( P , Q ) W_1(P, Q) W1(P,Q) 可以通过下面的公式计算:

W 1 ( P , Q ) = ∫ − ∞ + ∞ ∣ F P ( x ) − F Q ( x ) ∣ d x W_1(P, Q) = \int_{-\infty}^{+\infty} |F_P(x) - F_Q(x)| \, dx W1(P,Q)=+FP(x)FQ(x)dx

这里的 F P ( x ) F_P(x) FP(x) F Q ( x ) F_Q(x) FQ(x) 分别是 P P P Q Q Q 的累积分布函数。

步骤 2:累积分布函数 (CDF) 的计算

对于正态分布 N ( μ , σ 2 ) \mathcal{N}(\mu, \sigma^2) N(μ,σ2),它的累积分布函数 F μ , σ ( x ) F_{\mu, \sigma}(x) Fμ,σ(x) 是:

F μ , σ ( x ) = 1 2 [ 1 + erf ( x − μ 2 σ ) ] F_{\mu, \sigma}(x) = \frac{1}{2} \left[ 1 + \text{erf} \left( \frac{x - \mu}{\sqrt{2} \sigma} \right) \right] Fμ,σ(x)=21[1+erf(2 σxμ)]

其中 erf ( x ) \text{erf}(x) erf(x) 是误差函数。

对于我们的两个分布:

  • F P ( x ) = F 0 , 1 ( x ) F_P(x) = F_{0, 1}(x) FP(x)=F0,1(x) 是标准正态分布的CDF。
  • F Q ( x ) = F 1 , 1 ( x ) F_Q(x) = F_{1, 1}(x) FQ(x)=F1,1(x) 是均值为1,方差为1的正态分布的CDF。

我们可以将这两个CDF代入公式,并计算它们的差的绝对值。

步骤 3:具体计算

在一维正态分布的情况下,Wasserstein距离可以通过累积分布函数的特性简化计算。对于两个正态分布 P ∼ N ( 0 , 1 ) P \sim \mathcal{N}(0, 1) PN(0,1) Q ∼ N ( 1 , 1 ) Q \sim \mathcal{N}(1, 1) QN(1,1),Wasserstein-1距离 W 1 ( P , Q ) W_1(P, Q) W1(P,Q) 有一个封闭形式的解。

一维正态分布的Wasserstein-1距离可以通过均值之间的差值来直接计算:

W 1 ( P , Q ) = ∣ μ P − μ Q ∣ W_1(P, Q) = |\mu_P - \mu_Q| W1(P,Q)=μPμQ

在这个例子中:

  • μ P = 0 \mu_P = 0 μP=0 (标准正态分布的均值)
  • μ Q = 1 \mu_Q = 1 μQ=1 N ( 1 , 1 ) \mathcal{N}(1, 1) N(1,1) 的均值)

因此:

W 1 ( P , Q ) = ∣ 0 − 1 ∣ = 1 W_1(P, Q) = |0 - 1| = 1 W1(P,Q)=∣01∣=1

结论

对于这两个一维连续正态分布 P = N ( 0 , 1 ) P = \mathcal{N}(0, 1) P=N(0,1) Q = N ( 1 , 1 ) Q = \mathcal{N}(1, 1) Q=N(1,1),它们的一阶Wasserstein距离 W 1 ( P , Q ) = 1 W_1(P, Q) = 1 W1(P,Q)=1

一些拓展

  • 二阶Wasserstein距离(Wasserstein-2 distance) 在高斯分布之间也有封闭形式的解。对于两个正态分布 N ( μ P , σ P 2 ) \mathcal{N}(\mu_P, \sigma_P^2) N(μP,σP2) N ( μ Q , σ Q 2 ) \mathcal{N}(\mu_Q, \sigma_Q^2) N(μQ,σQ2),Wasserstein-2距离的公式是:

    W 2 ( P , Q ) = ( μ P − μ Q ) 2 + ( σ P − σ Q ) 2 W_2(P, Q) = \sqrt{(\mu_P - \mu_Q)^2 + (\sigma_P - \sigma_Q)^2} W2(P,Q)=(μPμQ)2+(σPσQ)2

    这结合了均值和方差之间的差异。

  • 对于更复杂的分布,我们可能需要数值方法来计算Wasserstein距离,例如通过对最优传输问题进行数值优化。

总的来说,Wasserstein距离为我们提供了一种在概率空间中衡量分布之间差异的有效工具,特别是在涉及均值、方差以及分布形状的场景中。


http://www.ppmy.cn/devtools/123892.html

相关文章

基于Springboot+VUE的二手奢侈品商城的设计与实现

一、摘要 当前,二手奢侈品市场持续蓬勃发展,吸引了越来越多的消费者。然而,现有的二手奢侈品交易平台在用户体验、安全性和功能方面仍存在一些问题,需要进一步改进。本研究旨在设计和实现一种基于Spring Boot 和 Vue 技术框架的二…

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第5关---XTuner 微调个人小助手认知

学员闯关手册:https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频:https://www.bilibili.com/video/BV1tz421B72y/ 课程文档: https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/XTuner 关…

C语言练习

题目: 1.如果在int型变量的声明中为变量赋一个实数值(如3.12或4.6)的初始值会怎样呢?请打一段代码来看看 分析:……不用分析,开个玩笑,虽然很简单但是还是按照惯例水上一波数字 1.首先按照题目要求用函数类型int整型给变量赋值…

JUC-CompletableFuture

1. CompletableFuture 简介 JUC 中提供的一个实现异步编程的工具类。实现了 Future 和 CompletionStage 两个接口,主要用作于创建,组合,处理多个异步任务核心思想是 异步任务的链式处理 2. CompletableFuture 与 Future 的区别 传统的 Fut…

【解决】虚拟机VMTool安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装

这个问题的原因是系统安装服务没有开启 打开任务管理器-服务-打开服务 找到windows installer 服务,开启即可

CMakeLists.txt关键字查漏补缺

target_link_libraries 用于指定目标(如可执行文件或库)要链接的库 cmake_minimum_required(VERSION 3.10)# 设置项目名称 project(my_project)# 添加可执行文件 add_executable(my_executable main.cpp)# 链接外部库 target_link_libraries(my_executa…

FreeRTOS学习总结

背景:在裸机开发上,有时候我们需要等待某个信号或者需要延迟时,CPU的运算是白白浪费掉了的,CPU的利用率并不高,我们希望当一个函数在等待的时候,可以去执行其他内容,提高CPU的效率,同…

JVM系列(二) -类的加载过程介绍

一、背景介绍 我们知道 Java 是先通过编译器将.java类文件转成.class字节码文件,然后再通过虚拟机将.class字节码文件加载到内存中来实现应用程序的运行。 那么虚拟机是什么时候加载class文件?如何加载class文件?class文件进入到虚拟机后发…