M1-032M1: Mathematics & Statistics FundamentalsNumerical StabilityEasy
Mastery:
Numerical Stability: 写出 log-sum-exp 技巧,并说明它解决了什么问题。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: 先减最大值再取 log,避免 exp 溢出与 log(0)。
📌 Key Takeaways
- •交叉熵、CRF、混合模型、变分推断都依赖它
- •可直接调用 np.logaddexp
📐 Mathematical Derivations
推导只需一步:log Σᵢe^{xᵢ}=log(e^m Σᵢe^{xᵢ−m})=m+log Σᵢe^{xᵢ−m},其中 m=maxᵢxᵢ。右侧的指数项全部 ≤1,不会溢出;且和式中至少有一项等于 1(对应取到 max 的那个 i),故 log 的参数 ≥1,不会出现 log(0)。它解决的问题是<strong>同时避免上溢与下溢</strong>:直接用 exp 会在 x 大时溢出为 inf、在 x 很负时下溢为 0(进而 log(0)=−inf)。log-sum-exp 广泛出现在交叉熵、CRF 的配分函数、GMM 的 log 似然、变分推断的 ELBO、以及强化学习的 log-sum-exp 软最大化中。
🏭 Production Trade-offs
工程细节:① <strong>两参数的 logaddexp</strong>——计算 log(e^a+e^b) 有专门的稳定实现 <code>logaddexp(a,b)=max(a,b)+log1p(exp(−|a−b|))</code>,比手写更快更稳,也是 DPO/BCE 损失 <code>−log σ(z)=−logaddexp(0,−z)</code> 的基础;② <strong>logsumexp 的梯度是 softmax</strong>——∂logsumexp(x)/∂x=softmax(x),这使它在自动微分中天然稳定;③ <strong>与减 max 的关系</strong>——减 max 是 logsumexp 的特例应用;在 FlashAttention 的在线 softmax 中,需要维护运行最大值并在 m 更新时用 e^{m_old−m_new} 修正历史累加和 l,这正是 logsumexp 的增量形式。④ 在大词表语言模型(如 50k 词表)中,logsumexp 是每个 token 的主要计算开销之一,因此有专门的融合 kernel 优化。
⚠️ Common Interview Pitfalls
- ✕手写 log(sum(exp(x))) 而不减 max
- ✕忽略 logaddexp 在 DPO/BCE 中的稳定化作用
🎯 Interviewer Follow-ups
- ?如何计算 log σ(z) 而不用 exp?
- ?为什么用 logaddexp 而不是手写?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.