我目前正在使用Java开发自己的神经网络。我已经实现了一些常见的激活功能,例如Sigmoid或ReLU,但是我不知道如何实现Softmax。
我想有一个类似的方法
private double softmax(double input) {
double output = ???;
return output;
}
任何想法如何看待实现?我的学习算法也需要softmax的导数。
Softmax不会获得单个输入值。它以当前NN层的所有值的向量作为输入(“值”是指前一层点的输出,该点是由内核矩阵乘积并添加到偏差中),并输出概率分布所有值都落在[0, 1]
范围内。
因此,例如,如果您的NN层具有5个单位/神经元,则softmax函数将5个值用作输入,并使用以下公式将它们归一化为所有5个输出值在[0, 1]
之间的概率分布:
在我们的示例中:K = 5和Z 1,Z 2,...,Z 5是输入向量。
这是实现softmax的示例Java代码:
private double softmax(double input, double[] neuronValues) {
double total = Arrays.stream(neuronValues).map(Math::exp).sum();
return Math.exp(input) / total;
}