Künstliche Intelligenz mit Java
Maschinelles Lernen mit Neuronalen Netzwerken

6. Build the configuration (neural network)

Der NeuronalNetConfiguration-Builder() ist der Startpunkt, um beliebige Multi-Layer-Konfigurationen zu erzeugen. Die Werte, die hier gesetzt werden, gelten erstmal für alle Schichten. Jede einzelne Schicht kann aber bestimmte Werte auch überschreiben. Zwei wichtige Hyperparameter sind die Aktivierungsfunktion und die Lernrate:

    logger.info("Build configuration....");
    // ...
    double learningRate = 0.1;
    MultiLayerConfiguration configuration = new NeuralNetConfiguration.Builder()
      .activation(Activation.TANH)
      .updater(new Sgd(learningRate))

Statt der Sigmoid-Funktion wird hier die Tanh-Funktion (hyperbolic tangent function) für alle Layer verwendet (s. Abbildung 49). Die updater(…)-Methode bekommt ein Sgd-Update-Objekt (Stochastic Gradient Descent) übergeben, welches die Lernrate kapselt.

Abbildung 49 (*Q39): Tanh-Aktivierungsfunktion im Vergleich zur Sigmoid-Aktivierungsfunktion

Jetzt kann man mit Hilfe der list()-Methode das eigentliche Netzwerk konfigurieren. Diese Methode erzeugt einen ListBuilder, mit dem man dann eine NeuralNetConfiguration erstellen kann. In diesem Fall soll es einen Input-Layer mit 3 Eingängen, einen Hidden-Layer und einen Output-Layer mit 3 Ausgängen geben:

    int numberInputs = 3;
    int numberBetweenInOut = 3;
    int numberOutputs = 3;
    // ...
    MultiLayerConfiguration configuration = new NeuralNetConfiguration.Builder()
      // ...
      .list()
      .layer(new DenseLayer.Builder()
      .nIn(numberInputs).nOut(numberBetweenInOut).build())
      .layer(new DenseLayer.Builder()
      .nIn(numberBetweenInOut).nOut(numberBetweenInOut).build())
      .layer(new OutputLayer.Builder()
      .nIn(numberBetweenInOut).nOut(numberOutputs).build())
      .build();


Ein OutputLayer ist im Prinzip auch ein DenseLayer, der Unterschied liegt jedoch in der Fehler-Funktion (loss function), die dort zusätzlich angegeben werden kann. Diese errechnet die Abweichung zwischen dem, was das Modell während des Trainings ausgibt, und dem gewünschten Output (Target). Eine bekannt Fehler-Funktion ist z. B. der MSE (Mean Squared Error) bei linearer Regression. Mit dem errechneten Fehler werden dann während der Backpropagation die Gewichte des Neuronalen Netzwerkes angepasst.

Durch das letzte  build() wird die vorstehende Konfiguration erzeugt und zurückgegeben.


- 68 -