softmax激活函数的两种表示方式
date
Mar 10, 2023
slug
2023-03-20
status
Published
tags
深度学习
summary
type
Post
softmax函数的定义:
其中,$x_i$表示输入向量中的第$i$个元素,$k$是向量的长度。上式中的指数函数$e^{x_i}$计算了$x_i$的指数值,而分母 $\sum_{j=1}^{k} e^{x_j}$ 计算了所有指数值的和。因此,softmax输出的概率值取决于输入向量中每个元素的指数值。
例如,在以下示例中:
x = np.array([1000, 2000, 3000])
y = np.exp(x) / np.sum(np.exp(x))
print(y) # Output: [0. 0. 1.]
可以看到,softmax输出的概率分布仅给出了一个非零值,即第三个元素,而其他元素的值接近于0,这表明数值不稳定。在没有减去最大值的情况下,某些输入向量的元素的指数值非常大,则这些元素的softmax输出概率将会非常接近1,而其他元素的输出概率则会非常接近0,这会导致数值不稳定。
但是,如果我们减去最大值,即:
x_minus_max = x - np.max(x)
y = np.exp(x_minus_max) / np.sum(np.exp(x_minus_max))
print(y)
# Output: [0. 0. 1.]
可以看到,在减去最大值后,softmax输出的概率分布与上面的示例相同,但是结果更为稳定。
等价的原因是,上下同时乘以x_max皆可以消去指数上的幂数。