Các cell LSTM và GRU

Deep Learning nâng cao với PyTorch

Michal Oleszak

Machine Learning Engineer

Vấn đề bộ nhớ ngắn hạn

  • Cell RNN duy trì bộ nhớ qua trạng thái ẩn
  • Bộ nhớ này rất ngắn hạn
  • Hai cell mạnh hơn giải quyết vấn đề:
    • LSTM (Long Short-Term Memory)
    • GRU (Gated Recurrent Unit)

Sơ đồ nơ-ron hồi quy. Ở bước thời gian 2, nó nhận đầu vào h2 và x2, và tạo đầu ra y2 và h3.

Deep Learning nâng cao với PyTorch

Cell RNN

Sơ đồ cell RNN.

  • Hai đầu vào:
    • dữ liệu vào hiện tại x
    • trạng thái ẩn trước đó h
  • Hai đầu ra:
    • đầu ra hiện tại y
    • trạng thái ẩn kế tiếp h
Deep Learning nâng cao với PyTorch

Cell LSTM

Sơ đồ cell LSTM.

  • Các đầu ra hy là như nhau
  • Ba đầu vào và đầu ra (hai trạng thái ẩn):

    • h: trạng thái ngắn hạn
    • c: trạng thái dài hạn
  • Ba “cổng”:

    • Cổng quên: loại bỏ khỏi bộ nhớ dài hạn
    • Cổng vào: lưu vào bộ nhớ dài hạn
    • Cổng ra: xuất tại bước thời gian hiện tại
Deep Learning nâng cao với PyTorch

LSTM trong 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__():
    • Thay nn.RNN bằng nn.LSTM
  • forward():
    • Thêm trạng thái ẩn c
    • Khởi tạo ch bằng 0
    • Truyền cả hai trạng thái ẩn vào lớp lstm
Deep Learning nâng cao với PyTorch

Cell GRU

Sơ đồ cell GRU.

  • Phiên bản đơn giản hóa của cell LSTM
  • Chỉ có một trạng thái ẩn
  • Không có cổng đầu ra
Deep Learning nâng cao với PyTorch

GRU trong 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__():
    • Thay nn.RNN bằng nn.GRU
  • forward():
    • Dùng lớp gru
Deep Learning nâng cao với PyTorch

Nên dùng RNN, LSTM, hay GRU?

  • RNN nay ít dùng
  • GRU đơn giản hơn LSTM = ít tính toán hơn
  • Hiệu năng tương đối tùy bài toán
  • Hãy thử cả hai và so sánh

Sơ đồ các cell LSTM và GRU.

Deep Learning nâng cao với PyTorch

Ayo berlatih!

Deep Learning nâng cao với PyTorch

Preparing Video For Download...