Die Rechenregel für das letzte Gewicht, nämlich das Bias-Gewicht, ist:
deltaWn = error * TrainingParameter.learningRate * 1
Über die Lernrate kann man somit einstellen, wie stark der Fehler berücksichtigt wird.
Die Gewichtsjustierung ist dann wie folgt:
newWeighti = oldWeighti + deltaWi
Ist deltaW positiv, wird das Gewicht etwas vergrößert, ist deltaW negativ, wird das Gewicht etwas verkleinert.
Die Implementierung der letztgenannten Regeln geschieht mit Hilfe zweier Methoden:
private void calculateNewWeights(double target) {
double error = target - ProcessMonitoring.lastOutputWithActivationFunction;
System.out.print("error: " + error + "\nweight adjustment" + "\nnew weights: ");
for (int i = 0; i < ProcessMonitoring.lastWeights.length; i++) {
double newWeight = neuron.getWeights(i) + calculateDeltaW(i, error);
neuron.setWeights(i, newWeight);
System.out.print(newWeight + " ");
}
System.out.println();
}
private double calculateDeltaW(int i, double error) {
double deltaW = error * TrainingParameter.learningRate; // delta rule
deltaW *= (i < inputs.length) ? inputs[i] : 1; // weight : bias
return deltaW;
}
Somit fehlt nur noch eine letzte Methode:
public void testAllInputsAndShowResults() {
int learnedInPercent = 0;
System.out.print("outputs: ");
for (int i = 0; i < TrainingParameter.inputs.length; i++) {
calculateOutput(TrainingParameter.inputs[i], TrainingParameter.activationFunction);
System.out.print(ProcessMonitoring.lastOutputAsSum + " ");
if (ProcessMonitoring.lastOutputWithActivationFunction == TrainingParameter.targets[i])
learnedInPercent++;
}
learnedInPercent /= TrainingParameter.inputs.length * 0.01;
System.out.println("\nlearned in percent: " + learnedInPercent + "\n");
}
Diese Methode ist „dirty“, weil sie verschiedene Dinge tut: Sie legt nacheinander alle Eingangskombinationen an das Neuron an und sie gibt die Ergebnisse des Neurons bzw. die Information, wie viel Prozent der Ergebnisse richtig sind, auf der Konsole aus.
Damit besteht das gesamte Projekt aus den (hier vollständig beschriebenen) Klassen von Abbildung 17.
Abbildung 17: Alle Klassen für das Maschinelle Lernen mit nur einem Neuron (Perzeptron)
Die gesamte Software findet sich unter: https://github.com/Ehlert99/Perceptron
- 19 -