整体问题描述
- 核心问题:在基于 Softmax 归一化的 Category 分布(多项式分布)中,单独压低或提升某一个类别的概率,系统总熵如何变化
- 本文内容:根据 Softmax 的一个重要数学性质,对熵进行分解求导,最后进行分类讨论
- 基本结论:这种情况下,总熵的变化并不是单调的 ,而是取决于该类别当前的概率大小以及剩余类别的分布混乱程度
- 更精确的结论前置与直观理解
- 前提:在 Softmax 分布下调整单一类别的概率
- 1)如果调整的类别概率非常大(大于 \(0.5\)),压低它必然增熵 ,提升它必然减熵
- 2)如果调整的类别概率非常小(小于 \(1/n\)),提升它必然增熵 ,压低它必然减熵
- 3)如果它的概率处于中间地带(在 \(1/n\) 到 \(0.5\) 之间),需要计算剩余类别的熵 \(H_\text{rest}\) 来确定临界点 \(p^*\),再判断它是减熵还是增熵
- 新补充:其他常用直观结论(比如 LLM 场景):
- 当一个类别很多得分布,且某个类别概率非常大时(比如大于 0.9),只要不是压低这个概率,压低其他任何概率都会降低熵
整体推导
Softmax 性质:调整单类的隐含前提
- 假设有 \(n\) 个类别,其 Logits 为
$$z_1, z_2, \dots, z_n$$- 通过 Softmax 计算出的概率分布为
$$P = (p_1, p_2, \dots, p_n), \\ p_i = \frac{e^{z_i}}{\sum e^{z_k}}$$
- 通过 Softmax 计算出的概率分布为
- 如果想要提升或压低类别 1 的概率 \(p_1\)(通常是通过改变 \(z_1\) 来实现)
- 根据 Softmax 的性质,压低类别 1 的概率前后,若假设其他类别的 Logits 没有变化,则 剩余类别 \(p_2, \dots, p_n\) 之间的相对比例会保持不变
- 也就是说,如果令剩余类别的总概率为 \(1 - p_1\),那么对于 \(j \ge 2\),有:
$$p_j = (1 - p_1) \cdot r_j$$- 其中 \(r_j = \frac{p_j}{1-p_1} = \frac{e^{z_j}}{\sum_{k=2}^n e^{z_k}}\) 是类别 \(j\) 在剩余类别中的相对占比,且满足
$$\sum_{j=2}^n r_j = 1$$
- 其中 \(r_j = \frac{p_j}{1-p_1} = \frac{e^{z_j}}{\sum_{k=2}^n e^{z_k}}\) 是类别 \(j\) 在剩余类别中的相对占比,且满足
- 在调整 \(p_1\) 的过程中,所有的 \(r_j\) 都是常数
- 因为调整 \(p_1\) 的过程中 \(p_j\) 也会发生变化
- 详细证明见附录
系统总熵的数学推导与分解
- 系统总熵(使用自然对数)定义为:
$$H(P) = -\sum_{i=1}^n p_i \ln p_i$$ - 将 \(p_1\) 单独剥离出来,并将 \(p_j = (1 - p_1) r_j\) 代入求和式中:
$$
\begin{align}
H(P) &= -p_1 \ln p_1 - \sum_{j=2}^n \left[ (1-p_1)r_j \ln\big((1-p_1)r_j\big) \right] \\
&= -p_1 \ln p_1 - (1-p_1) \sum_{j=2}^n r_j \big[ \ln(1-p_1) + \ln r_j \big]
\end{align}
$$ - 因为 \(\sum_{j=2}^n r_j = 1\),上式可以化简为:
$$H(P) = \underbrace{-p_1 \ln p_1 - (1-p_1)\ln(1-p_1)}_{\text{二元分类熵 } H_{binary}(p_1)} + (1-p_1) \underbrace{\left( -\sum_{j=2}^n r_j \ln r_j \right)}_{\text{剩余类别的内部熵 } H_\text{rest}}$$ - 令
$$H_\text{rest} = -\sum_{j=2}^n r_j \ln r_j$$ - 由于在调整 \(p_1\) 时 \(r_j\) 不变,所以 \(H_\text{rest}\) 是一个常数
- 注意:这里剩余内部熵是与 \(p_1\) 无关的,
- 此时,总熵被完美分解为一个关于 \(p_1\) 的函数:
$$H(p_1) = H_{binary}(p_1) + (1-p_1)H_\text{rest}$$
对 \(p_1\) 求导,寻找临界点
- 为了知道提升或压低 \(p_1\) 时熵怎么变,我们对 \(p_1\) 求导:
$$
\begin{align}
\frac{dH}{dp_1} &= \frac{d}{dp_1} \left[ -p_1 \ln p_1 - (1-p_1)\ln(1-p_1) + (1-p_1)H_\text{rest} \right] \\
&= -(\ln p_1 + 1) - (-1)(\ln(1-p_1) + 1) - H_\text{rest} \\
&= \ln(1-p_1) - \ln p_1 - H_\text{rest} = \ln\left(\frac{1-p_1}{p_1}\right) - H_\text{rest}
\end{align}
$$ - 令导数为 0,寻找熵的极值点(临界概率 \(p^*\)):
$$\ln\left(\frac{1-p^*}{p^*}\right) = H_\text{rest} \\
\frac{1-p^*}{p^*} = e^{H_\text{rest}} \\
p^* = \frac{1}{1 + e^{H_\text{rest}}}$$ - 由于二阶导数 \(\frac{d^2H}{dp_1^2} = -\frac{1}{p_1(1-p_1)} < 0\),所以总熵 \(H(p_1)\) 是一个严格的凹函数 ,在 \(p_1 = p^*\) 处取得全局最大值
分类讨论(核心结论)
- 根据推导,熵的变化完全取决于当前 \(p_1\) 与临界值 \(p^* = \frac{1}{1 + e^{H_\text{rest}}}\) 的大小关系
临界值 \(p^*\) 的物理意义
- \(H_\text{rest} \ge 0\),因此 \(e^{H_\text{rest}} \ge 1\),这意味着 \(p^*\) 永远在 \((0, 0.5]\) 之间
- 如果剩余 \(n-1\) 个类别分布极其不均(例如全集中在某一个类上),\(H_\text{rest} \to 0\),此时 \(p^* \to 0.5\)
- 如果剩余 \(n-1\) 个类别分布完全均匀 ,\(H_\text{rest} = \ln(n-1)\),此时 \(p^* = \frac{1}{1 + n - 1} = \frac{1}{n}\)
- 总结:
- \(p^*\) 的范围是 \([\frac{1}{n}, \frac{1}{2}]\)
- 它代表了让当前系统达到“最混乱状态”时,类别 1 应该占据的完美比例
情况一:当前 \(p_1 < p^*\) (该类别属于“弱势类别”)
- 此时导数 \(\frac{dH}{dp_1} > 0\)
- 提升该类别的概率:总熵会 增加
- 因为正在把概率从其他占据主导地位的类别中抽离,分给弱势类别,使得整体分布趋于均匀
- 压低该类别的概率:总熵会 减小
- 因为让弱势类别更弱,系统分布变得更加两极分化(尖锐)
情况二:当前 \(p_1 > p^*\) (该类别属于“强势类别”)
- 此时导数 \(\frac{dH}{dp_1} < 0\)
- 提升该类别的概率:总熵会 减小
- 因为该类别已经占据了超过临界值的比例,继续提升它会让系统迅速走向“一家独大”(One-hot 倾向),确定性增加,熵降低
- 压低该类别的概率:总熵会 增加
- 因为削弱一个强势类别,把概率释放给其他类别,会让整体分布重新走向均匀
情况三:当前 \(p_1 = p^*\) (该类别处于“最大熵状态”)
- 此时导数 \(\frac{dH}{dp_1} = 0\)
- 无论是提升还是压低该类别的概率,总熵都会 减小
- 因为此时系统已经处于(在固定其他类别相对比例前提下的)最大熵状态
附录:如果是类别数量为 100000 个,此时存在一个类别 p1 概率为 0.9,另一个类别概率为 p2,其他概率均匀分布,请问 p2 提升或下降对熵的影响是什么?
- 结论:在这种分布下,无论 \(p_2\) 当前具体是多少,提升 \(p_2\) 一定会增加总熵,下降 \(p_2\) 一定会减小总熵
场景的边界条件分析
- 已知总类别数为 \(N = 100,000\)
- \(p_1 = 0.9\)
- \(p_2\) 是我们要调整的类别
- 剩余 \(99,998\) 个类别均匀分布
- 因为所有概率之和必须为 1,所以 \(p_2\) 的取值范围被严格限制在:
$$0 \le p_2 \le 0.1$$ - 剩余 \(99,998\) 个类别共享剩下的概率,每个类别的概率为:
$$p_i = \frac{0.1 - p_2}{99,998} \quad (i \ge 3)$$
数学推导:为什么 \(p_2\) 永远是“弱势类别”?
- 根据本文推导的结论,判断提升 \(p_2\) 对熵的影响,核心在于比较 当前 \(p_2\) 与 临界点 \(p_2^*\) 的大小关系
临界点公式为:
$$p_2^* = \frac{1}{1 + e^{H_\text{rest}}}$$ - 需要计算在剥离 \(p_2\) 后,剩余 \(99,999\) 个类别(即 \(p_1\) 和那 \(99,998\) 个均匀类别)的内部相对熵 \(H_\text{rest}\)
计算相对概率
- 剥离 \(p_2\) 后,剩余类别的总概率为 \(1 - p_2\),它们的相对占比 \(r\) 为:
- \(p_1\) 的相对占比:\(r_1 = \frac{0.9}{1 - p_2}\)
- 剩余 \(99,998\) 个类别的相对占比之和:\(r_{others} = \frac{0.1 - p_2}{1 - p_2}\)
估算 \(H_\text{rest}\) 的最大值
- 因为 \(0 \le p_2 \le 0.1\),我们可以看看 \(r_1\) 的范围:
- 当 \(p_2 = 0\) 时,\(r_1 = 0.9 / 1 = 0.9\)
- 当 \(p_2 \to 0.1\) 时,\(r_1 \to 0.9 / 0.9 = 1.0\)
- 这说明,在剩余的 \(99,999\) 个类别中,\(p_1\) 占据了绝对的统治地位(相对占比在 \(90%\) 到 \(100%\) 之间)
- 这种高度集中的分布会导致 \(H_\text{rest}\) 非常小
- 可以计算出 \(H_\text{rest}\) 的理论最大值(发生在 \(p_2 = 0\) 时):
$$
\begin{align}
H_{rest_max} &= -0.9 \ln 0.9 - 99998 \times \left(\frac{0.1}{99998}\right) \ln\left(\frac{0.1}{99998}\right)\\
&= -0.9 \ln 0.9 - 0.1 \ln\left(\frac{0.1}{99998}\right)\\
&\approx 0.0948 + 0.1 \times 13.815 \approx 1.476
\end{align}
$$
计算临界点 \(p_2^*\) 的最小值
- 既然 \(H_\text{rest}\) 最大约为 \(1.476\),那么临界点 \(p_2^*\) 的最小值为:
$$p_{2_min}^* = \frac{1}{1 + e^{1.476}} \approx \frac{1}{1 + 4.37} \approx 0.186$$
结论
- 在 \(p_1=0.9\) 时,无论 \(p_2\) 怎么取值,它的临界点 \(p_2^*\) 至少是 \(0.186\)
- 但是,受限于 \(p_1 = 0.9\) 的客观事实,\(p_2\) 的实际值最大只能是 \(0.1\)
因此,存在绝对的不等式:
$$p_2 \le 0.1 < 0.186 \le p_2^*$$ - \(p_2\) 永远严格小于其临界点 \(p_2^*\)
- 在系统的视角下,\(p_2\) 绝对属于“弱势类别”(情况一)
- 因此,导数 \(\frac{dH}{dp_2} > 0\) 恒成立,提升 \(p_2\) 必然增熵,下降 \(p_2\) 必然减熵
直观物理意义:Softmax 的“按比例概率转移”机制
- 抛开复杂的数学公式,可以从 Softmax 的运作机制非常直观地理解这个现象
- 在这个系统中,存在一个绝对的“巨无霸” \(p_1 = 0.9\)
- 整个系统目前的熵是非常低的(因为非常确定,大概率就是类别 1)
- 当通过 Softmax 机制去提升 \(p_2\) 时,多出来的概率是从哪里来的?
- Softmax 的特性是按原比例从其他类别中抽取概率
- 因为 \(p_1\) 占了剩余概率的绝大部分(至少 90%),所以 \(p_2\) 提升所需的概率,绝大部分是从 \(p_1\) 身上“转移”来的
- 例如,让 \(p_2\) 增加 \(0.05\),\(p_1\) 可能会因此下降 \(0.045\),而那十万个小类别总共才下降 \(0.005\)
- 结果: 巨无霸 \(p_1\) 被削弱了,系统不再那么“一家独大”,分布变得更平缓了,因此系统的混乱度(熵)增加了
- Softmax 的特性是按原比例从其他类别中抽取概率
- 反之,如果压低 \(p_2\):
- \(p_2\) 吐出来的概率会按比例还给其他类别
- 同样,巨无霸 \(p_1\) 会吃掉这部分吐出来概率的 90% 以上
- 结果: \(p_1\) 从 \(0.9\) 变得更大(比如变成 \(0.95\)),系统变得更加极端和确定,因此系统的混乱度(熵)进一步减小了
附录:证明 \(r_j\) 与 \(p_1\) 无关
- 在神经网络或逻辑回归中,调整一个类别的概率,本质上是调整该类别对应的 Logit(未归一化的得分)
- 假设有 \(n\) 个类别,其 Logits 分别为 \(z_1, z_2, \dots, z_n\)
- 为了提升或压低类别 1 的概率 \(p_1\),只改变 \(z_1\) 的值 ,而保持其他类别的得分 \(z_2, \dots, z_n\) 不变
- 令剩余类别的指数和为一个常数 \(S_\text{rest}\):
$$S_\text{rest} = \sum_{k=2}^n e^{z_k}$$- 因为 \(z_2, \dots, z_n\) 没变,所以 \(S_\text{rest}\) 是一个常数
- 现在写出 Softmax 的概率公式:
- 1)类别 1 的概率 \(p_1\):
$$p_1 = \frac{e^{z_1}}{e^{z_1} + S_\text{rest}}$$ - 2)剩余所有类别的总概率 \(1 - p_1\):
$$1 - p_1 = \frac{S_\text{rest}}{e^{z_1} + S_\text{rest}}$$ - 3)任意其他类别 \(j\) (\(j \ge 2\)) 的概率 \(p_j\):
$$p_j = \frac{e^{z_j}}{e^{z_1} + S_\text{rest}}$$
- 1)类别 1 的概率 \(p_1\):
- 把 \(p_j\) 和 \(1 - p_1\) 代入前一节提到的公式 \(r_j = \frac{p_j}{1-p_1}\) 中:
$$r_j = \frac{ \frac{e^{z_j}}{e^{z_1} + S_\text{rest}} }{ \frac{S_\text{rest}}{e^{z_1} + S_\text{rest}} }$$ - 分母 \(e^{z_1} + S_\text{rest}\) 可以被约掉,于是得到
$$r_j = \frac{e^{z_j}}{S_\text{rest}} = \frac{e^{z_j}}{\sum_{k=2}^n e^{z_k}}$$ - 证毕!