本文参考 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之间的距离,可以表示为

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

的值,可以看到当
的时候,KL散度处处为0,达到最优结果。

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

。从物理学参考系的角度可以直观感受出,如果要想评价两个物体(分布)的相似程度,相似程度的值(比如KL散度)应该不能因为选取的参考目标(目标分布)的不同而改变。

JS散度

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

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

Wasserstein距离

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

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

  • *为了让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也能够一样。

每一步的代价计算公式为

,第0步我们规定为0,故有

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

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

图片来源: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

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

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

其中inf指代最大下界,

表示的是分布pr和pg中所有可能的联合分布,每一个联合分布
都是之前提到的“土”,用于刻画连续空间中分布间转换的代价,更具体而言,
刻画从x点转移到y点从而让x,y服从相同分布所需要的“土”的百分比。因此$gamma$的边缘分布可以表示为

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

,也即上文离散情况下计算的代价
,而点与点之间的距离则为||x-y||,因而总代价为

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

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

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

考虑分布P和Q

画出图像则为

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

时,

的时候,P,Q两个分布完全重合,此时这三种距离度量方式均为0。可以看出KL散度在两个分布完全没有任何交集的时候会得出无穷的结果,而JS散度则会有突然的阶跃,并且在0点出不可微,只有Wasserstein距离能够提供更为平滑的结果用于梯度下降法的参数更新。不过值得一提的是,目前主流的分布距离度量依然是KL散度,这是由于KL散度的计算方式简单,计算成本较Wasserstein低,但今年来Wasserstein距离的近似Sinkhorn distance以及其他加快距离计算方法的论文也在不断涌现。因为本人研究也刚刚起步,本文也只是在英文原稿上加以翻译和整理,也希望相关领域大佬能不吝指教。

cpoint 两个点距离_Wasserstein距离学习笔记相关推荐

  1. 获取两个数据的交集_Redis学习笔记统计该如何选择数据类型

    关注爱因诗贤每天进步一点点导读 在业务场景中经常需要统计,如某直播累计观看人数.独立访客人数.历史总观看人数等等,再比如要统计某学生某月的签到情况等,遇到统计的情况,就需要思考如何合理地选择 Redi ...

  2. 数学建模——TOPSIS法(优劣解距离法)学习笔记(一)

    一.TOPSIS方法 TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution) 可翻译为逼近理想解排序法,国内常简 ...

  3. layui一个表格中怎么接两个接口的值_layer学习笔记之table表格引入数据实现分页...

    LayUI是一款免费,开源,轻量级的前端cms框架,适用于企业后端,能快速上手开发,集成了常用的组件,还有完善的文档和社区. 最近一直在学习使用layer的layui框架技术,这个主要表现在于弹出层的 ...

  4. vue rules 两个输入框不能相等_Vue 学习笔记(二十五):webpack 相关

    Webpack 是什么 Vue CLI Webpack 相关 Webpack 更多参考官方文档 Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定 ...

  5. 收藏了两年的嵌入式AI资源学习笔记,今天全分享给大家(附代码/资料/视频/学习规划)...

    当前乃至未来5-10年,嵌入式开发者还有哪些风口?" 画外音:风口的本质,其实就是一段时间的人才供需不平衡.说白了就是由于行业突变,敏锐的资本快速进入,导致短时间内行业大量扩张,需要大量开发 ...

  6. python有三个包如何只导入两个包_云计算开发学习笔记:Python3如何从一个包中导入*...

    来源:TechWeb.com.cn 设想一下,如果我们使用 from sound.effects import *会发生什么?Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们 ...

  7. 【OS学习笔记】三十三 保护模式九:分页机制对应的汇编代码之---用户程序代码

    本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的用户程序汇编代码. ;代码清单16-2;文 ...

  8. 【OS学习笔记】三十二 保护模式九:分页机制对应的汇编代码之---内核代码

    本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的内核汇编代码. ;代码清单16-1;文件名 ...

  9. BLE学习笔记3:GAP初始化

    GAP(Generic Access Profile),即通用访问规范.以下是搜索软件提供的解释: GAP定义了蓝牙设备如何发现和建立与其他设备的安全(或不安全)连接.它处理一些一般模式的业务(如询问 ...

  10. VCS工具学习笔记(4)

    目录 引言 VCD文件及生成 实际操作 makefile 编译仿真 打开波形文件 其他 1.$vcdpluson() 参数更改 2. $vcdplusmemon() 3.__FILE__  , __L ...

最新文章

  1. 22.调用delay()方法延时执行动画效果
  2. 如何正确的选择适合自己的WEB报表工具
  3. 深度学习100例 - 卷积神经网络(Inception V3)识别手语 | 第13天
  4. nginx 配置文件nginx.conf结构
  5. 样例解释:1013 数素数 (20分)
  6. C语言的putpiel函数,C语言graphics.h函数介绍
  7. python程序如何做界面_如何用Python给已有小程序做界面?
  8. Android Context简单说明
  9. 办公软件在多屏宽屏上的应用设想
  10. mysql数据库服务器默认端口_各个数据库的默认端口
  11. x550网卡linux驱动,Intel英特尔X520/X540/X550/82599系列万兆网卡驱动5.10.2版For Linux(2021年2月1日发布)...
  12. 人工智能可以替代人类?今天要来说说人工智能与人类意识到底差距在哪里!...
  13. caj转word是怎么进行转换的
  14. JS原生编写飞机大战小蜜蜂游戏
  15. YAPI简单使用教程
  16. Firefly笔记一之http模块
  17. 离散数学 (II) 习题 3
  18. MySQL-表中数据的增删改查(基础篇)
  19. 2021 年情人节最新的表白神器(Python 制作,源码已开放)
  20. 基于stm32f103的火箭车

热门文章

  1. 敏捷开发用户故事系列之九:用户故事早期估算
  2. VirtualBox安装Mac OS引导盘启动不了原因
  3. 配置Web.Config连接数据库
  4. 1.亿级流量的电商网站---概述
  5. 49. 模型层 --- dao 层
  6. 38. Element cloneNode() 方法
  7. 28. git 常用命令
  8. rest syntax(parameters)
  9. 20172325 2018-2019-1 蓝墨云班课实验--哈夫曼树的编码
  10. 1.为什么 要需要变量。二进制,方便,2.变量是什么 ,3.声明变量