LSTM- en GRU-cellen

Gevorderde Deep Learning met PyTorch

Michal Oleszak

Machine Learning Engineer

Kortetermijngeheugenprobleem

  • RNN-cellen bewaren geheugen via hidden state
  • Dit geheugen is zeer kortetermijn
  • Twee krachtigere cellen lossen dit op:
    • LSTM (Long Short-Term Memory)
    • GRU (Gated Recurrent Unit)

Schema van de recurrente neuron. Op tijdstap 2 ontvangt hij inputs h2 en x2, en produceert outputs y2 en h3.

Gevorderde Deep Learning met PyTorch

RNN-cel

Schema van de RNN-cel.

  • Twee inputs:
    • huidige input x
    • vorige hidden state h
  • Twee outputs:
    • huidige output y
    • volgende hidden state h
Gevorderde Deep Learning met PyTorch

LSTM-cel

Schema van de LSTM-cel.

  • Outputs h en y zijn hetzelfde
  • Drie inputs en outputs (twee hidden states):

    • h: kortetermijnstaat
    • c: langetermijnstaat
  • Drie gates:

    • Forget gate: wat te verwijderen uit langetermijngeheugen
    • Input gate: wat op te slaan in langetermijngeheugen
    • Output gate: wat terug te geven op de huidige tijdstap
Gevorderde Deep Learning met PyTorch

LSTM in 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__():
    • Vervang nn.RNN door nn.LSTM
  • forward():
    • Voeg extra hidden state c toe
    • Initieer c en h met nullen
    • Geef beide hidden states door aan de lstm-laag
Gevorderde Deep Learning met PyTorch

GRU-cel

Schema van de GRU-cel.

  • Vereenvoudigde versie van LSTM-cel
  • Slechts één hidden state
  • Geen output gate
Gevorderde Deep Learning met PyTorch

GRU in 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__():
    • Vervang nn.RNN door nn.GRU
  • forward():
    • Gebruik de gru-laag
Gevorderde Deep Learning met PyTorch

Moet ik RNN, LSTM of GRU gebruiken?

  • RNN wordt weinig meer gebruikt
  • GRU is eenvoudiger dan LSTM = minder rekenwerk
  • Relatieve performance verschilt per use-case
  • Probeer beide en vergelijk

Schema's van de LSTM- en GRU-cellen.

Gevorderde Deep Learning met PyTorch

Laten we oefenen!

Gevorderde Deep Learning met PyTorch

Preparing Video For Download...