返回 MLE 工程师 思维导图
中文·English
💻 MLE 工程师ID: mle-coding-softmax-stability

手写 Softmax 防溢出与 Cross-Entropy

Live Coding: Numerically Safe Softmax
🎯核心定义
手写 Softmax 数值防溢出与交叉熵算子 (Numerically Stable Softmax & Cross-Entropy Implementation) 是考察 MLE 工程师对底层浮点数精度限制(IEEE 754 浮点下溢与上溢)与数学恒等变换深刻理解的必考代码题;朴素 Softmax σ(z)i=eziezj\sigma(z)_i = \frac{e^{z_i}}{\sum e^{z_j}} 当输入包含大数(如 zi=1000z_i=1000)时,exp(1000)\exp(1000) 会瞬间导致浮点上溢返回 `inf`,引发除以 `inf` 产生 `NaN`;数值稳定方案利用平移不变性恒等式:softmax(z)=softmax(zc)\text{softmax}(z) = \text{softmax}(z - c),令常数 c=max(z)c = \max(z),将所有指数输入平移至 (,0](-\infty, 0] 区间(exp(0)=1\exp(0)=1,最大值绝对不会超过 1),彻底杜绝溢出;并在计算 Cross-Entropy 时结合 Log-Sum-Exp 技巧避免对 0 取对数导致 -\infty
💡使用场景
深度学习基础算子实现、分类器输出层开发、防止模型训练意外产生 NaN Loss 的排障必备。
解决的核心痛点
朴素直接实现极易在模型初始化不当或梯度稍大时瞬间崩塌为全 `NaN`;数值稳定版 Softmax 提供了数学上严格等价且在任意浮点范围内绝对安全的数值稳定性。
🎯5 个高频面试考点 (Exam Points)
1
现场写出包含 2D 矩阵按指定轴 (axis=-1) 广播的数值稳定 Safe Softmax Pure Numpy 代码?
2
数学证明 Softmax 的平移不变性:ezicjezjc=eziecjezjec=ezijezj\frac{e^{z_i - c}}{\sum_j e^{z_j - c}} = \frac{e^{z_i} e^{-c}}{\sum_j e^{z_j} e^{-c}} = \frac{e^{z_i}}{\sum_j e^{z_j}}
3
为什么在计算交叉熵损失时,直接算 log(softmax(z))\log(\text{softmax}(z)) 依然会发生下溢,而必须使用 Log-Sum-Exp (LSE) 技巧:log(ezj)=c+log(ezjc)\log(\sum e^{z_j}) = c + \log(\sum e^{z_j - c})
4
Softmax 带温度系数 τ\tau 的形式 ezi/τezj/τ\frac{e^{z_i / \tau}}{\sum e^{z_j / \tau}}:当 τ0\tau \to 0τ\tau \to \infty 时的极限分布与输出熵推导?
5
PyTorch 内部 `torch.nn.CrossEntropyLoss` 为什么将 LogSoftmax 与 NLLLoss 融合在一个 C++ CUDA Kernel 中执行?
📖 关联深度指南:📄 mle-coding-and-algo-prep
更新于 2026-08-14
🎯
检验攻克程度:针对「手写 Softmax 防溢出与 Cross-Entropy」专属刷题排雷
做单选排雷题、推导选项机制,答错自动收录进专属错题本。
🚀 开始本考点专项刷题
上一个知识点手撕 Multi-Head Self-Attention下一个知识点手写 K-Means 向量化聚类迭代

🔗 更多 MLE 工程师 知识点卡片

偏差-方差权衡与过拟合诊断常见损失函数选型与梯度特性优化器收敛性与动量选型准则模型集成 Stacking 与 Blending