一文搞透交叉熵、sigmoid 与 softmax:从信息熵到神经网络的损失函数

深度学习中,交叉熵损失函数几乎无处不在——分类任务用它,排序任务用它,甚至连目标检测也在用。但你是否有过这样的困惑:

sigmoid 和 softmax 到底有什么区别?我应该在什么时候用哪个? KL 散度又是什么?它和交叉熵有什么关系?

这篇文章,我打算从信息论的基本概念出发,一步步把这些知识点串联起来。不会堆砌公式——每一步推导,我都会先给出直觉解释,再给出数学表达,确保你"知其然,更知其所以然"。


1. 从"惊讶程度"到信息量

让我们从一个最朴素的例子开始。

假设明天有 50% 的概率下雨,有 50% 的概率不下雨。如果天气预报说"明天大概会下雨",你会觉得:嗯,这句话没什么信息量——因为下雨与否本来就很随机,说不说都一样。

反过来,如果天气预报说"明天一定会下雨"(100% 概率),你才会真正感到意外:哦,这倒是条有用的消息。

这个"意外程度",就是信息量的直观来源。

信息论给出了它的数学定义——对于一个概率为 $p$ 的事件,它的信息量(Information)为:

$$I(p) = -\log(p)$$

几个关键性质:

  • $p=1$(确定事件)→ $I=0$,不意外,没有信息
  • $p\to 0$(极小概率事件发生)→ $I\to\infty$,极度意外,信息量巨大
  • 独立事件的信息量可加:两件独立的事同时发生,总信息量等于各自信息量之和

💡 思考:为什么对数函数恰好满足这些性质?因为对数满足 $\log(ab)=\log(a)+\log(b)$,正好对应"独立事件可加"这一信息论基本假设。这不是巧合,而是数学与直觉的完美契合。


2. 信息熵:一个分布的"平均惊讶程度"

知道了单个事件的信息量,现在我们来看整个概率分布的平均信息量——这就是信息熵(Entropy)。

对于离散概率分布 $P=\{p_1,p_2,\ldots,p_K\}$:

$$H(P) = -\sum_{i=1}^{K} p_i \log p_i$$

或者写成期望的形式:

$$H(P) = \mathbb{E}_{x\sim P}[I(x)] = \mathbb{E}_{x\sim P}[-\log P(x)]$$

直观理解:信息熵衡量的是"从这个分布中随机抽样,期望得到的信息量"。它描述的是这个分布的不确定性混乱程度

两个极端例子:

  • 抛一枚均匀硬币($p=0.5, 0.5$):$H = -0.5\log 0.5 - 0.5\log 0.5 = \log 2 \approx 0.693$
    • 结果最不确定,熵最大
  • 抛一枚永远正面朝上的硬币($p=1, 0$):$H = -1\cdot\log 1 - 0\cdot\log 0 = 0$
    • 结果完全确定,熵为零

我的理解:熵不是"混乱",而是"不可预测性"。一个均匀分布是最难预测的(你需要抛硬币决定),所以熵最大;一个确定分布是最容易预测的,所以熵为零。


3. KL 散度:两个分布之间的距离(但不是距离)

现在我们有了信息熵,接下来引入一个更重要的概念——KL 散度(Kullback-Leibler Divergence)。

KL 散度用于衡量两个概率分布 $P$ 和 $Q$ 之间的差异:

$$D_{KL}(P\|Q) = \sum_{i} p_i \log\frac{p_i}{q_i} = \sum_{i} p_i(\log p_i - \log q_i)$$

直观理解:KL 散度衡量的是——如果我们用分布 $Q$ 来编码真实分布 $P$ 的信息,平均需要多付出多少额外的信息量(相对于用 $P$ 本身来编码)。

重要性质

  • 非负性(Gibbs 不等式):$D_{KL}(P\|Q) \geq 0$,当且仅当 $P=Q$ 时等于零
  • 非对称性:$D_{KL}(P\|Q) \neq D_{KL}(Q\|P)$,因此 KL 散度不是严格意义上的"距离"(距离需要满足对称性)

⚠️ 这里有一个常见的误区:很多人把 KL 散度理解为"两个分布之间的距离",但它不是对称的——从 $P$ 到 $Q$ 的差异,不等于从 $Q$ 到 $P$ 的差异。这在机器学习中很重要,比如 VAE 和 ELBO 损失中用的是 $D_{KL}(P\|Q)$ 而非 $D_{KL}(Q\|P)$,方向不能随意交换。


4. 交叉熵:KL 散度的"兄弟"

把 KL 散度展开:

$$D_{KL}(P\|Q) = \sum_{i} p_i \log p_i - \sum_{i} p_i \log q_i$$

定义第一项为 $H(P)$(真实分布的信息熵),第二项为:

$$H(P, Q) = -\sum_{i} p_i \log q_i$$

这就是交叉熵(Cross-Entropy)。它与 KL 散度的关系为:

$$\boxed{H(P, Q) = H(P) + D_{KL}(P\|Q)}$$

在机器学习中,$P$ 是真实分布(Ground Truth),$Q$ 是模型预测的分布(Model Prediction)。由于 $H(P)$ 是不依赖于模型的常数(它只由真实标签决定),所以:

$$\text{最小化 } H(P, Q) \quad \Longleftrightarrow \quad \text{最小化 } D_{KL}(P\|Q)$$

这便是交叉熵损失函数的本质:它度量的是模型预测分布与真实分布之间的差异,最小化交叉熵等价于最小化 KL 散度。


5. sigmoid 和 softmax:两种概率化的方式

铺垫了这么多,终于要讲 sigmoid 和 softmax 了。

在二分类问题中,模型的输出是一个实数 $z$(称为 logits),我们需要把它转换为一个概率值 $\hat{y}\in[0,1]$,表示"属于正类的概率"。这就有两种经典的转换方式。

5.1 sigmoid

定义

$$\sigma(z) = \frac{1}{1+e^{-z}}$$

性质

  • 输出范围:$(0,1)$
  • 导数有一个优美的形式:$\sigma'(z) = \sigma(z)(1-\sigma(z))$,这个形式让反向传播的计算非常简洁
  • 单调递增:以 $(0, 0.5)$ 为中心

5.2 softmax

softmax 是 sigmoid 在多分类上的自然推广。

定义:对于 $K$ 维向量 $\mathbf{z}=(z_1,\ldots,z_K)$:

$$\text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}$$

性质

  • 输出为 $K$ 维向量,每个分量在 $(0,1)$ 之间
  • 所有分量之和等于 1——天然满足概率分布的归一性
  • 数值稳定性技巧:当 $z_i$ 较大时 $e^{z_i}$ 可能溢出,实际实现中通常用 $\text{Softmax}(z_i) = \frac{e^{z_i-\max(\mathbf{z})}}{\sum e^{z_j-\max(\mathbf{z})}}$ 避免溢出

5.3 两者的关系与区别

数学关系:当 $K=2$ 时,softmax 退化为 sigmoid。

设 $z_1 = z, z_2 = 0$,则:

$$\text{Softmax}(z_1) = \frac{e^z}{e^z + e^0} = \frac{1}{1+e^{-z}} = \sigma(z)$$

适用场景的决定性区别

sigmoid softmax
类别关系 各输出相互独立 各输出相互竞争(和为1)
典型任务 二分类、多标签分类 多分类(互斥分类)
多标签场景 ✅ 可以同时激活多个标签 ❌ 所有类别概率之和必须为1,无法同时输出多个"正类"

举一个直观的例子:

假设我们要识别一张图里有哪些物体(狗、猫、树、建筑)。一张图里可能同时有狗和猫,所以应该用 sigmoid 对每个类别分别做二分类;如果我们是要判断这张图属于哪个类别(动物 / 风景 / 建筑,三选一),则用 softmax——因为正确答案只有一个。


6. 二分类交叉熵损失(BCE)

现在把 sigmoid 和信息论串起来,推导二分类交叉熵损失。

对于单个样本,真实标签 $y \in \{0, 1\}$,模型预测 $\hat{y} = \sigma(z)$,交叉熵损失为:

$$\mathcal{L}_{BCE} = -[y \log \hat{y} + (1-y)\log(1-\hat{y})]$$

从最大似然估计推导

假设数据服从伯努利分布:$P(y|x) = \hat{y}^y (1-\hat{y})^{1-y}$

对数似然:$\log P = y\log\hat{y} + (1-y)\log(1-\hat{y})$

负对数似然(NLL)恰好就是 BCE 损失。因此,最小化 BCE = 最大化似然估计

批量形式:

$$\mathcal{L}_{BCE} = -\frac{1}{N}\sum_{n=1}^{N}\left[y^{(n)}\log\hat{y}^{(n)} + (1-y^{(n)})\log(1-\hat{y}^{(n)})\right]$$


7. 多分类交叉熵损失(CCE)

对于 $K$ 分类问题,真实标签 $\mathbf{y}$ 为 one-hot 向量(只有一个位置为 1,其余为 0),模型输出 $\hat{\mathbf{y}} = \text{Softmax}(\mathbf{z})$。

交叉熵损失为:

$$\mathcal{L}_{CCE} = -\sum_{k=1}^{K} y_k \log \hat{y}_k$$

由于 $\mathbf{y}$ 是 one-hot,这个求和实际只保留了一项——真实类别 $c$ 对应的预测概率的负对数:

$$\mathcal{L}_{CCE} = -\log \hat{y}_c$$

💡 有意思的地方:多分类 CCE 损失的物理含义非常清晰——它就是"正确类别的预测概率"的负对数。我们的目标就是让正确类别的概率尽可能接近 1(此时 $\log$ 接近 0,损失为 0)。

批量形式:

$$\mathcal{L}_{CCE} = -\frac{1}{N}\sum_{n=1}^{N} \log \hat{y}_{c^{(n)}}^{(n)}$$


8. 为什么分类任务用交叉熵而不是 MSE?

这是一个经典面试题。答案藏在梯度特性里。

考虑二分类场景下的梯度:

$$\frac{\partial \mathcal{L}_{BCE}}{\partial z} = \hat{y} - y$$

这个梯度有一个极其简洁的形式——预测值与真实值的差

而如果用均方误差(MSE):

$$\mathcal{L}_{MSE} = \frac{1}{2}(y-\hat{y})^2, \quad \frac{\partial \mathcal{L}_{MSE}}{\partial z} = (\hat{y}-y)\cdot \hat{y}(1-\hat{y})$$

M SE 的梯度中多了一个 $\hat{y}(1-\hat{y})$ 因子。当 $\hat{y}$ 接近 0 或 1 时(即模型已经很有信心时),这个因子趋近于 0,导致梯度消失,模型几乎无法继续学习

而 BCE 的梯度中,没有这个衰减因子——即使模型已经很有信心,梯度依然有合理的量级。交叉熵的这个特性,使得它成为分类任务的首选。

梯度 $\frac{\partial \mathcal{L}}{\partial z}$ 梯度消失问题
交叉熵 + sigmoid $\hat{y}-y$(简洁、无衰减) ✅ 不存在
MSE + sigmoid $(\hat{y}-y)\cdot\hat{y}(1-\hat{y})$ ❌ 预测置信时梯度趋近 0

9. 总结:一条清晰的知识链路

让我们把整篇文章的知识链路串起来:

信息量: -log(p)
    ↓ 期望平均
信息熵: H(P) = -Σ p·log(p)
    ↓ 衡量两分布差异
KL散度: D_KL(P||Q) = Σ p·log(p/q) = H(P,Q) - H(P)
    ↓ 展开,固定P则H(P)为常数
交叉熵: H(P,Q) = -Σ p·log(q)
    ↓ 用于分类
交叉熵损失函数
    ├── 二分类 → BCE + sigmoid (sigmoid将logit映射到[0,1])
    └── 多分类 → CCE + softmax (softmax将logits映射到概率分布)
                    ↑
              K=2时 softmax = sigmoid

最后,一句话收尾

sigmoid 和 softmax 是将神经网络的原始输出(logits)转化为概率分布的两种方式,它们决定了我们能否用交叉熵损失来衡量"预测的不确定性"。而交叉熵损失之所以有效,根本原因在于它度量的是"真实分布"与"预测分布"之间的 KL 散度——最小化它,就是在让模型的预测越来越接近真实标签。


如果你觉得这篇文章有帮助,欢迎关注微信公众号「yellowswimming」,获取更多 AI 与机器学习的原创内容。

最后修改:2026 年 05 月 09 日
如果觉得我的文章对你有用,请随意赞赏