虽然作为一个炼丹老手(调包侠),我们肯定知道了在分类问题中,我们一般用交叉熵来刻画两个概率分布之间的“距离”,通过最小化交叉熵(而不是回归问题中的 $p$-范数)来得到能输出最接近目标分布(label)的,输入特征到概率分布的映射 $f_\theta$(又称模型)。那么为什么交叉熵最小化时预测分布能最接近目标分布?最小化交叉熵之后交叉熵的取值应该是怎么样的?现在马上就来水一篇关于这个问题的文章

为了热身,我们还是介绍熵(by DeepSeek R1):

给定一个离散的概率分布 $P = \{p_1, p_2, \dots, p_n\}$,其中 $p_i \geq 0$ 且 $\sum_{i = 1}^n p_i = 1$,这个概率分布的熵 $H(P)$ 定义为:

其中,对数底数通常取 2,表示熵的单位为比特(bit)。如果某些 $p_i$ 为 0,则 $p_i \log_2(p_i)$ 视为 0,因为 $\lim_{x \to 0^+} x \log_2(x) = 0$。

顺便补充一下熵的物理意义(感觉挺玄的):熵表示一个随机变量的不确定性或信息量的度量

  1. 不确定性:熵越大,表示随机变量的不确定性越大。换句话说,如果一个随机变量的熵很大,那么我们很难预测它的具体取值。

  2. 信息量:熵也可以看作是获取一个随机变量的值所需的最小平均信息量。例如,如果一个随机变量的熵为 3 比特,那么我们需要至少 3 比特的信息来确定它的值。

  3. 均匀分布:对于一个有 $n$ 个可能取值的离散随机变量,如果每个取值的概率相等(即 $p_i = \frac{1}{n}$),那么熵达到最大值 $\log_2(n)$。这意味着均匀分布的随机变量具有最大的不确定性。

  4. 非均匀分布:如果某个 $p_i$ 接近 1,而其他 $p_j$ 接近 0,那么熵会很小。这种情况下,随机变量的不确定性很小,因为我们几乎可以确定它的取值。

对于上面提到的后两点,其实也就是我们想研究熵的取值范围,以及在哪些点上取到的极值。主要来看看第 3 点。

解法一 由拉格朗日乘数法:引入拉格朗日乘数 $\lambda$,考虑约束条件 $\sum_{i = 1}^n p_i = 1$,构造拉格朗日函数:

对每个 $p_i$ 求偏导,并设其等于零:

解得:

到这里我们可以看到 $p_i$ 是常数,又有 $\sum_{i = 1}^n p_i = 1$,所以 $p_i = \frac{1}{n}$ 对所有 $i$ 成立。

然后这里的极值点 $p_i$ 还不确定是极大值还是极小值,还需要考察 Hessian 矩阵的性质

计算二阶偏导数,有:

所以 Hessian 矩阵是对角线元素全为负的对角矩阵,也就是说 Hessian 矩阵是负定的,所以这是极大值。

代入 $p_i = 1 / n$ 求得熵的最大值为 $\log n$。

解法二 利用 Jensen 不等式

考察函数 $f(x) = - x \log x$

其一阶导 $f’(x) = - 1 - \log x$,二阶导 $f’’(x) = - 1 / x$

因为 $x > 0$,所以 $f’’(x) < 0$,所以函数 $f(x)$ 是凸函数,可以利用 Jensen 不等式得到

交叉熵

熵是用来表示一个随机变量的信息量的度量,交叉熵用来表示两个概率分布的某种“相关性”。正式定义如下(by DeepSeek R1):

给定两个离散概率分布 $P = \{p_1, p_2, \dots, p_n\}$ 和 $Q = \{q_1, q_2, \dots, q_n\}$,其中 $p_i \geq 0$, $q_i \geq 0$ 且 $\sum_{i = 1}^n p_i = 1$, $\sum_{i = 1}^n q_i = 1$,交叉熵 $H(P, Q)$ 定义为:

物理意义如下:

  1. 信息量度量

    • 交叉熵 $H(P, Q)$ 表示使用概率分布 $Q$ 来编码来自概率分布 $P$ 的信息所需的平均比特数。
    • 如果 $Q$ 与 $P$ 非常接近,那么交叉熵会接近 $P$ 的熵 $H(P)$。
    • 如果 $Q$ 与 $P$ 相差较大,那么交叉熵会大于 $H(P)$。
  2. 模型性能评估

    • 在机器学习中,交叉熵常用于评估分类模型的性能。假设 $P$ 是真实标签的分布,$Q$ 是模型预测的分布,那么交叉熵可以用来衡量模型预测的准确性。
    • 交叉熵越小,表示模型预测的分布 $Q$ 越接近真实分布 $P$,模型的性能越好。
  3. 损失函数

    • 在分类问题中,交叉熵损失函数常用于优化模型参数。通过最小化交叉熵,模型可以学习到更接近真实分布的预测分布。
  4. 相对熵(KL 散度)

    • 交叉熵与熵的关系可以通过相对熵(KL 散度)来理解。相对熵 $D_{KL}(P \parallel Q)$ 定义为:
    • 相对熵表示使用 $Q$ 来编码 $P$ 的信息所需的额外比特数。

这里我们主要关注第 2 点和第 3 点:

  • 为什么交叉熵可以用来衡量模型预测的准确性?
  • 为什么通过最小化交叉熵,模型可以学习到更接近真实分布的预测分布?
  • 交叉熵可以最小化到多小?

同样还是当成一个最优化问题来做:因为我们是尝试使用概率分布 $Q$ 来编码来自概率分布 $P$ 的信息,所以我们 只能去动(优化) $Q$ 的分布,因为 $P$ 的分布是固定的。这点很重要,因为如果反过来去动 $P$ 的话,由排序不等式(调整法),可以得到只需要将对应 $Q$ 的最大值的下标的概率值取到 1,其他值全取 0,$H(P, Q)$ 取到最小值 $-\log{\left(\max_{i=1}^{n}q_i\right)}$。

还是一样,用拉格朗日乘数法,引入拉格朗日乘数 $\lambda$,考虑约束条件 $\sum_{i = 1}^n q_i = 1$,构造拉格朗日函数:

对每个 $q_i$ 求偏导,并设其等于零:

解得:

到这里我们可以看到 $p_i / q_i$ 是常数,又有 $\sum_{i = 1}^n p_i = \sum_{i = 1}^n q_i = 1$,所以 $q_i = p_i$ 对所有 $i$ 成立。

然后这里的极值点 $q_i$ 还不确定是极大值还是极小值,还需要考察 Hessian 矩阵的性质

计算二阶偏导数,有:

所以 Hessian 矩阵是对角线元素全为正的对角矩阵,也就是说 Hessian 矩阵是正定的,所以这是极小值。

代入 $p_i = q_i$ 求得交叉熵的最小值为 $-\sum_{i=1}^{n}p_i \log p_i$,即目标概率分布 $P$ 的交叉熵;特别地:

  • 对于 N 分类问题,我们常常先对 label 进行 one-hot 编码,这样 $p_i$ 中有一个是 1,其他都是 0;对于这种情况,可能得到的交叉熵最小值为 0;
  • 如果我们使用了 label smoothing 这种 trick 的话,直接优化交叉熵,在最理想的情况下也是不能把交叉熵按死到 0 的。

所以我们又搞出了相对熵(KL 散度)的概念。相对熵 $D_{KL}(P \parallel Q)$ 定义为:

其物理意义为使用 $Q$ 来编码 $P$ 的信息所需的 额外 比特数。从刚才的推导出发也很好理解:优化交叉熵只能得到 $P$ 的熵作为最小值,那我直接减去这个最小值,不就能把这玩意儿按死到 0 了。当然在实际工程中,计算相对熵会带来额外的开销,这是个问题。

推土机距离

推土机距离(Earth Mover’s Distance, EMD)衡量两个概率分布之间的“距离”,表示将一个分布“移动”到另一个分布所需的最小“代价”。

最小化推土机距离:使得两个分布之间的“移动代价”最小。

推土机距离的公式如下:

假设有两个分布 $P$ 和 $Q$,分别定义在空间 $\mathcal{X}$ 上。EMD 定义为:

其中 $f(x, y)$ 是从 $x$ 到 $y$ 的“流量”, $d(x, y)$ 是 $x$ 和 $y$ 之间的距离,$F$ 是所有可能的流量分配方案。

与交叉熵有区别的是,推土机距离的计算式里面已经就有一个求最小值的操作了,因为其含义为:“推土机”将一个分布的“土堆”移动到另一个分布的“土堆”所需的 最小工作量。所以在实际计算的时候,需要求解线性规划问题,所以计算成本是比较高的。完了还得优化这个距离,所以推土机距离本身难以直接用于大规模优化,通常需要近似算法或启发式方法,但是如果能优化的话,效果会更牛逼(譬如 Wasserstein GAN 以及 WGAN-GP)。