Vanishing Gradient
Kaybolan gradyan problemi, geri yayılım sırasında gradyanların katman katman küçülmesi ve bu nedenle erken katmanların öğrenmeyi bırakmasıyla ortaya çıkar. Nedenleri ve çözümleri ele alır.
Kaybolan gradyan sorunu, gradyanlar geri yayılım sırasında kayıptan derin bir sinir ağının ilk katmanlarına doğru gönderilirken derinlik boyunca geometrik olarak küçüldüğünde ortaya çıkar; bu nedenle en erken katmanlar öğrenmeye yetecek büyüklükte olmayan güncellemeler alır. Bir katmandaki gradyan, o katmanın üzerindeki her katmanın yerel türevlerinin çarpımı olduğundan, katmanlarının her biri gradyanı 1'den küçük bir katsayıyla ölçekleyen bir ağda gradyan, çıktıdan girdiye ilerlerken birçok büyüklük mertebesi kaybedebilir. Sepp Hochreiter bu etkiyi 1991 tarihli diploma tezinde inceledi; daha iyi aktivasyon işlevleri, başlatma yöntemleri ve mimariler ortaya çıkana kadar bu sorun derin ileri beslemeli ağları ve yinelemeli sinir ağlarını (RNNs) eğitmeyi zorlaştırdı.
Gradyanlar Neden Kaybolur?#
Geri yayılım zincir kuralını uygular. Bu nedenle bir katmana ulaşan gradyan, üst akış gradyanının sonraki her katmanın ağırlık matrisi ve etkinleştirme işlevi türeviyle çarpılmasıyla elde edilir. Sigmoid türevi hiçbir zaman 0,25'i aşmaz; bu değer, girdinin 0 olduğu noktadaki değeridir. Birim büyük pozitif veya negatif girdilerde doyuma ulaştıkça türev 0'a yaklaşır. Tanh türevi 1'de zirve yapar ve doyuma ulaştığında o da 0'a yaklaşır. Dolayısıyla yirmi sigmoid katmanı, ağırlıklar hesaba katılmadan önce gradyanı en fazla 0.25²⁰ ile çarpar; bu değer 10⁻¹²'den küçüktür. Ağırlıkların ölçeği de etkinleştirme işlevi kadar önemlidir: Glorot ve Bengio, zorluğun büyük bölümünü başlatma yöntemine bağladı ve etkinleştirme ile gradyan varyanslarının katmanlar boyunca yaklaşık sabit kalması için her katmanın girdi ve çıktı sayısına göre ölçeklenen ağırlık varyansları önerdi.
Etki, 20 katmanlı bir sigmoid ağının üst ve alt kısımlarındaki ağırlık gradyanı büyüklükleri kısa devre bağlantıları varken ve yokken karşılaştırılarak kolayca ölçülebilir:
import torch
torch.manual_seed(0)
x = torch.randn(64, 32)
# The same 20-layer sigmoid network, without and with residual shortcuts
for residual in (False, True):
layers = [torch.nn.Linear(32, 32) for _ in range(20)]
h = x
for layer in layers:
out = torch.sigmoid(layer(h))
h = h + out if residual else out
h.sum().backward()
# Compare the weight-gradient size at the last layer and the first layer
last, first = layers[-1].weight.grad.norm(), layers[0].weight.grad.norm()
print(f"residual={residual}: layer 20 gradient {last:.1e}, layer 1 gradient {first:.1e}")Kısa devre bağlantıları olmadığında son katmanın gradyan normu 2.5e+02, ilk katmanınki ise 4.2e-15 olur; ilk katmanınki yaklaşık 17 mertebe daha küçüktür ve ilk katmanın ağırlıkları neredeyse hiç değişmez. Artık kısa devre bağlantıları kullanıldığında ilk katmanın gradyanı 5.6e+01 olur; bu değer, son katmanın 2.1e+03 değerinden yaklaşık 38 kat küçüktür.
Kaybolan ve Patlayan Gradyanlar#
İki sorun da aynı çarpma işleminin tekrarlanmasından kaynaklanır. Kaybolan gradyanlar öğrenmeyi sessizce durdurur: Son katmanların etkisiyle kayıp düşmeye devam ederken erken katmanlar rastgele başlatıldıkları değerlere yakın kalır. Patlayan gradyanlar ise geometrik olarak büyür ve kayıptaki ani sıçramalar ile NaN değerlerinde kendini açıkça gösterir. Gradyan kırpma, her güncellemeden önce patlayan gradyanın normunu sınırlar; ancak zaten kaybolmuş bir gradyan üzerinde etkisi yoktur. Sönen ReLU sorunu, ReLU biriminin girdisinin negatif kalmasıyla ortaya çıkan ilişkili bir sorundur. Bu durumda gradyan tam olarak 0 olur ve birim öğrenmeyi bırakır.
Kaybolan Gradyanlar Nasıl Önlenir?#
En yaygın çözüm, artık ağların (ResNet'lerin) temelindeki özdeşlik kestirmesi olan artık bağlantıdır. Artık blok x + F(x) çıktısını verir; dolayısıyla x'e göre gradyanı 1 ile F'nin türevinin toplamıdır ve kestirme yol, üst akış gradyanını değişmeden iletir.
Artık kısa devre bağlantıları, ResNet'lerin 100'den fazla katmanla eğitilmesini sağlar ve Transformer modellerinden YOLO26'ya kadar neredeyse tüm modern derin mimarilerde bulunur. YOLO26'nın C3k2 blokları artık darboğaz bloklarını sarar; standart evrişim blokları ise toplu normalizasyonu SiLU etkinleştirmeleriyle eşleştirir.
Diğer çözümler artık bağlantılarla birlikte çalışır:
- Doyuma ulaşmayan etkinleştirme işlevleri: ReLU, pozitif girdiler için tam olarak 1 türevine sahiptir; Leaky ReLU ve SiLU da negatif girdiler için sıfırdan farklı bir gradyanı korur.
- Ölçeklenmiş başlatma: Xavier (Glorot) başlatması tanh ve sigmoid katmanları için uygundur; He başlatması ise ReLU'nun girdilerinin yarısını sıfırlamasını telafi etmek için ağırlık varyansını ikiye katlar.
- Normalizasyon katmanları: Toplu normalizasyon ve katman normalizasyonu, etkinleştirme işlevlerinin doyuma ulaşan düz bölgelerinden uzakta, ön etkinleştirme değerlerinin ortalamasını sıfıra ve varyansını bire yakın tutar.
- Kapılı yinelemeli mimariler: Uzun kısa süreli bellek (LSTM) ağları ve kapılı yinelemeli birimler (GRUs), durumlarını tekrarlanan çarpımlar yerine kapılı toplamsal güncellemelerle ileri taşır. Bu sayede özgün LSTM, 1.000 adımdan uzun zaman aralıklarının üstesinden gelebildi.










