Sel LSTM dan GRU

Deep Learning Lanjutan dengan PyTorch

Michal Oleszak

Machine Learning Engineer

Masalah memori jangka pendek

  • Sel RNN menyimpan memori via state tersembunyi
  • Memori ini sangat jangka pendek
  • Dua sel lebih kuat mengatasi ini:
    • LSTM (Long Short-Term Memory)
    • GRU (Gated Recurrent Unit)

Skema neuron rekuren. Pada langkah waktu 2, menerima masukan h2 dan x2, dan menghasilkan keluaran y2 dan h3.

Deep Learning Lanjutan dengan PyTorch

Sel RNN

Skema sel RNN.

  • Dua masukan:
    • data masukan saat ini x
    • state tersembunyi sebelumnya h
  • Dua keluaran:
    • keluaran saat ini y
    • state tersembunyi berikutnya h
Deep Learning Lanjutan dengan PyTorch

Sel LSTM

Skema sel LSTM.

  • Keluaran h dan y sama
  • Tiga masukan dan keluaran (dua state tersembunyi):

    • h: state jangka pendek
    • c: state jangka panjang
  • Tiga "gerbang":

    • Forget gate: apa yang dihapus dari memori jangka panjang
    • Input gate: apa yang disimpan ke memori jangka panjang
    • Output gate: apa yang dikembalikan pada langkah waktu saat ini
Deep Learning Lanjutan dengan PyTorch

LSTM di 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__():
    • Ganti nn.RNN dengan nn.LSTM
  • forward():
    • Tambahkan state tersembunyi c
    • Inisialisasi c dan h dengan nol
    • Teruskan kedua state ke layer lstm
Deep Learning Lanjutan dengan PyTorch

Sel GRU

Skema sel GRU.

  • Versi sederhana dari sel LSTM
  • Hanya satu state tersembunyi
  • Tanpa gerbang keluaran
Deep Learning Lanjutan dengan PyTorch

GRU di 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__():
    • Ganti nn.RNN dengan nn.GRU
  • forward():
    • Gunakan layer gru
Deep Learning Lanjutan dengan PyTorch

Pilih RNN, LSTM, atau GRU?

  • RNN kini jarang dipakai
  • GRU lebih sederhana dari LSTM = komputasi lebih ringan
  • Kinerja relatif tergantung kasus penggunaan
  • Coba keduanya dan bandingkan

Skema sel LSTM dan GRU.

Deep Learning Lanjutan dengan PyTorch

Ayo berlatih!

Deep Learning Lanjutan dengan PyTorch

Preparing Video For Download...