Jag vill diskutera en viss hög nivå av intuition bakom LSTM-nätverk. Här är några frågor för att utforska varför-aspekterna:
- Varför/när skulle vi använda en LSTM framför ett feed forward neural network (FFNN)?
- Vad är för- och nackdelarna med LSTM:s och hur kan de jämföras med FFNN?
- Hur skiljer de sig från traditionella återkommande neurala nätverk (RNN)?
Feed Forward Neural Networks (FFNN)
Låt oss först betrakta ett standard-FFNNN med arkitektur:
Som du säkert vet tar detta FFNN tre ingångar, bearbetar dem med hjälp av det dolda lagret och producerar två utgångar. Vi kan utöka den här arkitekturen med fler dolda lager, men det grundläggande konceptet gäller fortfarande: inmatningar kommer in, bearbetas i en riktning och skickas ut i slutet.
Det här konceptet förklaras mycket väl i andra artiklar, så jag kommer inte att gå in på fler detaljer. Det viktigaste är:
Det primära villkoret som skiljer FFNN från återkommande arkitekturer är att ingångarna till en neuron måste komma från lagret före den neuronen.
FFNNN Wikipedia
Rekursiva neurala nätverk (RNN)
Rekursiva neurala nätverk är matematiskt sett ganska lika FFNN-modeller. Deras största skillnad är att den begränsning som gäller för FFNN inte längre tillämpas:
Inputs till en neuron kan komma från vilket annat lager som helst.
Du kommer ofta att se att den här arkitekturen ofta ”rullas” in i en återkommande enhet som till exempel följande:
Medieartikel: De ”rullade” enheterna som du kan se i arkitekturdiagrammen kan därför vara bedrägligt små. När du rullar ut dem blir nätverket ofta ganska djupt!
RNN Wikipedia
Long-Short Term Memory (LSTM)
LSTMs är en speciell typ av RNN som är utformade för att ta itu med problemet med försvinnande/exploderande gradienter.
När du tränar ett traditionellt RNN lider nätverket ofta av försvinnande/exploderande gradienter: att rulla ut en rekursiv enhet resulterar i ett mycket djupt nätverk! Om man går igenom backpropagationsalgoritmen med hjälp av traditionella RNN-arkitekturer kommer de tidigare lagren att bli mindre och mindre betydelsefulla allteftersom vi fortplantar oss genom nätverket. Detta gör att traditionella RNN är benägna att glömma information, särskilt data som förekommer många tidssteg före den aktuella tiden.
Ett exempel på en LSTM-cell illustreras på följande sätt:
Denna struktur liknar den traditionella RNN-avvecklade enheten, men den viktigaste skillnaden med LSTM är grindarna: inmatningsgrind, utmatningsgrind och glömma-grind. Funktionen hos dessa grindar beskrivs väl av deras namn:
- Ingångsgrind kontrollerar de data som kommer in i cellen
- Glöm grind kontrollerar i vilken utsträckning data stannar inom cellen
- Utgångsgrind kontrollerar cellens utdata via aktiveringsfunktionen
Detta github IO-inlägg är en bra introduktion till grunderna i LSTM:er. Den förklarar också på ett fantastiskt sätt intuitionen bakom matematiken i en LSTM.
LSTM Wikipedia
Egenskaper och ett exempelanvändningsfall för RNN
Förmågan att använda återkommande neurala nätverk är bättre för tidsmässiga utmaningar tack vare återkopplingsslingorna. Tiden är inräknad i deras arkitektur!
Låt oss utforska ett exempel:
Kanske använder du ett nätverk för att förutsäga nästa ord i en mening. Låt oss säga att du får inmatningen:
Svältande kör Alice till närmaste butik för att köpa
Ett återkommande neuralt nätverk kan glömma det första ordet ”svältande”, medan ett LSTM-nätverk idealt sett skulle sprida det vidare. Ett LSTM skulle därför använda det sammanhang det hört tidigare i meningen för att gissa ”mat” medan ett RNN skulle kunna gissa vad som helst som köps i en butik, särskilt med tanke på en lång mening eller flera meningar.
De grindmekanismer som möjliggör denna typ av minne förklaras väl av @StatsSorceress här: Glöm lager i ett Recurrent Neural Network (RNN) –
RNNs är utformade för att hantera sekvenser. Detta kan användas för att analysera video (sekvenser av bilder), skrift/tal (sekvenser av ord) etc.
LSTMs är utformade för att låta viktig information bestå över tiden. RNNs kommer ofta att ”glömma” med tiden.
FFNNs är minneslösa system; efter att ha behandlat en viss inmatning glömmer de allt om den inmatningen. Säg till exempel att vi tränar en FFNN som tar 5 ord som indata och förutsäger nästa utdata. Denna modell skulle då få inmatningen från exemplet ovan:
den närmaste butiken att köpa .
Detta förlorar helt klart kontexten, och vi skulle få ett dåligt resultat.
Nu kanske du frågar dig: Vad händer om vi gör en FFNN som tar många inmatningar så att den inkluderar ordet ”svältande” i sina inmatningar? Med andra ord, skulle vi inte kunna öka antalet ingångar till en FFNN för att tillräckligt representera tidigare data?
Svaret är ja, men denna metod är både ineffektiv och ofta opraktisk. Säg till exempel att vi behöver komma ihåg sammanhang ett helt stycke tillbaka. Vi skulle behöva en mycket stor FFNN! Dessutom, hur vet vi hur många ord tillbaka vi vill ha som kontext? Skulle 20 vara tillräckligt? 30? 100? LSTM-arkitekturen eliminerar dessa problem helt och hållet genom att låta nätverket hantera ett tillfälligt minne. Detta problem förvärras av utmaningar i samband med videobearbetning eftersom varje bild kommer att kräva betydligt fler indata än NLP-uppgifter.
Notera dock att LSTM-enheterna i sig är mer beräkningstekniskt komplexa än enheterna i ett FFNN, så det är ofta svårare att träna dem och det tar längre tid att träna dem. Trots dessa nackdelar motiverar deras framgång i temporala datautmaningar tydligt att de används framför FFNN.