Rekurencyjne sieci neuronowe

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Michal Oleszak

Machine Learning Engineer

Neuron rekurencyjny

  • Sieci jednokierunkowe
  • RNN: mają połączenia zwrotne
  • Neuron rekurencyjny:
    • Wejście x
    • Wyjście y
    • Stan ukryty h
  • W PyTorch: nn.RNN()

Schemat prostego neuronu RNN: neuron stosujący wagi i aktywację przyjmuje wejście x, produkuje wyjścia y i h, gdzie h jest z powrotem podawane na wejście.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Rozwinięcie neuronu rekurencyjnego w czasie

Schemat neuronu rekurencyjnego. W kroku czasowym 0 otrzymuje wejścia h0 i x0 oraz produkuje wyjścia y0 i h1.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Rozwinięcie neuronu rekurencyjnego w czasie

Schemat neuronu rekurencyjnego. W kroku czasowym 1 otrzymuje wejścia h1 i x1 oraz produkuje wyjście y1.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Rozwinięcie neuronu rekurencyjnego w czasie

Schemat neuronu rekurencyjnego. W kroku czasowym 2 otrzymuje wejścia h2 i x2 oraz produkuje wyjścia y2 i h3.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Głębokie RNN

Schemat dwóch rekurencyjnych neuronów tworzących warstwę. Na każdym kroku czasowym wyjścia y są przekazywane do kolejnego neuronu.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Architektura sekwencja–sekwencja

  • Sekwencja jako wejście, używana cała sekwencja wyjściowa
  • Przykład: Rozpoznawanie mowy w czasie rzeczywistym

Schemat architektury: na każdym kroku czasowym pojawia się nowe wejście, a wszystkie wyjścia y oznaczone są na zielono jako używane.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Architektura sekwencja–wektor

  • Sekwencja jako wejście, używane tylko ostatnie wyjście
  • Przykład: Klasyfikacja tematyczna tekstu

Schemat architektury: na każdym kroku czasowym pojawia się nowe wejście, a tylko ostatnie wyjście y z ostatniego kroku jest oznaczone na zielono jako używane.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Architektura wektor–sekwencja

  • Pojedyncze wejście, używana cała sekwencja wyjściowa
  • Przykład: Generowanie tekstu

Schemat architektury: tylko jedno wejście na pierwszym kroku czasowym, a wszystkie wyjścia y oznaczone są na zielono jako używane.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Architektura koder–dekoder

  • Pełna sekwencja wejściowa, następnie używana sekwencja wyjściowa
  • Przykład: Tłumaczenie maszynowe

Schemat architektury: w części pierwszej (koder) wejścia są odbierane na każdym kroku, ale wyjścia są ignorowane; w części drugiej (dekoder) nie ma wejść, a wyjścia ze wszystkich kroków są używane.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

RNN w 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
  • Definicja klasy modelu z metodą __init__
  • Definicja warstwy rekurencyjnej self.rnn
  • Definicja warstwy liniowej fc
  • W forward() inicjalizacja pierwszego stanu ukrytego zerami
  • Przekazanie wejścia i pierwszego stanu ukrytego przez warstwę RNN
  • Wybór ostatniego wyjścia RNN i przekazanie go przez warstwę liniową
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Czas na ćwiczenia!

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Preparing Video For Download...