交叉熵
3 秒看懂
交叉熵是衡量两个概率分布之间差异的信息论标尺,在深度学习中几乎“统治”了分类与生成任务的损失函数设计。一句话:它告诉你模型预测的分布离真实分布还差多远。值越小,分布越接近;值越大,说明模型预测与真相背离严重。从逻辑回归到百亿参数的大语言模型,交叉熵都是推动参数更新的核心“裁判”。
3 分钟产业解释
在 AI 工业界,交叉熵是默认的“误差尺度”。每当模型执行一次分类(猫/狗)、一次下一个 token 预测(GPT 系列)、一次图像重建(VAE)时,输出的概率向量与真实标签的多热/类别分布之间,都会计算交叉熵。优化器据此算出梯度并反向传播,驱动万亿次矩阵乘法背后的芯片运转。产业链上,所有训练框架(PyTorch、TensorFlow、JAX)的损失函数库都以交叉熵及其变体(如二元交叉熵 BCE、稀疏分类交叉熵)为核心 API。其计算涉及对数、求和与 softmax 归一化,是 GPU/NPU 上数值稳定性优化(如 logits 直接送入 cross_entropy 而非先 softmax 再 log)的重点对象。可以说,每一个 AI 模型的账单,很大一部分消耗在交叉熵相关的计算与通信上。
15 分钟专家深入
交叉熵源于 1948 年 Shannon 的信息论。在 ML 中,通常将模型输出的概率分布 q 与真实分布 p 之间的交叉熵定义为 H(p, q) = -\sum_{i} p(i) \log q(i)。由于真实标签通常是 one‑hot 编码,即 p 在正确类别处为 1,其余为 0,则此时交叉熵退化为负对数似然 -\log q(y)。这就把信息论概念与最大似然估计统一:最小化交叉熵等价于最大化正确标签的对数似然。在分类任务中,为了输出合法的概率分布,网络末层常接 softmax,于是梯度回传形式优雅简洁,避免了早期均方误差带来的梯度饱和问题。
在生成式预训练大模型(LLaMA、Gemini 等)中,每一个位置的词表上计算的都是逐 token 的交叉熵,全序列取平均或求和即为语言模型的预训练目标(next‑token prediction)。这里交叉熵是模型“困惑度(perplexity)”的对数级基础,\text{PPL} = \exp(H(p,q))。工业训练中,通常将 logits 直接传给 torch.nn.functional.cross_entropy,其内部融合了 log‑softmax 与 NLL,避免了单独计算 softmax 可能引发的数值溢出(如 log(0))。这也意味着,交叉熵计算不是一个孤立的算子,而是一个融合了归一化与损失统计的数值敏感内核,需要芯片架构与 AI 编译器在算子融合上做专门优化。
此外,在文本生成、语音合成等任务中,交叉熵也被用作序列蒸馏(Distillation)的监督信号,如 SeqKD 中教师模型与学生模型的 token 级交叉熵。而在自监督对比学习(SimCLR, MoCo)中,InfoNCE 损失其实也是交叉熵的变体——在正样本与大量负样本的多类分类器上施加交叉熵,推动表征空间中正对对准、负对发散。
技术原理
信息论定义
对于离散随机变量 X,假设真实分布为 p,模型预测分布为 q,交叉熵定义:
H(p, q) = -\sum_{x \in \mathcal{X}} p(x) \log q(x)
若 q 为某个参数化函数(如神经网络),用 \theta 表示,则损失函数 \mathcal{L}(\theta) = H(p, q_\theta)。当 p 为 one‑hot 时,设正确类别为 c,则 \mathcal{L} = -\log q_\theta(c)。
与 softmax 的配合
设 logits 向量 \mathbf{z},则 softmax 输出 q_i = \frac{e^{z_i}}{\sum_j e^{z_j}}。代入交叉熵损失:
\mathcal{L} = -\log \frac{e^{z_c}}{\sum_j e^{z_j}} = -z_c + \log\sum_j e^{z_j}
这是数值稳定实现的核心公式,通常由 logsumexp 操作统一计算。梯度对 logits 的回传形式优美:
\frac{\partial \mathcal{L}}{\partial z_i} = q_i - p_i
即输出概率与标签分布的差值。这避免了 sigmoid/softmax 的二次饱和区,训练初期梯度信号更强。
多标签与加权变体
- 二元交叉熵 (BCE):适用于多标签分类或二分类,每个类别独立计算,使用 sigmoid 而非 softmax:
\mathcal{L} = -\sum_{i} [y_i\log \hat{y}_i + (1-y_i)\log(1-\hat{y}_i)]。 - 加权交叉熵:引入类别权重
w_c以缓解不平衡:\mathcal{L} = -w_c \log q_c。 - Focal Loss:用于密集目标检测,在交叉熵中加入调制因子
(1-q_c)^\gamma,降低易分类样本的权值,是交叉熵族的扩展。
大模型训练中的并行计算模式
在模型并行训练中,交叉熵计算的最后阶段往往需要大矩阵乘法(logits 产生于词表大小维度,可达数万甚至数十万)。张量并行中,词表维度被切分,每个设备持有部分 logits,此时需要 All‑reduce 收集全局的 logsumexp 归一化因子,这通常通过 all_reduce 或 reduce_scatter 实现。MoE 架构中,token 路由后每个 token 仅在少量专家上计算交叉熵,但路由本身的负载均衡损失也是基于概率分布设计的,与交叉熵同源。
技术演进史
- 1948 年:Claude Shannon 创立信息论,提出熵与交叉熵概念,用以度量编码最优长度。
- 1950s–1960s:Kullback 与 Leibler 提出 KL 散度,交叉熵可表达为熵 + KL 散度,统计推断中引入。
- 1970s–1980s:最大熵模型、条件随机场(CRF)中交叉熵成为参数估计的准则,NLP 中广泛应用。
- 1986 年:Rumelhart、Hinton 等反向传播论文中,以平方和损失为主,但交叉熵随后被引入作为分类目标,克服 sigmoid 饱和。
- 1990s:神经网络中 softmax + 交叉熵组合成为标准,Bishop 等人强调其对概率输出的合理性。
- 2000s:深度学习复兴,交叉熵在图像分类(AlexNet)、语音识别(DNN‑HMM)中成为标准损失。
- 2010s 中期:Seq2Seq 模型、注意力机制中逐 token 交叉熵推动机器翻译、图像描述。
- 2018 年:GPT、BERT 等预训练模型以交叉熵(语言模型 loss)为核心预训练目标,将交叉熵与大规模自监督学习深度绑定。
- 2020s:多模态、强化学习与人类反馈(RLHF)中,交叉熵作为策略评估或蒸馏损失一再出现,并在芯片级算子融合中不断优化。
技术路线对比
| 维度 | 交叉熵 (Cross‑Entropy) | 均方误差损失 (MSE) | 对比损失 (Contrastive Loss) |
|---|---|---|---|
| 概率诠释 | 信息论距离,最大似然 | 高斯分布误差 | 距离度量,无归一化概率要求 |
| 输出层配合 | softmax / sigmoid | 恒等或线性 | 直接向量距离(余弦/欧氏) |
| 梯度特性 | 与 softmax 联合后梯度线性 | 配合 sigmoid 易进入饱和区 | 梯度依赖正负样本的距离 |
| 典型应用 | 分类、语言模型 | 回归,传统语义表征学习 | 表征学习,自监督(SimCLR) |
| 数值优化 | 需要 logsumexp 融合,防止溢出 | 相对稳定 | 通常需难例挖掘 |
| 硬件加速关键点 | 大词表 softmax 的并行归约 | 简单逐元素差平方 | 正负对索引采样 |
注:本表格中参数、效率对比为定性描述,具体数值因任务规模、词表大小、批次大小而异。
上下游
- 上游:神经网络输出层(logits)提供原始分数,上游可能是卷积特征、Transformer 解码器隐藏状态等。
- 中游:损失函数库实现交叉熵算子,包含 log‑softmax 或 sigmoid 融合,常见于 CUDA‑kernel 层面的高效归约。
- 下游:优化器(Adam, SGD)接收到标量损失值,自动求解梯度,传递给各参数张量。
- 相关工具链:PyTorch
torch.nn.CrossEntropyLoss、TensorFlowtf.keras.losses.SparseCategoricalCrossentropy、JAX 的optax.softmax_cross_entropy等,这些是 AI 框架最核心的损失函数 API。
在全球 AI 芯片供应链中,交叉熵虽不直接对应某硬件部件,但其计算密集度决定了它常常与矩阵乘、softmax 融合成一个算子交给 GPU/NPU 执行,尤其在大词表的 logsumexp 操作中需要多处理器协同,会牵扯 HBM 带宽和跨芯片通信效率。
关键指标
- 对数似然(或 Perplexity):语言模型常用,通过交叉熵的指数得到。此指标直接反映模型对测试数据的认知质量,但不会给出类似于时钟频率那样的绝对数字,其范围高度依赖于词表大小和任务难度。
- 损失值 magnitude:训练过程中交叉熵损失的下降速度,可表征学习曲率。过高的初始损失通常意味词表均匀分布,
-\log(1/V)。 - 训练吞吐 (tokens/s):在工业测中,交叉熵计算常与词片(token)产生速率耦合,芯片厂商关注的性能指标包含每焦耳能处理的交叉熵运算量。
- 数值精度 (FP16/BF16/FP8):低精度训练中,交叉熵的 sum 容易溢出,因此框架常使用缩放、截断或 high‑precision 累加。指标如 loss scale 的使用频率,反映了数值稳定性。
供需与市场数据
交叉熵本身作为数学概念不存在供需市场,但其作为损失函数的普适性使其与整个生成式 AI 训练和推理市场深度绑定。根据第三方行业估算,2024‑2025 年大模型预训练计算中有超过 90% 的浮点运算用于 Transformer 前向/反向,其中交叉熵相关运算(softmax + log + 求和)大约占整个训练 FLOPs 的个位数百分比,但其对内存带宽的需求却不成比例地高,因为大词表 logits 产生时需瞬时读写巨大张量。全球 AI 训练的电力消耗与交叉熵运算量成间接正比。
在框架市场,交叉熵的优化是各 AI 芯片厂商必争之地。NVIDIA 的 cuDNN、TensorRT,AMD 的 MIGraphX 以及各种 NPU 架构的自定义算子库,都包含高度调优的融合交叉熵核。例如,在 MLPerf 训练基准中,BERT 和 GPT‑3 类模型的训练速度瓶颈中,融合交叉熵算子往往是优化重点之一。
代表公司与资本映射
- NVIDIA:在其 GPU 库(cuDNN, cuBLAS)提供融合交叉熵实现,性能直接影响 AI 训练市占率。
- AMD:通过 ROCm 生态提供类似实现,不断追赶,并在 Instinct 系列加速器上展示大语言模型训练性能。
- Intel:Gaudi 加速器、oneAPI 库针对交叉熵和其他损失函数做图级别融合。
- 云厂商:Google (TPU)、Amazon (Trainium) 等自研芯片,将交叉熵与 softmax、解码步骤融合为专用硬件 Op,形成差异化。
- 框架层:Meta (PyTorch) 构建生态,微软 (ONNX Runtime)、苹果 CoreML 等均包含交叉熵算子,其实现的质量与性能直接影响下游模型部署。
- 大模型公司:OpenAI、Anthropic、DeepSeek 等,其训练成本效率与交叉熵计算优化直接相关,属于该技术的关键应用者与推动者。
资本映射上,交叉熵并不产生独立投资标的,但 AI 芯片和框架方的价值与交叉熵等基础算子的演进紧密相连。任何一个想在大模型算力市场分一杯羹的硬件公司,都必须解决包括交叉熵在内的损失函数算子高性能实现。
投资逻辑
-
护城河来自算子融合与编译优化:交叉熵与其前后算子(transpose, softmax, log, sparse lookup)融合成单个 GPU kernel 的能力,可以极大节省带宽和延迟。拥有自研编译器(如 Triton, XLA)并能自动生成高效融合交叉熵核的框架与芯片团队,将在训练/推理成本上获得结构性优势。
-
大词表趋势强化需求:随着多语言模型、代码模型词表扩增到 100k–300k 以上,交叉熵计算中 logits 矩阵维度膨胀,成为性能瓶颈,对高速 HBM、芯片间互联带宽提出更高要求。能在大词表场景下提供线性可扩展交叉熵性能的芯片互联方案(如 NVSwitch、Infinity Fabric)更具投资价值。
-
能效成为区分点:推理场景中,每生成一个 token 就需计算一次词表级交叉熵。能以更少功耗完成该计算的硬件,会在云端和端侧推理中抢占份额,因此监控芯片的交叉熵吞吐/Watt 的指标,是评估推理芯片竞争力的一个侧面。
-
软件生态锁定:主流框架中交叉熵 API 的默认行为与性能表现,高度依赖底层库,形成事实标准。新进入者必须无缝兼容 PyTorch 的
cross_entropy及其梯度行为,否则迁移成本巨大。
常见误读纠偏
-
误读 1:交叉熵损失为零时,模型就完美拟合了。
交叉熵最小值是真实分布自身的熵H(p) \geq 0,而不是 0。对于 one‑hot 标签,熵为 0,因此理论上交叉熵可以达到 0,但实际中由于正则化、数据噪声和模型容量限制,无法达到 0。更多时候,收敛后的交叉熵会稳定在数据集熵 + 模型瓶颈附近的一个正值,并非越接近 0 越好(过拟合风险)。 -
误读 2:二元交叉熵 (BCE) 和分类交叉熵 (CCE) 可以随意互换。
若任务是多类单标签分类,必须使用 softmax + 交叉熵,因为各类别互斥;使用 sigmoid + BCE 会导致类别间缺乏竞争归一化,最终概率之和不为 1,训练不稳定。反之,在多标签分类中,如果强行使用 softmax,每个样本只能有一个高概率类别,不符合任务设定。选择错误会导致模型无法收敛或表征严重失真。 -
误读 3:交叉熵只是“损失函数”,和推理部署关系不大。
不仅训练,自回归生成推理的每步解码都涉及 logits 到概率的转换,为了与训练一致,同样经过 softmax + 交叉熵(采样或 beam search 时通常转为负对数似然),因此在推理优化中,融合交叉熵的核也是热点。
学习路径
- 基础阶段:阅读信息论入门,理解熵、KL 散度、交叉熵的数学关系。过一遍《Deep Learning》(Goodfellow et al.) 第 6.2.2 节,掌握交叉熵作为分类损失函数的推导。
- 代码实践:用 PyTorch 手写一个 softmax + cross‑entropy,然后对比
F.cross_entropy的输出,感受数值稳定性技巧(logsumexp)。在小数据集上分别用 MSE 和交叉熵训练同一个分类网络,观察收敛速度与准确率差异。 - 进阶:学习语言模型的损失计算,阅读《Attention is All You Need》中训练目标的定义;在 nanoGPT 等小型代码中查看交叉熵的调用位置。扩展到强化学习中策略梯度里的交叉熵。
- 系统优化:阅读 NVIDIA 的
fused_softmax或 FlashAttention 相关源码,了解 kernel 融合如何减少交叉熵的 HBM 读写。尝试用 Triton 实现一个简单的带损失融合的 cross‑entropy 内核。 - 前沿:追踪大模型词表扩展对交叉熵计算的影响,了解 Nvidia TensorRT‑LLM 或 vLLM 中推理阶段的 logit 处理器,以及自定义词表、惩罚项等如何与交叉熵相互作用。
一句话总结
交叉熵是深度学习的概率性翻译官——将模型输出的原始分数转化为信息差距,成为指导亿级参数更新的唯一真值,其数值形式与实现效率贯穿从软硬件设计到千亿次训练的始终。
延伸阅读与来源
- Shannon, C. E. (1948). A Mathematical Theory of Communication.
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. (第 6.2.2 节)
- Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. (第 4.3 节)
- PyTorch 文档:
torch.nn.CrossEntropyLoss与torch.nn.functional.cross_entropy。 - Vaswani et al. (2017). Attention Is All You Need. 训练目标定义部分。
- NVIDIA Deep Learning Performance Documentation on fused softmax and logsumexp optimization.
- Hoffmann et al. (2022). Training Compute-Optimal Large Language Models. (Chinchilla) 中交叉熵损失曲线分析。
注:搜索资料不可用,本文基于经典教材和公开框架文档撰写,未引用特定财报或第三方估算数据;涉及性能对比部分均为定性描述。