Реализация софтмакс производной - PullRequest
0 голосов
/ 10 марта 2020

Я знаю, что уже есть несколько похожих вопросов, но все еще не совсем понимаю, что является производной функции 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.

Я действительно надеюсь, что вы поможете мне понять, чего именно не хватает. Спасибо!

...