再看交叉熵
虽然作为一个炼丹老手(调包侠),我们肯定知道了在分类问题中,我们一般用交叉熵来刻画两个概率分布之间的“距离”,通过最小化交叉熵(而不是回归问题中的 $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$。
顺便补充一下熵的物理意义(感觉挺玄的):熵表示一个随机变量的不确定性或信息量的度量
不确定性:熵越大,表示随机变量的不确定性越大。换句话说,如果一个随机变量的熵很大,那么我们很难预测它的具体取值。
信息量:熵也可以看作是获取一个随机变量的值所需的最小平均信息量。例如,如果一个随机变量的熵为 3 比特,那么我们需要至少 3 比特的信息来确定它的值。
均匀分布:对于一个有 $n$ 个可能取值的离散随机变量,如果每个取值的概率相等(即 $p_i = \frac{1}{n}$),那么熵达到最大值 $\log_2(n)$。这意味着均匀分布的随机变量具有最大的不确定性。
非均匀分布:如果某个 $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)$ 定义为:
物理意义如下:
信息量度量:
- 交叉熵 $H(P, Q)$ 表示使用概率分布 $Q$ 来编码来自概率分布 $P$ 的信息所需的平均比特数。
- 如果 $Q$ 与 $P$ 非常接近,那么交叉熵会接近 $P$ 的熵 $H(P)$。
- 如果 $Q$ 与 $P$ 相差较大,那么交叉熵会大于 $H(P)$。
模型性能评估:
- 在机器学习中,交叉熵常用于评估分类模型的性能。假设 $P$ 是真实标签的分布,$Q$ 是模型预测的分布,那么交叉熵可以用来衡量模型预测的准确性。
- 交叉熵越小,表示模型预测的分布 $Q$ 越接近真实分布 $P$,模型的性能越好。
损失函数:
- 在分类问题中,交叉熵损失函数常用于优化模型参数。通过最小化交叉熵,模型可以学习到更接近真实分布的预测分布。
相对熵(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)。