神经网络之Softmax激活函数求导过程

🔢 一、Softmax 函数的定义

给定一个输入向量:

z=[z1,z2,...,zn]⊤ \mathbf{z} = [z_1, z_2, ..., z_n]^\top z=[z1,z2,...,zn]⊤

Softmax 函数将其变换为一个输出向量(概率分布):

σ(z)i=ezi∑j=1nezjfor i=1,...,n \sigma(\mathbf{z})i = \frac{e^{z_i}}{\sum{j=1}^n e^{z_j}} \quad \text{for } i = 1, ..., n σ(z)i=∑j=1nezjezifor i=1,...,n

这是一个向量函数,将实数向量映射为每个元素在 (0, 1) 之间,且总和为 1。


🎯 二、目标:求导

我们要推导的是:

∂σ(z)i∂zk \frac{\partial \sigma(\mathbf{z})_i}{\partial z_k} ∂zk∂σ(z)i

也就是说:

Softmax 输出第 iii 个分量对输入向量第 kkk 个分量的偏导数。


🧮 三、对两种情况分别推导

✅ 情况 1:当 i=ki = ki=k(对自己求导)

我们记 Softmax 输出为 sis_isi:

si=ezi∑j=1nezj s_i = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}} si=∑j=1nezjezi

利用商法则:

∂si∂zi=ezi⋅∑jezj−ezi⋅ezi(∑jezj)2=ezi(∑jezj−ezi)(∑jezj)2 \frac{\partial s_i}{\partial z_i} = \frac{e^{z_i} \cdot \sum_j e^{z_j} - e^{z_i} \cdot e^{z_i}}{(\sum_j e^{z_j})^2} = \frac{e^{z_i}(\sum_j e^{z_j} - e^{z_i})}{(\sum_j e^{z_j})^2} ∂zi∂si=(∑jezj)2ezi⋅∑jezj−ezi⋅ezi=(∑jezj)2ezi(∑jezj−ezi)

整理一下:

∂si∂zi=si(1−si) \frac{\partial s_i}{\partial z_i} = s_i (1 - s_i) ∂zi∂si=si(1−si)


✅ 情况 2:当 i≠ki \ne ki=k(对别的分量求导)

∂si∂zk=0⋅∑jezj−ezi⋅ezk(∑jezj)2=−eziezk(∑jezj)2=−sisk \frac{\partial s_i}{\partial z_k} = \frac{0 \cdot \sum_j e^{z_j} - e^{z_i} \cdot e^{z_k}}{(\sum_j e^{z_j})^2} = -\frac{e^{z_i} e^{z_k}}{(\sum_j e^{z_j})^2} = -s_i s_k ∂zk∂si=(∑jezj)20⋅∑jezj−ezi⋅ezk=−(∑jezj)2eziezk=−sisk


📦 四、结果:Jacobian 矩阵形式

我们将所有偏导组织成一个 Jacobian 矩阵 J∈Rn×nJ \in \mathbb{R}^{n \times n}J∈Rn×n,有:

J_{ik} = \\frac{\\partial s_i}{\\partial z_k} = \\begin{cases} s_i (1 - s_i), \& \\text{if } i = k \\ * s_i s_k, \& \\text{if } i \\ne k \\end{cases}

也可以写成矩阵形式:

∂s∂z=diag(s)−ss⊤ \frac{\partial \boldsymbol{s}}{\partial \mathbf{z}} = \text{diag}(\boldsymbol{s}) - \boldsymbol{s} \boldsymbol{s}^\top ∂z∂s=diag(s)−ss⊤

其中:

  • diag(s)\text{diag}(\boldsymbol{s})diag(s) 是以 sis_isi 为对角元素的对角矩阵
  • ss⊤\boldsymbol{s} \boldsymbol{s}^\topss⊤ 是外积(得到一个 rank-1 的矩阵)

💡 五、在神经网络中的用法

常见组合:Softmax + CrossEntropy(交叉熵损失)

在多分类神经网络中,常见组合是:

  • 最后一层使用 Softmax 输出概率
  • 损失函数使用交叉熵 Loss

这种组合在反向传播时有非常好的性质,导数公式变得非常简单:

∂Loss∂zi=y^i−yi \frac{\partial \text{Loss}}{\partial z_i} = \hat{y}_i - y_i ∂zi∂Loss=y^i−yi

其中:

  • y^i\hat{y}_iy^i:Softmax 输出
  • yiy_iyi:真实标签(one-hot)

这就是为什么框架(如 PyTorch)中提供 CrossEntropyLoss 是直接整合了 Softmax + Log + NLLLoss。


✅ 总结表:Softmax 求导

项目 内容
函数定义 si=ezi∑jezjs_i = \frac{e^{z_i}}{\sum_j e^{z_j}}si=∑jezjezi
对自己求导 ∂si∂zi=si(1−si)\frac{\partial s_i}{\partial z_i} = s_i (1 - s_i)∂zi∂si=si(1−si)
对他人求导 ∂si∂zk=−sisk\frac{\partial s_i}{\partial z_k} = -s_i s_k∂zk∂si=−sisk
Jacobian 矩阵 J=diag(s)−ss⊤J = \text{diag}(s) - s s^\topJ=diag(s)−ss⊤
应用 多分类输出层、交叉熵损失的梯度计算
相关推荐
roman_日积跬步-终至千里16 小时前
【模式识别与机器学习(9)】数据预处理-第一部分:数据基础认知
人工智能·机器学习
FL162386312916 小时前
自动驾驶场景驾驶员注意力安全行为睡驾分心驾驶疲劳驾驶检测数据集VOC+YOLO格式5370张6类别
人工智能·yolo·自动驾驶
Java中文社群16 小时前
找到漏洞了!抓紧薅~N8N调用即梦全免费
人工智能
培根芝士16 小时前
使用llm-compressor 对 Qwen3-14B 做 AWQ + INT4 量化
人工智能·python
da_vinci_x16 小时前
Sampler AI + 滤波算法:解决 AIGC 贴图“噪点过剩”,构建风格化 PBR 工业管线
人工智能·算法·aigc·材质·贴图·技术美术·游戏美术
AI人工智能+16 小时前
表格识别技术:完整还原银行对账单表格结构、逻辑关系及视觉布局,大幅提升使处理速度提升
人工智能·深度学习·ocr·表格识别
珠海西格电力16 小时前
零碳园区基础架构协同规划:能源-建筑-交通-数字系统的衔接逻辑
大数据·人工智能·智慧城市·能源
chao18984416 小时前
MATLAB 实现声纹识别特征提取
人工智能·算法·matlab
zhishidi16 小时前
推荐算法之:GBDT、GBDT LR、XGBoost详细解读与案例实现
人工智能·算法·推荐算法
yiersansiwu123d17 小时前
AI伦理治理:在创新与规范之间寻找平衡
人工智能