Tanh (Hyperbolic Tangent)
Tanh, girdileri sıfır merkezli bir S eğrisinde −1 ile 1 arasındaki değerlere eşler. Formülünü, gradyanını, RNN'lerde, GAN'lerde ve denetimdeki kullanımını ve PyTorch kodunu ele alır.
Hiperbolik tanjant, tanh(x) = (eˣ − e^(−x)) / (eˣ + e^(−x)), sıfır merkezli S biçimli bir eğri boyunca herhangi bir gerçek sayıyı −1 ile 1 arasındaki bir değere eşleyen bir aktivasyon fonksiyonudur. Yeniden ölçeklendirilmiş bir sigmoid olan tanh(x) = 2σ(2x) − 1, sigmoid ile aynı şekle sahiptir ancak negatif girdiler için negatif değerler döndürür ve başlangıç noktasında eğimi 1'dir. Tanh, 1990'lar ve 2000'ler boyunca sinir ağlarının standart gizli katman aktivasyonuydu. Günümüzde yinelemeli sinir ağlarının (RNNs) gizli durumunu biçimlendirir, görüntü oluşturucuların ve kontrol politikalarının çıktılarını sınırlar ve daha büyük modeller içindeki değerlerin belirli bir aralıkta kalmasını sağlar.
Formül ve Özellikler#
Tanh, tanh(−x) = −tanh(x) ve tanh(0) = 0 olan tek bir fonksiyondur. Sıfırın yakınında neredeyse doğrusaldır: tanh(x) ≈ x; yaklaşık ±3'ün ötesinde ise ±1'e doğru yataylaşır. Türevi olan 1 − tanh²(x), başlangıç noktasında 1'e eşittir; bu, sigmoid'in en yüksek değeri olan 0.25'in dört katıdır ve eğri doyuma ulaştıkça sıfıra yaklaşır. Aşağıdaki PyTorch kod parçası tanh ve gradyanını hesaplar, ardından ortalaması sıfır olan girdilerde tanh ve sigmoid çıktılarının ortalamalarını karşılaştırır:
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}")[-0.995, -0.762, 0.0, 0.762, 0.995] için tanh değerlerini ve [0.01, 0.42, 1.0, 0.42, 0.01] için gradyanları yazdırır; böylece ±3'teki gradyanın sıfırdaki değerinin yüzde biri olduğu görülür. Standart normal dağılımdan alınan 100.000 girdi için tanh çıktılarının ortalaması yaklaşık 0.0, sigmoid çıktılarının ortalaması ise yaklaşık 0.5'tir.
Sıfır Merkezli Çıktılar Neden Faydalıdır#
Bir nöronun ağırlık gradyanları girdileriyle orantılıdır. Sigmoid çıktılarında olduğu gibi tüm girdiler pozitif olduğunda, her güncellemede nöronun tüm ağırlık gradyanları aynı işareti taşır; bu nedenle ağırlıklar yalnızca birlikte artabilir ya da azalabilir ve en iyi değerlerine zikzak çizerek ulaşır. Tanh çıktıları yaklaşık eşit ölçüde pozitif ve negatiftir; bu da her ağırlığın bağımsız biçimde hareket etmesini sağlar ve sonraki katmanın girdilerini, gradyan inişinin daha hızlı yakınsadığı sıfır ortalama civarında tutar. Bu nedenle Yann LeCun ve çalışma arkadaşlarının 1998 tarihli "Efficient BackProp" kılavuzu, gizli katmanlarda lojistik sigmoid yerine simetrik fonksiyonları, özellikle de 1.7159 · tanh(2x/3) ölçekli biçimini önerdi. Tanh yine de doyuma ulaşır ve çok sayıda tanh katmanını üst üste eklemek geri yayılım sırasında gradyanları küçülterek kaybolan gradyan sorununa yol açar.
Tanh Nerelerde Kullanılır#
- Yinelemeli ağlar: Basit bir RNN, durumunu hₜ = tanh(Wxₜ + Uhₜ₋₁ + b) olarak günceller ve tanh, PyTorch'un
nn.RNNiçin varsayılan doğrusal olmayan fonksiyonudur. LSTM ve GRU hücrelerinde tanh, aday içeriği üretir; ayrıca LSTM'de çıktıdan önce hücre durumunu sıkıştırır, sigmoid kapıları ise bu içeriğin ne kadarının kullanılacağına karar verir. Sınırlı aralık, adım adım tekrar giriş olarak verilen bir durumun sınırsızca büyümesini önler. - GAN oluşturucuları: DCGAN, oluşturucusunu tanh ile bitirir; böylece oluşturulan pikseller, eğitim görüntülerinin ölçeklendiği aralık olan −1 ile 1 arasında kalır. Daha sonraki birçok üretici çekişmeli ağ da bu tercihi izler.
- Sınırlı eylemler: Pekiştirmeli öğrenmede sürekli kontrol politikaları, her komutu aktüatör sınırları içinde tutmak için çıktılarından tanh fonksiyonunu geçirir. Soft Actor-Critic, Gauss politikasından alınan örnekleri bu şekilde sıkıştırır.
- Logit yumuşak sınırlandırması: Google'ın Gemma 2 dil modelleri cap · tanh(logits / cap) hesaplar; dikkat logitleri için cap değeri 50, son logitler içinse 30'dur. Küçük logitler neredeyse hiç değişmeden geçer, büyük logitler ise cap değerini hiçbir zaman aşamaz.
- GELU yaklaşımı: 0.5x(1 + tanh(√(2/π)(x + 0.044715x³))) GELU'yu yakından yaklaştırır ve özgün GPT-2 ile BERT kodu GELU'yu bu şekilde hesaplar.
- Normalleştirici akışlar: RealNVP tarzı akışlar çoğu zaman her ölçek ağını tanh ile bitirir; böylece her eşleşme katmanı girdilerini e⁻¹ ile e arasında bir katsayıyla ölçeklendirir ve eğitim sayısal açıdan kararlı kalır. YOLO26 poz tahmini modelleri, her ölçek ağını tanh ile bitiren altı katmanlı RealNVP akışının tahmin edilen anahtar noktaların gerçek değerlerden ne kadar saptığını modellediği bir artık log-olabilirlik kestirimi kaybıyla eğitilir.
Tanh ve İlişkili Fonksiyonlar#
- Sigmoid: Tanh, sigmoid'in −1 ile 1 aralığına genişletilmiş ve yatay eksende iki kat sıkıştırılmış hâlidir; bu da en yüksek eğimi 0.25'ten 1'e çıkarır. Sigmoid'in 0 ile 1 aralığı, onu olasılıklar ve kapılar için tercih edilen fonksiyon yapar.
- Hardtanh: Girdileri [−1, 1] aralığına kırpan parçalı doğrusal bir sürümdür. Hesaplaması daha ucuzdur ve gradyanı bu aralığın dışında tam olarak 0'dır.
- ReLU: max(0, x), pozitif girdilerde hiçbir zaman doyuma ulaşmaz ve tek bir karşılaştırma gerektirir; bu nedenle ReLU ve SiLU gibi düzgün türevlenebilir ardılları, derin evrişimli sinir ağlarının (CNNs) ve Transformer'ların gizli katmanlarında tanh'ın yerini aldı. AlexNet makalesinde, ReLU kullanan dört katmanlı bir CNN, CIFAR-10 üzerinde eğitim hatasının yüzde 25'ine tanh birimleri kullanan aynı ağdan altı kat daha hızlı ulaştı.










