/ deep learning  

关于交叉熵的一些理解

接触机器学习和深度学习已经有一年多时间,曾经自以为已经对交叉熵的概念已经很熟悉了,日常涉猎的都是一些更高层面的针对特定问题的DL/ML算法。然而最近研究多轮对话接触到vhred以及其他变分模型的时候,才发现自己对交叉熵、KL散度的概念并不够清楚,甚至还存在一些误解。借此机会重新整理一下交叉熵的内容。(以下论述主要是一些通俗理解,追求数学严谨的同学请移步

交叉熵是信息论中的一个概念,要想了解交叉熵的本质,就需要从最基本的概念说起。

1.信息量

假设 $X$ 是一个离散型随机变量,其取值集合为 $\chi$,概率分布函数 $p(x)=P(X=x), x \in \chi$,则定义事件 $X=x_0$ 的信息量为:

直观来看,信息量和事件发生的概率有关,越不可能发生的事件发生了,我们获取到的信息量就越大,而那些司空见惯的事发生了,我们获取到的信息量就很少,即信息量可以表示一个事件的自信息量。从另一角度看,信息量也可以衡量一个事件的不确定度,也就是说我们需要加入多少信息才能将该事件的发生确定下来,事件的不确定性越大,信息量也就越大,把它搞清楚所需要的信息量也就越大

2.信息熵

信息熵是随机变量的信息量的期望:

广义的熵可以衡量一个系统的有序化程度(或混乱程度),可以证明,一个系统越是混乱不确定(均匀分布),熵就越大。信息熵用于衡量数据的信息量时,可以得到对数据进行编码所需的最短平均编码长度,当平均编码长度大于信息熵时可以认为编码存在冗余。

3. KL散度(相对熵)

如果我们对于同一个随机变量 $X$ 有两个单独的概率分布 $P(X)$ 和 $Q(X)$,我们可以使用KL散度来衡量这两个分布的差异(不是距离,因为不具备对称性!

在机器学习中,$KL(P \mid \mid Q)$ 通常用来描述使用真实分布 $P$ 取代估计分布 $Q$ 时的信息增益。

KL散度的值越小,表示 $P$ 分布和 $Q$ 分布越接近。

(这里还有对KL散度的另一种解读:KL散度的意义是“额外所需的编码长度”如果我们用B的编码来表示A)

4. 交叉熵

直接给出公式:

可以发现 $KL(p \mid \mid q) = H(p,q)-H(p)$,在机器学习中,我们需要评估某个样本的label和predicts之间的差距,使用KL散度刚刚好,由于KL散度中的 $H(p)$ 一直保持不变,故优化中只需要关注交叉熵即可。

重点开始:深度学习/机器学习中大部分任务都可以看作分类任务,我们这里说的分布 $p$ 和 分布 $q$ 是针对对数据集中的某一个样本 $x$ 的label而言,而不是整个数据集中的所有样本的label分布。 我们的任务是训练一个函数,向函数中输入一个样本 $x$ 可以得到其label的概率分布列 $\vec{P}(Y=y \mid x)$,训练的目标是对每个已观测到的样本 $(x,y)$,通过这个函数计算出的label分布列都要和观测的真实分布列尽可能接近。对于每个样本 $x$ 只有一种确定的label的情况(通常情况如此),其真实概率分布列 $p$ 其实是一个形如 $[0,1,0,0,0]$ 的向量,其信息熵 $H(p)$ 通过公式计算的结果为0(这也印证了对于已观测到的样本,其label的概率分布已知,不确定度为0),可以认为深度学习/机器学习中对常见分类任务使用的交叉熵其实就是”退化“的KL散度;由于样本真实概率分布 $p$ 为形如 $[0,1,0,0,0]$ 的向量,交叉熵 $H(p,q)$ 也只剩下真实概率分布中数值为1对应的项,此时交叉熵就完全等价于极大对数似然估计了,其优化目标是最大化已观测样本的 $(x,y)$ 的出现概率。