Vanishing gradient
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 50/78
- 5 dk
RNN'lerde uzun dizilerde gradyan kaybolması sorunu yaşanır.
Sönen gradyan
Geri yayılım zaman boyunca geriye giderken her adımda gradyan W_hh ve tanh türeviyle çarpılır. Bu çarpımlar 1'den küçükse gradyan üstel olarak küçülür ve erken adımlardaki bilgi öğrenilemez:
g = 1.0
for adim in range(50):
g *= 0.9 # her adımda 0.9 çarpanı
print(round(g, 4)) # 0.0052: 50 adım önceki girdiye neredeyse hiç sinyal yokÇarpanlar 1'den büyükse gradyan patlar; buna karşı gradyan kırpma kullanılır. Sönmeye karşı ise LSTM ve GRU gibi kapılı mimariler geliştirildi.
Gözlemlemek
Bir RNN'in son çıktısının ilk ve son girdilere göre gradyanı karşılaştırılarak sönme doğrudan görülebilir:
x = torch.randn(1, 50, 1, requires_grad=True)
output, _ = rnn(x)
output[0, -1].sum().backward()
print(x.grad[0, 0].abs().item()) # ilk adım: çok küçük
print(x.grad[0, -1].abs().item()) # son adım: büyükİlk adımdaki gradyan son adımdakinden kat kat küçükse model uzun vadeli bağımlılıkları öğrenemez.
Uygulama Sönmeyi ölç
Tohum 0 ile nn.RNN(1, 8, batch_first=True) kur. (1, 40, 1) rastgele girdinin gradyanını izle; son adım çıktısının toplamını geri yay. İlk adımdaki gradyan büyüklüğünün son adımdakinin yüzde birinden küçük olduğunu yazdır.
Başlangıç kodu
import torch
from torch import nn
torch.manual_seed(0)
rnn = nn.RNN(1, 8, batch_first=True)
x = torch.randn(1, 40, 1, requires_grad=True)
# buraya yazÖrnek çözüm
import torch
from torch import nn
torch.manual_seed(0)
rnn = nn.RNN(1, 8, batch_first=True)
x = torch.randn(1, 40, 1, requires_grad=True)
output, _ = rnn(x)
output[0, -1].sum().backward()
ilk = x.grad[0, 0].abs().item()
son = x.grad[0, -1].abs().item()
print(ilk < son / 100)Beklenen çıktı
True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Gradyan her adımda 1.1 ile çarpılırsa 100 adım sonra ne olur?
- Aynı kalır
- Sıfır olur
- Patlar (~13780 kat büyür) Doğru cevap
- Söner
Açıklama: 1.1¹⁰⁰ ≈ 13780; bu yüzden gradyan kırpma gerekir.
2 Gradyanı 50 adım boyunca çarp.
g = 0.9 ____ 50
g = 0.9 ** 50
Açıklama: 0.9⁵⁰ üstel sönmeyi gösterir.
3 Durumları eşleştir.
| Kavram | Anlamı |
|---|---|
çarpan < 1 |
Sönen gradyan |
çarpan > 1 |
Patlayan gradyan |
gradyan kırpma |
Patlamaya çare |
LSTM/GRU |
Sönmeye çare |