Buňky LSTM a GRU

Intermediate Deep Learning with PyTorch

Michal Oleszak

Machine Learning Engineer

Problém krátkodobé paměti

  • Buňky RNN uchovávají paměť prostřednictvím skrytého stavu
  • Tato paměť je velmi krátkodobá
  • Problém řeší dvě výkonnější buňky:
    • Buňka LSTM (Long Short-Term Memory)
    • Buňka GRU (Gated Recurrent Unit)

Schéma rekurentního neuronu. V časovém kroku 2 přijímá vstupy h2 a x2 a produkuje výstupy y2 a h3.

Intermediate Deep Learning with PyTorch

Buňka RNN

Schéma buňky RNN.

  • Dva vstupy:
    • aktuální vstupní data x
    • předchozí skrytý stav h
  • Dva výstupy:
    • aktuální výstup y
    • následující skrytý stav h
Intermediate Deep Learning with PyTorch

Buňka LSTM

Schéma buňky LSTM.

  • Výstupy h a y jsou totožné
  • Tři vstupy a výstupy (dva skryté stavy):

    • h: krátkodobý stav
    • c: dlouhodobý stav
  • Tři "brány":

    • Brána zapomínání: co odstranit z dlouhodobé paměti
    • Vstupní brána: co uložit do dlouhodobé paměti
    • Výstupní brána: co vrátit v aktuálním časovém kroku
Intermediate Deep Learning with PyTorch

LSTM v PyTorch

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__():
    • Nahraďte nn.RNN za nn.LSTM
  • forward():
    • Přidejte druhý skrytý stav c
    • Inicializujte c a h nulami
    • Předejte oba skryté stavy vrstvě lstm
Intermediate Deep Learning with PyTorch

Buňka GRU

Schéma buňky GRU.

  • Zjednodušená verze buňky LSTM
  • Pouze jeden skrytý stav
  • Žádná výstupní brána
Intermediate Deep Learning with PyTorch

GRU v PyTorch

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__():
    • Nahraďte nn.RNN za nn.GRU
  • forward():
    • Použijte vrstvu gru
Intermediate Deep Learning with PyTorch

Mám použít RNN, LSTM, nebo GRU?

  • RNN se již příliš nepoužívá
  • GRU je jednodušší než LSTM = méně výpočtů
  • Relativní výkon závisí na konkrétním případu použití
  • Vyzkoušejte obě varianty a porovnejte je

Schémata buněk LSTM a GRU.

Intermediate Deep Learning with PyTorch

Lass uns üben!

Intermediate Deep Learning with PyTorch

Preparing Video For Download...