Я знаю, что уже есть несколько похожих вопросов, но все еще не совсем понимаю, что является производной функции softmax. Вот как я реализовал функцию softmax в java:
public double[] activation(double[] input) {
double[] exp = new double[input.length];
double sum = 0;
for(int neuron = 0; neuron < exp.length; neuron++) {
exp[neuron] = Math.exp(input[neuron]);
sum += exp[neuron];
}
double[] output = new double[input.length];
for(int neuron = 0; neuron < output.length; neuron++) {
output[neuron] = exp[neuron] / sum;
}
return output;
}
И вот как в настоящее время выглядит моя производная:
public double[] derivative(double[] input) {
double[] softmax = activation(input);
double[] output = new double[input.length];
for(int neuron = 0; neuron < output.length; neuron++) {
output[neuron] = softmax[neuron] * (1d - softmax[neuron]);
}
return output;
}
Я знаю, что в производной все еще чего-то не хватает, насколько я понял, мне нужно добавить различие в регистре. Я часто читаю что-то о i==j
или i!=j
, но я не уверен, к чему относятся i
и j
.
Я действительно надеюсь, что вы поможете мне понять, чего именно не хватает. Спасибо!