《繁凡的深度学习笔记》第 3 章分类问题与信息论基础 (中)(逻辑回归、信息论基础、Softmax回归)(DL笔记整理系列)
3043331995@qq.com
https://fanfansann.blog.csdn.net/
https://github.com/fanfansann/fanfan-deep-learning-note
作者:繁凡
version 1.02022-1-20
声明:
1)《繁凡的深度学习笔记》是我自学完成深度学习相关的教材、课程、论文、项目实战等内容之后,自我总结整理创作的学习笔记。写文章就图一乐,大家能看得开心,能学到些许知识,对我而言就已经足够了 ^q^ 。
2)因个人时间、能力和水平有限,本文并非由我个人完全原创,文章部分内容整理自互联网上的各种资源,引用内容标注在每章末的参考资料之中。
3)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除,非常感谢各位为知识传播做出的贡献!
4)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢。
5)本文由我个人( CSDN 博主 「繁凡さん」(博客) , 知乎答主 「繁凡」(专栏), Github 「fanfansann」(全部源码) , 微信公众号 「繁凡的小岛来信」(文章 P D F 下载))整理创作而成,且仅发布于这四个平台,仅做交流学习使用,无任何商业用途。
6)「我希望能够创作出一本清晰易懂、可爱有趣、内容详实的深度学习笔记,而不仅仅只是知识的简单堆砌。」
7)本文《繁凡的深度学习笔记》全汇总链接:《繁凡的深度学习笔记》前言、目录大纲
8)本文的Github 地址:https://github.com/fanfansann/fanfan-deep-learning-note/ 孩子的第一个 『Github』!给我个? ??? Starred \boxed{? \,\,\,\text{Starred}} ?Starred? 嘛!谢谢!!o(〃^▽^〃)o
9)此属 version 1.0 ,若有错误,还需继续修正与增删,还望大家多多指点。本文会随着我的深入学习不断地进行完善更新,Github 中的 P D F 版也会尽量每月进行一次更新,所以建议点赞收藏分享加关注,以便经常过来回看!
如果觉得还不错或者能对你有一点点帮助的话,请帮我给本篇文章点个赞,你的支持是我创作的最大动力!^0^
要是没人点赞的话自然就更新慢咯 >_<
《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)目录
第 3 章 分类问题 (逻辑回归、Softmax 回归、信息论基础)
??? 3.1 手写数字分类问题
????? 3.1.1 手写数字图片数据集
????? 3.1.2 构建模型
????? 3.1.3 误差计算
????? 3.1.4 非线性模型
????? 3.1.4 手写数字图片识别实战
???????? 3.1.4.1 TensorFlow2.0 实现
???????? 3.1.4.2 PyTorch 实现
??? 3.2 逻辑回归(Logistic Regression, LR)
????? 3.2.1 决策边界
????? 3.2.2 逻辑回归模型
????? 3.2.3 代价函数
????? 3.2.4 优化方法
《繁凡的深度学习笔记》第 3 章分类问题与信息论基础(中)目录
- 《繁凡的深度学习笔记》第 3 章(中)分类问题与信息论基础
-
- 3.3 信息论基础
-
- 3.3.1 信息论
-
- 3.3.1.1 自信息与信息量
- 3.3.2 香农熵
-
- 3.3.2.1 熵
- 3.3.2.2 联合熵
- 3.3.2.3 互信息
- 3.3.2.4 条件熵
- 3.3.2.5 信息熵的链式法则
- 3.3.3 相对熵(KL 散度)
- 3.3.4 交叉熵
- 3.3.5 JS 散度
- 3.3.6 Wasserstein 距离
《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(下)目录
??? 3.4 Softmax 回归
????? 3.4.1 Softmax 回归模型
????? 3.4.2 优化方法
????? 3.4.3 权重衰减
????? 3.4.4 Fashion-MNIST 数据集图片分类实战
??? 3.5 Softmax 回归与逻辑回归的关系
????? 3.5.1 Softmax 回归与逻辑回归的关系
????? 3.5.2 多分类问题的 Softmax 回归与 k 个二元分类器
??? 3.6 面试问题集锦
??? 3.7 参考资料
《繁凡的深度学习笔记》第 3 章(中)分类问题与信息论基础 3.3 信息论基础
信息论是一个非常庞大的学科,这里仅对机器学习中常用的简单信息论基础进行清晰易懂的简要讲解。如果对信息论感兴趣想要深入学习,请继续阅读Thomas M. Cover 的 《Elements of Information Theory》 (信息论经典之作)以及其中译本《信息论基础》,详见 我的Github 项目《繁凡的深度学习笔记》免.费深度学习书籍 。3.3.1 信息论
??信息论是运用概率论与数理统计的方法研究信息熵、通信系统、数据传输、数据压缩等问题的应用数学学科,主要研究的是对一个信号能够提供的信息多少进行量化。信息论涉及编码、解码、发送以及尽可能简洁地处理信息或数据,主要的研究对象是关于随机变量的信息熵和信道。
3.3.1.1 自信息与信息量 ??信息量(amount of information),指信息多少的量度。我们需要知道,信息是用来减少随机不确定性的东西,也即不确定性的减少。
??自信息(self-information),又译为信息本体,由克劳德 · 香农(Claude Shannon)提出,用来衡量单一事件发生时所包含的信息量多寡。任何事件都会承载着一定的信息量,包括已经发生的事件和未发生的事件,只是它们承载的信息量会有所不同。
??例如对于昨天下雨这个已知事件,因为是已经发生的事件,是既定事实,那么它的信息量就为0 0 0 。对于明天会下雨这个事件,因为未有发生,那么这个事件的信息量就大。我们可以发现信息量是一个与事件发生概率相关的概念。对于一个事件来说,它发生的概率越大,确定性越强,显然它所含有的信息量就越低。一件事情发生的概率越低,不确定性越强,它包含的信息量就越大。
??至此,信息论假设信息量它只与随机变量的概率分布有关,满足可加性等性质。
定义事件X = x i X=x_i X=xi? 的自信息为
I ( x i ) = log ? b 1 P ( x i ) = ? log ? b P ( x i ) = ? log ? P ( x i ) (3.32) I\left(x_i\right)=\log_b\dfrac 1{P(x_i)}=-\log_b P\left(x_i\right)=-\log P\left(x_i\right)\tag{3.32} I(xi?)=logb?P(xi?)1?=?logb?P(xi?)=?logP(xi?)(3.32)
其中, X X X 为随机变量, x i x_i xi? 为随机变量的某个取值, P P P 为X X X 的概率分布:X ~ P ( X ) X\sim P(X) X~P(X) , n n n 表示事件的个数,参数b b b 不同时对应的结果单位不同,在公式中可忽略。在机器学习中,用自然对数e e e 为底,单位为 奈特( n i t \mathrm{nit} nit),用2 2 2 为底,单位为比特( b i t \mathrm{bit} bit)。至于我们为什么会这样定义自信息,我们将在下一节 《繁凡的深度学习笔记》3.3.2 香农熵 中进行详细探讨。
我们同样可以定义事件X = x i , Y = y i X=x_i,Y=y_i X=xi?,Y=yi? 的联合自信息:
I ( x i , y j ) = log ? 1 P ( x i , y j ) (3.33) I\left(x_{i}, y_{j}\right)=\log \frac{1}{P\left(x_{i}, y_{j}\right)}\tag{3.33} I(xi?,yj?)=logP(xi?,yj?)1?(3.33)
如果X X X 与Y Y Y 相互独立,则:
I ( x i , y j ) = log ? 1 P ( x i ) + log ? 1 P ( y i ) = I ( x i ) + I ( y j ) (3.34) \begin{aligned}I\left(x_{i}, y_{j}\right) &=\log \frac{1}{P\left(x_{i}\right)}+\log \frac{1}{P\left(y_{i}\right)} \\&=I\left(x_{i}\right)+I\left(y_{j}\right)\end{aligned}\tag{3.34} I(xi?,yj?)?=logP(xi?)1?+logP(yi?)1?=I(xi?)+I(yj?)?(3.34)
直观上我们要求需要自信息满足如下的性质:
- 连续性,即事件的自信息I I I 随着P P P 的变化连续变化。
- 单调递减性,即发生的概率越小,确定它发生所需要的信息量越大。
- 当P → 0 P\rightarrow 0 P→0 时,I → ∞ I\rightarrow \infin I→∞ ,即确定不可能事件发生需要的信息量为无穷大。
- 当P → 1 P\rightarrow 1 P→1 时, I → 0 I\rightarrow 0 I→0,即对确定一定会发生事件发生需要的信息量为0。
- 独立随机变量的自信息等于各自自信息的代数和。
3.3.2 香农熵
3.3.2.1 熵 ??我们首先来介绍信息学中熵的概念。
??熵 (Entropy),本是热力学中的概念,1948 年,克劳德 · 香农(Claude Shannon)将热力学中的熵的概念引入到信息论中,因此也被称为 信息熵 或香农熵 (Shannon Entropy),用来衡量信息的不确定度。不准确点说,熵是用来衡量混乱程度的。越混乱,熵越大,代表不确定性越大,要弄清楚情况所需要的信息量越多。
??举个栗子,一个袋子有10 10 10 个球。如果其中有5 5 5 个红球5 5 5 个白球,这就是混乱的。如果有9 9 9 个红球和1 1 1 个白球,这就不混乱。可以理解为如果各种物品的比例相同,不同物品的概率都很大,那么我想要判断袋子里面有什么东西就比较困难,整体的信息量就很大,就会非常混乱。如果袋子仅有一种物品,那么我判断袋子里的物品就非常容易,这便是不混乱。也即一个集合里面各部分比例越均衡越混乱,各部分越两极分化越不混乱。
??那么如何使用数学来衡量混乱程度呢? 我们显然发现当物品的总数不变的情况下,两种物品数目的乘积越大越混乱,越小越不混乱。那么我们显然就可以用这个相乘的结果来衡量数据混乱程度。既然如此,如果袋子中有多种球,我们可以将他们的概率连乘即可。
??但是我们发现连乘起来以后求导比较困难,例如对f ( P ( x ) ) × g ( P ( x ) ) f(P(x))\times g(P(x)) f(P(x))×g(P(x)) 进行求导我们就需要将其展开。一个显而易见的思路就是对乘积取对数将乘法变成加法,这样不仅求导更加方便,原先的单调性也没有改变。
??但是我们发现取对数以后虽然log ? P ( x ) \log P(x) logP(x) 是单调递增的,但是概率P ( x ) P(x) P(x) 不能取0 0 0。我们知道概率的取值范围为[ 0 , 1 ] [0,1] [0,1],而当P ( x ) = 0 P(x)=0 P(x)=0 时,此时极限是负无穷的log ? ( P ( x ) ) \log(P(x)) log(P(x)) 是没有任何意义的。考虑能不能让0 0 0 乘上负无穷使其变成0 0 0,于是我们就得到了衡量混乱程度的指标: P ( x ) × log ? P ( x ) P(x)\times \log P(x) P(x)×logP(x),此P ( x ) → 0 P(x)\rightarrow 0 P(x)→0 时, P ( x ) × log ? P ( x ) = 0 P(x)\times \log P(x)=0 P(x)×logP(x)=0。此时P ( x ) P(x) P(x) 单调递增, log ? ( P ( x ) ) \log (P(x)) log(P(x)) 单调递减。相乘为单调递减。由于我们希望概率越大,不确定性也即熵的大小越小,因此我们可以取负号,至此我们就得到了香农熵的形式,同时也被香农在数学上严格证明满足信息熵三个条件的随机变量不确定性度量函数具有的唯一形式:
H ( X ) = ? ∑ i = 1 n P ( x i ) log ? P ( x i ) H\left(X\right)=-\sum_{i=1}^{n}P\left(x_i\right)\log{P\left(x_i\right)} H(X)=?i=1∑n?P(xi?)logP(xi?)
信息论之父克劳德·香农,总结出的信息熵的三条性质:??因此我们定义事件X = x i X=x_i X=xi? 的信息量I ( x i ) = ? log ? P ( x i ) I(x_i)=-\log P(x_i) I(xi?)=?logP(xi?),此时信息量的期望就是熵,也即:
- 单调性,即发生概率越高的事件,其所携带的信息熵越低。极端案例就是“太阳从东方升起”,因为为确定事件,所以不携带任何信息量。从信息论的角度,认为这句话没有消除任何不确定性。
- 非负性,即信息熵不能为负。这个很好理解,因为负的信息,即你得知了某个信息后,却增加了不确定性是不合逻辑的。
- 累加性,即多随机事件同时发生存在的总不确定性的量度是可以表示为各事件不确定性的量度的和。
H ( x ) = ? ∑ i = 1 n P ( x i ) log ? b P ( x i ) = E x ~ P [ I ( x ) ] = ? E x ~ P [ log ? P ( x ) ] \begin{aligned}H\left(\mathrm{x}\right)&=-\sum_{i=1}^{n}P\left(x_i\right)\log_b{P\left(x_i\right)}\\&=\mathbb{E}_{\mathrm{x}\sim P}\left[I\left(x\right)\right]=-\mathbb{E}_{\mathrm{x}\sim P}\left[\log{P\left(x\right)}\right]\end{aligned} H(x)?=?i=1∑n?P(xi?)logb?P(xi?)=Ex~P?[I(x)]=?Ex~P?[logP(x)]?
其中P P P 为X X X 的概率质量函数, n n n 表示事件的个数,参数b b b 不同时对应的结果单位不同。在机器学习中,用自然对数e e e 为底,单位为 奈特( n i t \mathrm{nit} nit),用2 2 2 为底,单位为比特( b i t \mathrm{bit} bit)。对于连续变量则被称为 微分熵。
一个随机变量X X X 的熵H ( X ) H(X) H(X) 的大小可以理解为事件信息量的比特数。
??这里以2 2 2 为底举个例子,对于4 4 4 分类问题,如果某个样本的真实标签是第4 4 4 类,one-hot 编码为[ 0 , 0 , 0 , 1 ] [0,0,0,1] [0,0,0,1] ,即这张图片的分类是唯一确定的,它属于第4 4 4 类的概率( = 4 ∣ ) = 1 (=4|) = 1 (y=4∣x)=1,不确定性为0 0 0,它的熵可以简单的计算为
? 0 × log ? 2 0 ? 0 × log ? 2 0 ? 0 × log ? 2 0 ? 1 × log ? 2 1 = 0 -0 \times \log _{2} 0-0 \times \log _{2} 0-0 \times \log _{2} 0-1 \times \log _{2} 1=0 ?0×log2?0?0×log2?0?0×log2?0?1×log2?1=0
也就是,对于确定的分布,熵为0 0 0,即不确定性最低。如果它预测的概率分布是[ 0.1 , 0.1 , 0.1 , 0.7 ] [0.1,0.1,0.1,0.7] [0.1,0.1,0.1,0.7],它的熵可以计算为
? 0.1 × log ? 2 0.1 ? 0.1 × log ? 2 0.1 ? 0.1 × log ? 2 0.1 ? 0.7 × log ? 2 0.7 ≈ 1.356 ?? b i t -0.1 \times \log _{2} 0.1 - 0.1 \times \log _{2} 0.1 - 0.1 \times \log _{2} 0.1 - 0.7 \times \log _{2} 0.7 \approx 1.356\,\,\mathrm{bit} ?0.1×log2?0.1?0.1×log2?0.1?0.1×log2?0.1?0.7×log2?0.7≈1.356bit
??考虑随机分类器,它每个类别的预测概率是均等的: [ 0.25 , 0.25 , 0.25 , 0.25 ] [0.25,0.25,0.25,0.25] [0.25,0.25,0.25,0.25],这种情况下的熵约为2 2 2。
??由于P ( ) ∈ [ 0 , 1 ] , log ? 2 ( ) ≤ 0 P() ∈ [0,1], \log2 () \le 0 P(i)∈[0,1],log2(i)≤0,因此熵总是大于等于0 0 0。当熵取得最小值0 0 0时,不确定性为0 0 0。分类问题的 One-hot 编码的分布就是熵为 0 的例子。我们可以使用
math.log
来组合计算熵。??对于 0-1 分布问题,二值随机变量的香农熵、伯努利分布熵,随机变量x x x 的取值为{ 0 , 1 } \{0, 1\} {0,1},此时熵的计算可以简化为
H ( x ) = ? P ( x ) log ? ( P ( x ) ) ? ( 1 ? P ( x ) ) log ? ( 1 ? P ( x ) ) H\left(\mathrm{x}\right)=-P\left(x\right)\log{\left(P\left(x\right)\right)}-\left(1-P\left(x\right)\right)\log\left(1-P\left(x\right)\right) H(x)=?P(x)log(P(x))?(1?P(x))log(1?P(x))
??另一个经典的例子是:在一场赌马比赛中,有4 4 4 匹马{ A , B , C , D } \{ A, B, C, D\} {A,B,C,D} ,获胜概率分别为{ 1 2 , 1 4 , 1 8 , 1 8 } \{ \dfrac 1 2, \dfrac 14, \dfrac 18,\dfrac 18 \} {21?,41?,81?,81?},将哪一匹马获胜视为随机变量X X X 属于{ A , B , C , D } \{ A, B, C, D \} {A,B,C,D}。假定我们需要用尽可能少的二元问题来确定随机变量X X X 的取值,也即我们可以给出若干个询问,每组询问只能得到两种答案:对或者错。请问最少需要通过多少个问题,来知道最后是哪匹马获得了胜利?
例如:问题 1 : A A A 获胜了吗?问题 2 : B B B获胜了吗?问题 3 : C C C 获胜了吗?最后我们可以通过最多3 3 3 个二元问题,来确定X X X 的取值,也即最终是哪一匹马获得了胜利。
如果最终是A A A 获得胜利,也即X = A X = A X=A ,那么只需要问1 1 1 次(问题 1 ) 即可得到答案, A A A 获胜的概率为1 2 \dfrac 1 2 21?。
如果最终是B B B 获得胜利,也即X = B X = B X=B ,那么需要问2 2 2 次(问题 1 以及问题 2 ), B B B 获胜的概率为1 4 \dfrac 1 4 41? 。
如果最终是C C C 获得胜利,也即X = C X = C X=C,那么需要问3 3 3 次(问题 1,问题 2,问题 3 ), C C C 获胜的概率为1 8 \dfrac 1 8 81?。
如果最终是D D D 获得胜利,也即X = D X = D X=D,那么需要问3 3 3 次(问题 1 ,问题 2 ,问题 3 ), D D D 获胜的概率为1 8 \dfrac 1 8 81?。
那么为确定X X X 取值的二元问题的数量期望次数为:
E ( N ) = 1 2 ? 1 + 1 4 ? 2 + 1 8 ? 3 + 1 8 ? 3 = 7 4 E(N)=\frac{1}{2} \cdot 1+\frac{1}{4} \cdot 2+\frac{1}{8} \cdot 3+\frac{1}{8} \cdot 3=\frac{7}{4} E(N)=21??1+41??2+81??3+81??3=47?
那么我们带入到信息熵的公式中,选取log ? \log log 的底数为2 2 2 ,即可得到:
H ( X ) = 1 2 log ? ( 2 ) + 1 4 log ? ( 4 ) + 1 8 log ? ( 8 ) + 1 8 log ? ( 8 ) = 1 2 + 1 2 + 3 8 + 3 8 = 7 4bitH(X)=\frac{1}{2} \log (2)+\frac{1}{4} \log (4)+\frac{1}{8} \log (8)+\frac{1}{8} \log (8)=\frac{1}{2}+\frac{1}{2}+\frac{3}{8}+\frac{3}{8}=\frac{7}{4} \text { bit } H(X)=21?log(2)+41?log(4)+81?log(8)+81?log(8)=21?+21?+83?+83?=47? bit
??在二进制计算机中,一个比特为0 0 0 或1 1 1 ,其实就代表了一个二元问题的回答。平均码长L ( C ) = ∑ x ∈ X P ( x ) l ( x ) \displaystyle L(C)=\sum_{x\in X}P(x)l(x) L(C)=x∈X∑?P(x)l(x),其中P ( x ) P(x) P(x) 为概率, l ( x ) l(x) l(x) 为码长,在计算机中,我们给哪一匹马夺冠这个事件进行编码,所需要的平均码长为1.75 1.75 1.75 个比特。
??为了尽可能减少码长,我们要给发生概率P ( x ) P(x) P(x) 较大的事件,分配较短的码长l ( x ) l(x) l(x) 。这样就可以得出霍夫曼编码的概念。
??那么{ A , B , C , D } \{A,B,C,D\} {A,B,C,D} 四个事件,可以分别由{ 0 , 10 , 110 , 111 } \{0, 10, 110, 111\} {0,10,110,111} 表示,显然我们要把最短的码0 0 0 分配给发生概率最高的事件A A A ,以此类推。而且得到的平均码长为1.75 1.75 1.75 比特。如果我们硬要反其道而行之,给事件A A A 分配最长的码111 111 111 ,那么平均码长就会变成2.625 2.625 2.625 比特。
??霍夫曼编码就是利用了这种大概率事件分配短码的思想,而且可以证明这种编码方式是最优的。我们可以证明:
- 为了获得信息熵为H ( X ) H(X) H(X) 的随机变量X X X 的一个样本,平均需要抛掷均匀硬币(或二元问题)H ( X ) H(X) H(X) 次(参考猜赛马问题的案例)
- 信息熵的大小是数据压缩过程中能达到的一个临界值。
H ( X , Y ) = ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x , y ) = ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? ( P ( x ) P ( y ∣ x ) ) = ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x ) ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( y ∣ x ) = ? ∑ x ∈ X P ( x ) log ? P ( x ) ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( y ∣ x ) = H ( X ) + H ( Y ∣ X ) \begin{aligned}H(X, Y)&=-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x, y) \\&=-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log (P(x) P(y \mid x)) \\&=-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x)-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(y \mid x) \\&=-\sum_{x \in X} P(x) \log P(x)-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(y \mid x) \\&=H(X)+H(Y \mid X)\end{aligned} H(X,Y)?=?x∈X∑?y∈Y∑?P(x,y)logP(x,y)=?x∈X∑?y∈Y∑?P(x,y)log(P(x)P(y∣x))=?x∈X∑?y∈Y∑?P(x,y)logP(x)?x∈X∑?y∈Y∑?P(x,y)logP(y∣x)=?x∈X∑?P(x)logP(x)?x∈X∑?y∈Y∑?P(x,y)logP(y∣x)=H(X)+H(Y∣X)?
??在物理意义其度量了一个联合分布的随机系统的不确定度,观察了该随机系统的信息量。
??当事件X = A , Y = B X=A, Y=B X=A,Y=B 同时发生且相互独立时,有P ( X = A , Y = B ) = P ( X = A ) × P ( Y = B ) P(X=A,Y=B)=P(X=A)\times P(Y=B) P(X=A,Y=B)=P(X=A)×P(Y=B) ,此时信息熵
H ( A , B ) = H ( A ) + H ( B ) H(A,B)=H(A)+H(B) H(A,B)=H(A)+H(B)
也即当随机变量X , Y X,Y X,Y 相互独立时,有
H ( X , Y ) = H ( X ) + H ( Y ) H(X,Y)=H(X)+H(Y) H(X,Y)=H(X)+H(Y)
3.3.2.3 互信息 ??两个随机变量X X X 和Y Y Y 的互信息定义为:
I ( X , Y ) = ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? ( P ( x , y ) P ( x ) ? P ( y ) ) = ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x , y ) ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? ( P ( x ) ? P ( y ) ) = ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x ) ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( y ) ? ( ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x , y ) ) = ? ∑ x ∈ X P ( x ) log ? P ( x ) ? ∑ y ∈ Y P ( y ) log ? P ( y ) ? ( ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x , y ) ) = H ( X ) + H ( Y ) ? H ( X , Y ) = H ( Y ) ? H ( Y ∣ X ) = H ( X ) ? H ( X ∣ Y ) = H ( X , Y ) ? H ( Y ∣ X ) ? H ( X ∣ Y ) \begin{aligned}I(X, Y)=&\sum_{x \in X} \sum_{y \in Y} P(x, y) \log \left(\frac{P(x, y)}{P(x) * P(y)}\right) \\&=\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x, y)-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log (P(x) * P(y)) \\&=-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x)-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(y)-\left(-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x, y)\right) \\&=-\sum_{x \in X} P(x) \log P(x)-\sum_{y \in Y} P(y) \log P(y)-\left(-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x, y)\right) \\&=H(X)+H(Y)-H(X, Y) \\&=H(Y)-H(Y \mid X) \\&=H(X)-H(X \mid Y) \\&=H(X, Y)-H(Y \mid X)-H(X \mid Y)\end{aligned} I(X,Y)=?x∈X∑?y∈Y∑?P(x,y)log(P(x)?P(y)P(x,y)?)=x∈X∑?y∈Y∑?P(x,y)logP(x,y)?x∈X∑?y∈Y∑?P(x,y)log(P(x)?P(y))=?x∈X∑?y∈Y∑?P(x,y)logP(x)?x∈X∑?y∈Y∑?P(x,y)logP(y)?????x∈X∑?y∈Y∑?P(x,y)logP(x,y)???=?x∈X∑?P(x)logP(x)?y∈Y∑?P(y)logP(y)?????x∈X∑?y∈Y∑?P(x,y)logP(x,y)???=H(X)+H(Y)?H(X,Y)=H(Y)?H(Y∣X)=H(X)?H(X∣Y)=H(X,Y)?H(Y∣X)?H(X∣Y)?
??当X , Y X, Y X,Y 不相互独立时:
I ( X , Y ) = H ( X ) + H ( Y ) ? H ( X , Y ) I(X,Y)=H(X)+H(Y)-H(X,Y) I(X,Y)=H(X)+H(Y)?H(X,Y)
??互信息代表一个随机变量包含另一个随机变量信息量的度量。其物理意义表明了两事件单独发生的信息量是有重复的。互信息度量了这种重复的信息量大小。在一个点到点通信系统中,发送端信号为X X X ,通过信道后,接收端接收到的信号为Y Y Y ,那么信息通过信道传递的信息量就是互信息I ( X , Y ) I(X,Y) I(X,Y)。根据这个概念,香农推出了非常伟大的公式,香农公式,给出了临界通信传输速率的值,即信道容量:
C = B log ? ( 1 + S N ) C=B\log(1+\dfrac S N) C=Blog(1+NS?)
3.3.2.4 条件熵 ??两个随机变量X X X 和Y Y Y 的条件熵定义为:
H ( Y ∣ X ) = ∑ x ∈ X P ( x ) H ( Y ∣ x ) = ? ∑ x ∈ X P ( x ) ∑ y ∈ Y P ( y ∣ x ) log ? P ( y ∣ x ) = ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x , y ) P ( x ) = ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x , y ) + ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x ) = ? ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ? P ( x , y ) + ∑ x ∈ X P ( x ) log ? P ( x ) = H ( X , Y ) ? H ( X ) \begin{aligned}H(Y \mid X)&=\sum_{x \in X} P(x) H(Y \mid x)=-\sum_{x \in X} P(x) \sum_{y \in Y} P(y \mid x) \log P(y \mid x) \\&=-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log \frac{P(x, y)}{P(x)} \\&=-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x, y)+\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x) \\&=-\sum_{x \in X} \sum_{y \in Y} P(x, y) \log P(x, y)+\sum_{x \in X} P(x) \log P(x) \\&=H(X, Y)-H(X)\end{aligned} H(Y∣X)?=x∈X∑?P(x)H(Y∣x)=?x∈X∑?P(x)y∈Y∑?P(y∣x)logP(y∣x)=?x∈X∑?y∈Y∑?P(x,y)logP(x)P(x,y)?=?x∈X∑?y∈Y∑?P(x,y)logP(x,y)+x∈X∑?y∈Y∑?P(x,y)logP(x)=?x∈X∑?y∈Y∑?P(x,y)logP(x,y)+x∈X∑?P(x)logP(x)=H(X,Y)?H(X)?
??条件熵度量了在已知随机变量X X X 的条件下随机变量Y Y Y 的不确定性,也即在X X X 已知的条件下,获得Y Y Y 对于整体信息量的增加情况,有:
H ( X , Y ) = H ( X ) + H ( Y ∣ X ) = H ( Y ) + H ( X ∣ Y ) \begin{aligned}H(X,Y)&=H(X)+H(Y\mid X) \\&=H(Y)+H(X\mid Y)\end{aligned} H(X,Y)?=H(X)+H(Y∣X)=H(Y)+H(X∣Y)?
它们组成的 Venn 图如图 3.11 所示:
文章图片
图 3.11 信息熵 ??
3.3.2.5 信息熵的链式法则 三个随机变量的互信息可以表示成:
H ( X 1 , X 2 , X 3 ) = H ( X 1 ) + H ( X 2 ∣ X 1 ) + H ( X 3 ∣ X 1 , X 2 ) H\left(X_{1}, X_{2}, X_{3}\right)=H\left(X_{1}\right)+H\left(X_{2} \mid X_{1}\right)+H\left(X_{3} \mid X_{1}, X_{2}\right) H(X1?,X2?,X3?)=H(X1?)+H(X2?∣X1?)+H(X3?∣X1?,X2?)
则对于n n n 个随机变量X 1 , … , X n X_1,\dots,X_n X1?,…,Xn? 以及P ( x 1 , x 2 , … , x n ) P(x_1,x_2,\dots,x_n) P(x1?,x2?,…,xn?),它们的信息熵可以由链式法则表达为:
H ( X 1 , X 2 , … X n ) = H ( X 1 ) + H ( X 2 ∣ X 1 ) + ? + H ( X n ∣ X n ? 1 … , X 1 ) = ∑ i = 1 n H ( X i ∣ X 1 , … , X i ? 1 ) \begin{aligned}H(X_1,X_2,\dots X_n)&=H(X_1)+H(X_2\mid X_1)+\cdots+H(X_n\mid X_{n-1}\dots,X_1)\\&=\sum_{i=1}^n H(X_i\mid X_1, \dots,X_{i-1})\end{aligned} H(X1?,X2?,…Xn?)?=H(X1?)+H(X2?∣X1?)+?+H(Xn?∣Xn?1?…,X1?)=i=1∑n?H(Xi?∣X1?,…,Xi?1?)?
3.3.3 相对熵(KL 散度)
??相对熵(Relative Entropy),也叫 KL 散度 (Kullback-Leibler Divergence),具有非负的特性。用于衡量两个分布之间距离的指标,用P P P 分布近似Q Q Q 的分布,相对熵可以计算这个中间的损失,但是不对称( P P P 对Q Q Q 和Q Q Q 对P P P 不相等),因此不能表示两个分布之间的距离,这种非对称性意味着选择D K L ( P ∥ Q ) D_{\mathrm{KL}}(P\|Q) DKL?(P∥Q) 还是D K L ( Q ∥ P ) D_{\mathrm{KL}}(Q\|P) DKL?(Q∥P) 影响很大。当P = Q P =Q P=Q 时, 相对熵( K L \mathrm{KL} KL 散度) D K L ( P ∥ Q ) D_{\mathrm{KL}} (P\|Q) DKL?(P∥Q)取得最小值0 0 0。
??如果对于同一个随机变量x {x} x 有两个单独的概率分布P ( x ) P(x) P(x) 和Q ( x ) Q(x) Q(x),我们就可以使用K L \mathrm{KL} KL 散度来衡量这两个分布的差异。 K L \mathrm{KL} KL 散度越小,真实分布与近似分布之间的匹配就越好。
D K L ( P ∥ Q ) = E x ~ P [ log ? P ( x ) Q ( x ) ] = E x ~ P [ log ? P ( x ) ? log ? Q ( x ) ] D_{\mathrm{KL}}(P \| Q)=\mathbb{E}_{\mathrm{x} \sim P}\left[\log \frac{P(x)}{Q(x)}\right]=\mathbb{E}_{\mathrm{x} \sim P}[\log P(x)-\log Q(x)] DKL?(P∥Q)=Ex~P?[logQ(x)P(x)?]=Ex~P?[logP(x)?logQ(x)]
其中D S K ( P ∥ Q ) D_{\mathrm SK}(P\|Q) DSK?(P∥Q) 的值域P , Q P,Q P,Q 分布的接近程度是呈正相关的。
我们将K L \mathrm{KL} KL 散度公式变形得到:
D K L ( P ∥ Q ) = E x ~ P [ log ? P ( x ) ? log ? Q ( x ) ] = E x ~ P [ log ? P ( x ) ] ? E x ~ P [ log ? Q ( x ) ] = ? H ( P ) ? E x ~ P [ log ? Q ( x ) ] = H Q ( P ) ? H P ( P ) \begin{aligned}D_{\mathrm{KL}}(P \| Q)&=\mathbb{E}_{\mathrm{x} \sim P}[\log P(x)-\log Q(x)]\\&=\mathbb{E}_{\mathrm{x}\sim{P}}[\log{P(x)}]-\mathbb{E}_{\mathrm{x}\sim{P}}[\log{Q(x)}]\\&=-H(P)-\mathbb{E}_{\mathbf{x}\sim P}[\log Q(x)]\\&=H_Q(P)-H_P(P)\end{aligned} DKL?(P∥Q)?=Ex~P?[logP(x)?logQ(x)]=Ex~P?[logP(x)]?Ex~P?[logQ(x)]=?H(P)?Ex~P?[logQ(x)]=HQ?(P)?HP?(P)?
为了保证K L \mathrm{KL} KL 散度的连续性,约定:?? E q . ( ) Eq.() Eq.() 中的H Q ( P ) H_Q(P) HQ?(P) 表示使用分布Q Q Q ,对分布P P P 进行编码所需的平均编码b i t \mathrm{bit} bit 数, H P ( P ) H_P(P) HP?(P) 表示使用分布P P P ,对分布P P P 编码所需的最小编码b i t \mathrm{bit} bit 数。因此相对熵的的意义可以理解为: D K L ( P ∥ Q ) D_{\mathrm{KL}}(P\|Q) DKL?(P∥Q) 表示对于分布P P P ,使用Q Q Q 分布进行编码相较于使用真实分布P P P 进行编码(即最优编码)多出来的b i t \mathrm{bit} bit 数,也即是两个分布之间的差异。
0 log ? 0 0 = 0 , 0 log ? 0 Q = 0 , P log ? P 0 = ∞ 0 \log \frac{0}{0}=0,0 \log \frac{0}{Q}=0, P \log \frac{P}{0}=\infty 0log00?=0,0logQ0?=0,Plog0P?=∞
当P = Q P=Q P=Q 时,两者之间的相对熵D K L ( P ∥ Q ) = 0 D_{\mathrm{KL}}(P\|Q)=0 DKL?(P∥Q)=0
??在机器学习中, P P P 往往用来表示样本的真实分布, Q Q Q 用来表示模型所预测的分布,那么K L \mathrm{KL} KL 散度就可以计算两个分布的差异,也就是 损失函数L \mathcal L L:
D K L ( P ∥ Q ) = E x ~ P [ log ? P ( x ) Q ( x ) ] = ∑ i = 1 n P ( x i ) log ? P ( x i ) Q ( x i ) D_{\mathrm{KL}}(P\|Q)=\mathbb{E}_{\mathrm{x} \sim P}\left[\log \frac{P(x)}{Q(x)}\right]=\sum_{i=1}^n{P(x_i)\log{\frac{P(x_i)}{Q(x_i)}}} DKL?(P∥Q)=Ex~P?[logQ(x)P(x)?]=i=1∑n?P(xi?)logQ(xi?)P(xi?)?
离散:
D K L ( P ∣ ∣ Q ) = ? ∑ i P ( i ) ln ? Q ( i ) P ( i ) = ∑ i P ( i ) ln ? P ( i ) Q ( i ) D_{\mathrm{KL}}(P||Q)=-\sum_iP(i)\ln\frac{Q(i)}{P(i)}=\sum_iP(i)\ln\frac{P(i)}{Q(i)} DKL?(P∣∣Q)=?i∑?P(i)lnP(i)Q(i)?=i∑?P(i)lnQ(i)P(i)?
连续:
D K L ( P ∣ ∣ Q ) = ∫ ? ∞ ∞ p ( x ) ln ? p ( x ) q ( x ) d x D_{\mathrm{KL}}(P||Q)=\int_{-\infty}^{\infty}p(x)\ln\frac{p(x)}{q(x)}dx DKL?(P∣∣Q)=∫?∞∞?p(x)lnq(x)p(x)?dx
我们可以利用不等式log ? x ≤ x ? 1 \log x\le x-1 logx≤x?1 即可证明K L \mathrm{KL} KL 散度一定大于0 0 0:
考虑连续的K L \mathrm{KL} KL 散度,设有两个概率密度P ( x ) , Q ( x ) P(x),Q(x) P(x),Q(x),假设Q ( x ) > 0 Q(x)>0 Q(x)>0,则有K L \mathrm{KL} KL 散度:
D ( P ∥ Q ) = ∫ P ( x ) log ? P ( x ) Q ( x ) dx = ? ∫ P ( x ) log ? Q ( x ) P ( x ) dx ≥ ? ∫ P ( x ) ( Q ( x ) P ( x ) ? 1 ) dx = ? ∫ Q ( x ) ? P ( x ) dx 【概率密度函数积分值等于 1】 = 0 \begin{aligned}D(P \| Q)&=\int P(x) \log \frac{P(x)}{Q(x)} \text{dx}\\&=-\int P(x) \log \frac{Q(x)}{P(x)} \text{dx} \\&\geq-\int P(x)\left(\frac{Q(x)}{P(x)}-1\right) \text{dx} \\&=-\int Q(x)-P(x) \text{dx}&\text{【概率密度函数积分值等于 1】}\\&=0\end{aligned} D(P∥Q)?=∫P(x)logQ(x)P(x)?dx=?∫P(x)logP(x)Q(x)?dx≥?∫P(x)(P(x)Q(x)??1)dx=?∫Q(x)?P(x)dx=0?【概率密度函数积分值等于 1】?
得证□ \square □
更多K L \mathrm{KL} KL 散度图像上的直观解释详见:初学机器学习:直观解读KL散度的数学概念
3.3.4 交叉熵
??我们在上一节 3.3.3 相对熵(KL 散度) 中得到K L \mathrm{KL} KL 散度的公式:
D K L ( P ∥ Q ) = H Q ( P ) ? H P ( P ) D_{\mathrm{KL}}(P \| Q)=H_Q(P)-H_P(P) DKL?(P∥Q)=HQ?(P)?HP?(P)
其中 H Q ( P ) H_Q(P) HQ?(P) 表示使用分布Q Q Q ,对分布P P P 进行编码所需的平均编码b i t \mathrm{bit} bit 数, H P ( P ) H_P(P) HP?(P) 表示使用分布P P P ,对分布P P P 编码所需的最小编码b i t \mathrm{bit} bit 数。
?????????? \,\,\,\,\,\,\,\,\,\, 因此我们定义 交叉熵(Cross Entropy)C E H ( P , Q ) = H Q ( P ) CEH(P,Q)=H_Q(P) CEH(P,Q)=HQ?(P),即:
C E H ( P , Q ) = H Q ( P ) = ? E x ~ P log ? Q ( x ) = ? ∑ i = 0 n P ( x i ) log ? b Q ( x i ) \begin{aligned}CEH(P,Q)&=H_Q(P)\\&=-\mathbb{E}_{x\sim P}\log{Q\left(x\right)}\\&=-\sum_{i=0}^n P(x_i) \log _{b}Q(x_i)\end{aligned} CEH(P,Q)?=HQ?(P)=?Ex~P?logQ(x)=?i=0∑n?P(xi?)logb?Q(xi?)?
表示使用分布Q Q Q ,对分布P P P 进行编码所需的平均编码b i t \mathrm{bit} bit 数。
??至此,我们定义的P P P 与Q Q Q 之间的交叉熵C E H CEH CEH 就等于P P P 的熵H ( P ) H(P) H(P) 与P , Q P,Q P,Q 的K L \mathrm{KL} KL 散度D K L ( P ∥ Q ) D_{\mathrm{KL}}(P\|Q) DKL?(P∥Q) 之和:
C E H ( P , Q ) = H ( P ) + D K L ( P ∥ Q ) CEH(P,Q)=H(P)+D_{\mathrm{KL}}(P\|Q) CEH(P,Q)=H(P)+DKL?(P∥Q)
?????????? \,\,\,\,\,\,\,\,\,\, 由于 K L \mathrm{KL} KL 散度是不对称的,显然交叉熵也是不对称的:
C E H ( P , Q ) ≠ C E H ( Q , P ) D K L ( P ∣ Q ) ≠ D K L ( Q ∣ P ) \begin{aligned}CEH(P, Q) & \neq CEH(Q, P) \\D_{K L}(P \mid Q) & \neq D_{K L}(Q \mid P)\end{aligned} CEH(P,Q)DKL?(P∣Q)??=CEH(Q,P)?=DKL?(Q∣P)?
??在机器学习任务中,我们希望使用分布Q Q Q 去拟合分布P P P ,需要评估标签与预测值之间的差距,可以直接使用K L \mathrm {KL} KL 散度,即D K L ( y ∥ y ^ ) D_{\mathrm{KL}}(\mathbf{y}\|\hat{\mathbf{y}}) DKL?(y∥y^?)。而由于分布P P P 不变,即H ( P ) H(P) H(P) 保持不变,交叉熵C E H ( P , Q ) CEH(P,Q) CEH(P,Q) 的变化就可以直接反映出相对熵D K L ( P ∥ Q ) D_{\mathrm{KL}}(P\|Q) DKL?(P∥Q) 的变化。由于相对熵D K L ( P ∥ Q ) D_{\mathrm{KL}}(P\|Q) DKL?(P∥Q) 中包含定值H ( P ) H(P) H(P) ,是一个不可优化的常数,且实验表明交叉熵在训练时相较于相对熵更加 健壮(robust),因此我们一般直接用交叉熵作为损失函数来评估模型,而不是使用相对熵K L \mathrm{KL} KL 散度。
??交叉熵可以很好地衡量2 2 2 个分布之间的差别,特别地,当分类问题中y y y 的编码分布P P P 采用 one-hot 编码时: H ( y ) = 0 H(\boldsymbol{y}) = 0 H(y)=0,此时
C E H ( y , o ) = H ( y ) + D K L ( y ∣ o ) = D K L ( y ∣ o ) CEH(\boldsymbol{y}, \boldsymbol{o})=H(\boldsymbol{y})+D_{K L}(\boldsymbol{y} | \boldsymbol{o})=D_{K L}(\boldsymbol{y} | \boldsymbol{o}) CEH(y,o)=H(y)+DKL?(y∣o)=DKL?(y∣o)
退化到真实标签分布y \boldsymbol y y 与输出概率分布o \boldsymbol o o 之间的K L \mathrm{KL} KL 散度上。
根据K L \mathrm{KL} KL 散度的定义,我们推导分类问题中交叉熵的计算表达式:
C E H ( y , o ) = D K L ( y ∣ o ) = ∑ j y j log ? ( y j o j ) = 1 × log ? 1 o i + ∑ j ≠ i 0 × log ? ( 0 o j ) = ? log ? o i \begin{aligned}CEH(\boldsymbol{y}, \boldsymbol{o})&=D_{K L}(\boldsymbol{y} | \boldsymbol{o})=\sum_{j} y_{j} \log \left(\frac{y_{j}}{o_{j}}\right)\\&=1 \times \log \frac{1}{o_{i}}+\sum_{j \neq i} 0 \times \log \left(\frac{0}{o_{j}}\right) \\&=-\log o_{i}\end{aligned} CEH(y,o)?=DKL?(y∣o)=j∑?yj?log(oj?yj??)=1×logoi?1?+j?=i∑?0×log(oj?0?)=?logoi??
其中i 为 one-hot 编码中为1 1 1 的索引号,也是当前输入的真实类别。可以看到,损失函数L \mathcal L L 只与真实类别i 上的概率o i \boldsymbol o_i oi? 有关,对应概率o i \boldsymbol o_i oi? 越大, H ( , ) H(, ) H(y,o) 越小,当对应概率为1 1 1 时,交叉熵H ( , ) H(, ) H(y,o) 取得最小值0 0 0 ,此时网络输出o 与真实标签y 完全一致,神经网络取得最优状态。最小化交叉熵的过程也是最大化正确类别的预测概率的过程。
3.3.5 JS 散度
?????????? \,\,\,\,\,\,\,\,\,\, JS 散度 (Jensen-Shannon Divergence),度量了两个概率分布的相似度,是基于K L \mathrm{KL} KL 散度的变体,解决了K L \mathrm{KL} KL 散度非对称的问题。
?????????? \,\,\,\,\,\,\,\,\,\, 一般地,JS 散度是对称的,其取值是0 0 0 到1 1 1 之间。定义如下:
J S ( P 1 ∥ P 2 ) = 1 2 K L ( P 1 ∥ P 1 + P 2 2 ) + 1 2 K L ( P 2 ∥ P 1 + P 2 2 ) JS(P_1\|P_2)=\frac{1}{2}KL(P_1\|\frac{P_1+P_2}{2})+\frac{1}{2}KL(P_2\|\frac{P_1+P_2}{2}) JS(P1?∥P2?)=21?KL(P1?∥2P1?+P2??)+21?KL(P2?∥2P1?+P2??)
?????????? \,\,\,\,\,\,\,\,\,\, 因而JS散度拥有对称性,并且在形式上更为平滑,更适合作为最后最大似然的函数,这点在生成对抗网络(GAN)的损失函数取得了不错的成绩。
KL 散度和 JS 散度的问题
?????????? \,\,\,\,\,\,\,\,\,\, 如果两个分布P , Q P,Q P,Q 离得很远,完全没有重叠的时候,那么 KL 散度值是没有意义的,而 JS 散度值是一个常数。这在学习算法中是比较致命的,这就意味着这一点的梯度为0 0 0,出现了梯度消失现象,导致训练失败。
?????????? \,\,\,\,\,\,\,\,\,\, 这里通过一个简单的分布实例来解释 JS 散度的缺陷。考虑完全不重叠 ( θ ≠ 0 \theta\neq 0 θ?=0)的两个分布p p p 和q q q ,其中分布p p p 为:
? ( x , y ) ∈ p , x = 0 , y ~ U ( 0 , 1 ) \begin{array}{l}\forall(x, y) \in p, x=0, y \sim \mathrm{U}(0,1) \\\end{array} ?(x,y)∈p,x=0,y~U(0,1)?
分布q q q 为:
? ( x , y ) ∈ q , x = θ , y ~ U ( 0 , 1 ) \forall(x, y) \in q, x=\theta, y \sim \mathrm{U}(0,1) ?(x,y)∈q,x=θ,y~U(0,1)
其中θ ∈ R \theta \in \R θ∈R,当θ = 0 \theta = 0 θ=0 时,分布p p p 和q q q 重叠,两者相等;当θ ≠ 0 \theta \neq 0 θ?=0 时,分布p p p 和q q q 不重叠。分布p p p 和q q q 的示意图如图 3.12 所示。
文章图片
图 3.12 分布 p 和 q 的示意图 ??
我们来分析上述分布p p p 和q q q 之间的 JS 散度随θ \theta θ 的变化情况。根据 KL 散度与 JS 散度的定义,计算θ = 0 \theta = 0 θ=0 时的 JS 散度D J S ( p ∥ q ) D_{\mathrm{JS}}(p\|q) DJS?(p∥q):
D K L ( p ∥ q ) = ∑ x = 0 , y ~ U ( 0 , 1 ) 1 ? log ? 1 0 = + ∞ D K L ( q ∥ p ) = ∑ x = θ , y ~ U ( 0 , 1 ) 1 ? log ? 1 0 = + ∞ D J S ( p ∥ q ) = 1 2 ( ∑ x = 0 , y ~ U ( 0 , 1 ) 1 ? log ? 1 1 / 2 + ∑ x = 0 , y ~ U ( 0 , 1 ) 1 ? log ? 1 1 / 2 ) = log ? 2 D_{K L}(p \| q)=\sum_{x=0, y \sim \mathrm{U}(0,1)} 1 \cdot \log \frac{1}{0}=+\infty \\D_{K L}(q \| p)=\sum_{x=\theta, y \sim \mathrm{U}(0,1)} 1 \cdot \log \frac{1}{0}=+\infty \\D_{J S}(p \| q)=\frac{1}{2}\left(\sum_{x=0, y \sim U(0,1)} 1 \cdot \log \frac{1}{1 / 2}+\sum_{x=0, y \sim U(0,1)} 1 \cdot \log \frac{1}{1 / 2}\right)=\log 2 DKL?(p∥q)=x=0,y~U(0,1)∑?1?log01?=+∞DKL?(q∥p)=x=θ,y~U(0,1)∑?1?log01?=+∞DJS?(p∥q)=21????x=0,y~U(0,1)∑?1?log1/21?+x=0,y~U(0,1)∑?1?log1/21????=log2
当θ = 0 \theta =0 θ=0 时,两个分布完全重叠,此时的 JS 散度和 KL 散度都取得最小值,即D K L ( p ∥ q ) = D K L ( q ∥ p ) = D J S ( p ∥ q ) = 0 D_{K L}(p \| q)=D_{K L}(q \| p)=D_{J S}(p \| q)=0 DKL?(p∥q)=DKL?(q∥p)=DJS?(p∥q)=0。
至此我们可以得到D J S ( q ∥ p ) D_{\mathrm{JS}}(q\|p) DJS?(q∥p) 随θ \theta θ 的变化趋势:
D J S ( p ∥ q ) = { log ? 2 θ ≠ 0 0 θ = 0 D_{\mathrm{JS}}(p \| q)=\left\{\begin{array}{cc}\log 2 & \theta \neq 0 \\0 & \theta=0\end{array}\right. DJS?(p∥q)={log20?θ?=0θ=0?
也就是说,当两个分布完全不重叠时,无论分布之间的距离远近,JS 散度为恒定值log ? 2 \log 2 log2,此时 JS 散度将无法产生有效的梯度信息;当两个分布出现重叠时,JS 散度才会平滑变动,产生有效梯度信息;当完全重合后,JS 散度取得最小值0 0 0。如图 3.13 中所示,红色的曲线分割两个正态分布,由于两个分布没有重叠,生成样本位置处的梯度值始终为0 0 0,无法更新生成网络的参数,从而出现网络训练困难的现象。
文章图片
图 3.13 JS 散度出现梯度弥散现象 [21] ??
因此,JS 散度在分布p p p 和q q q不重叠时是无法平滑地衡量分布之间的距离,从而导致此位置上无法产生有效梯度信息,出现 GAN 训练不稳定的情况。要解决此问题,需要使用一种更好的分布距离衡量标准,使得它即使在分布p p p 和q q q 不重叠时,也能平滑反映分布之间的真实距离变化。
3.3.6 Wasserstein 距离
Wasserstein距离 ,度量两个概率分布之间的距离。WGAN 论文发现了 JS 散度导致 GAN 训练不稳定的问题,并引入了一种新的分布距离度量方法:Wasserstein 距离,它表示了从一个分布变换到另一个分布的最小代价,定义如下:
W ( P 1 , P 2 ) = inf ? γ ~ ∏ ( P 1 , P 2 ) E ( x , y ) ~ γ [ ∥ x ? y ∥ ] W(P_1,P_2)=\inf_{\gamma\sim\prod(P_1,P_2)}\mathbb{E}_{(x,y)\sim\gamma}[\left\|x-y\right\|] W(P1?,P2?)=γ~∏(P1?,P2?)inf?E(x,y)~γ?[∥x?y∥]
其中∏ ( P 1 , P 2 ) \prod(P_1,P_2) ∏(P1?,P2?) 是P 1 P_1 P1? 和P 2 P_2 P2? 分布组合起来的所有可能的联合分布的集合。对于每一个可能的联合分布γ γ γ,可以从中采样( x , y ) ~ γ (x,y)~γ (x,y)~γ 得到一个样本x x x 和y y y,并计算出这对样本的距离∥ x ? y ∥ \|x?y\| ∥x?y∥,所以可以计算该联合分布γ γ γ 下,样本对距离的期望值E ( x , y ) ~ γ [ ∣ ∣ x ? y ∣ ∣ ] E _{(x, y) ~ \gamma}[||x?y||] E(x,y)~γ?[∣∣x?y∣∣]。在所有可能的联合分布中能够对这个期望值取到的下确界inf ? γ ~ Π ( P 1 , P 2 ) E ( x , y ) ~ γ [ ∣ ∣ x ? y ∣ ∣ ] \inf_{\gamma ~ \Pi(P_1, P_2)} E _{(x, y) \sim \gamma}[||x?y||] infγ~Π(P1?,P2?)?E(x,y)~γ?[∣∣x?y∣∣] 就是 Wasserstein 距离。
直观上可以把E ( x , y ) ~ γ [ ∣ ∣ x ? y ∣ ∣ ] E _{(x, y) ~ \gamma}[||x?y||] E(x,y)~γ?[∣∣x?y∣∣] 理解为在γ γ γ 这个路径规划下把土堆P 1 P_1 P1? 挪到土堆P 2 P_2 P2? 所需要的消耗。而 Wasserstein 距离就是在最优路径规划下的最小消耗。所以 Wesserstein 距离又称推土机距离(Earth-Mover Distance,简称 EM 距离)。
继续考虑图 3.12 中的示例,我们可以得出分布p p p 和q q q 之间的 EM 距离的表达式:
W ( p , q ) = ∣ θ ∣ W(p, q)=|\theta| W(p,q)=∣θ∣
绘制出 JS 散度和 EM 距离的曲线,如图 3.14 所示,可以看到,JS 散度在θ = 0 \theta=0 θ=0 处不连续,其他位置导数均为0 0 0,而 EM 距离总能够产生有效的导数信息,因此 EM 距离相对于JS 散度更适合指导 GAN 网络的训练。
文章图片
图 3.14 JS 散度和 EM 距离随 变换曲线 ??
Wessertein距离相比 KL 散度和 JS 散度的优势在于:即使两个分布的支撑集没有重叠或者重叠非常少,仍然能反映两个分布的远近。而 JS 散度在此情况下是常量,KL 散度可能无意义。
更多关于Wasserstein 距离的讲解详见: GAN的Loss的比较研究(3)——Wasserstein Loss理解(1) 以及 令人拍案叫绝的Wasserstein GAN
参考资料
[1] 《2021春机器学习课程》李宏毅
https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.html
[2]《TensorFlow深度学习》(龙龙老师)
https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book
[3] Coursera吴恩达《神经网络与深度学习》
https://www.deeplearning.ai/
[4] 《动手学深度学习》第二版
https://zh-v2.d2l.ai/
[5] 《深度学习》(花书)
https://github.com/exacity/deeplearningbook-chinese
[6] relu函数为分段线性函数,为什么会增加非线性元素
https://www.cnblogs.com/lzida9223/p/10972783.html
[7] 【机器学习】神经网络-激活函数-面面观(Activation Function)
https://blog.csdn.net/cyh_24/article/details/50593400
[8] Logistic Regression (LR) 详解与更多相关的面试问题
https://blog.csdn.net/songbinxu/article/details/79633790
[9] 【机器学习】逻辑回归(非常详细)
https://zhuanlan.zhihu.com/p/74874291
[10] softmax回归(Softmax Regression)
https://blog.csdn.net/u012328159/article/details/72155874
[11] 逻辑回归算法原理及用于解决多分类问题
https://blog.csdn.net/AIHUBEI/article/details/104301492
[12] 逻辑回归(Logistic Regression)(二)
https://zhuanlan.zhihu.com/p/28415991
[13] 数学基础_4——信息论
https://blog.csdn.net/CesareBorgia/article/details/120817481
[14] 信息论(1)——熵、互信息、相对熵
https://zhuanlan.zhihu.com/p/36192699
[15] 一文读懂机器学习分类算法(附图文详解)
https://zhuanlan.zhihu.com/p/82114104
[16] An in-depth guide to supervised machine learning classification
https://builtin.com/data-science/supervised-machine-learning-classification
[17] 信息熵是什么?- 知乎
https://www.zhihu.com/question/22178202/answer/223017546
[18] 熵 (信息论) - 维基百科
https://zh.wikipedia.org/wiki/%E7%86%B5_(%E4%BF%A1%E6%81%AF%E8%AE%BA)
[19] 信息熵到底是什么
https://blog.csdn.net/saltriver/article/details/53056816
[20] Visual Information Theory
https://colah.github.io/posts/2015-09-Visual-Information/#fnref1
[21] M. Arjovsky, S. Chintala 和 L. Bottou, “Wasserstein Generative Adversarial Networks,” Proceedings of the 34th International Conference on Machine Learning, International Convention Centre, Sydney, Australia, 2017.
文章图片
谢谢! ??
【《繁凡的深度学习笔记》|一文绝对让你完全弄懂信息熵、相对熵、交叉熵的意义《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(中)(DL笔记整理系列)】转载请注明出处:https://fanfansann.blog.csdn.net/
版权声明:本文为 CSDN 博主 「繁凡さん」(博客),知乎答主 「繁凡」(专栏),Github 「fanfansann」(全部源码),微信公众号 「繁凡的小岛来信」(文章 P D F 版))原创整理的文章,遵循CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。
推荐阅读
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- paddle|动手从头实现LSTM
- pytorch|使用pytorch从头实现多层LSTM
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- pytorch|YOLOX 阅读笔记
- 前沿论文|论文精读(Neural Architecture Search without Training)
- 联邦学习|【阅读笔记】Towards Efficient and Privacy-preserving Federated Deep Learning
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- 深度学习|深度学习笔记总结