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;
}
我目前正在 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;
}