Rekurrente Neuronale Netze

Deep Learning mit PyTorch für Fortgeschrittene

Michal Oleszak

Machine Learning Engineer

Rekurrentes Neuron

  • Feedforward-Netze
  • RNNs: haben Rückwärtsverbindungen
  • Rekurrentes Neuron:
    • Input x
    • Output y
    • Verborgener Zustand h
  • In PyTorch: nn.RNN()

Schema eines einfachen RNN-Neurons: Das Neuron mit Gewichten und Aktivierung erhält x und erzeugt y und h; h wird in sich selbst zurückgeführt.

Deep Learning mit PyTorch für Fortgeschrittene

Rekurrentes Neuron über die Zeit aufrollen

Schema des rekurrenten Neurons. In Zeitschritt 0 erhält es h0 und x0 und erzeugt y0 und h1.

Deep Learning mit PyTorch für Fortgeschrittene

Rekurrentes Neuron über die Zeit aufrollen

Schema des rekurrenten Neurons. In Zeitschritt 1 erhält es h1 und x1 und erzeugt y1.

Deep Learning mit PyTorch für Fortgeschrittene

Rekurrentes Neuron über die Zeit aufrollen

Schema des rekurrenten Neurons. In Zeitschritt 2 erhält es h2 und x2 und erzeugt y2 und h3.

Deep Learning mit PyTorch für Fortgeschrittene

Tiefe RNNs

Schema von zwei rekurrenten Neuronen in einer Schicht. In jedem Zeitschritt werden Ausgaben y an ein anderes Neuron weitergegeben.

Deep Learning mit PyTorch für Fortgeschrittene

Sequence-to-Sequence-Architektur

  • Sequenz als Eingabe, gesamte Ausgabesequenz nutzen
  • Beispiel: Spracherkennung in Echtzeit

Architekturschema: In jedem Zeitschritt gibt es eine neue Eingabe; alle Ausgaben y pro Zeitschritt sind grün als genutzt markiert.

Deep Learning mit PyTorch für Fortgeschrittene

Sequence-to-Vector-Architektur

  • Sequenz als Eingabe, nur letzte Ausgabe nutzen
  • Beispiel: Text-Themenklassifikation

Architekturschema: In jedem Zeitschritt gibt es eine neue Eingabe; nur die letzte Ausgabe y ist grün als genutzt markiert.

Deep Learning mit PyTorch für Fortgeschrittene

Vector-to-Sequence-Architektur

  • Ein einzelner Eingang, gesamte Ausgabesequenz nutzen
  • Beispiel: Textgenerierung

Architekturschema: Es gibt nur eine Eingabe im ersten Zeitschritt; alle Ausgaben y pro Zeitschritt sind grün als genutzt markiert.

Deep Learning mit PyTorch für Fortgeschrittene

Encoder-Decoder-Architektur

  • Ganze Eingabesequenz verarbeiten, danach Ausgabesequenz nutzen
  • Beispiel: Maschinelle Übersetzung

Architekturschema: Im ersten Teil (Encoder) werden Eingaben je Zeitschritt empfangen, Ausgaben ignoriert; im zweiten Teil (Decoder) keine Eingaben mehr, alle Ausgaben je Zeitschritt werden genutzt.

Deep Learning mit PyTorch für Fortgeschrittene

RNN in 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
  • Modellklasse mit __init__ definieren
  • Rekurrente Schicht self.rnn definieren
  • Lineare Schicht fc definieren
  • In forward() ersten Hidden State auf Nullen setzen
  • Eingabe und ersten Hidden State durch RNN-Schicht geben
  • Letzte RNN-Ausgabe wählen und durch lineare Schicht geben
Deep Learning mit PyTorch für Fortgeschrittene

Lass uns üben!

Deep Learning mit PyTorch für Fortgeschrittene

Preparing Video For Download...