Leaky ReLU
Leaky ReLU gibt negative Eingaben mit einer kleinen Steigung, oft 0,01, weiter. Dadurch fließen Gradienten weiterhin und Neuronen vermeiden das Problem sterbender ReLU-Einheiten.
Leaky ReLU (undichte gleichgerichtete lineare Einheit) ist eine Aktivierungsfunktion, die eine positive Eingabe unverändert zurückgibt und eine negative Eingabe mit einer kleinen festen Steigung, etwa 0,01, multipliziert. Sie verändert die standardmäßige ReLU, die für jede negative Eingabe null ausgibt: Negative Werte erzeugen weiterhin eine kleine Ausgabe und, was wichtiger ist, einen von null verschiedenen Gradienten bei der Backpropagation. Andrew Maas, Awni Hannun und Andrew Ng beschrieben die Funktion 2013 in einer Studie zu Rectifier-Aktivierungen in akustischen Modellen für die Spracherkennung und verwendeten eine Steigung von 0,01. Sie kommt in Deep-Learning-Modellen zum Einsatz, bei denen der Gradientenfluss wichtig ist, etwa in Diskriminatoren generativer adversarialer Netze, älteren YOLO-Objektdetektoren und neuronalen Verarbeitungseinheiten, die quantisierte Modelle mit stückweise linearen Aktivierungen ausführen.
So funktioniert Leaky ReLU#
Leaky ReLU berechnet f(x) = x für x > 0 und f(x) = αx für x ≤ 0, wobei die negative Steigung α ein fester Hyperparameter zwischen 0 und 1 ist. Die Ableitung beträgt bei positiven Eingaben 1 und bei negativen Eingaben α, sodass jede Eingabe einen Teil des Gradienten an die Gewichte zurückgibt, die sie erzeugt haben. Die übliche Steigung hängt von Quelle und Framework ab: PyTorchs nn.LeakyReLU verwendet standardmäßig 0,01, TensorFlows tf.nn.leaky_relu 0,2 und die Schicht LeakyReLU von Keras 0,3. Dieser Code leitet negative Eingaben durch ReLU und Leaky ReLU und berechnet jeweils den Gradienten:
import torch
from torch import nn
# Negative pre-activations, the inputs a ReLU unit turns into zeros
x = torch.tensor([-3.0, -1.0, -0.5], requires_grad=True)
for activation in (nn.ReLU(), nn.LeakyReLU(negative_slope=0.01)):
y = activation(x)
y.sum().backward() # gradient that flows back toward the weights
print(f"{activation}: output {y.detach().numpy()}, gradient {x.grad.numpy()}")
x.grad = NoneDer Code gibt ReLU(): output [0. 0. 0.], gradient [0. 0. 0.] und LeakyReLU(negative_slope=0.01): output [-0.03 -0.01 -0.005], gradient [0.01 0.01 0.01] aus. ReLU leitet von diesen Eingaben keinen Gradienten zurück, sodass Gradientenabstieg die Gewichte, die sie erzeugt haben, nicht verändern kann. Leaky ReLU leitet dagegen 1 % des vorgelagerten Gradienten zurück.
Das Problem der sterbenden ReLU#
Ein ReLU-Neuron stirbt, wenn sich seine Gewichte und sein Bias so weit verschieben, dass seine Voraktivierung für alle Eingaben in den Trainingsdaten negativ ist. Seine Ausgabe ist dann immer null, ebenso sein Gradient, und seine eingehenden Gewichte werden nie wieder aktualisiert. Das Neuron ist damit dauerhaft aus dem neuronalen Netz verloren. Eine hohe Lernrate oder eine starke negative Bias-Aktualisierung erhöht die Wahrscheinlichkeit dafür. Leaky ReLU behält auf der negativen Seite einen kleinen Gradienten bei. Ein Neuron, das in den negativen Bereich abdriftet, kann dadurch wieder zurückgeholt werden:
Das Problem der sterbenden ReLU unterscheidet sich vom Problem des verschwindenden Gradienten, bei dem Gradienten allmählich schrumpfen, wenn sie viele Schichten mit sättigenden Funktionen wie Sigmoid oder tanh durchlaufen.
Leaky ReLU im Vergleich zu verwandten Aktivierungsfunktionen#
- ReLU: Gibt für negative Eingaben exakt null aus. Dadurch sind Aktivierungen spärlich und Berechnungen günstig, aber Neuronen können sterben. Leaky ReLU gibt die exakte Sparsität zugunsten eines überall vorhandenen Gradienten auf.
- Parametrische ReLU (PReLU): Lernt die negative Steigung während des Trainings, typischerweise einen Wert pro Kanal, statt sie festzulegen. Kaiming He und Kollegen initialisierten die Steigung mit 0,25. Das ist auch der Standardwert von PyTorchs
nn.PReLU. - SiLU und GELU: Glatte Kurven, die bei negativen Eingaben leicht unter null fallen und bei null keinen scharfen Knick haben. SiLU ist die Standardfunktion in modernen YOLO-Modellen, GELU ist bei Transformern verbreitet. Beide benötigen pro Wert eine Exponentialfunktion, während Leaky ReLU nur einen Vergleich und eine Multiplikation erfordert.
Einsatzbereiche von Leaky ReLU#
- DCGAN-Diskriminatoren: Die DCGAN-Architektur verwendete in jeder Diskriminatorschicht Leaky ReLU mit einer Steigung von 0,2. Dadurch erhält der Generator auch für Bilder brauchbare Gradienten, die der Diskriminator ablehnt. Viele spätere GANs übernahmen diese Wahl.
- Frühe YOLO-Detektoren: Das ursprüngliche YOLO verwendete in jeder Schicht außer der letzten Leaky ReLU mit einer Steigung von 0,1. Dasselbe galt für YOLOv2 und YOLOv3. YOLOv5 nutzte Leaky ReLU bis zur Version 4.0 vom Januar 2021, in der sie durch SiLU ersetzt wurde.
- Graphen-Attention-Netze: Diese Graph-Neuronalen Netze wenden beim Bewerten, wie stark jeder Knoten seinen Nachbarn Aufmerksamkeit schenken soll, Leaky ReLU mit einer Steigung von 0,2 an.
- Edge-AI-Beschleuniger: Ganzzahlige neuronale Verarbeitungseinheiten, die quantisierte Modelle ausführen, können eine stückweise lineare Aktivierungsfunktion in die vorhergehende Faltung integrieren. AMDs Xilinx DPU tut dies für ReLU und Leaky ReLU. Sigmoid und damit auch SiLU werden dagegen auf der Host-CPU ausgeführt.
YAML-Dateien für Ultralytics-YOLO-Modelle akzeptieren einen Schlüssel activation, der SiLU in jedem standardmäßigen Faltungsblock ersetzt. So kann YOLO26 mit activation: nn.LeakyReLU(0.1015625) trainiert werden, um der festen Steigung der DPU von 26/256 zu entsprechen.










