Sekans modellerinin sınırı
Önkoşul:LSTM ve GRU
Kanca
- derste LSTM’in RNN’in kaybolan gradyan sorununu BÜYÜK ÖLÇÜDE azalttığını gördük. Bu ders, “büyük ölçüde”nin yeterli OLMADIĞI iki sorunu ortaya koyuyor — ve bu iki sorun, 9-10. derste attention’ın NEDEN icat edildiğini açıklıyor.
Sezgi
RNN/LSTM’in iki temel sınırı var: (1) TÜM diziyi SABİT boyutlu tek bir vektöre sıkıştırmak zorunda kalmaları, (2) adımları SIRAYLA işlemek zorunda kalmaları. Bir cümlede bilginin nasıl aktığını, RNN’in zincirinde ve attention’ın doğrudan bağlantısında karşılaştıralım:
RNN -- bilgi ZİNCİR boyunca akar
"Dün"den en uzak kelimeye ulaşmak için 6 ADIM (hop) gerekiyor.
Attention -- bilgi DOĞRUDAN akar
"Dün"den TÜM diğer kelimelere ulaşmak için HER ZAMAN 1 ADIM yeterli.
RNN'de bilgi, aradaki HER kelimeden SIRAYLA geçmek zorunda -- bu yüzden uzak kelimeler arasındaki ilişki, 7. derste gördüğümüz gibi zayıflayabilir. Attention'da ise HER kelime, diğer HER kelimeye DOĞRUDAN (tek adımda) bakabilir -- mesafe, artık bir dezavantaj değil.
Mekanizma
İlk sorun: sabit boyutlu bir “darboğaz”.
Sabit boyut, değişken uzunluk
# 6-7. derste RNN/LSTM'in bir diziyi TEK bir gizli durum vektörüne "özetlediğini"
# gördük. Sorun: bu vektörün BOYUTU SABİT -- ama dizinin uzunluğu DEĞİŞKEN.
BOYUT = 32
lstm = nn.LSTM(input_size=BOYUT, hidden_size=BOYUT, batch_first=True)
print(f"Gizli durum boyutu: {BOYUT} sayı -- SABİT.")
for uzunluk in [5, 20, 100]:
print(f" {uzunluk} kelimelik bir cümle de, {BOYUT} kelimelik bir paragraf da,")
print(f" AYNI {BOYUT} sayılık vektöre sıkıştırılmak ZORUNDA.")
print("\nSezgisel olarak: cümle uzadıkça, her kelimeye düşen 'yer' küçülür -- bu bir DARBOĞAZDIR.")Gizli durum boyutu: 32 sayı -- SABİT.
5 kelimelik bir cümle de, 32 kelimelik bir paragraf da,
AYNI 32 sayılık vektöre sıkıştırılmak ZORUNDA.
20 kelimelik bir cümle de, 32 kelimelik bir paragraf da,
AYNI 32 sayılık vektöre sıkıştırılmak ZORUNDA.
100 kelimelik bir cümle de, 32 kelimelik bir paragraf da,
AYNI 32 sayılık vektöre sıkıştırılmak ZORUNDA.
Sezgisel olarak: cümle uzadıkça, her kelimeye düşen 'yer' küçülür -- bu bir DARBOĞAZDIR.Şimdi 7. dersteki deneyi DAHA UZUN bir dizide tekrarlayalım:
100 kelimede LSTM'nin hafızası
# 7. dersteki gradyan deneyini DAHA UZUN bir dizide tekrarlayıp, hafızanın ne kadar
# 'seyreldiğini' somutlaştıralım.
def gradyan_olc(uzunluk):
torch.manual_seed(42)
katman = nn.LSTM(input_size=BOYUT, hidden_size=BOYUT, batch_first=True)
dizi = torch.randn(1, uzunluk, BOYUT, requires_grad=True)
cikis, _ = katman(dizi)
kayip = cikis[0, -1].sum()
kayip.backward()
return dizi.grad[0, 0].norm().item()
print(f"\n{'Dizi uzunluğu':<16} {'İlk kelimenin son çıktıya etkisi (gradyan normu)':<50}")
for uzunluk in [10, 50, 100]:
g = gradyan_olc(uzunluk)
print(f"{uzunluk:<16} {g:<50.3e}")
print("\n100 kelimelik bir dizide, LSTM (7. dersteki 'en dayanıklı' mimarimiz) bile ilk kelimenin")
print("etkisini neredeyse SIFIRLIYOR. Uzun belgelerde, dizinin BAŞINDAKİ bilgi fiilen KAYBOLUYOR.")
Dizi uzunluğu İlk kelimenin son çıktıya etkisi (gradyan normu)
10 4.540e-03
50 1.467e-11
100 5.689e-22
100 kelimelik bir dizide, LSTM (7. dersteki 'en dayanıklı' mimarimiz) bile ilk kelimenin
etkisini neredeyse SIFIRLIYOR. Uzun belgelerde, dizinin BAŞINDAKİ bilgi fiilen KAYBOLUYOR.100 kelimelik bir dizide, LSTM (7. dersteki EN dayanıklı mimarimiz) bile ilk kelimenin etkisini 5.7e-22’ye indiriyor — pratikte SIFIR. Çoğu kişi “LSTM’i kullanınca uzun mesafe sorunu ÇÖZÜLDÜ” sanır. Yanlış, çünkü LSTM sorunu SADECE ERTELEDİ — yeterince uzun bir dizide AYNI çöküş yine oluyor.
Matematik
Sıralı işlem sayısı ve maksimum yol uzunluğu
| Mimari | Sıralı işlem sayısı | Maksimum bilgi yolu uzunluğu |
|---|---|---|
| RNN / LSTM | — dizi UZUNLUĞUYLA orantılı | |
| Self-Attention | — SABİT |
( = dizi uzunluğu.) Bu tablo, “Attention is All You Need” makalesinden (18. ders) — RNN’de hem hesaplama hem “bilginin kat etmesi gereken mesafe” dizi uzadıkça büyür; attention’da ikisi de SABİT kalır.
Kod
İkinci sorun: sıralı hesaplamanın MALİYETİ.
Sıralı işlem, hızı sınırlıyor
# İKİNCİ, farklı bir sorun: RNN/LSTM, adım t'yi işlemeden ÖNCE adım t-1'i BİTİRMEK
# ZORUNDA -- bu, 3. DL Vision dersindeki 'vektörleştirme' hızlanmasını ENGELLER.
def sure_olc(uzunluk, tekrar=50):
dizi = torch.randn(16, uzunluk, BOYUT)
with torch.no_grad():
for _ in range(5):
lstm(dizi) # ısınma
baslangic = time.perf_counter()
for _ in range(tekrar):
lstm(dizi)
return (time.perf_counter() - baslangic) / tekrar
print(f"\n{'Dizi uzunluğu':<16} {'İşlem süresi (ms)':<20}")
sureler = {}
for uzunluk in [20, 40, 80, 160, 320]:
s = sure_olc(uzunluk)
sureler[uzunluk] = s
print(f"{uzunluk:<16} {s*1000:<20.3f}")
oran = sureler[320] / sureler[20]
print(f"\nDizi 16 kat uzayınca (20->320), işlem süresi {oran:.1f} kat arttı -- YAKLAŞIK DOĞRUSAL.")
print("Bunun nedeni: LSTM, adım 320'yi işlemek için adım 1'den 319'a kadar HER ADIMI SIRAYLA")
print("bitirmiş olmak ZORUNDA -- 3. dersteki gibi bir 'hepsini birden çarp' hilesi YOK.")
Dizi uzunluğu İşlem süresi (ms)
20 0.613
40 0.793
80 1.445
160 2.537
320 4.911
Dizi 16 kat uzayınca (20->320), işlem süresi 8.0 kat arttı -- YAKLAŞIK DOĞRUSAL.
Bunun nedeni: LSTM, adım 320'yi işlemek için adım 1'den 319'a kadar HER ADIMI SIRAYLA
bitirmiş olmak ZORUNDA -- 3. dersteki gibi bir 'hepsini birden çarp' hilesi YOK.Dizi 16 kat uzayınca (20→320), işlem süresi 8 kat arttı — yaklaşık DOĞRUSAL. Bunun nedeni: LSTM, adım 320’yi işlemek için adım 1’den 319’a kadar HER ADIMI sırayla bitirmiş olmak ZORUNDA — 3. DL Vision dersindeki “hepsini birden çarp” (vektörleştirme) hilesi burada YOK.
RNN vs Self-Attention: teorik karşılaştırma
# 'Attention is All You Need' makalesinin (18. dersimiz) ünlü karşılaştırma tablosu:
print(f"\n{'Mimari':<16} {'Sıralı işlem sayısı':<22} {'Max. bilgi yolu uzunluğu':<26}")
print(f"{'RNN/LSTM':<16} {'O(n) -- dizi UZUNLUĞUYLA orantılı':<22} {'O(n)':<26}")
print(f"{'Self-Attention':<16} {'O(1) -- SABİT':<22} {'O(1)':<26}")
print("\n(n = dizi uzunluğu.) RNN'de hem hesaplama hem 'bilginin kat etmesi gereken mesafe'")
print("dizi uzadıkça BÜYÜR. Attention'da ikisi de SABİT kalır -- 9-10. dersin konusu bu.")
Mimari Sıralı işlem sayısı Max. bilgi yolu uzunluğu
RNN/LSTM O(n) -- dizi UZUNLUĞUYLA orantılı O(n)
Self-Attention O(1) -- SABİT O(1)
(n = dizi uzunluğu.) RNN'de hem hesaplama hem 'bilginin kat etmesi gereken mesafe'
dizi uzadıkça BÜYÜR. Attention'da ikisi de SABİT kalır -- 9-10. dersin konusu bu.Nerede işe yarar
Bu iki sınır, 2014-2017 arası NLP araştırmasının EN AKTİF konusuydu:
- Darboğaz sorunu, ÖZELLİKLE uzun cümle çevirisinde (encoder-decoder, 16. ders) belirginleşiyordu — çevirmen, TÜM cümleyi tek bir vektörde “hatırlamak” zorundaydı.
- Sıralı hesaplama sorunu, GPU’ların paralel gücünden TAM olarak YARARLANAMAMAK anlamına geliyordu — büyük modelleri eğitmek yavaşlıyordu.
- Bu iki sorun, 2017’de “Attention is All You Need” makalesiyle (18. ders) AYNI ANDA çözüldü — bu makalenin başlığı tam olarak bunu söylüyor: “attention YETERLİ, RNN’e gerek yok”.
Bu 3 hatayı yaparsın:
- “LSTM kullandım, uzun mesafe sorunu bitti” sanmak — sorun ERTELENİR, ORTADAN KALKMAZ.
- Darboğaz sorunuyla kaybolan gradyan sorununu KARIŞTIRMAK — ikisi FARKLI (biri kapasite, biri gradyan akışı) ama İLİŞKİLİ sorunlar.
- RNN’in “eski, kullanılmaz” bir teknik olduğunu düşünmek — hâlâ küçük, kısa-dizili problemlerde makul bir seçimdir.
Kendini test et
1. Notebook'ta 100 kelimelik bir dizide LSTM'nin ilk kelimenin gradyanını 5.7e-22'ye indirmesi neyi gösteriyor?
- LSTM bozuktur
- LSTM, kaybolan gradyan sorununu SADECE ERTELER -- yeterince uzun bir dizide, 7. dersteki RNN'in yaşadığı AYNI çöküş, LSTM'de de (daha yavaş ama) yine oluyor (doğru cevap)
- LSTM sadece kısa dizilerde çalışacak şekilde tasarlanmıştır
- Bu beklenmeyen bir sonuçtur
Neden: 7. derste LSTM'in RNN'den ÇOK daha iyi olduğunu gördük, ama "daha iyi" "sonsuz" demek değildir -- hücre durumu da her adımda BİRAZ bilgi kaybeder, bu da yeterince uzun dizilerde birikerek aynı çöküşe yol açar.
2. RNN/LSTM'in 'sıralı işlem sayısı O(n)' olmasının pratik sonucu nedir?
- Hiçbir pratik etkisi yoktur
- Dizi uzunluğu arttıkça işlem süresi de ORANTILI olarak artar -- 3. DL Vision dersindeki vektörleştirme hızlanmasından YARARLANILAMAZ, çünkü her adım bir öncekini BEKLEMEK zorundadır (doğru cevap)
- RNN'ler her zaman GPU'da çalışamaz
- Bu sadece teorik bir kavramdır, pratikte ölçülemez
Neden: Notebook'ta dizi 16 kat uzayınca işlem süresi 8 kat arttı -- bu, adım t'nin adım t-1'i BEKLEMEK zorunda olmasının doğrudan sonucudur; paralelleştirilemeyen bu sıralılık, büyük modelleri eğitmeyi yavaşlatır.
3. Self-Attention'ın 'maksimum bilgi yolu uzunluğu O(1)' olması ne anlama gelir?
- Attention hiçbir zaman doğru çalışmaz
- Dizideki HERHANGİ İKİ kelime arasındaki bilgi, dizi ne kadar uzun olursa olsun, HER ZAMAN tek bir adımda (doğrudan) aktarılabilir -- RNN'deki gibi aradaki kelimelerden SIRAYLA geçmeye gerek yoktur (doğru cevap)
- Attention sadece 1 kelimelik dizilerde çalışır
- Bu, RNN ile aynı anlama gelir
Neden: RNNvsAttentionAkisi bileşeninde gösterildiği gibi, RNN'de bilgi zincirdeki HER kelimeden sırayla geçmek zorundayken (yol uzunluğu = mesafe), attention'da her kelime diğer HER kelimeye doğrudan bağlanır (yol uzunluğu her zaman 1) -- bu da dizi ne kadar uzarsa uzasın SABİT kalır.
Özet
Özet
- RNN/LSTM, tüm diziyi SABİT boyutlu tek bir vektöre sıkıştırmak zorunda -- bu bir darboğazdır.
- LSTM, kaybolan gradyanı ERTELER ama ORTADAN KALDIRMAZ -- yeterince uzun dizilerde aynı sorun geri döner.
- RNN/LSTM'in sıralı doğası (O(n) sıralı işlem), GPU paralelleşmesinden yararlanmayı engeller.
- Self-attention, hem sabit-uzunluklu bilgi yolu (O(1)) hem sabit sıralı işlem sayısı (O(1)) sunarak bu iki sorunu birlikte çözer.
- Bu iki sınır, "Attention is All You Need" makalesinin (18. ders) çıkış noktasıdır.