机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

1、信息熵 (information entropy)

 

熵 (entropy) 这一词最初来源于热力学。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。本文只讨论信息熵。首先,我们先来理解一下信息这个概念。信息是一个很抽象的概念,百度百科将它定义为:指音讯、消息、通讯系统传输和处理的对象,泛指人类社会传播的一切内容。那信息可以被量化么?可以的!香农提出的“信息熵”概念解决了这一问题。

一条信息的信息量大小和它的不确定性有直接的关系。我们需要搞清楚一件非常非常不确定的事,或者是我们一无所知的事,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了解,我们就不需要太多的信息就能把它搞清楚。所以,从这个角度,我们可以认为,信息量的度量就等于不确定性的多少。比如,有人说广东下雪了。对于这句话,我们是十分不确定的。因为广东几十年来下雪的次数寥寥无几。为了搞清楚,我们就要去看天气预报,新闻,询问在广东的朋友,而这就需要大量的信息,信息熵很高。再比如,中国男足进军2022年卡塔尔世界杯决赛圈。对于这句话,因为确定性很高,几乎不需要引入信息,信息熵很低。

考虑一个离散的随机变量机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),由上面两个例子可知,信息的量度应该依赖于概率分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),因此我们想要寻找一个函数机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),它是概率机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的单调函数,表达了信息的内容。怎么寻找呢?如果我们有两个不相关的事件机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),那么观察两个事件同时发生时获得的信息量应该等于观察到事件各自发生时获得的信息之和,即:机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数) 。

因为两个事件是独立不相关的,因此机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)。根据这两个关系,很容易看出机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)一定与 机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的对数有关 (因为对数的运算法则是机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)。因此,我们有

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

其中负号是用来保证信息量是正数或者零。而 log函数基的选择是任意的(信息论中基常常选择为2,因此信息的单位为比特bits;而机器学习中基常常选择为自然常数,因此单位常常被称为奈特nats)。机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)也被称为随机变量机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)自信息 (self-information),描述的是随机变量的某个事件发生所带来的信息量。图像如图:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

 

最后,我们正式引出信息熵。 现在假设一个发送者想传送一个随机变量的值给接收者。那么在这个过程中,他们传输的平均信息量可以通过求机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)关于概率分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的期望得到,即:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)就被称为随机变量机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)熵,它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望

从公式可得,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大,且机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数) 。稍后证明。将一维随机变量分布推广到多维随机变量分布,则其联合熵 (Joint entropy) 为:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

注意点:

1、熵只依赖于随机变量的分布,与随机变量取值无关,所以也可以将机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的熵记作 H(p)H(p)。

2、令0log0=0(因为某个取值概率可能为0)。

那么这些定义有着什么样的性质呢?考虑一个随机变量机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)。这个随机变量有4种可能的状态, 每个状态都是等可能的。为了把机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的值传给接收者,我们需要传输2比特的消息。

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

现在考虑一个具有4种可能的状态机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的随机变量,每个状态各自的概率为机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

这种情形下的熵为:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

我们可以看到,非均匀分布比均匀分布的熵要小。现在让我们考虑如何把变量状态的类别传递给接收者。与之前一样,我们可以使用一个2比特的数字来完成这件事情。然而,我们可以利用非均匀分布这个特点,使用更短的编码来描述更可能的事件,使用更长的编码来描述不太可能的事件。我们希望这样做能够得到一个更短的平均编码长度。我们可以使用下面的编码串(哈夫曼编码):0、10、110、111来表示状态机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)。传输的编码的平均长度就是:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

这个值与上方的随机变量的熵相等。熵和最短编码长度的这种关系是一种普遍的情形。Shannon 编码定理表明熵是传输一个随机变量状态值所需的比特位下界(最短平均编码长度)。因此,信息熵可以应用在数据压缩方面。这里这篇文章讲的很详细了,我就不赘述了。

 

证明机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

利用拉格朗日乘子法证明:

因为 机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

所以有

目标函数:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

约束条件:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

 

  1、定义拉格朗日函数:

                 机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

  2、机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)分别对机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)求偏导数,令偏导数为 0:

                   机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

                   机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

                   …………

                   机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

                   机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

  3、求出机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的值:

            解方程得,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

            代入机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)中得到目标函数的极值为:

             机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

           由此可证机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)为最大值。

 

 2、条件熵 (Conditional entropy)

 

条件熵机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)表示在已知随机变量机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的条件下随机变量机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的不确定性。条件熵机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)定义为机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)给定条件下机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的条件概率分布的熵对机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的数学期望:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)
条件熵机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)相当于联合熵机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)减去单独的熵机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),即

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),证明如下:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

 

举个例子,比如环境温度是低还是高,和我穿短袖还是外套这两个事件可以组成联合概率分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),因为两个事件加起来的信息量肯定是大于单一事件的信息量的。假设机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)对应着今天环境温度的信息量,由于今天环境温度和今天我穿什么衣服这两个事件并不是独立分布的,所以在已知今天环境温度的情况下,我穿什么衣服的信息量或者说不确定性是被减少了。当已知机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)这个信息量的时候,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)剩下的信息量就是条件熵:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

因此,可以这样理解,描述机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)所需的信息是描述机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)自己所需的信息,加上给定机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的条件下具体化机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)所需的额外信息。关于条件熵的例子可以看这篇文章,讲得很详细。

 

3、相对熵 (Relative entropy),也称KL散度 (Kullback–Leibler divergence)

 

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)是 离散随机变量机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)中取值的两个概率分布,则机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的相对熵是:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

性质:

1、如果机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)两个分布相同,那么相对熵等于0

2、机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),相对熵具有不对称性。大家可以举个简单例子算一下。

3、机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)证明如下(利用Jensen不等式):

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

 因为:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

所以:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

 总结:相对熵可以用来衡量两个概率分布之间的差异,上面公式的意义就是求机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)之间的对数差在机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)上的期望值

 

4、交叉熵 (Cross entropy)

 

现在有关于样本集的两个概率分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),其中机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)为真实分布,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数) 非真实分布。如果用真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)来衡量识别一个样本所需要编码长度的期望(平均编码长度)为:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

如果使用非真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)来表示来自真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的平均编码长度,则是:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)。(因为用机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)来编码的样本来自于分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),所以机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)中的概率是机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数))。

此时就将机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)称之为交叉熵

举个例子。考虑一个随机变量机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),非真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),则机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)(最短平均码长),交叉熵机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)。由此可以看出根据非真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)得到的平均码长大于根据真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)得到的平均码长。

 

我们再化简一下相对熵的公式:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

有没有发现什么?

熵的公式 机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

交叉熵的公式机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

所以有:

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)(当用非真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)得到的平均码长比真实分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)得到的平均码长多出的比特数就是相对熵)

又因为 机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

所以 机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)(当 机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)时取等号,此时交叉熵等于信息熵)

并且机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)为常量时(注:在机器学习中,训练数据分布是固定的),最小化相对熵机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)等价于最小化交叉熵机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)也等价于最大化似然估计(具体参考Deep Learning 5.5)

 

 

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

  1. 希望学到的模型的分布和真实分布一致,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)
  2. 但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)
  3. 因此,我们希望学到的模型分布至少和训练数据的分布一致,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

根据之前的描述,最小化训练数据上的分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)与最小化模型分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的差异等价于最小化相对熵,即机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)。此时,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)就是机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)中的机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数),即真实分布,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)就是机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)。又因为训练数据的分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)是给定的,所以求机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)等价于求机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异。交叉熵广泛用于逻辑回归的Sigmoid和Softmax函数中作为损失函数使用。这篇文章先不说了。

 

5、总结

  1. 信息熵是衡量随机变量分布的混乱程度,是随机分布各事件发生的信息量的期望值,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大;信息熵推广到多维领域,则可得到联合信息熵;条件熵表示的是在机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)给定条件下,机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的条件概率分布的熵对机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的期望。
  2. 相对熵可以用来衡量两个概率分布之间的差异。
  3. 交叉熵可以来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。

或者:

  1. 信息熵是传输一个随机变量状态值所需的比特位下界(最短平均编码长度)。
  2. 相对熵是指用机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)来表示分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)额外需要的编码长度。
  3. 交叉熵是指用分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)来表示本来表示分布机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)的平均编码长度。