Start · Sprachen · PHP · Referenz · fann_set_activation_steepness_layer

fann_set_activation_steepness_layer

Funktion

Setzt die Aktivierungssteilheit für alle Neuronen einer bestimmten Schicht des neuronalen Netzes.

Kategorie: misc

Signatur

fann_set_activation_steepness_layer(resource $ann, float $steepness, int $layer): bool

Beschreibung

fann_set_activation_steepness_layer ist Teil der FANN-Erweiterung (Fast Artificial Neural Network) für PHP und erlaubt es, die Steilheit (Steepness) der Aktivierungsfunktion für alle Neuronen einer bestimmten Schicht gleichzeitig festzulegen. Die Steilheit beeinflusst, wie steil die Aktivierungsfunktion an einem gegebenen Punkt ist – ein höherer Wert führt zu steileren Übergängen.

Die Schichten werden nullbasiert indiziert: Schicht 0 ist die Eingabeschicht, gefolgt von versteckten Schichten und abschließend der Ausgabeschicht. Durch das gezielte Setzen der Steilheit pro Schicht lässt sich das Lernverhalten des Netzes feingranular steuern, da verschiedene Schichten unterschiedliche Aktivierungscharakteristiken benötigen können.

Diese Funktion ist besonders nützlich, wenn man das Training eines neuronalen Netzes optimieren möchte, ohne jeden Neuron einzeln über fann_set_activation_steepness konfigurieren zu müssen. Sie bietet eine effiziente Möglichkeit, alle Neuronen einer Schicht konsistent zu konfigurieren.

Typische Werte für die Steilheit liegen zwischen 0,1 und 1,0, wobei der Standardwert häufig 0,5 beträgt. Zu hohe Werte können zu Instabilitäten beim Training führen (Gradientenexplosion), zu niedrige Werte können das Lernen verlangsamen.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine gültige FANN-Ressource, die durch fann_create_standard, fann_create_sparse oder fann_create_shortcut erzeugt wurde.
$steepness Pflicht float Die gewünschte Aktivierungssteilheit als Gleitkommazahl. Typische Werte liegen zwischen 0.1 und 1.0. Der Wert beeinflusst, wie stark die Aktivierungsfunktion auf Eingangsveränderungen reagiert.
$layer Pflicht int Nullbasierter Index der Schicht, für die die Steilheit gesetzt werden soll. 0 entspricht der Eingabeschicht, höhere Indizes entsprechen versteckten Schichten und der Ausgabeschicht.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die Ressource ungültig ist oder der Schicht-Index außerhalb des gültigen Bereichs liegt).

Beispiele

Aktivierungssteilheit für versteckte Schicht setzen

<?php
// Neuronales Netz mit einer versteckten Schicht erstellen
// Eingabe: 2 Neuronen, versteckte Schicht: 3 Neuronen, Ausgabe: 1 Neuron
$ann = fann_create_standard(3, 2, 3, 1);

if ($ann) {
    // Aktivierungsfunktion für alle Schichten setzen
    fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
    fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

    // Steilheit für die versteckte Schicht (Schicht 1) setzen
    $result = fann_set_activation_steepness_layer($ann, 0.5, 1);

    if ($result) {
        echo "Aktivierungssteilheit 0.5 erfolgreich für Schicht 1 gesetzt." . PHP_EOL;
    } else {
        echo "Fehler beim Setzen der Aktivierungssteilheit." . PHP_EOL;
    }

    fann_destroy($ann);
} else {
    echo "Fehler beim Erstellen des neuronalen Netzes." . PHP_EOL;
}
?>
Aktivierungssteilheit 0.5 erfolgreich für Schicht 1 gesetzt.

Unterschiedliche Steilheiten für verschiedene Schichten

<?php
// Netz mit zwei versteckten Schichten erstellen
$ann = fann_create_standard(4, 4, 5, 3, 1);

if ($ann) {
    // Aktivierungsfunktion setzen
    fann_set_activation_function_hidden($ann, FANN_SIGMOID);
    fann_set_activation_function_output($ann, FANN_LINEAR);

    // Schicht 0 = Eingabeschicht (Steilheit hat dort kaum Wirkung)
    fann_set_activation_steepness_layer($ann, 1.0, 0);

    // Erste versteckte Schicht (Schicht 1) mit moderater Steilheit
    fann_set_activation_steepness_layer($ann, 0.35, 1);

    // Zweite versteckte Schicht (Schicht 2) mit höherer Steilheit
    fann_set_activation_steepness_layer($ann, 0.7, 2);

    // Ausgabeschicht (Schicht 3) mit Standard-Steilheit
    fann_set_activation_steepness_layer($ann, 0.5, 3);

    echo "Individuelle Steilheiten für alle Schichten gesetzt." . PHP_EOL;

    // Netz in Datei speichern
    fann_save($ann, '/tmp/my_network.net');
    fann_destroy($ann);
} else {
    echo "Fehler beim Erstellen des Netzes." . PHP_EOL;
}
?>
Individuelle Steilheiten für alle Schichten gesetzt.

// Wichtig · Fallstricke

Schicht-Indizierung: Beachte, dass die Schichten nullbasiert indiziert sind. Schicht 0 ist die Eingabeschicht, bei der das Setzen der Steilheit in der Praxis kaum eine Auswirkung hat, da Eingabeneuronen typischerweise keine Aktivierungsfunktion anwenden. Die letzte Schicht ist die Ausgabeschicht.

Wahl der Steilheit: Zu hohe Steilheitswerte (z. B. > 1.0) können beim Training zu Instabilitäten führen, da die Gradienten sehr groß werden können (Gradientenexplosion). Zu kleine Werte (z. B. < 0.1) können das Lernen stark verlangsamen (Vanishing Gradient). Für FANN_SIGMOID_SYMMETRIC ist ein Standardwert von 0.5 empfehlenswert.

Abhängigkeit von der Aktivierungsfunktion: Die Auswirkung der Steilheit hängt von der verwendeten Aktivierungsfunktion ab. Stelle sicher, dass die Aktivierungsfunktion vor der Steilheit gesetzt wurde, um ein konsistentes Verhalten zu gewährleisten. Verwende fann_set_activation_steepness für einzelne Neuronen oder fann_set_activation_steepness_hidden für alle versteckten Neuronen zugleich.