SiLU (Sigmoid Linear Unit)
SiLU, auch Swish genannt, multipliziert eine Eingabe mit ihrem Sigmoid-Wert und ergibt so eine glatte, selbstgesteuerte Aktivierungsfunktion. Behandelt werden die Mathematik dahinter, der Ursprung und der Vergleich mit ReLU.
Die Sigmoid-Linear-Einheit (SiLU) ist eine Aktivierungsfunktion mit der Definition SiLU(x) = x · σ(x), wobei σ die Sigmoidfunktion bezeichnet. Große positive Eingaben lässt sie nahezu unverändert passieren, große negative Eingaben bildet sie fast auf null ab und dazwischen verläuft sie gleichmäßig gekrümmt. Bei x ≈ −1.278 erreicht sie ein Minimum von etwa −0.278. SiLU ist dieselbe Funktion wie Swish mit β = 1; die beiden Namen werden synonym verwendet. Sie ist eine häufige Standardaktivierung in konvolutionalen Bildverarbeitungsmodellen. Im SwiGLU-Block aktiviert sie außerdem die Feed-forward-Schichten vieler großer Sprachmodelle (LLMs).
Definition und Eigenschaften#
SiLU multipliziert jede Eingabe mit einem Gate, σ(x), dessen Wert zwischen 0 und 1 liegt und das aus der Eingabe selbst berechnet wird. Daher spricht man von Selbst-Gating. Die Ableitung lautet σ(x) · (1 + x · (1 − σ(x))). Zusammen verleihen diese Eigenschaften SiLU vier Merkmale, die ihr Trainingsverhalten von ReLU unterscheiden:
- Überall glatt: Die Kurve und ihre Ableitung sind stetig und weisen bei null keinen Knick auf. Kleine Gewichtsänderungen bewirken daher nur kleine Änderungen der Ausgabe, was für den Gradientenabstieg geeignet ist.
- Gradient bei negativen Eingaben: Eine Einheit mit negativer Eingabe erhält weiterhin einen kleinen Gradienten und lernt deshalb weiter. ReLU-Einheiten, deren Eingaben dauerhaft negativ bleiben, erhalten überhaupt keinen Gradienten und können dauerhaft aufhören zu lernen. Dieses Problem ist als sterbende ReLU bekannt.
- Nicht monoton: Die Ausgabe fällt leicht, wenn x von stark negativen Werten bis etwa −1.28 steigt, und nimmt danach wieder zu. Die Funktion ist also nicht monoton.
- Nach unten beschränkt, nach oben unbeschränkt: Die Ausgaben fallen nie unter etwa −0.278, und positive Eingaben werden wie bei ReLU ohne Sättigung weitergegeben. So wird das Problem des verschwindenden Gradienten vermieden, das bei Sigmoid und tanh in tiefen Netzwerken auftritt.
Der folgende PyTorch-Code berechnet SiLU sowie die Gradienten von SiLU und ReLU an fünf Punkten.
import torch
import torch.nn.functional as F
x = torch.tensor([-4.0, -1.28, 0.0, 1.0, 4.0], requires_grad=True)
# SiLU(x) = x * sigmoid(x), verglichen mit ReLU für dieselben Eingaben
silu = F.silu(x)
relu = F.relu(x)
# Gradient jeder Aktivierung bezüglich ihrer Eingabe
silu_grad = torch.autograd.grad(silu.sum(), x)[0]
relu_grad = torch.autograd.grad(relu.sum(), x)[0]
print("SiLU output: ", [round(v, 4) for v in silu.tolist()])
print("SiLU gradient:", [round(v, 4) for v in silu_grad.tolist()])
print("ReLU gradient:", relu_grad.tolist())Ausgegeben werden SiLU-Werte [-0.0719, -0.2785, 0.0, 0.7311, 3.9281], SiLU-Gradienten [-0.0527, -0.0003, 0.5, 0.9277, 1.0527] und ReLU-Gradienten [0.0, 0.0, 0.0, 1.0, 1.0]. Bei −4 gibt ReLU den Wert 0 aus und leitet keinen Gradienten weiter; SiLU leitet weiterhin −0.0527 weiter. Bei −1.28 liegt SiLU mit −0.2785 an ihrem Minimum und ihr Gradient ist fast genau 0. Bei 4 ist ihr Gradient etwas größer als 1.
Ursprung des Namens#
Hendrycks und Gimpel nannten x · σ(x) in ihrem Paper aus dem Jahr 2016, in dem sie GELU vorstellten, Sigmoid-Linear-Einheit. Dort erschien die Funktion als sigmoidbasierte Variante von GELU: Sie schnitt schlechter als GELU, aber in der Regel besser als ReLU und ELU ab. Elfwing, Uchibe und Doya verwendeten SiLU 2017 für die Funktionsapproximation in neuronalen Netzen beim bestärkenden Lernen. Später im selben Jahr entdeckten Forschende bei Google x · σ(βx) durch eine automatisierte Suche nach Aktivierungsfunktionen erneut, nannten die Funktion Swish und berichteten, dass der Ersatz von ReLU die Top-1-Genauigkeit auf ImageNet bei Mobile NASNet-A um 0,9 % und bei Inception-ResNet-v2 um 0,6 % erhöhte. PyTorch ergänzte nn.SiLU in Version 1.7 unter dem älteren Namen.
SiLU und andere Aktivierungsfunktionen im Vergleich#
- ReLU: max(0, x) ist günstiger zu berechnen, erzeugt exakte Nullen und hat bei positiven Eingaben einen konstanten Gradienten von 1. SiLU ergänzt für glatte Übergänge und Gradienten auf der negativen Seite eine Sigmoidfunktion pro Element.
- GELU: x · Φ(x), wobei Φ die kumulative Verteilungsfunktion der Standardnormalverteilung bezeichnet. Die beiden Kurven haben dieselbe Form; die skalierte SiLU x · σ(1.702x) nähert GELU überall bis auf etwa 0.02 an. GELU ist die übliche Wahl in Transformern wie BERT und ViT, während SiLU häufiger in Detektoren auf CNN-Basis vorkommt.
- Sigmoid: σ(x) allein bildet Eingaben auf den Bereich von 0 bis 1 ab und sättigt an beiden Enden. Daher dient sie als Ausgabeschicht für Wahrscheinlichkeiten. Bei SiLU wird sie nur als Gate eingesetzt.
- Hard-Swish: x · ReLU6(x + 3) / 6 ist eine mit MobileNetV3 eingeführte Näherung an SiLU. Sie ersetzt das Sigmoid-Gate durch ein stückweise lineares Gate und vermeidet so die Exponentialfunktion auf mobiler Hardware.
- SwiGLU: Eine gegatete lineare Einheit, die SiLU(xW) elementweise mit einer zweiten Projektion xV multipliziert. Sie bildet den Feed-forward-Block von LLaMA und vielen anderen LLMs.
Einsatzbereiche von SiLU#
SiLU wird in EfficientNet unter dem Namen Swish durchgängig als Aktivierungsfunktion verwendet und ist bei modernen Echtzeit-Objektdetektoren weit verbreitet. Modelle von Ultralytics YOLO verwenden SiLU seit YOLOv5 v4.0, das im Januar 2021 LeakyReLU und Hardswish durch SiLU ersetzte, und in YOLO26 besteht jeder Conv-Block aus einer Faltung, einer Batch-Normalisierung und SiLU.










