Recurrente neurale netwerken

Gevorderde Deep Learning met PyTorch

Michal Oleszak

Machine Learning Engineer

Recurrent neuron

  • Feedforward-netwerken
  • RNN’s: hebben terugkoppelingen
  • Recurrent neuron:
    • Input x
    • Output y
    • Verborgen staat h
  • In PyTorch: nn.RNN()

Schema van een eenvoudige RNN-neuron: het neuron past gewichten en activatie toe, ontvangt input x en produceert outputs y en h, waarbij h terug naar zichzelf wordt gevoerd.

Gevorderde Deep Learning met PyTorch

Recurrent neuron uitrollen in de tijd

Schema van het recurrente neuron. Bij tijdstap 0 ontvangt het h0 en x0 en produceert het y0 en h1.

Gevorderde Deep Learning met PyTorch

Recurrent neuron uitrollen in de tijd

Schema van het recurrente neuron. Bij tijdstap 1 ontvangt het h1 en x1 en produceert het y1.

Gevorderde Deep Learning met PyTorch

Recurrent neuron uitrollen in de tijd

Schema van het recurrente neuron. Bij tijdstap 2 ontvangt het h2 en x2 en produceert het y2 en h3.

Gevorderde Deep Learning met PyTorch

Diepe RNN’s

Schema van twee recurrente neuronen die een laag vormen. Bij elke tijdstap worden outputs y doorgegeven aan een ander neuron.

Gevorderde Deep Learning met PyTorch

Sequence-to-sequence-architectuur

  • Geef een sequentie als input, gebruik de hele outputsequentie
  • Voorbeeld: spraakherkenning in realtime

Architectuurschema: bij elke tijdstap is er nieuwe input, terwijl alle outputs y per tijdstap in het groen als gebruikt zijn gemarkeerd,

Gevorderde Deep Learning met PyTorch

Sequence-to-vector-architectuur

  • Geef een sequentie als input, gebruik alleen de laatste output
  • Voorbeeld: tekstonderwerpsclassificatie

Architectuurschema: bij elke tijdstap is er nieuwe input, terwijl alleen de laatste output y van de laatste tijdstap in het groen als gebruikt is gemarkeerd,

Gevorderde Deep Learning met PyTorch

Vector-to-sequence-architectuur

  • Geef één input, gebruik de hele outputsequentie
  • Voorbeeld: tekstgeneratie

Architectuurschema: er is maar één input bij de eerste tijdstap, terwijl alle outputs y per tijdstap in het groen als gebruikt zijn gemarkeerd,

Gevorderde Deep Learning met PyTorch

Encoder-decoder-architectuur

  • Verwerk eerst de hele inputsequentie, start daarna met de outputsequentie
  • Voorbeeld: machinevertaling

Architectuurschema: in het eerste deel (encoder) komt er bij elke tijdstap input binnen maar worden outputs genegeerd; in het tweede deel (decoder) komt geen input meer binnen maar worden alle outputs per tijdstap gebruikt.

Gevorderde Deep Learning met PyTorch

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
  • Definieer modelklasse met __init__
  • Definieer recurrente laag, self.rnn
  • Definieer lineaire laag, fc
  • Initialiseer in forward() de eerste verborgen staat met nullen
  • Geef input en eerste verborgen staat door de RNN-laag
  • Pak de laatste RNN-output en geef die door de lineaire laag
Gevorderde Deep Learning met PyTorch

Laten we oefenen!

Gevorderde Deep Learning met PyTorch

Preparing Video For Download...