Jeg vil gerne diskutere nogle intuitioner på højt niveau bag LSTM-netværk. Her er nogle spørgsmål til at hjælpe med at udforske hvorfor-aspekterne:
- Hvor/hvorfor ville vi bruge et LSTM frem for et feed forward neuralnetværk (FFNN)?
- Hvad er fordele og ulemper ved LSTM’er, og hvordan kan de sammenlignes med FFNN?
- Hvordan adskiller de sig fra traditionelle recurrent neural networks (RNN)?
Feed Forward Neural Networks (FFNN)
Lad os først se på et standard FFNNN med arkitektur:Towards Data Science Image: *Som du sikkert ved, tager dette FFNNN tre input, behandler dem ved hjælp af det skjulte lag og producerer to outputs. Vi kan udvide denne arkitektur til at inkorporere flere skjulte lag, men det grundlæggende koncept gælder stadig: input kommer ind, de behandles i én retning, og de outputes til sidst.
Dette koncept er meget godt forklaret i andre artikler, så jeg vil ikke gå meget mere i detaljer. Det vigtigste er:
Den primære betingelse, der adskiller FFNN fra recurrent arkitekturer, er, at indgangene til en neuron skal komme fra laget før denne neuron.
FFNNN Wikipedia
Recurrent Neural Networks (RNN)
Recurrent neural networks are mathematically quite similar to FFNNN models. Deres vigtigste forskel er, at den begrænsning, der er lagt på FFNN, ikke længere gælder:
Input til en neuron kan komme fra ethvert andet lag.
Du vil ofte se, at denne arkitektur ofte er “rullet” ind i en recurrent enhed som f.eks. følgende:
Medieartikel: De “rullede” enheder, som du kan se i arkitekturdiagrammer, kan derfor være bedragerisk små. Når du ruller dem ud, vil netværket ofte være ret dybt!
RNN Wikipedia
Long-Short Term Memory (LSTM)
LSTM’er er en særlig type RNN, der er designet til at tackle problemet med forsvindende/udtømmende gradienter.
Når du træner et traditionelt RNN, lider netværket ofte under forsvindende/udtømmende gradienter: Når du ruller en recurrent enhed ud, resulterer det i et meget dybt netværk! Hvis man gennemgår backpropagationsalgoritmen ved hjælp af traditionelle RNN-arkitekturer, vil de tidligere lag få mindre og mindre betydning, efterhånden som man forplanter sig gennem netværket. Dette gør traditionelle RNN’er tilbøjelige til at glemme oplysninger, især data, der optræder mange tidstrin før det aktuelle tidspunkt.
Et eksempel på en LSTM-celle er illustreret således:
Denne struktur ligner den traditionelle RNN-afrullede enhed, men den væsentligste forskel med LSTM er portene: indgangsporten, udgangsporten og glemmegaten. Funktionen af disse gates er godt beskrevet ved deres navne:
- input gate styrer de data, der kommer ind i cellen
- forget gate styrer, i hvilket omfang data forbliver i cellen
- output gate styrer cellens output via aktiveringsfunktionen
Denne github IO-post er en god introduktion til det grundlæggende i LSTM’er. Det gør også et fantastisk stykke arbejde med at forklare intuitionen bag matematikken i en LSTM.
LSTM Wikipedia
Egenskaber og et eksempel på en Use Case af RNN
Følgningsløkkerne låner recurrent neural networks bedre til tidsmæssige udfordringer. Tiden er indregnet i deres arkitektur!
Lad os udforske et eksempel:
Måske bruger du et netværk til at forudsige det næste ord i en sætning. Lad os sige, at du får følgende input:
Sultne, Alice kører til den nærmeste butik for at købe
Et recurrent neuralt netværk vil måske glemme det første ord “sulter”, mens et LSTM ideelt set vil videreformidle det. Et LSTM ville derfor bruge den kontekst, det hørte tidligere i sætningen, til at gætte “mad”, mens et RNN kunne gætte alt, der købes i en butik, især i betragtning af en lang sætning eller flere sætninger.
De gating-mekanismer, der tillader denne type hukommelse, er forklaret godt af @StatsSorceress her: Forget Layer in a Recurrent Neural Network (RNN) –
RNNs er designet til at håndtere sekvenser. Dette kan bruges til at analysere video (sekvenser af billeder), skrivning/tale (sekvenser af ord) osv.
LSTM’er er designet til at lade vigtige oplysninger bestå over tid. RNN’er vil ofte “glemme” over tid.
FFNNN’er er hukommelsesløse systemer; efter at have behandlet et vist input glemmer de alt om dette input. Lad os f.eks. træne en FFNN, der tager 5 ord som input og forudsiger det næste output. Denne model ville så modtage input fra ovenstående eksempel:
den nærmeste butik at købe .
Dette er helt klart at miste konteksten, og vi ville få et dårligt resultat.
Nu kan man spørge: Hvad nu, hvis vi lavede en FFNN, der tog mange input, så den inkluderede ordet “sulter” i sine input? Med andre ord, kunne vi ikke øge antallet af input til en FFNN for at repræsentere forudgående data i tilstrækkelig grad?
Svaret er ja, men denne metode er både ineffektiv og ofte upraktisk. Lad os for eksempel sige, at vi har brug for at huske kontekst et helt afsnit tilbage. Vi ville have brug for en meget stor FFNN! Desuden, hvordan ved vi, hvor mange ord tilbage vi ønsker som kontekst? Ville 20 være tilstrækkeligt? 30? 100? LSTM-arkitekturen eliminerer disse problemer helt ved at lade netværket forvalte en midlertidig hukommelse. Dette problem forværres af udfordringer i forbindelse med videobearbejdning, fordi hvert billede vil kræve betydeligt flere input end NLP-opgaver.
Bemærk dog, at LSTM-enheder i sagens natur er mere beregningsteknisk komplekse end enheder i et FFNN, så træning af dem er ofte vanskeligere og tager mere tid. På trods af disse ulemper berettiger deres succes med hensyn til temporale dataudfordringer klart deres anvendelse frem for FFNN.