Tanh (Hyperbolic Tangent)
Tanh bildet Eingaben auf Werte zwischen −1 und 1 auf einer um null zentrierten S-Kurve ab. Behandelt werden die Formel, der Gradient und der Einsatz in RNNs, GANs und Regelungssystemen sowie PyTorch-Code.
Der hyperbolische Tangens, tanh(x) = (eˣ − e^(−x)) / (eˣ + e^(−x)), ist eine Aktivierungsfunktion, die jede reelle Zahl entlang einer S-förmigen, um null zentrierten Kurve auf einen Wert zwischen −1 und 1 abbildet. Er ist eine skalierte Sigmoidfunktion, tanh(x) = 2σ(2x) − 1, hat also eine ähnliche Form wie die Sigmoidfunktion, gibt aber für negative Eingaben negative Werte zurück und hat im Ursprung eine Steigung von 1. Bis in die 1990er- und 2000er-Jahre war Tanh die Standardaktivierung in den verborgenen Schichten von neuronalen Netzen. Heute formt sie den verborgenen Zustand rekurrenter neuronaler Netze (RNNs), begrenzt die Ausgaben von Bildgeneratoren und Steuerungsrichtlinien und hält Werte innerhalb größerer Modelle im zulässigen Bereich.
Formel und Eigenschaften#
Tanh ist eine ungerade Funktion: tanh(−x) = −tanh(x), wobei tanh(0) = 0 gilt. In der Nähe von null verläuft sie nahezu linear, tanh(x) ≈ x, und jenseits von etwa ±3 flacht sie in Richtung ±1 ab. Ihre Ableitung, 1 − tanh²(x), ist im Ursprung gleich 1, also viermal so groß wie das Maximum der Sigmoidfunktion von 0.25, und nähert sich null, wenn die Kurve in die Sättigung geht. Das folgende PyTorch-Codebeispiel berechnet Tanh und ihren Gradienten und vergleicht anschließend die mittleren Ausgaben von Tanh und Sigmoid bei Eingaben mit Mittelwert null:
import torch
x = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0], requires_grad=True)
y = torch.tanh(x)
# The derivative of tanh is 1 - tanh(x)^2, which peaks at 1 when x = 0
y.sum().backward()
print(f"Tanh: {[round(v, 3) for v in y.tolist()]}")
print(f"Gradient: {[round(v, 3) for v in x.grad.tolist()]}")
# For zero-mean inputs, tanh outputs average near 0 and sigmoid outputs near 0.5
torch.manual_seed(0)
z = torch.randn(100_000)
print(f"Mean output, tanh: {torch.tanh(z).mean():.3f}, sigmoid: {torch.sigmoid(z).mean():.3f}")Es gibt Tanh-Werte von [-0.995, -0.762, 0.0, 0.762, 0.995] und Gradienten von [0.01, 0.42, 1.0, 0.42, 0.01] aus. Damit ist der Gradient bei ±3 nur ein Hundertstel so groß wie sein Wert bei null. Bei 100.000 standardnormalverteilten Eingaben liegt der Mittelwert der Tanh-Ausgaben bei etwa 0.0 und der der Sigmoid-Ausgaben bei etwa 0.5.
Warum um null zentrierte Ausgaben hilfreich sind#
Die Gewichtsgradienten eines Neurons sind proportional zu seinen Eingaben. Wenn alle Eingaben positiv sind, wie es bei Sigmoid-Ausgaben immer der Fall ist, haben alle Gewichtsgradienten eines Neurons bei jedem Aktualisierungsschritt dasselbe Vorzeichen. Dadurch können seine Gewichte nur gemeinsam steigen oder fallen und erreichen ihr Optimum auf einem Zickzackkurs. Tanh-Ausgaben sind ungefähr zu gleichen Teilen positiv und negativ. So kann sich jedes Gewicht unabhängig bewegen, und die Eingaben der nächsten Schicht bleiben nahe einem Mittelwert von null, bei dem Gradientenabstieg schneller konvergiert. Aus diesem Grund empfahlen Yann LeCun und seine Kolleginnen und Kollegen 1998 in ihrem Leitfaden „Efficient BackProp“ für verborgene Schichten symmetrische Funktionen statt der logistischen Sigmoidfunktion, insbesondere die skalierte Form 1.7159 · tanh(2x/3). Tanh geht weiterhin in die Sättigung, und das Stapeln vieler Tanh-Schichten verkleinert die Gradienten während der Rückwärtspropagierung – das Problem verschwindender Gradienten.
Einsatzbereiche von Tanh#
- Rekurrente Netze: Ein einfaches RNN aktualisiert seinen Zustand nach der Formel hₜ = tanh(Wxₜ + Uhₜ₋₁ + b), und Tanh ist die standardmäßige Nichtlinearität von
nn.RNNin PyTorch. In LSTM- und GRU-Zellen erzeugt Tanh den Kandidateninhalt und begrenzt beim LSTM vor der Ausgabe den Zellzustand, während Sigmoid-Tore bestimmen, wie viel davon verwendet wird. Der begrenzte Wertebereich verhindert, dass ein Zustand, der Schritt für Schritt zurückgeführt wird, unbegrenzt anwächst. - GAN-Generatoren: DCGAN schließt seinen Generator mit Tanh ab, sodass die generierten Pixel zwischen −1 und 1 liegen – dem Wertebereich, auf den die Trainingsbilder skaliert werden. Viele spätere generative gegnerische Netze (GANs) verwenden denselben Ansatz.
- Begrenzte Aktionen: Richtlinien für kontinuierliche Steuerung beim bestärkenden Lernen leiten ihre Ausgaben durch Tanh, damit jeder Steuerbefehl innerhalb der Aktuatorgrenzen bleibt. Soft Actor-Critic begrenzt Stichproben aus einer Gaußschen Richtlinie auf diese Weise.
- Begrenzung von Logits: Googles Sprachmodelle Gemma 2 berechnen cap · tanh(logits / cap), mit einer Obergrenze von 50 für Attention-Logits und 30 für die abschließenden Logits. Kleine Logits bleiben nahezu unverändert, große können die Obergrenze nie überschreiten.
- Näherung für GELU: 0.5x(1 + tanh(√(2/π)(x + 0.044715x³))) nähert GELU sehr genau an, und der ursprüngliche Code von GPT-2 und BERT berechnet GELU auf diese Weise.
- Normalisierende Flüsse: Flüsse im RealNVP-Stil enden häufig jedes Skalierungsnetz mit Tanh, sodass jede Kopplungsschicht ihre Eingaben mit einem Faktor zwischen e⁻¹ und e skaliert. Das hält das Training numerisch stabil. YOLO26-Modelle zur Posenschätzung werden mit einem Verlust für die Schätzung der logarithmischen Likelihood über Residuen trainiert. Der sechsschichtige RealNVP-Fluss, bei dem jedes Skalierungsnetz mit Tanh abschließt, modelliert dabei, wie weit vorhergesagte Schlüsselpunkte von den tatsächlichen Positionen abweichen.
Tanh und verwandte Funktionen im Vergleich#
- Sigmoid: Tanh ist eine auf den Wertebereich −1 bis 1 gestreckte und horizontal um den Faktor zwei gestauchte Sigmoidfunktion. Dadurch steigt die maximale Steigung von 0.25 auf 1. Der Wertebereich von 0 bis 1 macht Sigmoid zur bevorzugten Funktion für Wahrscheinlichkeiten und Tore.
- Hardtanh: Eine stückweise lineare Variante, die Eingaben auf [−1, 1] begrenzt. Sie ist rechnerisch günstiger, und ihr Gradient ist außerhalb dieses Bereichs genau 0.
- ReLU: max(0, x) geht bei positiven Eingaben nie in die Sättigung und erfordert nur einen Vergleich. Deshalb haben ReLU und glatte Nachfolger wie SiLU Tanh in den verborgenen Schichten tiefer konvolutionaler neuronaler Netze (CNNs) und Transformern ersetzt. Im AlexNet-Paper erreichte ein vier Schichten tiefes CNN mit ReLUs den Trainingsfehler von 25 % auf CIFAR-10 sechsmal schneller als dasselbe Netz mit Tanh-Einheiten.










