Softmax 激活实现

Softmax Activation Implementation

我目前正在 Java 开发自己的神经网络实现。我已经实现了一些常用的激活函数,比如 Sigmoid 或 ReLU,但我不知道如何实现 Softmax。

我想要一个像

这样的方法
private double softmax(double input) {
    double output = ???;
    return output;
}

对实现的外观有什么想法吗?我的学习算法还需要 softmax 的导数。

Softmax 没有获得单个输入值。它将当前 NN 层的所有值的向量作为输入("values" 我的意思是前一层的输出由内核矩阵点积并添加到偏差中),并输出 概率分布,所有值都在[0, 1]范围内。

因此,例如,如果您的 NN 层有 5 个 units/neurons,softmax 函数将输入 5 个值并将它们归一化为概率分布,所有 5 个输出值都在 [0, 1] 之间,使用以下公式:

关于我们的例子:K = 5 和 Z1, Z2, ..., 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;
}