CodeBlanks Logo Icon CodeBlanks

LSTM nedir?

LSTM (Long Short-Term Memory), uzun dizilerde bellek koruyan RNN türüdür.

LSTM nedir?

Uzun kısa süreli bellek (LSTM), sönen gradyan sorununa karşı geliştirilmiş bir RNN türüdür. Gizli duruma ek olarak bir hücre durumu taşır ve bilginin bu hücreye ne kadar yazılacağını, ne kadar tutulacağını ve ne kadar okunacağını öğrenilen kapılarla denetler.

lstm = nn.LSTM(input_size=8, hidden_size=16, batch_first=True)
output, (h_n, c_n) = lstm(torch.zeros(2, 5, 8))
print(output.shape, h_n.shape, c_n.shape)
# torch.Size([2, 5, 16]) torch.Size([1, 2, 16]) torch.Size([1, 2, 16])

LSTM, transformer'dan önce metin, konuşma ve zaman serilerinde en yaygın mimariydi; bugün de küçük dizi problemlerinde güçlü bir seçenektir.

Neden işe yarar?

Hücre durumu adımdan adıma çoğunlukla toplama ile güncellenir: c_t = f_t ⊙ c_(t-1) + i_t ⊙ g_t. Unutma kapısı f ≈ 1 olduğunda bilgi ve gradyan uzun süre neredeyse değişmeden akar; RNN'deki tekrar eden çarpma zinciri kırılır.

Bu, ResNet'teki kalıntı bağlantısıyla aynı fikirdir: bilgiye çarpımsal değil toplamsal bir yol açmak.

Uygulama LSTM şekilleri

nn.LSTM(8, 16, batch_first=True) katmanını (2, 5, 8) girdiye uygula. output, h_n ve c_n şekillerini alt alta, ardından output[:, -1] ile h_n[0]'ın aynı olduğunu torch.allclose ile yazdır.

Başlangıç kodu

model.py
import torch
from torch import nn

x = torch.randn(2, 5, 8)

# buraya yaz

Örnek çözüm

model.py
import torch
from torch import nn

x = torch.randn(2, 5, 8)

lstm = nn.LSTM(8, 16, batch_first=True)
output, (h_n, c_n) = lstm(x)
print(output.shape)
print(h_n.shape)
print(c_n.shape)
print(torch.allclose(output[:, -1], h_n[0]))

Beklenen çıktı

torch.Size([2, 5, 16])
torch.Size([1, 2, 16])
torch.Size([1, 2, 16])
True

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>nn.LSTM</code> çağrısı <code>nn.RNN</code>'den farklı olarak ne döndürür?

  • Yalnızca output
  • Üç ayrı output
  • Hiçbir şey
  • output ile birlikte (h_n, c_n) çifti Doğru cevap

Açıklama: LSTM gizli durum h ve hücre durumu c taşır.

2 LSTM çıktısını aç.

Soru
output, (h_n, ____) = lstm(x)
Cevap
output, (h_n, c_n) = lstm(x)

Açıklama: İkinci eleman (h_n, c_n) çiftidir.

3 Kavramları eşleştir.

Kavram Anlamı
h Gizli durum (çıktı)
c Hücre durumu (bellek)
kapı Bilgi akışını denetler
toplamsal güncelleme Sönmeyi azaltır

İleri seviye bölümündeki tüm dersler