softmax 概率归一化

介绍

softmax 的可实现 “概率归一化”

提示:与 “普通归一化(如 min-max 归一化)”有本质区别

softmax 激活函数 用于解决 多分类 问题,详见链接。

公式

softmax 的数学定义如下(以 PyTorch 中的一维张量为例):
对于输入张量:

x = [x_1,x_2,\ldots,x_n]

softmax 计算每个元素的输出:

\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}

\text{j} = 1,2,3, \ldots ,n

特征:

  • 所有输出值都在 (0, 1) 区间内;
  • 所有输出值的 总和为 1。

这完全符合 “概率归一化” 的要求——将数据映射到特定范围,且满足特定约束,即:总和为1

代码验证(PyTorch 实现)

import torch
import torch.nn.functional as F

# 定义一个任意一维张量(模拟分类模型的logits输出)
logits = torch.tensor([1.0, 2.0, 3.0])

# 应用softmax归一化
softmax_out = F.softmax(logits, dim=0)

print("softmax输出:", softmax_out)
# 输出:tensor([0.0900, 0.2447, 0.6652])

print("输出总和:", softmax_out.sum())
# 输出:tensor(1.0)(完美归一化到总和为1)

print("每个值的范围:", (softmax_out.min(), softmax_out.max()))
# 输出:(tensor(0.0900), tensor(0.6652))(都在0~1之间)

softmax 归一化 vs 普通归一化

虽然都叫“归一化”,但 softmax 和 min-max 归一化、L2 归一化等场景不同,核心差异如下:

特性 softmax 归一化 min-max 归一化([0,1]) L2 归一化
输出约束 总和=1(概率分布) 范围=[0,1] 向量模长=1
数值敏感性 放大差异(指数特性) 线性映射,保留原始差异 仅调整尺度,保留方向
典型应用 多分类任务(输出类别概率) 特征预处理(统一量纲) 相似度计算(如余弦相似度)

对比 softmax 和 min-max 归一化

# 同一组数据,两种归一化方式
x = torch.tensor([1.0, 2.0, 3.0])

# softmax归一化(概率分布)
softmax_x = F.softmax(x, dim=0)
# min-max归一化(线性映射到0~1)
min_max_x = (x - x.min()) / (x.max() - x.min())

print("softmax归一化:", softmax_x)  # [0.09, 0.24, 0.67](差异被放大)
print("min-max归一化:", min_max_x)  # [0.0, 0.5, 1.0](线性保留差异)

注意事项

  1. softmax 的“指数放大”特性:
    指数运算会让大值更大、小值更小,比如输入 [1,2,10],softmax 输出会接近 [0,0,1],这适合分类任务(突出最可能的类别),但不适合需要保留原始数值关系的场景。

总结

  1. softmax 是归一化的一种:它将任意实数映射到 (0,1) 区间,且总和为 1,是专为多分类设计的概率归一化函数。
  2. 和普通归一化的核心区别:softmax 是非线性的(指数运算),会放大数值差异;而 min-max 等是线性的,保留原始数值关系。
  3. 适用场景:softmax 仅用于分类任务的输出层(将 logits 转为类别概率),不适合特征预处理;特征预处理优先用 min-max、标准化(Z-score)等。

原文出处:/show_1GW2biBfUWT5.html