如何在神经网络中使用 Softmax 激活函数

yel*_*boy 3 python artificial-intelligence neural-network

到现在为止的理解 - 在神经元上应用了一个激活函数。函数内部是每个的总和(连接神经元值*连接权重)。单个值进入函数,从它返回单个值。上述理解适用于tanhsigmoid
现在我知道 softmax 是如何工作的,它总结了值和所有其他相关的东西。让我困惑的是softmax需要一个数字数组,我开始质疑构成数组的这些数字的来源是什么?

下图可以更深入地了解问题

在此处输入图片说明

scn*_*erd 6

Softmax 作用于整个神经元层,并且必须具有它们的所有值才能计算它们的每个输出。

softmax 函数看起来像softmax_i(v) = exp(v_i)/sum_j(exp(v_j)),其中 v 将是您的神经元值(在您的图像中,[0.82, 1.21, 0.74]),并且exp只是exp(x) = e^x。因此,exp(v_i)将是[2.27, 3.35, 2.096]。将这些值中的每一个除以整个向量的总和,你就会得到[0.29, 0.43, 0.27]。这些是神经元的激活输出。

这很有用,因为这些值加起来为 1(请原谅上面例子中的舍入误差,总和为 0.99……你明白了),因此可以解释为概率,例如,图像是一个特定的概率类(当它只能属于一个类时)。这就是为什么计算需要知道整个神经元向量的值,如果只知道单个神经元的值,则无法计算。

请注意,因此,在 softmax 之后通常不会有另一层。通常,softmax 被用作输出层上的激活,而不是像您展示的中间层。也就是说,按照您展示的方式构建网络是完全有效的,您只会有另一个权重层连接到您的单个输出神经元,并且您无法再保证该输出值可能是什么。一个更典型的架构将是某种东西2 neurons -> 3 neurons (sigmoid) -> 4 neurons (softmax),现在您将有可能您的输入值属于四个类别之一。