Signatur
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
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;
}
?>
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;
}
?>
// 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.