机器学习中的各种熵

熵 (entropy) 这一词最初来源于热力学。1948 年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,以此来解决对信息的量化度量问题。在机器学习中,“熵” 是一个非常重要的基础内容,在 Logistic 回归、决策树、深度学习计算机视觉、自然语言处理等很多地方都有涉及。本文将详细介绍各种各样的 “熵”。

1.信息量(amount of information)

信息是用来消除随机不确定性的东西,信息量可用来度量不确定性的多少,香农提出 “信息熵” 的概念来解决信息的度量问题。

影响不确定性变化的因素:

事件可能结果的数量:当可能结果数量比较多时,不确定性大,我们得到的新信息才有潜力拥有大信息量。

事件发生的概率:概率大,出现机会多,不确定性小;反之就大。

公式:

$$I(x)=-\log p(x)$$

图像:

机器学习中的各种熵_插图

要点:

  1. $I(x)$ 也被称为随机变量 $x$ 的自信息 (self-information),描述的是随机变量的某个事件发生所带来的信息量。
  2. 负号是用来保证信息量是正数或者零,产生信息,则是为系统引入负熵(热力学)的过程,所以信息熵的符号与热力学熵应该是相反的。
  3. 信息量和信息量之间可以相加: $ I(nm) = – \log(mn)=-\log m-\log n$
  4. log 函数基的选择是任意的,信息论中基常常选择为 2,因此信息的单位为比特(bits);而机器学习中基常常选择为自然常数,因此单位常常被称为奈特(nats)。

2.信息熵(information entropy)

熵 (entropy) 这一词最初来源于热力学。1948 年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。

公式:

$$H(x)=-\sum_xp(x)\log p(x)=-\sum_{i=1}^np(x_i)\log p(x_i)$$

要点:

  1. $H(X)$ 就被称为随机变量 $x$ 的熵,是对所有可能发生的事件产生的信息量的期望。熵只依赖于随机变量的分布,与随机变量取值无关,所以也可以将 X 的熵记作 H(p)。
  2. 可以这样直观理解:一件事的信息量(或熵)就是你想知道这件事的发生需要多少信息。
  3. 定义 $0 \cdot \log0=0$,因为 0 的高阶无穷小大于 log0。(某个取值概率可能为 0)
  4. 概率为 0 或概率为 1,表示事件一定不发生和一定发生,此时熵为 0。
  5. 信息量度量的是一个具体事件发生所带来的信息,而熵则是一个事件总的信息量,是每一种可能的情况的信息量乘以它们发生的概率,即所有可能发生事件所带来的信息量的期望
  6. 熵可以理解为信息的不确定程度,是随机变量不确定性的度量。变量的不确定性越大,熵也就越大,代表该随机变量取特定值的时候具有的信息量越大。
  7. 熵可以描述系统的混乱程度,是系统有序化程度的一个度量。随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大,系统越是无序。
  8. 一般而言,当一种信息出现概率更高的时候,表明它被传播得更广泛,或者说,被引用的程度更高。我们可以认为,从信息传播的角度来看,信息熵可以表示信息的价值。这样子来看,熵也可以是一个衡量信息价值高低的标准。

小结:

熵越大,随机变量不确定性越大,系统越混乱(无序),选某个特定值的时候具有的信息量越大,所得信息价值越高。(为方便记忆:熵可以看作是坏掉的信息块)

@最大熵模型

最大熵模型(Maximum Entropy Model)是一种用于概率建模的统计模型,它是基于信息论中的最大熵原理而发展起来的。最大熵原理认为,在缺乏先验知识的情况下,应选择熵最大的概率分布作为最合理的选择。最大熵模型的目标函数可以表示为最大化熵的负值,同时满足一组约束条件。为了求解这个最优化问题,通常使用拉格朗日乘子法将其转化为对偶问题,并通过迭代算法进行求解。常见的迭代算法包括改进的迭代尺度法(Improved Iterative Scaling)和拟牛顿法(Quasi-Newton Method)等。

最大熵模型在自然语言处理、机器学习和统计学习等领域有广泛的应用。在自然语言处理中,最大熵模型可以用于词性标注、命名实体识别、歧义消除、句法分析等任务。在机器学习中,最大熵模型可以用于分类、回归等问题。最大熵模型的优点之一是它可以灵活地处理各种不同类型的特征,并且可以通过添加不同的约束来控制模型的复杂度。

  • 最大熵原理:

    对一个随机事件的概率分布进行预测时,预测应当满足全部已知的约束,而对未知的情况不要做任何主观假设。在这种情况下,概率分布最均匀,预测的风险最小,因此得到的概率分布的熵是最大。这些约束条件可以是一些统计特征的期望,如均值、方差等。

  • 最大熵原理的直观理解:

    在没有任何前提条件的时候,我们猜测骰子每个面出现的概率为 1/6;当骰子的重心发生变化时,如果我们已知出现 1 点的概率为 1/3,那么我们会猜测剩下的各面出现的概率为 (1-1/3)/5 = 2/15(在没有任何先验知识的前提下,我们推测为均匀分布)。这个过程实际就是在运用最大熵原理

  • 最大熵目标

    运用观测到的实验样本如何对实验数据分布做出合理的推断。最大熵模型是建立一个概率判别模型,该模型的任务是对于给定的 $X=x$ 以条件概率分布 $P(Y|X=x)$ 预测 $Y$ 的取值。

  • 无条件最大熵

    若随机变量退化为定值,熵最小为 0,若随机变量为均匀分布,那么熵最大,所以熵满足:

    $$0 \le H(X) \le \ln N$$

    非均匀分布比均匀分布的熵要小。

    @均匀分布的熵

    N 点离散均匀分布:

    $$p(x_i)=\frac{1}{N}, \; H(X)=-\sum_{i=1}^n\frac{1}{N} \ln \frac{1}{N}=\sum_{i=1}^n \frac 1 N \ln N = \ln N$$

    连续均匀分布:

    $$p(x)=\begin{cases} \frac{1}{b-a},\; a<x<b \cr 0, \;\; otherwise\end{cases}, $$​

    $$H(X)=-\int_a^b \frac{1}{b-a} \ln \frac{1}{b-a}dx =\ln (b-a)$$

  • 有条件最大熵:

    给定均值和方差的最大熵分布:

    $$\arg \underset{p(x)}{\max}H(X)=-\sum_xp(x)\ln p(x) \;\; st.\begin{cases}E(X)=\mu \cr Var(X)=\sigma^2 \end{cases} $$

    通过方差公式化简以及拉格朗日乘子法,可得到最大熵的 p(x) 分布是正态分布。

3.联合熵(joint entropy)

联合熵(Joint Entropy)是将一维随机变量分布推广到多维随机变量分布,联合熵在信息论中用于度量两个或多个随机变量联合分布的不确定性或信息量的指标。它是各个变量熵的总和,表示在考虑多个变量的情况下,所需的平均信息量。

假设有两个离散随机变量 $X$ 和 $Y$,它们的联合概率分布为 $P(X, Y)$。联合熵 $H(X, Y)$ 定义为:

$$\begin{align} H(X,Y) &=-\sum_{x,y}p(x,y) \ln p(x,y) \\&=-\sum_{i=1}^n\sum_{j=1} ^mp(x_i,y_i)\ln p(x_i, y_j) \end{align}$$

其中,$p(x_i, y_j)$ 表示 $X$ 和 $Y$ 取值为 $x_i$ 和 $y_i$ 的联合概率。

联合熵可以理解为对所有可能的事件进行加权求和,其中的权重是对应事件的联合概率。它反映了两个变量在一起的不确定性或信息量的总体大小。

联合熵具有以下特性:

  1. 非负性:联合熵始终为非负值。

  2. 对称性:$H(X, Y) = H(Y, X)$,即联合熵与变量的顺序无关。

  3. 条件熵关系:联合熵和条件熵之间有如下关系: $H(X, Y) = H(X) + H(Y|X) = H(Y) + H(X|Y)$

    其中,$H(X)$ 和 $H(Y)$ 分别表示变量 $X$ 和 $Y$ 的边缘熵,$H(Y|X)$ 和 $H(X|Y)$ 分别表示在给定 X 和 Y 的条件下,$Y$ 和 $X$ 的条件熵。

联合熵在信息论中有广泛的应用,例如在多变量数据分析、图像处理、模式识别等领域。它可以用于度量多个变量之间的相关性、选择合适的特征集、评估数据压缩算法的效果等。

4.条件熵(conditional entropy)

联合熵相当于两个随机变量形成的联合分布的不确定性,当联合熵减去其中一个随机变量单独发生包含的熵,相当于这个随机变量的熵已经确定了,即给定一个随机变量熵的条件熵。这就是条件熵的定义。

$$\begin{align}H(Y|X) &=H(X, Y)-H(X) \\& = -\sum_{x, y}p(x,y)\ln p(x,y) + \sum_x p(x)\ln p(x) \\&=-\sum_{x,y}p(x,y)\ln p(x,y)+\sum_x \left ( \sum_y p(x, y) \right) \ln p(x) \\&=-\sum_{x,y} p(x,y) \ln p(x,y) + \sum_{x,y} p(x,y) \ln p(x) \\&=-\sum_{x,y} p(x,y)\ln \frac{p(x,y)}{p(x)}\\&=-\sum_{x,y}p(x,y)\ln p(y|x) \tag{定义式}\\&=-\sum_x\sum_yp(x,y)\ln p(y|x)\\&=-\sum_x\sum_yp(x)p(y|x)\ln p(y|x) \\&=-\sum_xp(x)\sum_yp(y|x)\ln p(y|x)\\&=\sum_xp(x) \left( -\sum_yp(y|x)\ln p(y|x)\right)\\&=\sum_xp(x)H(Y|X=x) \tag{推导式}\end{align}$$

要点:

  1. 条件熵物理意义:$X$ 给定条件下,$Y$ 的条件概率分布的熵对 $X$ 的数学期望。
  2. $H(Y|X) = H(X, Y ) – H(X)$ 表示 $(X, Y)$ 发生所包含的熵,减去 $X$ 单独发生包含的熵,即在 $X$ 发生的前提下,$Y$ 发生 “新” 带来的熵 。也可以这样理解:描述 $X$ 和 $Y$ 所需的信息是描述 $X$ 自己所需的信息, 加上给定 $X$ 的条件下具体化 $Y$ 所需的额外信息
  3. 注意,这个条件熵,不是指在给定某个数(某个变量为某个值)的情况下,另一个变量的熵是多少,变量的不确定性是多少,这个很容易这样理解错。因为条件熵中 $X$ 也是一个变量,意思是在一个变量 $X$ 的条件下(变量 $X$ 的每个值都会取),另一个变量 $Y$ 熵对 $X$ 的期望。
  4. 其实条件熵意思是按一个新的变量的每个值对原变量进行分类,然后在每一个小类里面,都计算一个小熵,然后每一个小熵乘以各个类别的概率,然后求和。我们用另一个变量对原变量分类后,原变量的不确定性就会减小了,因为新增了 X 的信息,可以感受一下。不确定程度减少了多少就是信息的增益。

5.相对熵(relative entropy)

设 $p(x)$、$q(x)$ 是离散随机变量 $X$中取值的两个概率分布,则 $p$对 $q$的相对熵是:

$$D_{KL}(p||q)=\displaystyle\sum_{x}p(x)log\frac{p(x)}{q(x)}=E_{p(x)}log\frac{p(x)}{q(x)}$$

要点:

  1. 相对熵又称互熵,鉴别信息,KL 散度(Kullback–Leibler Divergence, KLD),Kullback 熵。
  2. 相对熵物理意义:求 $p$ 与 $q$ 之间的对数差在 $p$ 上的期望值。
  3. 如果 $p(x)$ 和 $q(x)$ 两个分布相同,那么相对熵等于 0。
  4. 相对熵可以度量两个随机变量的 “距离”,衡量两个概率分布之间的差异(不相似性)。
  5. $D_{KL}(p||q)\not=D_{KL}(q||p)$ ,相对熵具有不对称性。
  6. $D_{KL}(p||q)\geq0$,$D_{KL}(q||p)\geq0$。
  7. 如果是连续事件,求和改成求积分即可,即 $D_{KL}(p||q)=\int p(x) \log \frac{p(x)}{q(x)}$。

$如何理解相对熵(KL 散度)的非对称性:

非对称性是相对熵非要重要的一个特点,这与常见的 “距离” 大不一样,随机变量在前和在后是不一样的,这种 “非对称性” 意味着选择 $D_{KL}(p||q)$还是 $D_{KL}(q||p)$影响是很大的, 所以,对相对熵的理解必须要有 “确认方向” 和 “辨识主体” 的意识。

先看一下相对熵另外一种从交叉熵理解的角度(因为用到了交叉熵的知识,最好先读完下一小节的交叉熵再来看)。根据相对熵和交叉熵的关系,可得到下面的公式:

$$\begin{align}D_{KL}(p||q)&=H_{cross}(p,q)-H(p) \\&=\sum_xp(x) \log \frac{1}{q(x)}-\sum_xp(x)\log \frac{1}{p(x)} \\&=\sum_xp(x)\log\frac{p(x)}{q(x)}\end{align}$$

上式可以理解为相对熵就是用分布 q 的最佳信息传递方式来传达分布 p,比用分布 p 自己的最佳信息传递方式来传达分布 p,平均多耗费的信息长度。

在 $D_{KL}(p||q)$(有时候也写作 $D_q(p)$,与 $D_{KL}(p||q)$等价)中,p 可以理解成真实分布,q 可以理解成非真实分布,此时可以看出:

  • 要传达的信息来自于分布 p;
  • 信息传递的方式由分布 q 决定的。

那么,如果假定已知随机变量 p,求相对简单的随机变量 q,使得 q 尽量接近 p。如何做呢?我们很容易想到可以使用最小化 p 和 q 的相对熵来求,但是 $D_{KL}(p||q)$和 $D_{KL}(q||p)$到底用哪个?这两种方式到底有什么区别呢?

随机变量 p 已知,那么它的分布也已经固定,我们用随机变量 q 的分布来 “贴近” 随机变量 p,接下来我们分别来分析两种形式。

正向 KL 散度(Forward KL),即使 $D_{KL}(p||q)$最小,用公式表示为:

$$ q^* = \arg \underset{q}{\min} D_{KL}(p||q)=\arg \underset{q}{\min}\sum_x p(x) \log \left( \frac{p(x)}{q(x)} \right) $$

从公式直观来看,这个公式是对随机变量的每个取值上, $\log \left( \frac{p(x)}{q(x)} \right)$这个值的加权平均,正向 KL 散度中的的权值是 $p(x)$(实际上是算了个期望)。

当随机变量的某个取值的概率 $p(x)=0$时,因为 $p(x)$是权值,后面 $\log \left( \frac{p(x)}{q(x)} \right)$这一项多大多小已经不重要了,对 KL 散度不会产生影响,此时 KL 散度最小值是 0(也就意味着两个分布没有 “距离”,完全匹配),而 $q(x)$是多少都无所谓。

相应地,当随机变量某个取值的概率 $p(x)>0$时,此时后面的 $\log \left( \frac{p(x)}{q(x)} \right)$这一项就会对整体的 KL 散度大小产生影响,可以发现,$q(x)$作为分母,要尽量大一些才能保证 KL 散度小。

总体而言,对于正向 KL 散度,在 $p(x)$大的地方,想让 KL 散度小,就需要 $q(x)$的值也尽量大;在 $p(x)$小的地方,$q(x)$对整体 KL 影响并不大(因为 log 项本身分子很小,又乘了一个非常小的 $p(x)$)。换一种说法,要想使正向 KL 散度最小,则要求在 p 不为 0 的地方,q 也尽量不为 0,所以正向 KL 散度被称为是 zero avoiding。此时得到的分布 q 是一个比较 “宽” 的分布,可见下方两种分布的对比图。

反向 KL 散度(Reverse KL),即使 $D_{KL}(q||p)$最小,用公式表示为:

$$ q^* = \arg \underset{q}{\min} D_{KL}(q||p)=\arg \underset{q}{\min}\sum_x q(x) \log \frac{q(x)}{p(x)} $$

公式与正向 KL 散度类似,不过这回权值成了 $q(x)$。

当随机变量的某个取值概率 $q(x)=0$时,对 $p(x)\gt0$的地方,我们完全可以忽略,因为对整体 KL 散度并没有什么影响。

而当随机变量的某个取值概率 $q(x) \gt 0$时,必须得保证 $q(x)$在 $p(x)$小的地方也尽量小,才能使整体 KL 散度变小。

总体而言,对于反向 KL 散度,在 $p(x)$小的地方,想让 KL 散度小,就需要 $q(x)$的值也尽量小;在 $p(x)$大的地方,可以适当的忽略。换一种说法,要想使反向 KL 散度最小,则要求在 p 为 0 的地方,q 也尽量为 0,所以反向 KL 散度被称为是 zero forcing。此时得到分布 q 是一个比较 “窄” 的分布,可见下方两种分布的对比图。

机器学习中的各种熵_插图1

上图绿色曲线是真实分布 p 的等高线,红色曲线是使用近似 $p(z_1, z_2)=p(z_1)p(z_2)$得到的等高线。

  • 左:$D_{KL}(p||q)$,正向 KL 散度,zero avoiding, 较 “宽” 分布
  • 右:$D_{KL}(q||p)$,反向 KL 散度,zero forcing,较 “窄” 分布

另外,从上图也能看出,正向 KL 散度的分布会偏一般化,而反向 KL 散度的分布会偏特别化。

另外一种问题是,我们令 p 是两个高斯分布的混合,令 q 为单个高斯分布。那么两种 KL 散度如何选择呢?

由于正向 KL 散度和反向 KL 散度各自的特点,q 在 “贴近”p 的时候,会出现下图的区别:

机器学习中的各种熵_插图2

选择使用 KL 散度的哪个方向是取决于实际问题的。它们并没有熟好熟劣的区分。一些应用需要这个近似分布 q 在真实分布 p 放置高概率的所有地方都放置高概率,而其他应用需要这个近似分布 q 在真实分布 p 放置低概率的所有地方都很少放置高概率。KL 散度方向的选择反映了对于每种应用,优先考虑哪一种选择。

上面左图是最小化 $D_{KL}(p||q)$的效果。在这种情况下,我们选择一个 q 使得它在 p 具有高概率的地方具有高概率,意味着在优化过程中,更在意真实分布 p 中的常见事件,也就是蓝线的两峰,我们要优先确保它们在分布 q 中不是特别罕见(信息长度不是特别长)。当 p 具有多个峰时,q 选择将这些峰模糊到一起,以便将高概率质量放到所有峰上。

上面右图是最小化 $D_{KL}(q||p)$ 的效果。在这种情况下,我们选择一个 q 使得它在 p 具有低概率的地方具有低概率,意味着在优化过程中,更在意真实分布 p 中的罕见事件,也就是蓝线的谷底,我们要优先确保它们在分布 q 中不是特别常见(信息长度特别长的那些事件)。当 p 具有多个峰并且这些峰间隔很宽时,如该图所示,最小化 KL 散度会选择单个峰,以避免将概率质量放置在 p 的多个峰之间的低概率区域中。图中是当 q 被选择成强调左边峰时的结果,我们也可以通过选择右边峰来得到 KL 散度相同的值。如果这些峰没有被足够强的低概率区域分离,那么 KL 散度的这个方向仍然可能选择模糊这些峰。

下面是在二维分布情况下的图:

机器学习中的各种熵_插图3

 

  • 左图:$D_{KL}(p||q)$,q 趋近于完全覆盖 p。

  • 中、右图:$D_{KL}(q||p)$,q 能够锁定某一个峰值。

@JS 散度(Jensen-Shannon divergence)

KL 散度的缺点是它不是距离、不对称。因此引进 JS 散度的概念,是 KL 散度的变形。

JS 散度的定义如下:

$$D_{JS}(p||q)=\frac{1}{2}D_{KL}\left (p||\frac{p+q}{2} \right)+\frac{1}{2}D_{KL}\left(q|| \frac{p+q}{2} \right)$$

由定义可以看出,JS 散度是对称的,可以用于衡量两种不同分布之间的差异。JS 散度用于深度学习中生成对抗网络(GAN)的数学推导上。

6.交叉熵(cross entropy)

现在有关于样本集的两个概率分布 $ p(x) $和 $q(x)$,其中 $ p(x) $为真实分布,$ q(x) $非真实分布。

如果用真实分布 $ p(x) $来衡量识别别一个样本所需要编码长度的期望(平均信息长度)为:

$$H(p) =\displaystyle\sum_{x}p(x)\log\frac{1}{p(x)}=-\displaystyle\sum_{x}p(x)\log{p(x)}$$

如果使用非真实分布 $ q(x) $来表示来自真实分布 $ p(x) $的平均编码长度,则是:

$$H(p,q)=\displaystyle\sum _{x}p(x)\log\frac{1}{q(x)}=-\displaystyle\sum _{x}p(x)\log{q(x)}$$

(因为用 $ q(x) $来编码的样本来自于分布 $ p(x) $,所以 $H(p,q)$ 中的概率是 $p(x)$)。

此时就将 $ H(p,q) $称之为交叉熵。交叉熵用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出成本的大小。交叉的字面意思在于:真实分布与非真实分布的交叉。

要点:

  1. 交叉熵刻画的是实际输出 $y$(概率)与期望输出 $\hat y$(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。
  2. 在机器学习任务中,其中 $p(x)$对应样本类别标签 $y_k$,但要转化为数值 1,因为在分类问题中,存在多种类别标签,比如二分类问题中的 $\{0, 1\}$,若直接使用类别标签作为 $p(x)$,那么标签数值会对损失函数的值产生影响,比如标签为 0 时无论 $q(x)$为多少,其值皆为 0,故要进行标签数值转化,消除标签数值带来的影响。如在 Logistic 回归的损失函数中,其中 Label=1 的直接使用其标签 $y_i$作为 $p(x)$,使用 sigmoid 函数 $\sigma(X)$作为正确分类预测概率 $\hat y_i$($q(x)$);Label=0 的要转化到 1,故使用 $1-y_i$作为 $p(x)$,使用 $1-\sigma(X)$作为 $\hat y_i$($q(x)$)。
  3. $q(x)$对应模型的正确分类预测概率($\hat y_k$),其中 $q(x)\in[0,1]$,我们可以发现当 $q(x)$上升时对应的 $-\log q(x)$下降,即交叉熵下降。而根据交叉熵的思想,当 $q(x)$越接近 $p(x)$时,代表交叉熵越小,比如 $q(x)=1$时,代表 100% 确定正确分类,即交叉熵为 0,即此时 $q(x)=p(x)$,而 $p(x)$是一个真实定值,即恒有 $p(x)=1$。
  4. 同 KL 散度一样,交叉熵也具备非负性,即 $H_{cross}(p,q)\ge0$;同时交叉熵也具备非对称性,即 $H_{cross}(p,q) \neq H_{cross}(q,p)$。
  5. 对自己求交叉熵等于自己的熵,即 $H_{cross}(p, p)=H(p)$。

例子:

考虑一个随机变量 $x$,真实分布 $p(x)= \left( \displaystyle\frac{1}{2},\frac{1}{4},\frac{1}{8},\frac{1}{8} \right)$,非真实分布 $q(x)=\left( \displaystyle\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4} \right)$, 则 $H(p)=1.75\ bits$(最短平均码长),交叉熵 $H(p,q)=\displaystyle\frac{1}{2}log_24+\frac{1}{4}log_24+\frac{1}{8}log_24+\frac{1}{8}log_24=2\ bits$。

由此可以看出根据非真实分布 $q(x)$ 得到的平均码长大于根据真实分布 $p(x)$ 得到的平均码长。

交叉熵和相对熵(KL 散度)有什么关系呢?

我们将 KL 散度的公式进行变形:

$$D_{KL}(p||q)=\displaystyle\sum_{x}p(x)log\frac{p(x)}{q(x)}=\sum_xp(x)\log p(x)-\sum_x p(x) \log q(x)$$

不难发现,前面一部分是 p 的负熵,后面一部分是 p 和 q 交叉熵,也就是说:

$$D_{KL}(p||q)=-H(p)+H_{cross}(p, q)=H_{cross}(p,q)-H(p)$$

由此可以得出一些重要信息:

  1. 当用非真实分布 $ q(x) $得到的平均码长比真实分布 $p(x)$ 得到的平均码长多出的比特数就是相对熵。
  2. 因 $D_{KL}(p||q)\geq0$,所以 $H(p,q)\geq H(p)$,当 $p(x)=q(x)$ 时取等号,此时交叉熵等于信息熵。
  3. 交叉熵和相对熵之间差一个信息熵,如果 p 的分布是固定不变的,H(p) 则是一个常数,那么交叉熵和相对熵之间只差一个常数,如果是用作目标函数,最小化交叉熵和最小化相对熵是完全等效的,而在机器学习中,训练数据是事先给定的,其分布固定不变,因此在机器学习中,交叉熵等价相对熵。同时 H(p,q) 也等价于最大化似然估计(具体参考 Deep Learning 5.5)

在机器学习中,交叉熵经常被用来作目标函数,为什么呢?

在机器学习中,我们希望在训练数据上模型学到的分布 $P(model)$ 和真实数据的分布 $P(real)$ 越接近越好,所以我们可以使其相对熵最小。但是我们没有真实数据的分布,所以只能希望模型学到的分布 $P(model)$和训练数据的分布 $P(train)$尽量相同。假设训练数据是从总体中独立同分布采样的,那么我们可以通过最小化训练数据的经验误差来降低模型的泛化误差。即:

  1. 希望学到的模型的分布和真实分布一致,$P(model)\simeq P(real)$
  2. 但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的,$P(train)\simeq P(real)$
  3. 因此,我们希望学到的模型分布至少和训练数据的分布一致,$P(train)\simeq P(model)$

根据之前的描述,最小化训练数据上的分布 $P(train)$与最小化模型分布 $P(model)$的差异等价于最小化相对熵,即 $D_{KL}(P(train)||P(model))$。此时,$P(train)$ 就是 $D_{KL}(p||q)$ 中的 $p$,即真实分布,$P(model)$ 就是 $q$。又因为训练数据的分布 $p$是给定的,所以求 $D_{KL}(p||q)$ 等价于求 $H(p,q)$。得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异。交叉熵广泛用于 Logistic 回归的 Sigmoid 和 Softmax 函数中作为损失函数使用。

不过,完美的学到了训练数据分布往往意味着过拟合,因为训练数据不等于真实数据,我们只是假设它们是相似的,而一般还要假设存在一个高斯分布的误差,是模型的泛化误差下线。

因此在评价机器学习模型时,我们往往不能只看训练数据上的误分率和交叉熵,还是要关注测试数据上的表现。如果在测试集上的表现也不错,才能保证这不是一个过拟合或者欠拟合的模型。交叉熵比照误分率还有更多的优势,因为它可以和很多概率模型完美的结合。

所以逻辑思路是,为了让学到的模型分布更贴近真实数据分布,我们最小化模型数据分布与训练数据之间的 KL 散度,而因为训练数据的分布是固定的,因此最小化 KL 散度等价于最小化交叉熵。因为等价,而且交叉熵更简单更好计算,所以更多的会用交叉熵。

$交叉熵损失、对数损失和最大似然估计的等价性

我们已经知道 Logistic 回归的损失函数为对数损失,其实就是为了计算方便将求最大似然估计改为求最小对数损失,二者是等价的。实际上,交叉熵损失与对数损失以及最大似然估计都是等价的,尤其是对数损失,基本上就是交叉熵损失的另外一个别称。

接下来我们来看看交叉熵损失和对数损失是如何等价的。

上面给的交叉熵定义是针对单类样本的交叉熵定义,在此基础上,我们可以根据交叉熵的思想,给出多分类样本中的交叉熵定义:

$$H(y,\hat y)=-\frac{1}{m}\sum_{i=1}^m\sum_{k=1}^ny_k^i \log({\hat y}_k^i )$$

其中,$m$为样本数,$i$表示第 $i$个样本;$n$为类别数,$k$表示第 $k$个样本,下同。

$y_k^i$为真实类别标签,含义为:

$$y_k^i =\begin{cases}1, & label(x^i)=k \\ 0, & otherwise \\\end{cases}$$

即当样本 $x^i$的分类标签为 $k$ 时,$y_k^i$为 1, 否则为 0(因为交叉熵只用来表示预测分类与真实分类的差异程度,并不用来测量与错误分类的差异程度,所以设置为 0)。

$\hat y_k^i$是预测分类概率,如果是二分类任务,$\hat y_k^i$使用 sigmoid 函数得到;如果是多分类任务时,$\hat y_k^i$使用 softmax 函数得到,即:

$$\hat y_k^i = h_\theta(x^i)=\begin{cases}\frac{1}{1+e^{-\theta^Tx^i}}, &二分类 sigmoid 函数 \\ \frac{\exp(\theta_k^Tx^i)}{\sum_{l=1}^n\exp(\theta_l^Tx^i)}, &多分类 softmax 函数 \\\end{cases}$$

本质上,softmax 函数是 logistic 函数的一般形式,我们在 Logistic 函数推导过,当类别数 $n=2$时,softmax 回归退化为 logistic 回归。

根据上面的情况,不难发现,sigmoid 损失和 softmax 损失其实就是分别使用了 sigmoid 函数和 softmax 函数进行概率预测的交叉熵,而且又是对数形式,所以 Logistic 回归和 Softmax 回归的损失函数既是对数损失又是交叉熵损失。

更具体一些,二分类任务时:

$$\begin{equation}\begin{split} J(\theta)&=loss(y, \hat y)\\&=H(y,\hat y)\\&=-\frac{1}{m}\sum_{i=1}^my_i \log \hat y_i + (1-y_i) \log(1- \hat y_i)\\&=- \frac{1}{m} \sum_{i=1}^m \left [ y_i\log \frac{1}{1+e^{-\theta^T x_i}}+(1-y_i)\log \frac{e^{-\theta^T x_i}}{1+e^{-\theta^T x_i}}\right ] \end{split}\end{equation}$$

多分类任务时:

$$\begin{equation}\begin{split} J(\theta)&=loss(y, \hat y)\\&=H(y,\hat y)\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^n y^i_k \cdot \log \hat y_k^i\right ]\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^n y^i_k \cdot \log p(y^i=k|x^i;\theta)\right ]\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^n y^i_k \cdot \log \frac{\exp(\theta_k^Tx^i)}{\sum_{l=1}^n\exp(\theta_l^Tx^i)}\right ] \end{split}\end{equation}$$

7.互信息(mutual information)

互信息(Mutual Information,MI)也叫转移信息(transinformation),是两个随机变量间相互依赖性的量度。互信息的定义借助了相对熵概念。

两个随机变量 X,Y 的互信息,定义为 X,Y 的联合分布和独立分布乘积的相对熵,公式为:

$I(X,Y) =D(p(x,y)||p(x)p(y))=\displaystyle\sum_{x,y}p(x,y)\log \frac{p(x,y)}{p(x)p(y)}$

要点:

  1. 上面的定义是用相对熵来度量两个随机变量相互依赖的程度,利用了联合分布和独立分布乘积之间的关系。但从互信息名称来直观理解,互信息就是两件事为彼此提供的信息。当知道了事件 A 之后,事件 B 的确定性增加多少,也就是让事件 B 减少多少的信息量。因此,互信息还有另外一种定义:

    $$\begin{align} I(X,Y)&=H(X)-H(X|Y) \\&=H(Y)-H(Y|X) \\&=H(X)+H(Y)-H(Y|X)\\&=H(X,Y)-H(X|Y)-H(Y|X)\end{align}$$

  2. 两种定义公式可以推导验证一致,推导过程如下:

    机器学习中的各种熵_插图4

  3. 当一个事件为另一个事件减少越多不确定性,这两个事件的相关性就越强。如果是两个独立事件,它们之间的相关性为 0,互信息就是 0($p(x,y) = p(x) \cdot p(y)$),表示完全没有依赖。

8.各种熵的关系

利用维恩图可以理清楚熵、条件熵、联合熵、互信息之间的关系。

机器学习中的各种熵_插图5

理解:

  • H(X) 和 H(Y) 的并集是联合熵 H(X, Y),交集是互信息 I(X, Y)
  • H(X) 丢掉 H(X) 中 Y 的不确定性 (交集的互信息) 剩下就是 H(X|Y)
  • H(Y) 丢掉 H(Y) 中 X 的不确定性 (交集的互信息) 剩下就是 H(Y|X)。

 

交叉熵 = 相对熵 + 熵

  • 熵:$$H(x)=-\sum_xp(x)\log p(x)$$

  • 交叉熵:$$H(p,q)=-\sum _{x}p(x)\log{q(x)}$$

  • 相对熵:$$KL(p||q)=\sum_{x}p(x)\log\frac{p(x)}{q(x)}$$

  • 三者关系

    $$\begin{align}D_{KL}(p||q)&=H_{cross}(p,q)-H(p) \\&=\sum_xp(x) \log \frac{1}{q(x)}-\sum_xp(x)\log \frac{1}{p(x)} \\&=\sum_xp(x)\log\frac{p(x)}{q(x)}\end{align}$$

© 除特别注明外,本站所有文章均为卢明冬的博客原创 , 转载请联系作者。
© 本文链接:https://lumingdong.cn/various-entropies-in-machine-learning.html
相关文章
发布一条评论吧