Recurrent Neural Networks

Fördjupad djupinlärning med PyTorch

Michal Oleszak

Machine Learning Engineer

Recurrent neuron

  • Framåtmatade nätverk
  • RNN:er: har kopplingar som pekar bakåt
  • Recurrent neuron:
    • Indata x
    • Utdata y
    • Dolt tillstånd h
  • I PyTorch: nn.RNN()

Schema över en enkel RNN-neuron: neuronen tillämpar vikter och aktivering, tar emot indata x och producerar utdata y och h, där h matas tillbaka till sig själv.

Fördjupad djupinlärning med PyTorch

Upprullning av recurrent neuron genom tid

Schema över den recurrenta neuronen. Vid tidssteg 0 tar den emot indata h0 och x0 och producerar utdata y0 och h1.

Fördjupad djupinlärning med PyTorch

Upprullning av recurrent neuron genom tid

Schema över den recurrenta neuronen. Vid tidssteg 1 tar den emot indata h1 och x1 och producerar utdata y1.

Fördjupad djupinlärning med PyTorch

Upprullning av recurrent neuron genom tid

Schema över den recurrenta neuronen. Vid tidssteg 2 tar den emot indata h2 och x2 och producerar utdata y2 och h3.

Fördjupad djupinlärning med PyTorch

Djupa RNN:er

Schema över två recurrenta neuroner som bildar ett lager. Vid varje tidssteg skickas utdata y vidare till en annan neuron.

Fördjupad djupinlärning med PyTorch

Sekvens-till-sekvens-arkitektur

  • Mata in en sekvens, använd hela utdatasekvensen
  • Exempel: Realtidstaligenkänning

Arkitekturschema: vid varje tidssteg finns en ny indata, medan alla utdata y från varje tidssteg är markerade i grönt som använda,

Fördjupad djupinlärning med PyTorch

Sekvens-till-vektor-arkitektur

  • Mata in en sekvens, använd bara den sista utdatan
  • Exempel: Textämnesklassificering

Arkitekturschema: vid varje tidssteg finns en ny indata, medan bara den sista utdatan y från det sista tidssteget är markerad i grönt som använd,

Fördjupad djupinlärning med PyTorch

Vektor-till-sekvens-arkitektur

  • Mata in en enstaka indata, använd hela utdatasekvensen
  • Exempel: Textgenerering

Arkitekturschema: det finns bara en indata vid det första tidssteget, medan alla utdata y från varje tidssteg är markerade i grönt som använda,

Fördjupad djupinlärning med PyTorch

Kodare-avkodare-arkitektur

  • Mata in hela indatasekvensen och börja sedan använda utdatasekvensen
  • Exempel: Maskinöversättning

Arkitekturschema: i den första delen (kodaren) tas indata emot vid varje tidssteg men utdata ignoreras; i den andra delen (avkodaren) tas ingen mer indata emot men alla utdata från varje tidssteg används.

Fördjupad djupinlärning med PyTorch

RNN i 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
  • Definiera modellklassen med metoden __init__
  • Definiera det recurrenta lagret, self.rnn
  • Definiera det linjära lagret, fc
  • I forward(), initialisera det första dolda tillståndet till nollor
  • Skicka indata och det första dolda tillståndet genom RNN-lagret
  • Välj ut den sista RNN-utdatan och skicka den genom det linjära lagret
Fördjupad djupinlärning med PyTorch

Nu kör vi en övning!

Fördjupad djupinlärning med PyTorch

Preparing Video For Download...