Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

303

Article

153

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • 【转载】机器学习理论—信息论:自信息、熵、交叉熵与KL散度

    • 1. Self-Information
      • 2. Entropy
        • 3. Cross-Entropy
          • 4. KL Divergence
            • 5. References

            【转载】机器学习理论—信息论:自信息、熵、交叉熵与KL散度

            vuePress-theme-reco Howard Yin    2021 - 2025

            【转载】机器学习理论—信息论:自信息、熵、交叉熵与KL散度


            Howard Yin 2022-07-06 09:31:02 数学人工智能损失函数熵

            原文

            # 1. Self-Information

            信息论中最根本的一个问题就是,怎么量化一个事件xxx包含的信息量I(x)I(x)I(x)呢?一个量化事件信息量的思路是,量化观测到该事件发生后,给人带来的惊讶程度。具体来说,如果我们有一个信息量的度量I(x)I(x)I(x),它应当是以事件xxx发生的概率P(x)P(x)P(x)参数化的,即I(x)=f(P(x))I(x) = f(P(x))I(x)=f(P(x)),同时我们会希望f(P(x))f(P(x))f(P(x))有以下属性:

            1. f(P(x))f(P(x))f(P(x))是关于P(x)P(x)P(x)单调递减的。即,概率越高的事件发生后,带来的信息量/惊讶程度越低;概率越低的事件发生后,带来的信息量/惊讶程度越高。
            2. f(P(x))≥0f(P(x)) \geq 0f(P(x))≥0。 即,任何事件包含的信息量,应当是非负的。
            3. f(P(x))f(P(x))f(P(x))对任意P(x)P(x)P(x)均是连续的。
            4. I(x1,x2)=I(x1)+I(x2)I(x_1, x_2) = I(x_1) + I(x_2)I(x1​,x2​)=I(x1​)+I(x2​)。即,多个独立事件带来的总信息量,应当等于各个事件的信息量之和。

            事实上,满足上述四个条件的函数形式只有I(x)=Klog⁡(P(x)),K<0I(x) = K \log (P(x)),\, K < 0I(x)=Klog(P(x)),K<0。证明如下:

            设事件CCC为两个独立事件AAA和BBB的交集,即C=A∩BC = A \cap BC=A∩B。根据属性4,我们有,

            I(C)=I(A∩B)=I(A)+I(B).I(C) = I(A \cap B) = I(A) + I(B).\\ I(C)=I(A∩B)=I(A)+I(B).

            因为事件AAA、BBB相互独立,我们有,

            P(C)=P(A∩B)=P(A)⋅P(B).P(C)=P(A \cap B)=P(A) \cdot P(B).\\ P(C)=P(A∩B)=P(A)⋅P(B).

            因此,

            f(P(C))=f(P(A))+f(P(B))=f(P(A)⋅P(B)).\begin{aligned} f(P(C)) &= f(P(A)) + f(P(B)) \\ &= f(P(A) \cdot P(B)). \end{aligned}\\ f(P(C))​=f(P(A))+f(P(B))=f(P(A)⋅P(B)).​

            可以得出,函数f(P(x))f(P(x))f(P(x))应当满足f(ab)=f(a)+f(b)f(ab) = f(a) + f(b)f(ab)=f(a)+f(b)。现在我们证明满足该等式的函数fff,必然有f(a)=Klog⁡(a)f(a) = K\log(a)f(a)=Klog(a),其中KKK是任意实常数。

            令g(a)=f(2a)g(a)=f(2^a)g(a)=f(2a),我们有

            g(a+b)=f(2a+b)=f(2a2b)=f(2a)+f(2b)=g(a)+g(b).g(a+b) = f(2^{a+b}) = f(2^a 2^b) = f(2^a) + f(2^b) = g(a) + g(b).\\ g(a+b)=f(2a+b)=f(2a2b)=f(2a)+f(2b)=g(a)+g(b).

            显然,我们有g(a+b)=g(a)+g(b)g(a+b) = g(a) + g(b)g(a+b)=g(a)+g(b)。因为fff是连续的,那么ggg也是连续的。因此,根据柯西函数方程,必然有g(a)=Kag(a) = Kag(a)=Ka。

            因此,g(a)=f(2a)=Ka⇒f(a)=Klog⁡2(a)g(a) = f(2^a) = K a \Rightarrow f(a) = K \log_2(a)g(a)=f(2a)=Ka⇒f(a)=Klog2​(a)。

            为了使f(P(x))f(P(x))f(P(x))满足上述条件1和2,KKK应当取负数。另外,其中log⁡\loglog的底数可任取,为了方便,我们后续均取222为底数。

            关于KKK的取值,Shannon在他1948年的论文A Mathematical Theory of Communication中写到:

            The choice of coefficient KKK is a matter of convenience and amounts to the choice of a unit of measure.

            出于此intuition,Shannon令K=−1K=-1K=−1,最终得到I(x)=−log⁡(P(x))I(x) = -\log(P(x))I(x)=−log(P(x)),用来描述事件xxx中包含的信息量。

            # 2. Entropy

            现在我们有了对于一个事件xxx的信息量的度量I(x)I(x)I(x),但是往往我们更感兴趣的是这些事件对应的随机变量XXX的信息量。

            一个直观的做法就是对随机变量XXX中的所有可能事件的信息量求均值,来代表这个随机变量XXX的信息量。设随机变量X∼p(X)X \sim p(X)X∼p(X),那么XXX的熵被定义为:

            H(p)=EX∼p(X)[−log⁡p(X)].H(p) = \mathbb{E}_{X \sim p(X)} \left[ - \log p(X) \right].\\ H(p)=EX∼p(X)​[−logp(X)].

            当XXX为离散随机变量时,

            H(p)=−∑i=1np(xi)log⁡p(xi).H(p)=-\sum_{i=1}^{n} p(x_{i}) \log p(x_{i}).\\ H(p)=−i=1∑n​p(xi​)logp(xi​).

            显然,在这个定义下,H(p)H(p)H(p)自然可以代表随机变量XXX的信息量。

            "熵代表随机变量的平均信息量",这个说法还是过于抽象了,我们能否把这个定义变得更加的数学化?自然是可以的,我们接下来引入熵的一个更加数学化的理解,即,熵代表编码随机变量所需的最短平均编码长度。换句话说,一个随机变量的平均信息量,等价于编码这个随机变量所需的最短平均编码长度。

            那么,什么叫做编码一个随机变量呢?编码长度又指什么呢?我们用下面的例子进行一个直观的理解。

            p(xi) Code 1 Code 21/200001/4001101/80101101/1601111101/641001111001/641011111011/641101111101/64111111111E[li]32\begin{array}{lll}p(x_i) & \text { Code } 1 & \text { Code } 2 \\ 1 / 2 & 000 & 0 \\ 1 / 4 & 001 & 10 \\ 1 / 8 & 010 & 110 \\ 1 / 16 & 011 & 1110 \\ 1 / 64 & 100 & 111100 \\ 1 / 64 & 101 & 111101 \\ 1 / 64 & 110 & 111110 \\ 1 / 64 & 111 & 111111 \\ \mathbb{E}[l_{i}] & 3 & 2\end{array}\\ p(xi​)1/21/41/81/161/641/641/641/64E[li​]​ Code 10000010100111001011101113​ Code 201011011101111001111011111101111112​

            假设一离散随机变量XXX的分布如上,其共对应8个事件,每个事件发生的概率不一。现在我们希望的是:对每个事件进行二进制编码,使得传递该随机变量的取值时,所需的平均编码长度最小。

            显然,若令每个事件的编码长度为lil_ili​,如果我们利用上表Code 1\text{Code 1}Code 1编码随机变量XXX的各个取值,那么平均来看我们传递XXX的值时需要E[li]=3bits\mathbb{E}[l_{i}]=3 \; \text{bits}E[li​]=3bits的编码长度。而利用Code 2\text{Code 2}Code 2进行编码的话,平均只需要2bits2 \;\text{bits}2bits的编码长度。这是因为Code 2\text{Code 2}Code 2对概率更大的事件采用了更短的编码,从而降低了编码所需的平均长度,这一方法同霍夫曼编码的思路一致。

            现在的问题是,给定随机变量XXX,我们能否预先求得其最短的平均编码长度?答案就是利用随机变量X∼p(X)X\sim p(X)X∼p(X)的熵H(p)H(p)H(p)。

            不难计算,H(p)=−∑p(xi)log⁡p(xi)=2bitsH(p)=-\sum p(x_i) \log p(x_i)=2 \; \text{bits}H(p)=−∑p(xi​)logp(xi​)=2bits。也就是说,熵H(p)H(p)H(p)也可以理解为编码随机变量XXX时,所需的最短平均编码长度。

            通过以上定义,显然,一个随机变量的信息量与其所需的最短平均编码长度是等价的。这也是很直觉的,如果一个随机变量最优的平均编码长度更大,那么它应当包含更大的信息量;如果一个随机变量所需的最优平均编码长度很小,那么它包含的信息量也应当是很小的。

            举个例子,编码掷硬币的结果所需的最优平均编码长度为H=−2⋅12log⁡(12)=1bitH = -2 \cdot \frac{1}{2}\log(\frac{1}{2}) = 1\; \text{bit}H=−2⋅21​log(21​)=1bit。而编码掷骰子的结果所需的最优平均编码长度为H=−6⋅16log⁡(16)≈2.58bitsH = -6 \cdot \frac{1}{6}\log(\frac{1}{6}) \approx 2.58\; \text{bits}H=−6⋅61​log(61​)≈2.58bits。这意味着掷骰子需要更大的平均编码长度,其对应的随机变量也有着更大的信息量。

            我们刚刚只是陈述了结论:随机变量的熵即等价于编码该随机变量所需的最短平均编码长度,接下来我们提供证明。

            假设编码的字符集的大小为DDD,若采用二进制编码,则D=2D=2D=2。另外我们假设存在mmm个事件需要编码,每个事件的编码长度为lil_ili​。根据编码理论中的Kraft–McMillan Inequality,在给定的码字字长l1,…,lml_{1}, \ldots, l_{m}l1​,…,lm​下能够成功编码,当且仅当

            ∑i=1mD−li≤1.\sum_{i=1}^{m} D^{-l_{i}} \leq 1.\\ i=1∑m​D−li​≤1.

            至此,寻找最优平均编码长度的问题可以写成如下优化问题:

            min⁡li∑i=1mp(xi)lis.t.∑i=1mD−li≤1.\begin{aligned} \min_{l_{i}} &\sum_{i=1}^{m} p(x_i) l_{i} \\ \text{s.t.} &\sum_{i=1}^{m} D^{-l_{i}} \leq 1. \end{aligned}\\ li​min​s.t.​i=1∑m​p(xi​)li​i=1∑m​D−li​≤1.​

            我们利用Lagrangian multiplier进一步求解带约束的优化问题,即

            J=∑i=1mp(xi)li+λ(∑i=1mD−li−1).J=\sum_{i=1}^{m} p(x_i) l_{i}+\lambda\left(\sum_{i=1}^{m} D^{-l_{i}}-1\right).\\ J=i=1∑m​p(xi​)li​+λ(i=1∑m​D−li​−1).

            易得li∗=−log⁡Dp(xi)l_{i}^{*}=-\log _{D} p(x_i)li∗​=−logD​p(xi​)。 若采用二进制编码,显然,

            ∑p(xi)li∗=−∑p(xi)log⁡pi=H(p),\sum p(x_i) l_{i}^{*}=-\sum p(x_i) \log p_{i}=H(p),\\ ∑p(xi​)li∗​=−∑p(xi​)logpi​=H(p),

            其中,熵的单位为bit\text{bit}bit,若采用eee为底数,则熵的单位为nat\text{nat}nat。

            因此,随机变量X∼p(X)X\sim p(X)X∼p(X)的熵H(p)H(p)H(p)即是编码随机变量XXX的最优平均编码长度。

            # 3. Cross-Entropy

            在说交叉熵之前,我们再回顾一下熵的定义:

            H(p)=EX∼p(X)[−log⁡p(X)].H(p) = \mathbb{E}_{X \sim p(X)} \left[ - \log p(X) \right].\\ H(p)=EX∼p(X)​[−logp(X)].

            设ppp为真实分布,qqq为ppp的近似分布,交叉熵被定义为:

            H(p,q)=EX∼p(X)[−log⁡q(X)].H(p, q) = \mathbb{E}_{X \sim p(X)} \left[ - \log q(X) \right].\\ H(p,q)=EX∼p(X)​[−logq(X)].

            交叉熵和熵的定义长的很像,它们之间的区别可以这样理解:

            1. 因为XXX的实际分布为ppp,所以计算期望编码长度时,尽管我们可能并不知道ppp,但理论上总是基于真实分布X∼p(X){X \sim p(X)}X∼p(X)计算期望。
            2. 当我们利用正确的分布p(X)p(X)p(X)进行编码时,log⁡\loglog里面的真数是p(X)p(X)p(X)。最终算出来的就是随机变量XXX的最优期望编码长度,即熵。
            3. 当我们利用错误的分布q(X)q(X)q(X)进行编码时,log⁡\loglog里面的真数是q(X)q(X)q(X)。最终算出来的自然不再是熵,而是我们用错误的分布q(X)q(X)q(X)进行编码后,算出来的随机变量XXX的期望编码长度。

            因为熵H(p)H(p)H(p)是随机变量XXX的最优期望编码长度,因此从其定义中我们可以直接得到EX∼p(X)[−log⁡p(X)]≤EX∼p(X)[−log⁡q(X)]\mathbb{E}_{X \sim p(X)} \left[ - \log p(X) \right] \leq \mathbb{E}_{X \sim p(X)} \left[ - \log q(X) \right]EX∼p(X)​[−logp(X)]≤EX∼p(X)​[−logq(X)]。但我们这里依然证明一下。

            对两个离散随机变量的分布ppp、qqq,我们总有

            −∑i=1np(xi)log⁡(p(xi))≤−∑i=1np(xi)log⁡(q(xi)).- \sum_{i=1}^n p(x_i) \log(p(x_i)) \leq - \sum_{i=1}^n p(x_i) \log (q(x_i)). \\ −i=1∑n​p(xi​)log(p(xi​))≤−i=1∑n​p(xi​)log(q(xi​)).

            令上述右式减左式,我们只需要证明

            ∑i=1np(xi)[log⁡(p(xi))−log⁡(q(xi))]≥0(1)\sum_{i=1}^n p(x_i) \left[\log(p(x_i)) - \log (q(x_i))\right] \geq 0 \tag{1}\\ i=1∑n​p(xi​)[log(p(xi​))−log(q(xi​))]≥0(1)

            因为对任意x>0,ln⁡x≤x−1,所以−log⁡2x≥(1−x)/ln⁡2。不难证明,x>0,\, \ln x \leq x-1, \text{所以} -\log_2 x \geq (1-x) / \ln 2。\text{不难证明,}x>0,lnx≤x−1,所以−log2​x≥(1−x)/ln2。不难证明,

            ∑i=1np(xi)[log⁡(p(xi))−log⁡(q(xi))]=∑i=1np(xi)[log⁡(p(xi)q(xi))]≥1ln⁡2∑i=1np(xi)(1−q(xi)p(xi))=1ln⁡2(∑i=1np(xi)−∑i=1nq(xi))=0\begin{aligned} &\sum_{i=1}^n p(x_i) \left[\log(p(x_i)) - \log (q(x_i))\right] \\ =&\sum_{i=1}^n p(x_i) \left[\log \left( \frac{p(x_i)}{q(x_i)} \right) \right] \\ \geq & \frac{1}{\ln 2} \sum_{i=1}^n p(x_i) \left(1- \frac{q(x_i)}{p(x_i)} \right) \\ = & \frac{1}{\ln 2}\left(\sum_{i=1}^{n} p(x_i)-\sum_{i=1}^{n} q(x_i)\right) \\ = & 0 \end{aligned}\\ =≥==​i=1∑n​p(xi​)[log(p(xi​))−log(q(xi​))]i=1∑n​p(xi​)[log(q(xi​)p(xi​)​)]ln21​i=1∑n​p(xi​)(1−p(xi​)q(xi​)​)ln21​(i=1∑n​p(xi​)−i=1∑n​q(xi​))0​

            显然,我们确实有EX∼p(X)[−log⁡p(X)]≤EX∼p(X)[−log⁡q(X)]\mathbb{E}_{X \sim p(X)} \left[ - \log p(X) \right] \leq \mathbb{E}_{X \sim p(X)} \left[ - \log q(X) \right]EX∼p(X)​[−logp(X)]≤EX∼p(X)​[−logq(X)]。

            在了解了交叉熵和熵的关系后,我们就可以从信息论的角度理解,为什么交叉熵可以在机器学习中作为损失函数。我们在最小化交叉熵的时候,事实上是在逼近最优期望编码长度,即利用q(x)q(x)q(x)逼近p(x)p(x)p(x),使得交叉熵尽可能的小,以接近熵的值。

            # 4. KL Divergence

            对于离散随机变量,分布ppp和qqq的KL散度的定义如下:

            DKL(p∥q)=−∑i=1np(xi)⋅log⁡q(xi)p(xi).D_{K L}(p \| q) = -\sum_{i=1}^{n} p(x_{i}) \cdot \log \frac{q(x_{i})}{p(x_{i})}.\\ DKL​(p∥q)=−i=1∑n​p(xi​)⋅logp(xi​)q(xi​)​.

            对KL散度在信息论中的一个直观的理解是将其写开,即

            DKL(p∥q)=−∑i=1np(xi)⋅log⁡q(xi)p(xi)=−∑i=1np(xi)⋅log⁡q(xi)+∑i=1np(xi)⋅log⁡p(xi)=H(p,q)−H(p).\begin{aligned} D_{K L}(p \| q) &= -\sum_{i=1}^{n} p(x_{i}) \cdot \log \frac{q(x_{i})}{p(x_{i})} \\ &= -\sum_{i=1}^{n} p(x_{i}) \cdot \log q(x_{i}) + \sum_{i=1}^{n} p(x_{i}) \cdot \log p(x_{i}) \\ &= H(p,q) - H(p). \end{aligned}\\ DKL​(p∥q)​=−i=1∑n​p(xi​)⋅logp(xi​)q(xi​)​=−i=1∑n​p(xi​)⋅logq(xi​)+i=1∑n​p(xi​)⋅logp(xi​)=H(p,q)−H(p).​

            通过上节我们知道,交叉熵H(p,q)H(p,q)H(p,q)指利用分布qqq编码随机变量XXX所需的期望编码长度,而熵H(p)H(p)H(p)指编码随机变量XXX所需的最优期望编码长度。

            既然DKL(p∥q)=H(p,q)−H(p)D_{K L}(p \| q) = H(p,q) - H(p)DKL​(p∥q)=H(p,q)−H(p), 那么显然,其意味着利用qqq编码XXX所带来的额外编码长度。事实上,上一节中的式(1)左侧等价于KL散度,因此KL散度恒大于等于零。

            倘若我们优化KL散度,即是希望减小所需的额外编码数,使得分布ppp和qqq变得接近。这里有两种情况:

            1. 若真实分布ppp恒定,那么优化KL散度等价于优化交叉熵,其目的是令交叉熵逼近最优期望编码长度,使得qqq尽可能接近ppp。在训练辨别模型时,往往是这种情况。为了简化计算,人们往往直接对交叉熵进行优化。
            2. 若真实分布ppp不恒定,那么优化KL散度会同时改变交叉熵和熵的值,使得ppp与qqq 相互 接近。在训练生成模型时,往往是这种情况,为了使分布ppp与qqq相互接近,我们必须直接对KL散度进行优化。

            # 5. References

            [1] Link1

            [2] Link2

            [3] Link3

            [4] Link4

            [5] Link5

            [6] Link6

            [7] Link7

            帮助我们改善此页面!
            创建于: 2022-07-06 09:31:21

            更新于: 2022-07-06 09:31:21