从熵到交叉熵:逻辑回归损失函数的信息论推导

引言:为什么逻辑回归的损失叫「交叉熵」
在机器学习的自学路径中,很多人第一次接触逻辑回归时都会遇到一个疑问:为什么它的损失函数被称为「交叉熵损失」(Cross-Entropy Loss)?这个名字听起来抽象,而公式本身又常常被当作一个需要死记硬背的结果。
最近,一位 Reddit 用户在其机器学习自学系列笔记中,系统梳理了从信息论中的熵(Entropy)出发,经过 KL 散度(KL Divergence),最终推导出交叉熵,并解释了逻辑回归损失函数命名由来的完整逻辑链。这个视角值得所有正在学习 ML 基础的人参考——因为它把一个看似孤立的公式,还原成了一个「显而易见的必然结果」。
信息熵:理解不确定性的度量
要理解交叉熵损失,必须先理解熵。在信息论中,熵 $H(p)$ 衡量的是一个概率分布 $p$ 的不确定性,也可以理解为对来自该分布的信息进行最优编码所需的平均比特数。
信息熵的概念由克劳德·香农(Claude Shannon)在1948年的奠基性论文《通信的数学理论》(A Mathematical Theory of Communication)中首次提出。这篇发表在贝尔系统技术期刊上的论文被广泛认为是信息时代的奠基文献,它将热力学中的熵概念引入通信领域,建立了信息的定量度量方法。据传,香农在命名时曾咨询冯·诺依曼,后者建议使用「熵」这个名字——因为「没人真正理解熵是什么,所以在辩论中你总能占上风」。
其数学定义为 $H(p) = -\sum_i p(x_i) \log p(x_i)$,其中 $p(x_i)$ 是事件 $x_i$ 发生的概率。这个公式的直觉来源于编码理论:如果一个事件发生的概率很高,我们只需要很少的比特就能编码它(就像摩尔斯电码中,常用字母用短编码);而罕见事件则需要更多比特。熵就是所有可能事件所需编码长度的加权平均。在实际编码中,哈夫曼编码(Huffman Coding)就是熵概念的直接应用:它根据符号频率构建最优前缀码,使高频符号用短码、低频符号用长码,整体平均码长趋近于信息熵给出的理论下界。以对数底为2时,单位为比特(bit);以自然对数为底时,单位为奈特(nat)。在机器学习中通常使用自然对数,因为它与最大似然估计的数学形式更契合——取对数后连乘变求和,而自然对数的导数形式最为简洁。
分布越确定(比如一个几乎必然发生的事件),熵越低,所需编码越短;分布越随机(比如均匀分布),熵越高。具体来说,对于一个二元随机变量,当 $p=0.5$ 时熵达到最大值1 bit,而当 $p$ 趋近于0或1时熵趋近于0。这个概念是后续所有推导的地基。
这位作者特别强调了学习顺序的重要性:先啃下熵的笔记,再回头看逻辑回归的推导,一切都会豁然开朗。 如果跳过信息论直接背损失函数,往往只能记住形式而无法理解本质。
KL散度:衡量分布差异的代价
在熵的基础上,KL 散度 $D(p, q)$ 描述的是:当你用一个「错误」的分布 $q$ 去编码实际服从分布 $p$ 的数据时,相比使用正确分布 $p$,你多浪费了多少比特。
KL散度(Kullback-Leibler Divergence)由Solomon Kullback和Richard Leibler在1951年提出,最初称为「相对熵」或「信息增益」。其数学形式为 $D_{KL}(p | q) = \sum_i p(x_i) \log \frac{p(x_i)}{q(x_i)}$。其非对称性意味着 $D(p,q) \neq D(q,p)$,这在实践中有重要含义。当我们写 $D(p | q)$ 时,$p$ 是真实分布,$q$ 是近似分布——这种「前向KL散度」倾向于让 $q$ 覆盖 $p$ 的所有可能性(mode-covering),是变分推断和监督学习中最常用的形式。相反,$D(q | p)$(反向KL散度)倾向于让 $q$ 集中在 $p$ 的某个峰上(mode-seeking),常用于生成模型训练,例如GAN的判别器目标就隐含了反向KL散度的优化。正因为这种非对称性,KL散度不满足距离度量的三角不等式,严格来说只能称为「散度」而非「距离」。
KL散度在现代机器学习中有着极为广泛的应用,远不止交叉熵损失的推导。在变分自编码器(VAE)中,ELBO(证据下界)的推导直接依赖于KL散度将后验分布约束为接近先验分布;在知识蒸馏(Knowledge Distillation)中,学生网络通过最小化与教师网络输出分布的KL散度来学习「软标签」中包含的类间关系信息;在强化学习中,TRPO和PPO算法通过限制策略更新前后的KL散度来保证训练稳定性。
换句话说,KL 散度衡量的是两个分布之间的「距离」(虽然它不是严格意义上的距离度量,因为不对称)。它永远非负,当且仅当 $p = q$ 时为零——这一性质可以通过Jensen不等式严格证明,利用了对数函数的凹性。这一点直觉非常关键——它意味着任何偏离真实分布的预测都会带来「额外的成本」。
交叉熵公式:熵与KL散度的统一
有了前两个概念,交叉熵的定义就变得清晰了。核心恒等式如下:
$$H(p, q) = D(p, q) + H(p)$$
这个公式的含义是:交叉熵 = 真实分布本身的熵 + 使用错误分布带来的额外浪费(KL 散度)。
展开来看,交叉熵 $H(p,q) = -\sum_i p(x_i) \log q(x_i)$,它衡量的是:如果真实数据服从分布 $p$,但我们使用基于分布 $q$ 设计的编码方案,平均每个符号需要多少比特。这个值永远大于等于 $H(p)$(即使用正确分布编码所需的比特数),差值恰好就是KL散度。
由于 $H(p)$ 是数据本身固有的、与模型无关的常数,因此在训练模型时,最小化交叉熵 $H(p,q)$ 本质上就等价于最小化 KL 散度 $D(p,q)$——也就是让模型的预测分布 $q$ 尽可能贴近真实分布 $p$。这个等价关系在数学上是精确的,不涉及任何近似。
这为交叉熵作为损失函数提供了坚实的理论动机:我们惩罚模型「把概率质量放错了位置」的行为。
从最大似然估计推导逻辑回归损失
整个推导链中最关键的部分,是证明最大似然与交叉熵损失的等价性:
最大化标签的似然(Maximum Likelihood)等价于最小化逻辑回归的损失函数 $J(w)$。
最大似然估计(MLE)是由英国统计学家罗纳德·费舍尔(Ronald Fisher)在1920年代系统化发展的参数估计方法。其核心思想是:在所有可能的参数值中,选择使观测数据出现概率最大的那一个。费舍尔证明了MLE在正则条件下具有三个渐近最优性质:一致性(随着样本量增加,估计值趋近真实值)、渐近正态性(估计值的分布趋近正态分布)、渐近有效性(在所有一致估计量中方差最小)。这些性质为交叉熵损失在大样本情况下的良好表现提供了理论保证。
对于逻辑回归,假设有 $N$ 个独立同分布的样本 $(x_i, y_i)$,其中 $y_i \in {0, 1}$,模型预测 $P(y=1|x) = \sigma(w^T x)$(其中 $\sigma$ 是sigmoid函数),则整个数据集的似然为 $L(w) = \prod_{i=1}^N [\hat{y}_i]^{y_i} [1-\hat{y}_i]^{1-y_i}$。这个伯努利分布的连乘形式取对数后,正好得到交叉熵的求和形式。
推导的逻辑链条如下:
- 首先,将整个数据集的似然(likelihood)写成各样本预测概率的连乘积——这基于独立同分布(i.i.d.)假设,联合概率等于各边缘概率之积;
- 对似然取对数,将连乘转化为求和(对数似然,log-likelihood)——对数变换是单调递增的,不改变极值点位置,但将乘法转化为加法使计算和求导更方便;
- 取对数似然的负值,结果恰好就是逻辑回归的交叉熵损失函数 $J(w) = -\frac{1}{N}\sum_{i=1}^N [y_i \log \hat{y}_i + (1-y_i) \log(1-\hat{y}_i)]$。
换句话说,交叉熵损失并不是某个人随手取的名字,而是直接从最大似然估计中推导出来的自然结果。信息论视角和概率论视角在这里完美汇合。
逻辑回归中sigmoid函数的信息论意义
逻辑回归使用sigmoid函数 $\sigma(z) = \frac{1}{1+e^{-z}}$ 作为激活函数并非偶然选择。sigmoid函数最早由比利时数学家Pierre François Verhulst在1838年提出,用于描述人口增长的逻辑斯谛方程,后来在1944年由Joseph Berkson引入统计学中的logit模型。
从指数族分布的角度看,伯努利分布属于指数族,其自然参数(natural parameter)与均值参数之间的映射恰好是sigmoid函数。具体来说,如果将伯努利分布写成指数族的标准形式 $p(y|\eta) = \exp(\eta y - \log(1+e^\eta))$,则均值 $\mu = E[y] = \sigma(\eta)$。这意味着逻辑回归实际上是广义线性模型(GLM)框架中,响应变量服从伯努利分布时的特例——它是该框架下的「规范链接函数」(canonical link function)选择。
sigmoid函数将线性预测值 $w^T x$ 从 $(-\infty, +\infty)$ 映射到 $(0, 1)$ 区间,使其可以被解释为概率。配合交叉熵损失,sigmoid输出的梯度形式非常简洁:$\frac{\partial J}{\partial w} = (\hat{y} - y) \cdot x$,这使得梯度下降的实现既高效又直观。这个简洁的梯度形式并非巧合——正是因为选择了规范链接函数,使得充分统计量与参数的耦合形式最为简单,梯度才呈现出「预测误差乘以输入」这种优雅的结构。
数值稳定性:从理论到工程的桥梁
在实际实现中,直接计算 $\log(\sigma(x))$ 会在 $x$ 取极端值时产生严重的数值问题。当 $x$ 是很大的负数时,$\sigma(x)$ 趋近于0,$\log(0)$ 导致负无穷或NaN;当 $x$ 是很大的正数时,$e^{-x}$ 下溢为0,精度丢失。现代深度学习框架通过条件分支来处理这一问题:当 $x>0$ 时使用 $\log \sigma(x) = -\log(1+e^{-x})$;当 $x<0$ 时使用 $\log \sigma(x) = x - \log(1+e^x)$。PyTorch中的 F.binary_cross_entropy_with_logits 和 nn.CrossEntropyLoss 都内置了这种数值稳定的实现,这也是为什么实践中推荐直接传入logits而非经过sigmoid/softmax后的概率值。
理解命名由来与死记公式的区别
对于自学者而言,理解「命名由来」与「死记公式」是两种完全不同的学习状态。
当你理解了 $H(p,q) = D(p,q) + H(p)$,并且明白 KL 散度代表「用错分布浪费的比特」之后,逻辑回归的推导就不再是一个需要背诵的公式,而是变成了「惩罚模型在错误位置放置概率质量」的必然结果。
这种从信息论到概率论、再到具体算法的贯通式理解,正是构建扎实机器学习基础的关键。它让分散的知识点连成一条完整的逻辑主线。
交叉熵在深度学习中的推广
在深度学习中,交叉熵损失的应用远超二分类的逻辑回归。对于多分类问题,交叉熵推广为 $H(p,q) = -\sum_{c=1}^C y_c \log(\hat{y}_c)$,其中 $C$ 是类别数,$y_c$ 是one-hot编码的真实标签,$\hat{y}_c$ 是softmax函数输出的预测概率。Softmax函数 $\sigma(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}$ 是sigmoid函数在多类别情况下的自然推广——当类别数 $C=2$ 时,softmax退化为sigmoid。
在现代深度学习框架(如PyTorch的CrossEntropyLoss)中,通常将softmax和交叉熵合并计算以提高数值稳定性,避免对数运算中出现的上溢或下溢问题。这种合并实现利用了log-sum-exp技巧:$\log \text{softmax}(z_i) = z_i - \log \sum_j e^{z_j}$,其中 $\log \sum_j e^{z_j}$ 通过减去最大值 $\max_j z_j$ 来避免指数溢出。
从交叉熵到现代损失函数变体
标准交叉熵损失虽然是分类任务的基石,但在处理实际问题时存在一些局限,这催生了一系列重要的改进:
- Focal Loss(Lin et al., 2017):通过引入调节因子 $(1-p_t)^\gamma$ 动态降低易分类样本的损失权重,专门解决目标检测中前景/背景类别极度不平衡的问题。当 $\gamma=0$ 时退化为标准交叉熵。
- Label Smoothing(Szegedy et al., 2016):将硬标签(one-hot)软化为 $(1-\epsilon, \epsilon/(C-1), ..., \epsilon/(C-1))$,防止模型对训练样本过度自信,提高模型的泛化能力和概率校准性。从信息论角度看,这等价于在真实分布和均匀分布之间做插值。
- 对比学习损失(如SupCon Loss, InfoNCE):将交叉熵思想与表示学习结合,通过最大化正样本对的互信息来学习有意义的特征表示。InfoNCE损失可以被证明是互信息的下界估计。
这些变体都可以从交叉熵的信息论框架出发来理解其设计动机——它们要么修改了真实分布 $p$ 的形式(Label Smoothing),要么对不同样本的损失贡献进行了重新加权(Focal Loss),要么将分类框架推广到了度量学习(对比损失)。
理解了二分类交叉熵的信息论本质之后,多分类的推广以及这些现代变体就变得顺理成章——它们共享同一个核心思想:最小化真实标签分布与模型预测分布之间的信息差距。
机器学习自学者的实用方法论
这篇笔记给正在自学机器学习的人提供了几点实用建议:
- 重视学习顺序:先建立信息论直觉,再学习具体损失函数,理解效率会大幅提升;
- 追问命名由来:不要满足于「知道用哪个损失函数」,而要理解「为什么叫这个名字」;
- 动手推导公式:亲自把似然写成连乘、取对数、取负值,才能真正体会到交叉熵与最大似然的等价关系;
- 建立知识连接:熵、KL 散度、交叉熵、最大似然、逻辑回归损失——这些看似独立的概念其实是同一个故事的不同侧面。
值得补充的一点学习建议是:在理解了交叉熵之后,尝试去理解其他常见损失函数(如均方误差、Hinge Loss)的概率论解释。例如,均方误差(MSE)可以从假设噪声服从高斯分布的最大似然估计中推导出来——这与交叉熵从伯努利分布推导出来的逻辑完全对称。当你建立了这种「每个损失函数背后都有一个概率模型假设」的世界观之后,选择和设计损失函数就从经验性的尝试变成了有原则的推理。
对于希望系统化学习机器学习的人来说,这类由学习者自身整理、带有「顿悟时刻」的笔记,往往比标准教科书更容易引发共鸣。
总结:交叉熵损失是信息论的必然结果
交叉熵损失之所以是逻辑回归的「天然」损失函数,不是偶然,而是信息论与概率论共同作用的结果。从香农1948年提出信息熵,到KL散度量化分布差异,再到交叉熵统一编码代价与分布距离,最后与费舍尔的最大似然估计在逻辑回归损失中完美汇合——这条跨越半个世纪的知识链条展现了数学理论的内在统一性。
理解这条推导链,不仅能帮助你掌握逻辑回归,更能为后续学习神经网络中的分类损失(同样基于交叉熵)、生成模型中的KL正则化(VAE)、以及强化学习中的策略约束(TRPO/PPO)打下坚实基础。
当你真正理解了背后的原理,公式就从「需要记忆的负担」变成了「显而易见的结论」——这正是从熵到交叉熵这条学习路径的核心价值。
相关推荐

AI Agent时代的编程显示器选购指南:明基RD280U深度体验
AI Agent让人人都能写代码,但长时间盯屏审代码成为新痛点。本文深度体验明基RD280U编程显示器,解析3:2屏幕比例、代码高亮配色优化、智慧光环护眼等功能如何提升AI协作效率。

GPU内存读取原理:延迟隐藏与带宽优化深度解析
深入解析GPU内存读取的完整链路,从warp调度、内存合并到缓存层级,揭示GPU如何通过大规模并行隐藏延迟,并提供内存访问模式优化的实践指南。

自托管AI软件工厂:本地部署AI开发流水线实战指南
深入解析自托管AI软件工厂的概念、技术架构与落地实践。涵盖本地大模型部署、Agent工作流编排、数据隐私保障等核心要素,帮助开发团队构建自主可控的AI驱动开发流水线。