深度学习:深入理解 Softmax 激活函数

💡 Softmax 是多分类问题的核心组件 ------ 它将神经网络的原始输出转化为概率分布,让模型"学会"判断属于哪个类别。


✅ 一、为什么要用 Softmax?

1. 二分类 vs 多分类

  • 二分类 (如猫/非猫)→ 使用 sigmoid
  • 多分类 (如猫/狗/鸡/其它)→ 使用 softmax

🔍 示例:识别图片中是否有猫、狗或小鸡。

  • 可以用一个神经元表示"有猫";
  • 但无法同时判断多个类别是否出现;
  • Softmax 允许我们一次输出多个类别的概率

✅ 二、Softmax 的数学原理

假设输出层的线性输出为向量 ,其中是类别数。

Step 1: 计算指数变换(t)

Step 2: 归一化得到概率(a)

即:

✅ 特性:

  • 所有
  • 输出是一个概率分布

✅ 三、Python 实现 Softmax

复制代码
import numpy as np

def softmax(z):
    # 数值稳定性处理:减去最大值防止溢出
    z_stable = z - np.max(z)
    exp_z = np.exp(z_stable)
    return exp_z / np.sum(exp_z)

# 示例
z = np.array([5, 2, -1, 3])
a = softmax(z)
print("z =", z)
print("a =", a)

输出:

复制代码
z = [ 5  2 -1  3]
a = [0.842 0.042 0.002 0.114]

✅ 解读:第一个类别概率最高(84.2%),对应"小鸡"。


✅ 四、Softmax 的直观理解

🎯 为什么叫 "Softmax"?

  • soft:不像 hardmax 那样硬性选择最大值;
  • max:倾向于选择最大的那个元素。

⚠️ 对比:

方法 输出
Hardmax [1, 0, 0, 0](只保留最大值)
Softmax [0.84, 0.04, 0.002, 0.11](每个都有概率)

✅ Softmax 更"柔和",允许模型表达不确定性。


✅ 五、损失函数:交叉熵(Cross-Entropy)

Softmax 通常搭配 交叉熵损失函数 使用:

其中:

  • :真实标签(one-hot 编码);
  • :预测概率(Softmax 输出);

🧪 示例:

复制代码
y_true = np.array([0, 1, 0, 0])  # 真实是第二类
y_pred = np.array([0.842, 0.042, 0.002, 0.114])
loss = -np.sum(y_true * np.log(y_pred + 1e-8))  # 加 epsilon 防止 log(0)
print("Loss =", loss)

✅ 目标:最小化这个损失 → 让预测概率接近真实标签。


✅ 六、Softmax vs 多个 Logistic 回归

场景 推荐方法 原因
类别互斥(如猫/狗/鸡) ✅ Softmax 概率总和为 1,更合理
类别不互斥(如音乐类型:古典+流行) ✅ 多个 Logistic 每个类别独立判断

💡 规则

  • 如果类别之间是"非此即彼",用 Softmax;
  • 如果可以同时属于多个类别,用多个独立的 Logistic 分类器。

✅ 七、可视化:Softmax 决策边界

当输入只有两个特征时,Softmax 的决策边界是非线性的,可以划分复杂的区域。

例如,对于 的情况,Softmax 会生成三个类别的概率,并自动形成三角形分割空间。

🖼️ 图像说明(来自原文):

  • 左图:C=3,边界较简单;
  • 中图:C=4,边界复杂;
  • 右图:C=5,进一步细化。

这说明 Softmax 能够捕捉数据之间的复杂关系。


✅ 八、实际应用建议

应用场景 推荐方案
图像分类(猫/狗/鸡) Softmax
音乐风格识别(古风/摇滚/电子) Softmax(若互斥)
标签多选(人声+伴奏) 多个 Logistic
文本情感分析(正面/负面/中性) Softmax

✅ 小贴士:

  • 在 PyTorch/TensorFlow 中,nn.CrossEntropyLoss() 自动包含 Softmax;
  • 不要手动加 Softmax 后再用 nn.LogSoftmaxnn.NLLLoss(),容易重复计算。

✅ 九、总结

Softmax 是多分类任务的灵魂

特性 说明
输出 概率分布(所有元素和为 1)
优势 可解释性强,适合互斥类别
搭配 交叉熵损失函数
注意 类别必须互斥才能使用
相关推荐
聆风吟º10 分钟前
CANN hccl 深度解析:异构计算集群通信库的跨节点通信与资源管控实现逻辑
人工智能·wpf·transformer·cann
狸奴算君16 分钟前
告别机械回复:三步微调AI模型,打造会“读心”的智能客服
人工智能
七夜zippoe18 分钟前
脉向AI|当豆包手机遭遇“全网封杀“:GUI Agent是通向AGI的必经之路吗?
人工智能·ai·智能手机·agent·gui
木非哲19 分钟前
机器学习--随机森林--从一棵树的直觉到一片林的哲学
人工智能·随机森林·机器学习
神的泪水22 分钟前
CANN 系列底层篇:基于 shmem 实现 NPU 设备内存的高效共享
人工智能
皮卡丘不断更24 分钟前
手搓本地 RAG:我用 Python 和 Spring Boot 给 AI 装上了“实时代码监控”
人工智能·spring boot·python·ai编程
浪子小院34 分钟前
ModelEngine 智能体全流程开发实战:从 0 到 1 搭建多协作办公助手
大数据·人工智能
程序员打怪兽38 分钟前
详解YOLOv8网络结构
人工智能·深度学习
Yuer202538 分钟前
全国首例“AI 幻觉”侵权案判了:这不是 AI 准不准的问题,而是谁该为 AI 负责
人工智能·edca os·可控ai
一切尽在,你来1 小时前
1.1 AI大模型应用开发和Langchain的关系
人工智能·langchain