技术博客

最大熵原理:softmax 为什么是指数族分布

第 22 / 147 篇 · 2025-06-30 · ai · 最大熵softmax指数族

神经网络的最后一层把任意实数打分 $z_i$ 变成概率,用的永远是 $\mathrm{softmax}(z)_i=e^{z_i}/\sum_j e^{z_j}$。为什么偏偏是指数?为什么不用平方、倒数或者别的单调函数做归一化?这问题问得理直气壮,答案也真的存在,而且相当深刻:在给定期望约束下,指数族是唯一"不引入额外倾向"的分布。这就是 Jaynes 的最大熵原理,softmax 是它的一个特例。

问题的提法:约束之下,越"无主见"越好

设离散变量取值 $i=1,\dots,K$,每个取值有个"特征" $f(i)$(在 softmax 场景就是打分 $z_i$)。我们只知道分布应满足期望约束

$$ \sum_i p_i f(i)=\mu,\qquad \sum_i p_i=1,\qquad p_i\ge0, $$

除此之外一无所知。满足约束的分布有无穷多个,选哪个?Jaynes 的原则:选香农熵最大的那个,

$$ \max_p\ H(p)=-\sum_i p_i\ln p_i. $$

把 softmax 的问题对号入座:神经网络的 logits $z_i$ 就是特征 $f(i)$(差个符号),"分布应当反映打分"这句话的数学化就是固定 $\mathbb{E}_p[z]$——除此以外我们不想声称任何关于输出结构的先验。问题的全部假设就这么多,剩下的交给变分法。

熵度量分布的"不确定程度",最大熵就是在满足已知约束的前提下尽量不假设任何额外结构——这是一个防止过拟合先验的决策原则:除了你明确声明知道的(均值约束),其余一概保持最大限度的中立。

这个原则的认识论色彩值得停一秒:它不是"自然界偏爱高熵"的物理断言,而是关于推断者该持什么立场的逻辑断言。Jaynes 的原话大意是:最大熵分布是"只由已知信息决定、对未知保持最大程度无知"的唯一自洽选择。你当然可以选低熵分布,但那等价于声称你知道一些你没有说出来的东西——在推断的记账上这是作弊。

拉格朗日推导:指数形式自己长出来

对上面的约束优化写拉格朗日函数(不等式约束先不管,解会自然满足)。熵函数在 $p_i\to0$ 时斜率趋于无穷,最优解内部化,所以不等式约束确实可以安全地搁置:

$$ \mathcal{L}(p,\lambda,\nu)=-\sum_i p_i\ln p_i-\lambda\Big(\sum_i p_i f(i)-\mu\Big)-\nu\Big(\sum_i p_i-1\Big). $$

对每个 $p_i$ 求偏导并置零:

$$ \frac{\partial\mathcal{L}}{\partial p_i}=-\ln p_i-1-\lambda f(i)-\nu=0 \ \Rightarrow\ \ln p_i=-1-\nu-\lambda f(i), $$

即

$$ p_i=\exp\big(-1-\nu-\lambda f(i)\big)=\frac{1}{Z(\lambda)}\,e^{-\lambda f(i)},\qquad Z(\lambda)=\sum_i e^{-\lambda f(i)}, $$

其中归一化常数 $Z$ 由 $\sum_i p_i=1$ 自动确定,$\lambda$ 由期望约束 $\sum_i p_i f(i)=\mu$ 唯一确定(下一段说这个唯一性)。指数形式不是被选择的,是被推导出来的——它是"熵的对数导数是 $\ln p+1$"这个微积分事实的直接产物。把 $f(i)=-z_i$(打分即负能量)代回,$p_i\propto e^{z_i}$,就是 softmax。

物理系同学会看到同一件事的另一张面孔:固定平均能量 $\langle E\rangle$ 的最大熵分布是玻尔兹曼分布 $p_i\propto e^{-E_i/kT}$。softmax 就是打分空间上的玻尔兹曼分布,温度参数的地位也随之清楚:$p_i\propto e^{z_i/T}$ 中的 $T$ 是约束强度的倒数——$T$ 小等价于拉格朗日乘子 $\lambda=1/T$ 大,均值约束勒得紧,分布被迫集中到高分选项;$T\to\infty$ 时约束松弛,分布退回最大熵的无约束解:均匀分布。采样温度的全部行为都能从"约束松紧"这一件事推出来。

多约束推广与约束账本

多个约束的推广没有新东西:给定 $K$ 个特征函数 $f_1,\dots,f_K$ 的期望 $\mu_1,\dots,\mu_K$,同样的推导给出 $p_i\propto\exp(-\sum_k\lambda_k f_k(i))$——每声明一条已知信息,分布就多一个指数因子。从这个角度看,softmax 是"只声明了打分均值"的最简情形;再声明方差,分布的形状就会向高斯型偏移。约束清单与分布形态之间是一一对应的账本。

这个账本是双向可查的:看到一个指数族分布,可以反推它"假设了什么"——每项因子对应一条被声明的均值约束。读别人的模型设计时,先问"它声明了哪些约束",比问"它用了什么形式"更接近本质。

唯一性与对偶:为什么这个解可以放心用

两个保证让最大熵解不只是"一个"解而是"那个"解。其一,$H(p)$ 是严格凹函数,约束集(概率单纯形与线性约束的交)是凸集,凹函数在凸集上的极大值唯一。其二,对偶结构给出计算路径:定义对数配分函数

$$ A(\lambda)=\ln Z(\lambda)=\ln\sum_i e^{-\lambda f(i)}, $$

直接求导验证 $\frac{dA}{d\lambda}=-\sum_i p_i f(i)=-\mu$——对数配分函数的导数就是约束期望,所以求 $\lambda$ 就是解方程 $-A'(\lambda)=\mu$。再求二阶导数得 $A''(\lambda)=\mathrm{Var}_p[f]\ge0$,$A$ 是凸函数,方程有唯一解且牛顿法几步就到。这套"自然参数 $\lambda$ ↔ 均值参数 $\mu$,对数配分函数搭桥"的结构就是指数族分布的标准理论,softmax 是其离散版,高斯分布(固定均值方差的最大熵分布)是其连续版——最大熵原理把一大堆"常用分布"统一解释成不同约束下的唯一中立解。

对偶关系还能再压成一句话:最大熵问题的拉格朗日对偶正是指数族的最大似然——给定数据的均值统计量,找最贴合的指数族成员。于是"最大熵"与"最大似然"这对看似无关的原则在指数族上握手:一个从"保持中立"出发,一个从"贴合数据"出发,在同一个解相遇。这解释了交叉熵那篇留下的一个伏笔:为什么 MLE 训练出的条件分布总是长成 softmax 的样子。

最大熵推导链:均值约束 + 中立原则 → 拉格朗日置零 → 指数族唯一解 约束:Σpᵢf(i)=μ + Σpᵢ=1,pᵢ≥0 max H(p) = −Σpᵢ ln pᵢ 除约束外不预设倾向 pᵢ = e^(−λf(i))/Z f=−z 即 softmax 温度 = 约束强度倒数 T→0:λ→∞,分布尖锐到 argmax T→∞:λ→0,退回均匀(最大熵) 对偶结构(指数族通用) A(λ)=ln Z,A′(λ)=−μ 解出 λ A″(λ)=Var[f]≥0:凸 ⇒ 解唯一

数值验证:解约束方程确实还原 softmax

固定 $K$ 个打分 $z$,给定目标均值 $\mu$,解 $-A'(\lambda)=\mu$ 看解出的分布是否正好是 $\mathrm{softmax}(z/T)$。注意我们这里绕开了"先验地假设 softmax 形式":最大熵解的形式是从拉格朗日置零推出来的,数值验证只是确认推导没写错:

import numpy as np
from scipy.optimize import brentq

z = np.array([2.0, 1.0, 0.1, -1.0])
mu = 1.2                      # 目标约束:Σ pᵢ zᵢ = μ

def constraint(lam):
    w = np.exp(-lam * z)
    p = w / w.sum()
    return -(p * z).sum() + mu   # A'(λ) + μ = 0

lam = brentq(constraint, -10, 10)
w = np.exp(-lam * z); p_maxent = w / w.sum()
p_softmax = np.exp(lam * z) / np.exp(lam * z).sum()  # T=1/λ 的 softmax
assert np.allclose(p_maxent, p_softmax)
print(lam, p_maxent)           # λ≈0.46,分布与 softmax(λz) 完全一致

顺带验证熵的最优性:任选另一个满足同一均值约束的分布(比如对 $p_{\text{maxent}}$ 做保持均值的扰动),其熵必然严格小于最大熵解——这正是"中立性"的数值含义。

相对熵版本与连续情形:最大熵原理的推广面

上面推导里熵是相对于"均匀"度量的。更一般的提法带一个基准分布 $q$:最小化相对熵

$$ \min_p\ D_{\mathrm{KL}}(p\|q)\qquad\text{s.t.}\ \sum_i p_i f(i)=\mu, $$

同样的拉格朗日步骤给出 $p_i\propto q_i\,e^{-\lambda f(i)}$——在先验 $q$ 上做指数倾斜(exponential tilting)。均匀先验退化为普通最大熵;$q$ 取参考模型时,这个形式就是 RLHF 里 KL 惩罚项下最优策略的形状 $\pi^*\propto\pi_{\mathrm{ref}}\,e^{r/\beta}$(DPO 推导的起点,本系列对齐章节会用到)。最大熵原理与 KL 惩罚在这里是同一块硬币。

连续情形同样成立:固定均值与方差的最大熵分布是高斯,固定正值性与均值的是指数分布,固定支撑集无其他约束的是均匀分布。常用分布表几乎就是一张"约束 ↔ 最大熵解"的对照表。这把 softmax 放进了一个更大的家族图景:它不是孤立的工程选择,而是指数族在离散打分场景的成员。

这套视角解释了什么

回到开头的问题:为什么不用别的单调函数归一化?比如 $p_i\propto z_i^2$ 或 $p_i\propto|z_i|$。它们都能把非负打分归一化成概率,但都隐式注入了额外结构——平方让分布对打分的尺度二次敏感,等价于声明了"我知道得分差应该被平方放大",而这超出了"只知道均值"的信息集。最大熵原理给出的是一个认识论上的最小承诺:指数族是你声明"只知道期望"时唯一诚实的分布;换任何别的形式,你都在假装知道更多。

还有一个更技术性的理由补充:指数映射把 $(-\infty,\infty)$ 的打分映到 $(0,\infty)$,恰好覆盖概率所需的正值性,且处处光滑可微($\frac{\partial p_i}{\partial z_j}=p_i(\delta_{ij}-p_j)$,softmax 雅可比那篇的干净结果正来自 exp 的导数是它自己)。多项式映射连"任意实数打分"这个输入域都处理不了——softmax 的输入自由度与 exp 的值域是天生一对。

这一视角还统一了大模型里的多处设计:注意力权重是 score 在均值约束下的最大熵分布;logit 上温度采样是约束强度的调节;能量模型 $p\propto e^{-E(x)}$ 是同一形式在连续空间的翻版;policy gradient 里熵奖励项 $\beta H(\pi)$ 则是在目标函数里显式写回"保持中立"的拉力。

再收一个反向应用的例子:最大化对数似然本身也可以读成最大熵的对偶。给定数据的经验均值约束(比如分类器要匹配各类别的统计量),对偶问题的解正是指数族模型——所以"用 softmax 做分类头 + 交叉熵训练"这对组合不是两样凑巧搭配的工具,而是同一个变分问题的原问题与对偶问题。这条对偶链往前还通向逻辑回归的指数族身份:广义线性模型的标准连接函数,全是最大熵解的自然参数。

小结

softmax 的指数形式来自最大熵原理:在期望约束下最大化香农熵,拉格朗日置零直接长出 $p_i\propto e^{-\lambda f(i)}$,对数配分函数的凸性保证解唯一,温度是约束强度的倒数。换任何其他归一化函数都等价于声明了超出已知信息的结构。

这一篇还顺手埋下了两条后文的线:KL 惩罚下的最优策略形状 $\pi^*\propto\pi_{\mathrm{ref}}e^{r/\beta}$(RLHF 章节的入口),以及指数族的"自然参数-均值参数"对偶(信息几何的入口)。至此第二章的概率工具就位了——交叉熵/KL 说明训练目标是什么,困惑度给它可读的单位,最大熵解释输出层的形式。下一章进入 Tokenizer:一切文本进入模型之前的第一道压缩。