Lishengxie logo Lishengxie

Always on the way

  • 文章
  • 关于我
  • 归档
  • 联系
  1. 首页
  2. 文章
  3. 交叉熵Loss

交叉熵Loss

2026-09-07 算法学习 Lishengxie

网课学习:https://haoailab.com/cse234-w25/

Week2 autodiff 章节问题推导

L=-\sum t_{i}\log(y_{i}),y_{i}=\text{softmax}\left(x\right)_{i}=\frac{e^{x_{i}}}{\sum e^{x_{d}}}

Softmax Cross-Entropy Loss — 前向与梯度计算

1. 问题设定

给定一个分类任务,共有 C 个类别。对于一个样本,模型输出 logits 向量 \mathbf{x} \in \mathbb{R}^{C},真实标签为 t \in \{0, 1, \dots, C-1\}(也可用 one-hot 向量 \mathbf{t} \in \{0,1\}^{C} 表示)。

2. 前向传播 (Forward Pass)

2.1 Softmax 激活

y_i = \text{softmax}(\mathbf{x})_i = \frac{e^{x_i}}{\sum_{d=1}^{C} e^{x_d}}, \quad i = 1, 2, \dots, C

其中 y_i 表示模型对第 i 类的预测概率,满足 \sum_i y_i = 1 且 y_i > 0。

2.2 交叉熵损失 (Cross-Entropy Loss)

对于单个样本(真实标签为类别 t):

L = - \sum_{i=1}^{C} t_i \log(y_i) = -\log(y_t)

由于 t_i 是 one-hot 向量(只有 t_t = 1,其余为 0),因此损失简化为仅对真实类别 t 的负对数似然:

L = -\log\left(\frac{e^{x_t}}{\sum_{d=1}^{C} e^{x_d}}\right) = -x_t + \log\left(\sum_{d=1}^{C} e^{x_d}\right)

3. 反向传播 (Backward Pass / 梯度计算)

我们需要计算损失 L 关于 logits \mathbf{x} 的梯度:\frac{\partial L}{\partial x_i}。

3.1 分情况推导

Softmax 函数关于 x_i 的偏导数为,令 e_{x_i} = u_i,T = \sum_{d=1}^{C} e^{x_d}

\frac{\partial{y_j}}{\partial{x_i}} = \frac{\partial(\frac{e^{x_j}}{\sum_{d=1}^{C} e^{x_d}})}{\partial{e^{x_i}}}\cdot\frac{\partial{e^x_i}}{\partial x_i} = \frac{\partial{\frac{u_j}{T}}}{\partial u_i}\cdot u_i

当 i\neq j 时,

\frac{\partial{y_j}}{\partial{x_i}} = -\frac{u_i\cdot u_j}{T^2} = -y_iy_j

当 i = j 时,

\frac{\partial{y_j}}{\partial{x_i}} = u_i \cdot (-\frac{u_j}{T^2} + \frac{1}{T}) = u_i \cdot (\frac{T-u_j}{T^2}) = \frac{u_i}{T} \cdot \frac{T-u_j}{T}=y_i(1-y_j)

因此:

\frac{\partial y_j}{\partial x_i} = \begin{cases} y_j (1 - y_j), & i = j \\[6pt] -y_i y_j, & i \neq j \end{cases}

利用链式法则:

\frac{\partial L}{\partial x_i} = \sum_{j=1}^{C} \frac{\partial L}{\partial y_j} \cdot \frac{\partial y_j}{\partial x_i}

其中 \frac{\partial L}{\partial y_j} = -\frac{t_j}{y_j}。

代入后:

\begin{aligned} \frac{\partial L}{\partial x_i} &= -\frac{t_i}{y_i} \cdot y_i(1 - y_i) - \sum_{j \neq i} \frac{t_j}{y_j} \cdot (-y_i y_j) \\[6pt] &= -t_i (1 - y_i) + \sum_{j \neq i} t_j y_i \\[6pt] &= -t_i + t_i y_i + y_i \sum_{j \neq i} t_j \\[6pt] &= -t_i + y_i \underbrace{\left(t_i + \sum_{j \neq i} t_j\right)}_{=1} \\[6pt] &= y_i - t_i \end{aligned}

3.2 最终梯度公式

简洁而优雅的结果:

\boxed{\frac{\partial L}{\partial x_i} = y_i - t_i}

即:预测概率减去真实概率。

4. 直观理解

情况y_it_i梯度 \frac{\partial L}{\partial x_i}含义
正确类别 (i=t)\approx 11\approx 0预测正确,无需更新
正确类别 (i=t)\approx 01\approx -1预测错误,需要增大 x_t
错误类别 (i \neq t)\approx 00\approx 0预测正确,无需更新
错误类别 (i \neq t)\approx 10\approx 1预测错误,需要减小 x_i

5. 数值稳定性技巧 (Numerical Stability)

直接计算 e^{x_i} 容易溢出。实践中先减去最大值:

y_i = \frac{e^{x_i - \max(\mathbf{x})}}{\sum_{d=1}^{C} e^{x_d - \max(\mathbf{x})}}

损失函数相应地变为:

L = -\log(y_t) = -\left(x_t - \max(\mathbf{x}) - \log\sum_{d=1}^{C} e^{x_d - \max(\mathbf{x})}\right) = \log\sum_{d=1}^{C} e^{x_d - \max(\mathbf{x})} - (x_t - \max(\mathbf{x}))

梯度不变,因为减去常数不影响 softmax 输出:

\frac{\partial L}{\partial x_i} = y_i - t_i

6. 批量形式的矩阵表示

对于大小为 N 的 batch,logits 矩阵 \mathbf{X} \in \mathbb{R}^{N \times C}:

\mathbf{Y} = \text{softmax}(\mathbf{X}) \quad \text{(按行计算)}
L = -\frac{1}{N} \sum_{n=1}^{N} \sum_{i=1}^{C} t_{n,i} \log(y_{n,i}) = -\frac{1}{N} \sum_{n=1}^{N} \log(y_{n, t_n})

梯度:

\frac{\partial L}{\partial \mathbf{X}} = \frac{1}{N} (\mathbf{Y} - \mathbf{T})

总结

graph LR
    A["Logits
x ∈ ℝC"] -->|softmax| B["Probabilities
y ∈ ℝC"] B -->|"CE Loss
L = -Σ tᵢ log(yᵢ)"| C["Loss
L ∈ ℝ"] C -->|"∂L/∂xᵢ = yᵢ - tᵢ"| D["Gradient
∇ ∈ ℝC"]

核心结论: Softmax + Cross-Entropy 组合的梯度计算极其简洁——\frac{\partial L}{\partial x_i} = y_i - t_i,这也是为什么这个组合在分类任务中如此流行的原因之一。

深度学习 softmax 损失函数

本文目录

  • Softmax Cross-Entropy Loss — 前向与梯度计算
  • 1. 问题设定
  • 2. 前向传播 (Forward Pass)
    • 2.1 Softmax 激活
    • 2.2 交叉熵损失 (Cross-Entropy Loss)
  • 3. 反向传播 (Backward Pass / 梯度计算)
    • 3.1 分情况推导
    • 3.2 最终梯度公式
  • 4. 直观理解
  • 5. 数值稳定性技巧 (Numerical Stability)
  • 6. 批量形式的矩阵表示
  • 总结

精选文章

  • 分布式ID生成方案全解析:从数据库到雪花算法
  • Redis ziplist、quicklist 和 listpack
  • 多目标优化问题及两种常用解法

按主题探索

  • Redis 数据结构
    从存储布局理解实现
  • Linux 与部署
    服务器、证书与建站实践
  • 算法与深度学习
    解题方法、优化与公式推导
  • SNN / NoC 论文
    互连网络与映射算法

名言警句

学而时习之,不亦说乎?《论语·学而》学而不思则罔,思而不学则殆。《论语·为政》知之为知之,不知为不知,是知也。《论语·为政》三人行,必有我师焉。《论语·述而》工欲善其事,必先利其器。《论语·卫灵公》不积跬步,无以至千里。《荀子·劝学》千里之行,始于足下。《老子·第六十四章》纸上得来终觉浅,绝知此事要躬行。陆游《冬夜读书示子聿》
学而时习之,不亦说乎?
《论语·学而》 一言
← 分布式ID生成方案全解析:从数据库到雪花算法 TinyLFU →

相关文章

  • TinyLFU Oct 17, 2026
  • 分布式ID生成方案全解析:从数据库到雪花算法 Jun 25, 2026
  • LeetCode刷题 - KMP算法 Feb 4, 2024
  • 算法学习-差分数组 Dec 23, 2023
皖ICP备2023003716号-1 | 公安备案皖公网安备34012202341113 | 违法和不良信息举报邮箱:1141751053@qq.com
Powered by Hugo & Explore Theme & Theme by SimonAKing.