TanH
Önkoşul:Sigmoid
Kanca
Sigmoid’in doygunluk sorununu gördük. TanH, aynı “S şekli” fikrini kullanan ama önemli bir farkla gelen bir kardeş fonksiyon. Bu fark, ne kadar önemli?
Sezgi
TanH (hiperbolik tanjant), sigmoid gibi S şeklinde bir eğridir ama çıktısı (0,1) yerine (-1,1) aralığındadır — SIFIR MERKEZLİDİR. Bu tek fark, pratikte önemli sonuçlar doğurur.
f(x) f'(x) doygunluk bölgesi (|f'(x)| < 0.02)
“TanH” sekmesine geç ve “Üst üste bindir” kutusunu işaretle: sigmoid (turuncu benzeri) her zaman 0’ın ÜSTÜNDE kalırken, tanh 0’ın ETRAFINDA simetrik. Türev eğrisinin tepe noktasının da (Sigmoid sekmesiyle karşılaştırarak) daha yüksek olduğuna dikkat et.
Mekanizma
Sigmoid ve tanh’ı yan yana karşılaştıralım:
Sigmoid vs tanh çıktı aralığı
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def tanh(x):
return np.tanh(x)
x_degerleri = np.array([-5, -2, 0, 2, 5])
print(f"{'x':>6} {'sigmoid(x)':>12} {'tanh(x)':>10}")
for x in x_degerleri:
print(f"{x:>6} {sigmoid(x):>12.4f} {tanh(x):>10.4f}")
print("\nSigmoid HER ZAMAN pozitif (0,1); tanh ise (-1,1) -- SIFIR MERKEZLİ. Bu fark, ilerideki katmanı nasıl etkiler?") x sigmoid(x) tanh(x)
-5 0.0067 -0.9999
-2 0.1192 -0.9640
0 0.5000 0.0000
2 0.8808 0.9640
5 0.9933 0.9999
Sigmoid HER ZAMAN pozitif (0,1); tanh ise (-1,1) -- SIFIR MERKEZLİ. Bu fark, ilerideki katmanı nasıl etkiler?Sigmoid her zaman pozitif, tanh sıfır merkezli. Aslında bu iki fonksiyon, göründüğünden daha yakın akraba:
tanh, sigmoid'in bir dönüşümü
# tanh, sigmoid'in yeniden ÖLÇEKLENMİŞ bir halidir -- iki ayrı fonksiyon değil.
fark = np.abs(tanh(x_degerleri) - (2 * sigmoid(2 * x_degerleri) - 1))
print(f"\ntanh(x) ile 2*sigmoid(2x)-1 arasındaki fark: {fark.round(10)}")
print("Fark her yerde SIFIR -- tanh, sigmoid'in doğrusal bir dönüşümü.")
tanh(x) ile 2*sigmoid(2x)-1 arasındaki fark: [0. 0. 0. 0. 0.]
Fark her yerde SIFIR -- tanh, sigmoid'in doğrusal bir dönüşümü.Fark her yerde TAM SIFIR — tanh, sigmoid’in ölçeklenip kaydırılmış hali. Çoğu kişi “tanh ve sigmoid tamamen farklı matematiksel fikirlere dayanır” sanır. Değil, çünkü ikisi de aynı ailenin üyesi; sadece çıktı aralığı farklı.
Matematik
TanH ve türevi
| Sembol | Anlamı |
|---|---|
| Çıktı (-1, 1) aralığında — sıfır merkezli | |
| Türev — maksimumu ‘da TAM OLARAK 1 | |
| tanh’ın sigmoid cinsinden ifadesi — aynı S eğrisi, farklı ölçek |
Kod
Türevleri karşılaştıralım:
Türev karşılaştırması
def sigmoid_turev(x):
s = sigmoid(x)
return s * (1 - s)
def tanh_turev(x):
return 1 - tanh(x) ** 2
print(f"\n{'x':>6} {'sigmoid türevi':>15} {'tanh türevi':>13}")
for x in x_degerleri:
print(f"{x:>6} {sigmoid_turev(x):>15.4f} {tanh_turev(x):>13.4f}")
print(f"\nx=0'da: sigmoid türevi={sigmoid_turev(0):.2f}, tanh türevi={tanh_turev(0):.2f}")
print("tanh'ın maksimum türevi (1.0), sigmoid'inkinden (0.25) 4 KAT daha büyük -- doygunluk hâlâ var ama daha az şiddetli.")
x sigmoid türevi tanh türevi
-5 0.0066 0.0002
-2 0.1050 0.0707
0 0.2500 1.0000
2 0.1050 0.0707
5 0.0066 0.0002
x=0'da: sigmoid türevi=0.25, tanh türevi=1.00
tanh'ın maksimum türevi (1.0), sigmoid'inkinden (0.25) 4 KAT daha büyük -- doygunluk hâlâ var ama daha az şiddetli.tanh’ın maksimum türevi (1.0), sigmoid’inkinden (0.25) 4 kat daha büyük — bu, 5. dersteki kaybolan gradyan sorununu tam çözmese de (tanh da uçlarda doygunlaşıyor: x=5’te türev sadece 0.0002) HAFİFLETİYOR. PyTorch ile doğrulayalım:
PyTorch ile doğrulama
x_torch = torch.tensor([-5.0, -2.0, 0.0, 2.0, 5.0], requires_grad=True)
y_torch = torch.tanh(x_torch)
y_torch.sum().backward()
print(f"\n{'x':>6} {'PyTorch tanh':>14} {'PyTorch gradyan':>16} {'Elle hesaplanan':>16}")
for i, x in enumerate(x_degerleri):
print(f"{x:>6} {y_torch[i].item():>14.4f} {x_torch.grad[i].item():>16.4f} {tanh_turev(x):>16.4f}")
x PyTorch tanh PyTorch gradyan Elle hesaplanan
-5 -0.9999 0.0002 0.0002
-2 -0.9640 0.0707 0.0707
0 0.0000 1.0000 1.0000
2 0.9640 0.0707 0.0707
5 0.9999 0.0002 0.0002Nerede işe yarar
TanH, sigmoid’e göre bazı avantajlar sunar ama aynı temel sorunu taşır:
- RNN/LSTM gibi klasik sekans modellerinde yaygın. NLP kategorisinde göreceğimiz gibi, tanh bu mimarilerde hâlâ standart bir seçimdir.
- Sıfır merkezli çıktı, sonraki katmanın öğrenmesini kolaylaştırabilir. Bir katmanın çıktısı hep pozitifse (sigmoid gibi), bir sonraki katmanın ağırlık güncellemeleri “zikzak” yapmaya daha yatkın olabilir.
- Yine de derin ağların gizli katmanlarında ReLU’ya göre dezavantajlı. Doygunluk sorunu (daha hafif de olsa) devam ediyor.
Bu 3 hatayı yaparsın:
- tanh’ı “kaybolan gradyan sorununu tamamen çözer” sanmak — sadece HAFİFLETİR, ortadan kaldırmaz (x=5’te türev hâlâ 0.0002).
- Sigmoid ile tanh’ı birbirinden bağımsız, tamamen farklı araçlar sanmak — matematiksel olarak birbirinin doğrusal dönüşümü.
- Çıktı katmanında (0,1) aralığı gerektiğinde (olasılık gibi) tanh kullanmak — bu durumda sigmoid daha doğal bir seçimdir.
Kendini test et
1. TanH ile sigmoid arasındaki temel fark nedir?
- TanH'ın hiçbir doygunluğu yoktur
- TanH'ın çıktısı (-1, 1) aralığında ve sıfır merkezlidir; sigmoid'in çıktısı (0, 1) aralığında ve her zaman pozitiftir (doğru cevap)
- Aralarında hiçbir fark yoktur
- TanH sadece sınıflandırmada kullanılır
Neden: İkisi de S şeklinde olsa da, tanh'ın çıktı aralığı (-1,1) ve sıfır merkezlidir, sigmoid'inki ise (0,1) ve her zaman pozitiftir.
2. tanh(x) ile 2·sigmoid(2x)-1 arasındaki farkın HER x için tam sıfır çıkması neyi gösteriyor?
- Tesadüf
- TanH, matematiksel olarak sigmoid'in ölçeklenip kaydırılmış bir halidir -- iki bağımsız fonksiyon değil, aynı ailenin üyeleri (doğru cevap)
- Kod hatalıydı
- Sigmoid ve tanh'ın hiçbir ilişkisi yoktur
Neden: Bu eşitlik, tanh'ın sigmoid'in basit bir doğrusal dönüşümü olduğunu matematiksel olarak kanıtlıyor -- ikisi aynı S-eğrisi ailesinin farklı ölçeklenmiş halleri.
3. TanH'ın maksimum türevinin (1.0) sigmoid'inkinden (0.25) 4 kat büyük olması ne anlama gelir?
- TanH'ta hiç doygunluk yoktur
- TanH, kaybolan gradyan sorununu sigmoid'e göre HAFİFLETİR ama tamamen ORTADAN KALDIRMAZ -- uçlarda hâlâ doygunlaşıyor (doğru cevap)
- TanH her zaman daha hızlı eğitilir
- Sigmoid artık hiç kullanılmamalı
Neden: Daha yüksek maksimum türev, merkez bölgede gradyanın daha güçlü akması anlamına gelir, ama notebook'ta gördüğümüz gibi tanh da x=5'te türevi 0.0002'ye düşüyor -- doygunluk hafifler, yok olmaz.
Özet
Özet
- TanH, sigmoid ile aynı S şeklindeki eğri ailesine ait ama çıktısı (-1,1) aralığında, sıfır merkezlidir.
- Matematiksel olarak tanh(x) = 2σ(2x)-1 -- sigmoid'in doğrusal bir dönüşümü.
- TanH'ın maksimum türevi (1.0), sigmoid'inkinden (0.25) 4 kat büyüktür.
- Sıfır merkezlilik, sonraki katmanın öğrenmesini kolaylaştırabilir.
- TanH da uçlarda doygunlaşır -- kaybolan gradyan sorununu hafifletir ama çözmez.