深度学习基础 | Softmax 函数原理详解 + Python实现 + 数学公式
在多分类任务中,Softmax 函数是深度学习中常见的激活函数之一,常用于模型输出层,将原始分数转换为概率分布。本文将详细介绍 Softmax 的数学原理、Python 实现方式以及其在实际应用中的重要意义。
📘 一、什么是 Softmax 函数?
Softmax 函数是一种归一化函数,能够将一个实数向量映射为一个概率分布。它的输出是一个向量,所有元素非负,且总和为 1。
🧮 二、Softmax 的数学定义
设 =[
,
,…,
]是长度为
的向量,Softmax 函数的输出
定义为:
特点:
所有输出
∈(0,1)
,可解释为概率分布
🧑💻 三、Python 实现 Softmax 函数
以下是Softmax
函数 Python 实现代码,简洁直观:
import mathdef softmax(z):"""实现 Softmax 函数参数:z (List[float]):原始得分向量返回:List[float]:归一化后的概率分布"""exp_values = [math.exp(i) for i in z]sum_exp = sum(exp_values)return [val / sum_exp for val in exp_values]# 示例
logits = [2.0, 1.0, 0.1]
probs = softmax(logits)
print("Softmax 结果:", probs)
✅ 输出示例:
Softmax 结果: [0.659, 0.242, 0.098]
⚠️ 四、数值稳定性优化
实际训练中,若 值过大,直接计算
可能导致数值溢出。因此需引入数值稳定处理:
def stable_softmax(z):max_z = max(z) # 关键步骤exp_values = [math.exp(i - max_z) for i in z]sum_exp = sum(exp_values)return [val / sum_exp for val in exp_values]
🎯 五、Softmax 的应用场景
场景 | 说明 |
---|---|
多分类神经网络输出层 | 常用于最后一层输出 K 个类别的概率 |
分类模型评估 | 搭配交叉熵损失函数(Categorical Cross Entropy) |
注意力机制(Transformer) | 用于计算注意力权重(softmax(score)) |
📌 六、Softmax 与 Sigmoid 的区别
比较项 | Sigmoid | Softmax |
---|---|---|
输出范围 | (0, 1) | (0, 1),且总和为 1 |
适用场景 | 二分类 | 多分类(互斥类) |
输出结构 | 单个概率值 | 概率分布向量 |
是否归一化 | 否(不强制概率和为 1) | 是(概率和严格为 1) |
🧠 七、总结
Softmax 是处理多分类问题的核心函数;
它将模型输出转换为概率,便于分类决策;
推荐搭配 交叉熵损失函数 使用,优化分类准确率;
实际实现中应考虑 数值稳定性。