Okullar için Robotik ve Mühendislik · anaokulundan liseye

9. ünite / 10

Diziler: RNN, LSTM ve dikkat

Gizli durum, zaman boyunca geri yayılım, sönen gradyan; LSTM kapıları ve hücre durumu; ölçekli nokta çarpımı dikkati ve Transformer fikri.

Bu ünitenin sonunda

  • RNN'in gizli durumla diziyi nasıl özetlediğini açıklamak
  • Sönen gradyan sorununu zincir kuralıyla göstermek
  • LSTM'in unutma kapısının bu sorunu nasıl hafiflettiğini açıklamak
  • Dikkat mekanizmasının formülünü ve Transformer'daki yerini anlatmak

Ders notları

Sensör ölçümleri, konuşma, metin: sıranın önemli olduğu verilerdir. Bir RNN her adımda aynı ağırlıklarla yeni girdiyi ve önceki gizli durumu birleştirir: ht = tanh(W·ht−1 + U·xt + b). Gizli durum, o ana kadarki dizinin özetidir.

Sönen gradyan

Eğitimde gradyan diziyi tersten dolaşır (zaman boyunca geri yayılım). Her adımda W·tanh′ ile çarpılır; bu çarpan 1'den küçükse gradyan üstel olarak söner, büyükse patlar. Sonuç: düz RNN 10–20 adımdan uzak bağlantıları öğrenemez.

∂hT/∂ht = Πk=t+1..T W · (1 − hk²)

LSTM

LSTM, gizli durumun yanında bir hücre durumu c taşır ve onu kapılarla toplamsal olarak günceller: ct = ft·ct−1 + it·gt. Hücre yolu boyunca gradyan yalnız unutma kapısıyla (f) çarpılır; f ≈ 1 iken bilgi ve gradyan uzun mesafe taşınır. Bu yüzden unutma kapısının ön yargısı genelde pozitif başlatılır. GRU benzer, daha az kapılı bir türdür.

Dikkat

Dikkat, diziyi adım adım taşımak yerine her öğenin diğer tüm öğelere doğrudan bakmasını sağlar: softmax(QKᵀ/√d)·V. Uzaklık sorun olmaktan çıkar, hesap paralel yapılır. Transformer yalnız dikkat ve tam bağlı katmanlardan oluşur; büyük dil modellerinin temelidir. Makine öğrenmesi dersindeki dikkat dersi aynı hesabı adım adım gösterir.

Görselleştiriciler

RNN ve LSTM: gradyan bir dizide ne kadar yol alır

Basit RNN'de geri yayılan sinyal her adımda w·tanh′ ile çarpılır ve söner; LSTM'in hücre durumunda unutma kapısıyla (f) çarpılır. Dizi boyunu, ağırlığı ve unutma kapısı ön yargısını değiştir; ∂h_T/∂h_t eğrilerini karşılaştır.

Ölçekli nokta çarpımı dikkati

softmax(QKᵀ/√d)·V: her sözcük diğerlerine bir ağırlık dağıtır. Sıcaklığı değiştir, ısı haritasında satırların keskinleştiğini ya da düzleştiğini gör. Makine öğrenmesi dersindeki dikkat dersiyle aynı hesap.

Kendin dene

Gradyan akışı aracında dizi boyunu 50, ağırlığı 0,9 yap: RNN eğrisi kaç adımda %1'in altına düştü? Ağırlığı 1,5'e çıkar: ne oldu? LSTM'de unutma kapısı ön yargısını −1, 1 ve 3 yap ve etkili bellek uzunluğunu karşılaştır. Dikkat aracında sıcaklığı düşürüp yükselt: satırlar neden keskinleşip düzleşiyor?

Kod

Python: LSTM ile dizi sınıflandırma ve dikkat
import torch
from torch import nn
import torch.nn.functional as F

class DiziModeli(nn.Module):
    def __init__(self, n_in=1, gizli=32, n_out=2):
        super().__init__()
        self.lstm = nn.LSTM(n_in, gizli, batch_first=True)   # girdi (N, T, özellik)
        self.fc = nn.Linear(gizli, n_out)
    def forward(self, x):
        out, (h, c) = self.lstm(x)                       # out: (N, T, gizli), h: (1, N, gizli)
        return self.fc(h[-1])                            # son gizli durumdan sınıf

x = torch.randn(8, 50, 1)                                # 8 dizi, 50 adım
print(DiziModeli()(x).shape)                             # torch.Size([8, 2])

# ölçekli nokta çarpımı dikkati: softmax(QKᵀ/√d)·V
Q = K = V = torch.randn(1, 5, 16)                        # 5 sözcük, 16 boyut
w = torch.softmax(Q @ K.transpose(-2, -1) / 16 ** 0.5, dim=-1)
print(w.sum(-1))                                         # her satır 1
print(torch.allclose(w @ V, F.scaled_dot_product_attention(Q, K, V), atol=1e-6))

Colab defteri

PyTorch tarayıcıda çalışmaz; gerçek kodu Google Colab'da (ücretsiz GPU ile) çalıştır. Defteri indir, colab.research.google.com adresinde "Dosya → Not defteri yükle" ile aç, "Çalışma zamanı → Çalışma zamanı türünü değiştir → T4 GPU" seç ve hücreleri sırayla çalıştır.

Defteri indir (.ipynb)

Sık yapılan hatalar

  • nn.LSTM'e (T, N, özellik) sırası bekliyorken (N, T, özellik) vermek: batch_first=True ayarını kontrol et.
  • Farklı uzunluktaki dizileri sıfırla doldurup maskelememek: dolgu da öğrenilir. pack_padded_sequence ya da maske kullan.
  • RNN'de gradyan patlamasını görmezden gelmek: clip_grad_norm_ ile kırp.
  • Dikkatte √d ölçeklemesini atlamak: büyük boyutta softmax doyar, gradyan küçülür.

Yazılım mühendisliği bağlantısı

Dizi modellerinde veri hazırlama (pencereleme, dolgu, maske) modelden daha çok hataya açıktır.

  • Pencereleme fonksiyonunu ayrı yaz ve sına: gelecekten bilgi sızmadığını (etiketin pencereden sonra geldiğini) kontrol eden bir test ekle.
  • Zaman serisinde eğitim/doğrulama ayrımını rastgele değil zamana göre yap.

Kendini sına

  1. Düz bir RNN'de uzak geçmişin gradyanı neden söner?

  2. LSTM'de hücre durumu boyunca gradyanı taşıyan çarpan hangisidir?

  3. Ölçekli nokta çarpımı dikkatinde √d'ye bölmenin amacı nedir?

  4. Transformer'ın RNN'e göre temel üstünlüğü nedir?

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç