wasserstein具体怎么计算_Wasserstein距离学习笔记

本文参考 Lilian Weng的文章《From GAN to WGAN》From GAN to WGAN主要针对文中所提到的Wasserstein距离展开,做一些笔记与大家分享。

对于绝大多数的机器学习问题,尤其是预测问题和隐变量模型(latent factor model)中,学习到数据集背后所服从的分布往往是模型所要解决的最终问题。在变分推断(variational inference)等领域中,往往会先从一个简单的分布引入,比如高斯分布或者多项式分布等;希望由这个简单的分布模型能不断学习进而逼近最终想要的、符合数据背后规律的分布,注意这时候的分布往往可能在形状上与初始假设的分布有所差异。

KL散度和JS散度

在学习Wasserstein距离,首先回顾在机器学习算法中,衡量两个分布相似程度的指标常常是KL散度(Kullback-Leibler Divergence)以及JS散度 (Jensen-Shannon Divergence)。

KL散度

KL散度描述的是,评价训练所得的概率分布p与目标分布q之间的距离,可以表示为

equation?tex=D_%7BKL%7D%28p%7C%7Cq%29%3D%5Cint_%7Bx%7Dp%28x%29log%5Cfrac%7Bp%28x%29%7D%7Bq%28x%29%7Ddx

机器学习的算法最终的目的是缩小

equation?tex=D_%7BKL%7D 的值,可以看到当
equation?tex=p%28x%29%3D%3Dq%28x%29 的时候,KL散度处处为0,达到最优结果。

但同时必须注意的是,由于KL散度中,对数项中p(x)与q(x)相对位置的关系,决定了KL散度其实是非对称的,即

equation?tex=D_%7BKL%7D%28p%7C%7Cq%29+%5Cneq+D_%7BKL%7D%28q%7C%7Cp%29 。从物理学参考系的角度可以直观感受出,如果要想评价两个物体(分布)的相似程度,相似程度的值(比如KL散度)应该不能因为选取的参考目标(目标分布)的不同而改变。

JS散度

既然KL散度不具备对称性,那么依然从参考系的角度出发,那我们直接把所有参考系下计算的距离平均即可(在本文环境下只有目标分布和预测分布两个参考系)。这样便是JS散度的思想,具体的定义为

equation?tex=D_%7BJS%7D%28p%7C%7Cq%29%3D%5Cfrac%7B1%7D%7B2%7DD_%7BKL%7D%28p%7C%7C%5Cfrac%7Bp%2Bq%7D%7B2%7D%29%2B%5Cfrac%7B1%7D%7B2%7DD_%7BKL%7D%28q%7C%7C%5Cfrac%7Bp%2Bq%7D%7B2%7D%29

因而JS散度便有了对称性,并且形式上更为平滑,更适合作为最后最大似然的函数,这点在生成对抗网络(GAN)的损失函数取得了不错的成绩。

Wasserstein距离

Wasserstein距离也叫做推土机距离(Earth Mover's distance),这也是由于它的推导过程可以很形象的用挖土填土来解释,这也是因为该距离定义中由一个分布转变为另一个分布所需要的代价和挖土填土的过程十分相似。考虑两个离散的分布P和Q

equation?tex=P_%7B1%7D%3D3%2CP_%7B2%7D%3D2%2CP_%7B3%7D%3D1%2CP_%7B4%7D%3D4

equation?tex=Q_%7B1%7D%3D1%2CQ_%7B2%7D%3D2%2CQ_%7B3%7D%3D4%2CQ_%7B4%7D%3D3

为了让两个分布相同,我们一个个变量地观察,

  • *为了让P1和Q1相同,我们需要P1把手头上的3分2到P2去,这样P1和Q1都等于1,此时P2=4,其他数保持不变,这个过程是不是十分像挖掉P1的土填到P2上~
  • 为了让P2和Q2相同,我们也要做类似的挖土填土工作,但注意,此时P2手头上由P1填的2,因此现在P2是4,但是Q2依然是2,因而P2也要挖2分土给P3,保持和Q2一样。
  • P3和Q3也是一样,但此时P3为3,Q3为4,因为我们只能先挖土再填土,因此要Q3挖1分土给Q4,这样P4和Q4也能够一样。

每一步的代价计算公式为

equation?tex=%5Cdelta_%7Bi%2B1%7D%3D%5Cdelta_%7Bi%7D%2BP_%7Bi%7D-Q_%7Bi%7D ,第0步我们规定为0,故有

equation?tex=%5Cdelta_%7B0%7D%3D0

equation?tex=%5Cdelta_%7B1%7D%3D0%2B3-1%3D2

equation?tex=%5Cdelta_%7B2%7D%3D2%2B2-2%3D2

equation?tex=%5Cdelta_%7B3%7D%3D2%2B1-4%3D-1

equation?tex=%5Cdelta_%7B4%7D%3D-1%2B4-3%3D0

所以最终的总代价,也即Wasserstein距离则为

equation?tex=W%3D%5Csum+%7C%5Cdelta_%7Bi%7D%7C%3D5

该挖土填土的过程可以由下图表示

图片来源:From GAN to WGAN

https://lilianweng.github.io/lil-log/2017/08/20/from-GAN-to-WGAN.html#kullbackleibler-and-jensenshannon-divergence​lilianweng.github.io

a0e65f74f28a2dfb353b0b1c57e964dd.png
分布P变成分布Q所需的“挖土填土”过程

由离散情况理解了距离计算以后,针对一般的连续分布,Wasserstein距离则变成如下形式

equation?tex=W%28p_%7Br%7D%2Cp_%7Bg%7D%29%3Dinf_%7B%5Cgamma~S%28p_%7Br%7D%2Cp_%7Bg%7D%29%7DE_%28x%2Cy%29~%5Cgamma+%5B%7C%7Cx-y%7C%7C%5D

其中inf指代最大下界,

equation?tex=S%28p_%7Br%7D%2Cp_%7Bg%7D%29 表示的是分布pr和pg中所有可能的联合分布,每一个联合分布
equation?tex=%5Cgamma+%5Cin+S%28p_%7Br%7D%2Cp_%7Bg%7D%29 都是之前提到的“土”,用于刻画连续空间中分布间转换的代价,更具体而言,
equation?tex=%5Cgamma%28x%2Cy%29 刻画从x点转移到y点从而让x,y服从相同分布所需要的“土”的百分比。因此$gamma$的边缘分布可以表示为
equation?tex=%5Csum_%7Bx%7D%5Cgamma%28x%2Cy%29%3Dp_%7Bg%7D%28y%29%2C+%5Csum_%7By%7D%5Cgamma%28x%2Cy%29%3Dp_%7Br%7D%28x%29

当我们将x作为我们的起始点,y作为我们要逼近的终点时,挖土填土的总量即为

equation?tex=%5Cgamma%28x%2Cy%29 ,也即上文离散情况下计算的代价
equation?tex=%5Cdelta ,而点与点之间的距离则为||x-y||,因而总代价为

equation?tex=%5Csum+%5Climits_%7Bx%2Cy%7D+%5Cgamma%28x%2Cy%29+%7C%7Cx-y%7C%7C

总代价最后可以使用EM等方法求得最小值。

为什么Wasserstein距离比KL/JS散度更好

一言蔽之,即使在低纬度且分布间没用重合的时候,Wasserstein距离的值依然能提供有用的信息。

考虑分布P和Q

equation?tex=%5Cforall+%28x%2Cy%29+%5Cin+P%2C+x%3D0+and+y+~+U%280%2C1%29+

equation?tex=%5Cforall%28x%2Cy%29+%5Cin+Q%2C+x%3D%5Ctheta%2C+0+%5Cleq+%5Ctheta+%5Cleq+1+and+y~U%280%2C1%29

画出图像则为

8c744b1d88b41bc6249b3d609bc7009a.png
当theta不为0的时候,P和Q没有重合部分

equation?tex=%5Ctheta+%5Cneq+0 时,

equation?tex=D_%7BKL%7D%28P%7C%7CQ%29%3D%5Csum%5Climits_%7Bx%3D0%2Cy~U%280%2C1%29%7D1%5Ccdot+log%5Cfrac%7B1%7D%7B0%7D%3D%2B+%5Cinfty

equation?tex=D_%7BKL%7D%28Q%7C%7CP%29%3D%5Csum%5Climits_%7Bx%3D%5Ctheta%2Cy~U%280%2C1%29%7D1%5Ccdot+log%5Cfrac%7B1%7D%7B0%7D%3D%2B+%5Cinfty

equation?tex=D_%7BJS%7D%28P%2CQ%29%3D%5Cfrac%7B1%7D%7B2%7D+%28%5Csum%5Climits_%7Bx%3D0%2Cy~U%280%2C1%29%7D1%5Ccdot+log%5Cfrac%7B1%7D%7B1%2F2%7D+%2B%5Csum%5Climits_%7Bx%3D%5Ctheta%2Cy~U%280%2C1%29%7D1%5Ccdot+log%5Cfrac%7B1%7D%7B1%2F2%7D+%29%3Dlog2
equation?tex=W%28P%2CQ%29%3D%7C%5Ctheta%7C

equation?tex=%5Ctheta%3D0 的时候,P,Q两个分布完全重合,此时这三种距离度量方式均为0。可以看出KL散度在两个分布完全没有任何交集的时候会得出无穷的结果,而JS散度则会有突然的阶跃,并且在0点出不可微,只有Wasserstein距离能够提供更为平滑的结果用于梯度下降法的参数更新。不过值得一提的是,目前主流的分布距离度量依然是KL散度,这是由于KL散度的计算方式简单,计算成本较Wasserstein低,但今年来Wasserstein距离的近似Sinkhorn distance以及其他加快距离计算方法的论文也在不断涌现。因为本人研究也刚刚起步,本文也只是在英文原稿上加以翻译和整理,也希望相关领域大佬能不吝指教。
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Wasserstein距离(也称为“地球移动距离”)是一种用于衡量两个概率分布之间距离的方法。它不仅考虑了分布之间的相似性,还考虑了从一个分布到另一个分布的变换成本。 下面我们将通过一个简单的例子来计算Wasserstein距离。 假设我们有两个一维的概率分布:P1和P2。这两个分布的密度函数如下: P1(x) = 0.2 * N(x; 0, 1) + 0.8 * N(x; 4, 1) P2(x) = 0.6 * N(x; 0, 1) + 0.4 * N(x; 4, 1) 其中,N(x; μ, σ)表示均值为μ,标准差为σ的正态分布在x处的概率密度。在上面的例子中,我们使用了两个正态分布的加权平均来表示每个分布。 我们可以使用Python中的Scipy库来计算这两个分布的Wasserstein距离。以下是计算代码: ```python from scipy.stats import wasserstein_distance import numpy as np # 生成样本 x1 = np.concatenate([np.random.normal(0, 1, 200), np.random.normal(4, 1, 800)]) x2 = np.concatenate([np.random.normal(0, 1, 600), np.random.normal(4, 1, 400)]) # 计算Wasserstein距离 w_dist = wasserstein_distance(x1, x2) print("Wasserstein距离为:", w_dist) ``` 在这个例子中,我们生成了两个样本x1和x2,它们分别来自于P1和P2。然后,我们使用Scipy库中的wasserstein_distance函数来计算它们之间Wasserstein距离。在这个例子中,我们得到的结果是1.24。 这个结果告诉我们,从P1到P2的“变换成本”是1.24。如果我们有更多的分布需要比较,我们可以使用Wasserstein距离来衡量它们之间的相似性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值