LSTM ve GRU hücreleri

PyTorch ile Orta Düzey Deep Learning

Michal Oleszak

Machine Learning Engineer

Kısa vadeli bellek sorunu

  • RNN hücreleri belleği gizli durumla korur
  • Bu bellek çok kısa vadelidir
  • İki daha güçlü hücre sorunu çözer:
    • LSTM (Long Short-Term Memory) hücresi
    • GRU (Gated Recurrent Unit) hücresi

Tekrarlayan nöronun şeması. Zaman adımı 2'de h2 ve x2 girişlerini alır, y2 ve h3 çıktıları üretir.

PyTorch ile Orta Düzey Deep Learning

RNN hücresi

RNN hücresinin şeması.

  • İki girdi:
    • mevcut girdi x
    • önceki gizli durum h
  • İki çıktı:
    • mevcut çıktı y
    • sonraki gizli durum h
PyTorch ile Orta Düzey Deep Learning

LSTM hücresi

LSTM hücresinin şeması.

  • h ve y çıktıları aynıdır
  • Üç girdi ve çıktı (iki gizli durum):

    • h: kısa vadeli durum
    • c: uzun vadeli durum
  • Üç "kapı":

    • Unutma kapısı: uzun vadeli bellekten neyi çıkarmalı
    • Girdi kapısı: uzun vadeli belleğe neyi kaydetmeli
    • Çıkış kapısı: mevcut zamanda neyi döndürmeli
PyTorch ile Orta Düzey Deep Learning

PyTorch'ta LSTM

class Net(nn.Module):
    def __init__(self, input_size):
        super().__init__()

self.lstm = nn.LSTM( input_size=1, hidden_size=32, num_layers=2, batch_first=True, ) self.fc = nn.Linear(32, 1)
def forward(self, x): h0 = torch.zeros(2, x.size(0), 32) c0 = torch.zeros(2, x.size(0), 32)
out, _ = self.lstm(x, (h0, c0))
out = self.fc(out[:, -1, :]) return out
  • __init__():
    • nn.RNN yerine nn.LSTM kullanın
  • forward():
    • Ek bir gizli durum c ekleyin
    • c ve h durumlarını sıfırla başlatın
    • Her iki gizli durumu lstm katmanına verin
PyTorch ile Orta Düzey Deep Learning

GRU hücresi

GRU hücresinin şeması.

  • LSTM hücresinin basitleştirilmiş hali
  • Tek gizli durum
  • Çıkış kapısı yok
PyTorch ile Orta Düzey Deep Learning

PyTorch'ta GRU

class Net(nn.Module):
    def __init__(self, input_size):
        super().__init__()

self.gru = nn.GRU( input_size=1, hidden_size=32, num_layers=2, batch_first=True, ) self.fc = nn.Linear(32, 1)
def forward(self, x): h0 = torch.zeros(2, x.size(0), 32) out, _ = self.gru(x, h0) out = self.fc(out[:, -1, :]) return out
  • __init__():
    • nn.RNN yerine nn.GRU kullanın
  • forward():
    • gru katmanını kullanın
PyTorch ile Orta Düzey Deep Learning

RNN, LSTM mi yoksa GRU mu?

  • RNN artık pek kullanılmıyor
  • GRU, LSTM'den daha basit = daha az hesaplama
  • Görevlere göre göreli performans değişir
  • İkisini de deneyip karşılaştırın

LSTM ve GRU hücrelerinin şemaları.

PyTorch ile Orta Düzey Deep Learning

Haydi pratik yapalım!

PyTorch ile Orta Düzey Deep Learning

Preparing Video For Download...