在多分类任务中,Softmax 函数是深度学习中常见的激活函数之一,常用于模型输出层,将原始分数转换为概率分布。本文将详细介绍 Softmax 的数学原理、Python 实现方式以及其在实际应用中的重要意义。

📘 一、什么是 Softmax 函数?

Softmax 函数是一种归一化函数,能够将一个实数向量映射为一个概率分布。它的输出是一个向量,所有元素非负,且总和为 1。

🧮 二、Softmax 的数学定义

z=[z_{1},z_{2},…,z_{k}]是长度为K的向量,Softmax 函数的输出 \hat{y}_i定义为:

\hat{y}_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} \quad \text{for } i = 1, 2, ..., K 

特点:

  • 所有输出 \hat{y}_i∈(0,1)

  • \sum_{i=1}^{K}\hat{y}_i=1,可解释为概率分布

🧑‍💻 三、Python 实现 Softmax 函数

以下是Softmax函数 Python 实现代码,简洁直观:

import math

def 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]

⚠️ 四、数值稳定性优化

实际训练中,若 z_{i} 值过大,直接计算 e^{zi} 可能导致数值溢出。因此需引入数值稳定处理:

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 的区别 

比较项SigmoidSoftmax
输出范围(0, 1)(0, 1),且总和为 1
适用场景二分类多分类(互斥类)
输出结构单个概率值概率分布向量
是否归一化否(不强制概率和为 1)是(概率和严格为 1)

🧠 七、总结

  • Softmax 是处理多分类问题的核心函数;

  • 它将模型输出转换为概率,便于分类决策;

  • 推荐搭配 交叉熵损失函数 使用,优化分类准确率;

  • 实际实现中应考虑 数值稳定性

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐