什么是 Softmax 函数?
Softmax 函数可以把一个包含 K 个实数的向量转换成一组概率分布:每个输出值都严格介于 0 和 1 之间,且全部 K 个输出值相加恰好等于 1。它是神经网络分类器输出层最常用的激活函数,能够把模型的原始得分(logits)转换为各个类别的概率。由于 Softmax 是无量纲的,所以输入值都是没有单位的纯数字。
如何使用本计算器
在输入框中填入你的向量,数字之间用逗号、空格或换行分隔即可(例如 1, 2, 3)。这些数字可以是正数、负数、零或小数。点击计算后,你将得到每个分量对应的 Softmax 概率、所有输出值的总和(应等于 1),以及 argmax——即最大概率所在的位置(从 1 开始计数的索引)。
公式详解
对于第 j 个分量,Softmax 的计算公式为 \(\sigma(z)_j = e^{z_j} / \sum_{k} e^{z_k}\)。取指数运算可以让每一项都变成正数,再除以总和进行归一化,使它们相加等于 1。为了保证数值稳定,本计算器会在取指数之前,先从每个元素中减去最大值 \(m\):
$$\sigma(z)_j = \frac{e^{\,z_j - m}}{\displaystyle\sum_{k} e^{\,z_k - m}}$$其中的公共因子 \(e^{-m}\) 会在上下相约后抵消,因此结果完全相同,同时还能避免输入值过大时发生溢出。
实例演示
以 \(z = (1, 2, 3)\) 为例:\(e^{1} = 2.71828\),\(e^{2} = 7.38906\),\(e^{3} = 20.08554\),三者之和为 \(30.19287\)。用每一项分别除以这个总和,得到 \(\sigma = (0.09003, 0.24473, 0.66524)\),它们相加正好等于 1。argmax 为索引 3,对应最大的输入值,其概率为 \(0.66524\)。
常见问题
为什么输出值的总和始终等于 1?因为每个指数项都被所有指数项的总和除过一次,这种归一化处理保证了它们相加必然为 1。
如果所有输入值都相等会怎样?结果会是一个均匀分布,每个输出值都等于 \(1/K\)。
给每个输入都加上同一个常数,结果会改变吗?不会。Softmax 具有平移不变性:给所有输入加上相同的常数 \(c\),输出结果保持不变——这正是「减去最大值」这一做法安全可靠的原因。