softmax激活函数的两种表示方式

softmax函数的定义:

\[softmax(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{k} e^{x_j}} \]

其中,\(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皆可以消去指数上的幂数。

posted @ 2023-03-20 10:11  菠菜火锅  阅读(149)  评论(0编辑  收藏  举报