Ik wil wat high-level intuïtie achter LSTM netwerken bespreken. Hier zijn enkele vragen om de waarom-aspecten te helpen verkennen:
- Waarom/wanneer zouden we een LSTM gebruiken boven een feed forward neuraal netwerk (FFNN)?
- Wat zijn de voor- en nadelen van LSTM’s en hoe verhouden ze zich tot FFNN?
- Hoe verschillen ze van de traditionele recurrente neurale netwerken (RNNs)?
Feed Forward Neural Networks (FFNN)
Laten we eerst eens kijken naar een standaard FFNN met architectuur:
Zoals u waarschijnlijk weet, neemt dit FFNN drie ingangen, verwerkt deze met behulp van de verborgen laag en produceert twee uitgangen. We kunnen deze architectuur uitbreiden om meer verborgen lagen op te nemen, maar het basisconcept geldt nog steeds: ingangen komen binnen, ze worden in één richting verwerkt, en ze worden aan het einde uitgevoerd.
Dit concept wordt heel goed uitgelegd door andere artikelen, dus ik zal niet veel meer in detail treden. De belangrijkste takeaway is:
De primaire voorwaarde die FFNN scheidt van recurrente architecturen is dat de ingangen van een neuron moeten afkomstig zijn van de laag vóór dat neuron.
FFNN Wikipedia
Recurrente Neurale Netwerken (RNN)
Recurrente neurale netwerken zijn wiskundig vrij gelijkaardig aan FFNN modellen. Hun belangrijkste verschil is dat de beperking die op FFNN wordt geplaatst niet langer wordt toegepast:
Inputs naar een neuron kunnen van elke andere laag komen.
Je zult vaak zien dat deze architectuur vaak wordt “gerold” in een recurrente eenheid, zoals de volgende:
De “opgerolde” eenheden die u in architectuurdiagrammen ziet, kunnen dus bedrieglijk klein zijn. Wanneer je ze afrolt, zal het netwerk vaak behoorlijk diep zijn!
RNN Wikipedia
Long-Short Term Memory (LSTM)
LSTM’s zijn een speciaal type RNN dat is ontworpen om het vanishing/exploding gradient probleem aan te pakken.
Wanneer je een traditioneel RNN traint, heeft het netwerk vaak last van vanishing/exploding gradients: het afrollen van een recurrente eenheid resulteert in een zeer diep netwerk! Als je het backpropagation algoritme met traditionele RNN architecturen doorloopt, zullen de vroegere lagen steeds minder belangrijk worden naarmate we verder door het netwerk gaan. Dit maakt traditionele RNN’s gevoelig voor het vergeten van informatie, met name gegevens die vele tijdstappen voor de huidige tijd verschijnen.
Een voorbeeld van een LSTM-cel wordt als volgt geïllustreerd:
Deze structuur is vergelijkbaar met de traditionele RNN-afrolunit, maar het belangrijkste verschil met de LSTM zijn de poorten: ingangspoort, uitgangspoort, en vergeetpoort. De functie van deze poorten wordt goed beschreven door hun namen:
- input gate regelt de gegevens die de cel binnenkomen
- forget gate regelt de mate waarin gegevens binnen de cel blijven
- output gate regelt de uitvoer van de cel via de activeringsfunctie
Deze github IO-post is een geweldige inleiding tot de basisprincipes van LSTM’s. Het doet ook een geweldige job in het uitleggen van de intuïtie achter de wiskunde van een LSTM.
LSTM Wikipedia
Eigenschappen en een voorbeeld use case van RNN
De terugkoppelingslussen lenen recurrente neurale netwerken beter voor temporele uitdagingen. Tijd is in hun architectuur verwerkt!
Laten we eens een voorbeeld bekijken:
Misschien gebruikt u een netwerk om het volgende woord in een zin te voorspellen. Stel dat u de volgende invoer krijgt:
Hongerig, rijdt Alice naar de dichtstbijzijnde winkel om
Een recurrent neuraal netwerk zou het eerste woord “hongerig” kunnen vergeten, terwijl een LSTM het idealiter zou propageren. Een LSTM zou daarom de context gebruiken die het eerder in de zin heeft gehoord om “voedsel” te raden, terwijl een RNN alles zou kunnen raden wat in een winkel wordt gekocht, met name gegeven een lange zin of meerdere zinnen.
De gating-mechanismen die dit type geheugen mogelijk maken, worden hier goed uitgelegd door @StatsSorceress: Forget Layer in a Recurrent Neural Network (RNN) –
RNNs zijn ontworpen om sequenties te verwerken. Dit kan worden gebruikt voor het analyseren van video (opeenvolgingen van beelden), schrijven/spreken (opeenvolgingen van woorden), enz.
LSTMs zijn ontworpen om belangrijke informatie in de tijd te laten voortbestaan. RNN’s zullen na verloop van tijd vaak “vergeten”.
FFNN’s zijn geheugenloze systemen; na het verwerken van een bepaalde invoer, vergeten zij alles over die invoer. Stel bijvoorbeeld dat we een FFNN trainen dat 5 woorden als invoer neemt en de volgende uitvoer voorspelt. Dit model zou dan de invoer uit het bovenstaande voorbeeld krijgen:
de dichtstbijzijnde winkel om te kopen.
Dit is duidelijk contextverlies, en we zouden een slecht resultaat krijgen.
Nu, zou je kunnen vragen, wat als we een FFNN zouden maken dat veel invoer neemt, zodat het het woord “verhongeren” in zijn invoer opneemt? Met andere woorden, zouden we het aantal ingangen van een FFNN niet kunnen verhogen om de voorafgaande gegevens voldoende weer te geven?
Het antwoord is ja, maar deze methode is zowel inefficiënt als vaak onpraktisch. Stel, bijvoorbeeld, moeten we onthouden context een hele paragraaf terug. We zouden een zeer grote FFNN nodig hebben! Bovendien, hoe weten we hoeveel woorden terug we willen als context? Zou 20 voldoende zijn? 30? 100? De LSTM architectuur elimineert deze problemen volledig door het netwerk een tijdelijk geheugen te laten beheren. Dit probleem wordt nog verergerd door uitdagingen op het gebied van videoverwerking, omdat elk frame aanzienlijk meer inputs zal vergen dan NLP-taken.
Merk echter op dat LSTM-eenheden inherent rekenkundig complexer zijn dan eenheden van een FFNN, zodat het trainen ervan vaak moeilijker is en meer tijd kost. Ondanks deze nadelen, hun succes in temporele data uitdagingen duidelijk rechtvaardigen hun gebruik boven FFNN.