Et særligt type neuralt netværk er Long Short Term Memory (LSTM) netværket, som udspringer af Recurrent neurale netværk (RNN), hvor output føres tilbage i netværket som input, hvilket er oplagt ved tidsserieanalyse. LSTM netværket benyttes hyppigt af virksomheder inden for AI teknologi. Det neurale netværk benyttes f.eks. af Google til Google oversæt og Google assistent. I 2019 udviklede DeepMind et LSTM netværk, som på lige niveau med verdens bedste spillere var i stand til at spille strategispillet Starcraft.
Et problem ved RNN er, at BP vha. SGD ikke formår at opdatere vægtene korrekt. Fordi outputtet føres tilbage som input, stiger antallet af opdateringer markant, hvilket giver et gradient problem. Gradienten vil nemlig enten stige eksponentielt mod uendelig for \(|w|>1\) eller gå mod 0 for \(|w|<1\) (Goodfellow2016DeepLearning). I et LSTM-netværk indføres en stadiecelle \(c_t\), hvor tidsseriens temporale afhængighed går i loops, hvilket forsimpler PB således, at gradient problemet forsvinder (Goodfellow2016DeepLearning). Det giver netværket mulighed for at systematisere temporal afhængighed for variablen, selv over lange tidsperioder jf. figur 2.3.1.
Kilde: Goodfellow2016DeepLearning
Derudover er der flere porte, som kontrollerer informationsflowet og derfor også flere parameter.
Første step i LSTM-netværket er at bestemme, hvilken information der skal glemmes fra stadiecellen. Dette styres af
forglemmelsesporten \(f_i^t\), hvor \(t\) angiver tiden og \(i\) angiver cellen. Forglemmelsesporten tilknytter vægte til inputs mellem 0 og 1 vha. af en sigmoidfunktion $\sigma$ efter hvor meget information, der skal føres tilbage i stadiecellen.
\begin{equation}
f_i^t=\sigma(b_i^f+\sum_jU^f_{i,j}x_j^t+\sum_jW^f_{i,j}h_j^{t-1})
\end{equation}
hvor \(x^t\) er input vektoren og \(h^t\) er vektoren for det gemte lag j, som indeholder alle outputs fra LSTM-cellerne. \(U^f\) er inputvægtene, mens $W^f$ er vægtene for tidligere outputs indtil forglemmelsesporten. \(b^f\) er et respektivt bias.\
I det næste step bestemmes, hvilke nye informationer, der skal føres ind i stadiecellen. Dette gøres vha. to forskellige kanaler. Den ene er indgangsporten:
\begin{equation}
i_i^t=\sigma \left(b_i^i+\sum_jU^i_{i_j}x_j^t+\sum_jW^i_{i,j}h_j^{t-1}\right)
\end{equation}
og den anden port er aktiveringsfunktionen $tanh(x)=\frac{e^{x}-e^{x}}{e^x+e^{x}}$.
LSTM-cellens stadieenhed $c_i^t$ opdateres efter følgende formel:
\begin{equation}
c_i^t=f_i^tc_i^{t-1}+i_i^t\sigma \left( b_i+\sum_jU_{i,j}x_j^t+\sum_jW_{i,j}h_j^{t-1} \right)
\end{equation}
hvor $U^c,W^c$ og $b^c$ igen betegner inputvægtene, de tilbagevendene vægte til LSTM-cellerne og et bias. Outputtet fra LSTM cellen $h_i^t$ bestemmes ud fra stadiecellen, som transformeres vha. aktiveringsfunktionen $tanh$ og outputporten:
\begin{equation}
o_i^t=\sigma \left(b_i^o+\sum_jU^o_{i,j}x_j^t+\sum_jW^o_{i,j}h_j^{t-1} \right)
\end{equation}
Outputtet fra stadiecellen og outputporten ganges sammen, så det endelig output er givet ved:
\begin{equation}
h_i^t=tanh(s_i^t)o_i^t
\end{equation}
Tag f.eks. et LSTM netværk bestående af fire gemte lag med 50 neuroner i hver. Da vil arkitekturen bag netværket være illustreret som følger:
Men hvordan benytter man så selv et LSTM netværk konstruktivt for egen vindings skyd. LSTM netværker er som sagt utrolig gode til at finde systemer i data, som kan benyttes til at forudsige fremtidig værdier. Så hvorfor ikke smide noget aktie data ind i netværket og se hvad der sker. Det finasielle marked er som bekendt et af de markedet med aller mest registreret data 🙂 Du kan læse mere om hvordan man forecaste aktiekurser her.
Skriv et svar