Encoder-decoder netwerken voor lang kortetermijngeheugen

Encoder-decoder netwerken voor lang kortetermijngeheugen

Zachte introductie tot de Encoder-Decoder LSTM's voor
sequentie-naar-sequentie-voorspelling met voorbeeld Python-code.

De Encoder-Decoder LSTM is een terugkerend neuraal netwerk dat is ontworpen om sequentie-naar-sequentieproblemen aan te pakken, ook wel seq2seq genoemd.

Voorspellingsproblemen van volgorde tot volgorde zijn een uitdaging omdat het aantal items in de invoer- en uitvoerreeksen kan variëren. Tekstvertaling en het leren uitvoeren van programma's zijn bijvoorbeeld voorbeelden van seq2seq-problemen.

In dit bericht ontdek je de Encoder-Decoder LSTM-architectuur voor het voorspellen van volgorde naar volgorde.

Na het voltooien van dit bericht weet je:

  • De uitdaging van het voorspellen van volgorde tot volgorde.
  • De Encoder-Decoder-architectuur en de beperking in LSTM's waarvoor deze is ontworpen.
  • Hoe de Encoder-Decoder LSTM-modelarchitectuur in Python met Keras moet worden geïmplementeerd.

Geef uw project een kickstart met mijn nieuwe boek Long Short-Term Memory Networks With Python, inclusief stap-voor-stap tutorials en de Python-broncode bestanden voor alle voorbeelden.

Laten we beginnen.

Encoder-decoder netwerken voor lang kortetermijngeheugen

Encoder-decoder netwerken voor lang kortetermijngeheugen
Foto door slashvee, enkele rechten voorbehouden.

Sequentie-tot-sequentie-voorspellingsproblemen

Sequentievoorspelling omvat vaak het voorspellen van de volgende waarde in een reeks met reële waarden of het uitvoeren van een klasselabel voor een invoersequentie.

Dit wordt vaak omkaderd als een reeks van één invoertijdstap naar één uitvoertijdstap (bijv. Één-op-één) of meerdere invoertijdstappen naar één uitvoertijdstap (veel-op-één) type sequentievoorspellingsprobleem.

Er is een uitdagender type sequentievoorspellingsprobleem dat een reeks als invoer nodig heeft en een reeksvoorspelling als uitvoer vereist. Dit worden sequentie-tot-sequentie-voorspellingsproblemen genoemd, of afgekort seq2seq.

Een probleem bij het modelleren dat deze problemen uitdagend maakt, is dat de lengte van de invoer- en uitvoerreeksen kan variëren. Gegeven het feit dat er meerdere invoertijdstappen en meerdere uitvoertijdstappen zijn, wordt deze vorm van probleem aangeduid als veel-op-veel-typevoorspellingsprobleem.

Hulp nodig met LSTM's voor sequentievoorspelling?

Volg mijn gratis 7-daagse e-mailcursus en ontdek 6 verschillende LSTM-architecturen (met code).

Klik om u aan te melden en ontvang ook een gratis pdf-e-boekversie van de cursus.

Start nu uw GRATIS minicursus!

Encoder-Decoder LSTM-architectuur

Een benadering van seq2seq-voorspellingsproblemen die zeer effectief is gebleken, wordt de Encoder-Decoder LSTM genoemd.

Deze architectuur bestaat uit twee modellen: een voor het lezen van de invoersequentie en het coderen ervan in een vector met vaste lengte, en een tweede voor het decoderen van de vector met vaste lengte en het uitvoeren van de voorspelde sequentie. Het gebruik van de modellen in overleg geeft de architectuur de naam Encoder-Decoder LSTM, speciaal ontworpen voor seq2seq-problemen.

… RNN Encoder-Decoder, bestaat uit twee terugkerende neurale netwerken (RNN) die fungeren als een encoder en een decoderpaar. De encoder wijst een bronsequentie met variabele lengte toe aan een vector met vaste lengte, en de decoder wijst de vectorrepresentatie terug naar een doelsequentie met variabele lengte.

- Vertegenwoordigingen van zinnen leren met behulp van RNN Encoder-Decoder voor statistische machinevertaling, 2014.

De Encoder-Decoder LSTM is ontwikkeld voor problemen met de verwerking van natuurlijke taal, waar het state-of-the-art prestaties aantoonde, met name op het gebied van tekstvertaling, statistische machinevertaling genaamd.

De innovatie van deze architectuur is het gebruik van een interne representatie met een vaste grootte in het hart van het model, waarnaar de invoerreeksen worden gelezen en de uitvoerreeksen worden gelezen. Om deze reden kan de methode sequentie-inbedding worden genoemd.

In een van de eerste toepassingen van de architectuur op vertalingen van Engels naar Frans, werd de interne weergave van de gecodeerde Engelse uitdrukkingen gevisualiseerd. De plots onthulden een kwalitatief zinvolle aangeleerde structuur van de zinnen die voor de vertaaltaak werden gebruikt.

De voorgestelde RNN Encoder-Decoder genereert op natuurlijke wijze een weergave van een zin in continue ruimte. […] Uit de visualisatie blijkt duidelijk dat de RNN Encoder-Decoder zowel semantische als syntactische structuren van de zinnen vastlegt

- Vertegenwoordigingen van zinnen leren met behulp van RNN Encoder-Decoder voor statistische machinevertaling, 2014.

Wat de vertaling betreft, bleek het model effectiever te zijn wanneer de invoervolgorde werd omgekeerd. Verder bleek het model effectief te zijn, zelfs bij zeer lange invoersequenties.

We waren in staat om het goed te doen met lange zinnen omdat we de volgorde van de woorden in de bronzin omdraaiden, maar niet de doelzinnen in de training en testset. Door dit te doen, hebben we veel afhankelijkheden op korte termijn geïntroduceerd die het optimalisatieprobleem veel eenvoudiger hebben gemaakt. … De simpele truc om de woorden in de bronzin om te draaien is een van de belangrijkste technische bijdragen van dit werk

- Sequence to Sequence Learning with Neural Networks, 2014.

Deze benadering is ook gebruikt bij beeldinvoer waarbij een convolutioneel neuraal netwerk wordt gebruikt als een kenmerkextractor op invoerbeelden, die vervolgens wordt gelezen door een decoder LSTM.

… We stellen voor om dit elegante recept te volgen en de encoder RNN te vervangen door een diep convolutie neuraal netwerk (CNN). […] het is normaal om een ​​CNN als afbeelding te gebruiken encoder ”, door het eerst vooraf te trainen voor een taak voor beeldclassificatie en de laatste verborgen laag te gebruiken als invoer voor de RNN-decoder die zinnen genereert

- Show and Tell: A Neural Image Caption Generator, 2014.

Encoder-decoder LSTM-modelarchitectuur

Encoder-decoder LSTM-modelarchitectuur

Toepassingen van Encoder-Decoder LSTM's

De onderstaande lijst belicht enkele interessante toepassingen van de Encoder-Decoder LSTM-architectuur.

  • Machinevertaling, bijv. Vertaling van zinnen in het Engels naar Frans.
  • Leren uitvoeren, bijvoorbeeld de uitkomst van kleine programma's berekenen.
  • Image Captioning, bijv. Het genereren van een tekstbeschrijving voor afbeeldingen.
  • Conversational Modelling, bijvoorbeeld het genereren van antwoorden op tekstuele vragen.
  • Bewegingsclassificatie, bijv. Het genereren van een reeks opdrachten uit een reeks gebaren.

Implementeer Encoder-Decoder LSTM's in Keras

De Encoder-Decoder LSTM kan rechtstreeks in de Keras deep learning-bibliotheek worden geïmplementeerd.

We kunnen het model zien als bestaande uit twee hoofdonderdelen: de encoder en de decoder.

Eerst wordt de invoervolgorde één gecodeerd teken tegelijk aan het netwerk getoond. We hebben een coderingsniveau nodig om de relatie tussen de stappen in de invoersequentie te leren kennen en een interne representatie van deze relaties te ontwikkelen.

Een of meer LSTM-lagen kunnen worden gebruikt om het encodermodel te implementeren. De output van dit model is een vector met een vaste grootte die de interne representatie van de inputsequentie vertegenwoordigt. Het aantal geheugencellen in deze laag bepaalt de lengte van deze vector met vaste grootte.

De decoder moet de aangeleerde interne representatie van de inputsequentie omzetten in de juiste outputsequentie.

Een of meer LSTM-lagen kunnen ook worden gebruikt om het decodermodel te implementeren. Dit model leest van de uitvoer met vaste grootte van het encodermodel.

Net als bij de Vanilla LSTM, wordt een Dense-laag gebruikt als uitvoer voor het netwerk. Dezelfde gewichten kunnen worden gebruikt om elke tijdstap in de uitvoersequentie uit te voeren door de Dense-laag in een TimeDistributed-wikkel te wikkelen.

Er is echter een probleem.

We moeten de encoder op de decoder aansluiten, en ze passen niet.

Dat wil zeggen, de encoder zal een 2-dimensionale matrix van uitgangen produceren, waarbij de lengte wordt bepaald door het aantal geheugencellen in de laag. De decoder is een LSTM-laag die een 3D-invoer verwacht van [samples, time steps, features] om een ​​gedecodeerde reeks van een andere lengte te produceren die door het probleem wordt bepaald.

Als u probeert deze stukken samen te dwingen, krijgt u een foutmelding die aangeeft dat de uitvoer van de decoder 2D is en dat 3D-invoer naar de decoder vereist is.

We kunnen dit oplossen met een RepeatVector-laag. Deze laag herhaalt eenvoudigweg de verstrekte 2D-invoer meerdere keren om een ​​3D-uitvoer te creëren.

De RepeatVector-laag kan worden gebruikt als een adapter om de encoder- en decoderdelen van het netwerk bij elkaar te passen. We kunnen de RepeatVector configureren om de vector met vaste lengte één keer te herhalen voor elke stap in de uitvoersequentie.

Samengevat hebben we:

Samenvattend wordt de RepeatVector gebruikt als een adapter om de 2D-uitvoer met vaste grootte van de encoder af te stemmen op de verschillende lengte en 3D-invoer die door de decoder wordt verwacht. Met de TimeDistributed-wrapper kan dezelfde uitvoerlaag worden hergebruikt voor elk element in de uitvoerreeks.

Verder lezen

Deze sectie biedt meer bronnen over het onderwerp als u dieper zoekt.

Papieren

Keras API

Berichten

Overzicht

In dit bericht heb je de Encoder-Decoder LSTM-architectuur ontdekt voor het voorspellen van volgorde naar volgorde

Concreet heb je geleerd:

  • De uitdaging van sequentie-tot-sequentie-voorspelling.
  • De Encoder-Decoder-architectuur en de beperking in LSTM's waarvoor deze is ontworpen.
  • Hoe de Encoder-Decoder LSTM-modelarchitectuur in Python met Keras moet worden geïmplementeerd.

Heb je nog vragen?
Stel je vragen in de comments hieronder en ik zal mijn best doen om deze te beantwoorden.

Ontwikkel vandaag nog LSTM's voor sequentievoorspelling!

Lange-termijngeheugennetwerken met Python

Ontwikkel uw eigen LSTM-modellen in enkele minuten

... met slechts een paar regels python-code

Ontdek hoe in mijn nieuwe e-boek:
Lange-termijngeheugennetwerken met Python

Het zorgt voor zelfstudie tutorials over onderwerpen als:
CNN LSTM's, Encoder-Decoder LSTM's, generatieve modellen, gegevensvoorbereiding, voorspellingen doen en veel meer...

Breng eindelijk LSTM terugkerende neurale netwerken naar
Uw projecten voor sequentievoorspellingen

Sla de academici over. Alleen resultaten.

Zie wat erin zit

Samuti võite olla huvitatud