Mạng nơ-ron hồi quy

Deep Learning nâng cao với PyTorch

Michal Oleszak

Machine Learning Engineer

Nơ-ron hồi quy

  • Mạng truyền thẳng
  • RNN: có liên kết hồi quy
  • Nơ-ron hồi quy:
    • Input x
    • Output y
    • Trạng thái ẩn h
  • Trong PyTorch: nn.RNN()

Sơ đồ nơ-ron RNN cơ bản: nơ-ron nhận đầu vào x, tạo đầu ra y và h; h được hồi tiếp vào chính nó.

Deep Learning nâng cao với PyTorch

Mở cuộn nơ-ron hồi quy theo thời gian

Sơ đồ nơ-ron hồi quy. Ở bước thời gian 0, nhận h0 và x0, tạo y0 và h1.

Deep Learning nâng cao với PyTorch

Mở cuộn nơ-ron hồi quy theo thời gian

Sơ đồ nơ-ron hồi quy. Ở bước thời gian 1, nhận h1 và x1, tạo y1.

Deep Learning nâng cao với PyTorch

Mở cuộn nơ-ron hồi quy theo thời gian

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

Deep Learning nâng cao với PyTorch

RNN sâu

Sơ đồ hai nơ-ron hồi quy tạo thành một tầng. Ở mỗi bước thời gian, đầu ra y được truyền sang nơ-ron khác.

Deep Learning nâng cao với PyTorch

Kiến trúc chuỗi-đến-chuỗi

  • Truyền chuỗi vào, dùng toàn bộ chuỗi đầu ra
  • Ví dụ: Nhận dạng giọng nói thời gian thực

Sơ đồ kiến trúc: ở mỗi bước thời gian có đầu vào mới, và mọi đầu ra y ở mỗi bước đều được dùng (màu xanh).

Deep Learning nâng cao với PyTorch

Kiến trúc chuỗi-đến-vector

  • Truyền chuỗi vào, chỉ dùng đầu ra cuối
  • Ví dụ: Phân loại chủ đề văn bản

Sơ đồ kiến trúc: ở mỗi bước thời gian có đầu vào mới, chỉ đầu ra y ở bước cuối được dùng (màu xanh).

Deep Learning nâng cao với PyTorch

Kiến trúc vector-đến-chuỗi

  • Truyền một đầu vào, dùng toàn bộ chuỗi đầu ra
  • Ví dụ: Sinh văn bản

Sơ đồ kiến trúc: chỉ có một đầu vào ở bước đầu, và mọi đầu ra y ở mỗi bước đều được dùng (màu xanh).

Deep Learning nâng cao với PyTorch

Kiến trúc encoder–decoder

  • Nhập toàn bộ chuỗi, sau đó mới dùng chuỗi đầu ra
  • Ví dụ: Dịch máy

Sơ đồ kiến trúc: phần đầu (encoder) nhận đầu vào mỗi bước nhưng bỏ qua đầu ra; phần sau (decoder) không nhận thêm đầu vào nhưng dùng mọi đầu ra ở mỗi bước.

Deep Learning nâng cao với PyTorch

RNN trong PyTorch

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

self.rnn = nn.RNN( 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.rnn(x, h0)
out = self.fc(out[:, -1, :]) return out
  • Định nghĩa lớp mô hình với phương thức __init__
  • Định nghĩa tầng hồi quy, self.rnn
  • Định nghĩa tầng tuyến tính, fc
  • Trong forward(), khởi tạo trạng thái ẩn đầu tiên bằng 0
  • Truyền đầu vào và trạng thái ẩn đầu qua tầng RNN
  • Lấy đầu ra RNN cuối cùng và đưa qua tầng tuyến tính
Deep Learning nâng cao với PyTorch

Ayo berlatih!

Deep Learning nâng cao với PyTorch

Preparing Video For Download...