Înțelegeți cum d; un LSTM și d; un GRU în diagrame - Gândire artificială
Rețelele neuronale recurente (RNN) sunt utilizate pe scară largă în inteligența artificială atunci când a noțiune temporală intervine în date (uneori „ascunse” ca în analiza textului).
Dar acestea din urmă suferă în structura lor internă de limitări care le fac inoperante în multe situații. Apoi intervin celulele LSTM și GRU, a căror performanță este egală doar cu complexitatea lor !
Să încercăm să avem, datorită acestui ghid, un text simplu, profund și ilustrat cum funcționează.
Problema rețelelor neuronale recurente (RNN)
Cum funcționează un RNN ?
O rețea neuronală recurentă (RNN) este o rețea neuronală utilizată pe scară largă în învățarea profundă. Seamănă foarte mult cu rețeaua neuronală artificială (prescurtată ca ANN), este recomandabil să o cunoașteți pe aceasta din urmă pentru a înțelege pe deplin explicațiile RNN.
Pentru cititorii care nu sunt familiarizați cu modul în care funcționează o ANN, iată un rezumat rapid:
- Datele de intrare ajung la nivelul de intrare al rețelei. Datele sunt sub forma unui vector, de exemplu (0,7, 0,4, 0,9) și fiecare coordonată a vectorului este trimisă către un neuron galben de mai jos
- Apoi, cele 3 valori vor avansa în rețea strat cu strat (primul albastru apoi al doilea albastru apoi portocaliul care este ieșirea). Se spune că straturile albastre sunt ascunse, iar portocaliul este stratul de ieșire.
- Pentru a merge mai departe, între fiecare neuron există o linie care le conectează: această linie este asociată cu o valoare numită greutate (de exemplu 0,3 între primul neuron galben și primul albastru) care va cântări valoarea primită (adică vom avea 0,7 * 0,3 = valoare nouă care ajunge în primul neuron albastru).
- Toate valorile primite (și ponderate) sunt adăugate la intrarea unui neuron și apoi se aplică o anumită funcție rezultatului, care dă o valoare de ieșire pentru fiecare neuron
- Aceste valori sunt apoi propagate la următorul strat și așa mai departe.

Iată diagrama unui RNN. Spre deosebire de un ANN (și aceasta este singura diferență), pe fiecare neuron albastru, avem o buclă (dezvoltată sub diagrama rețelei):
- avem un t de date (3 valori, câte una pentru fiecare neuron galben) care ajunge în rețea
- acestea sunt propagate în rețea ca într-un ANN
- cu excepția faptului că fiecare neuron albastru, pe lângă faptul că primește rezultatele ponderate ale neuronilor anteriori, primește și valoarea care a ieșit din sine pentru datele t-1
- valoarea de ieșire a fiecărui neuron albastru este păstrată și va fi utilizată pentru datele t + 1
Deci avem un memoria 1 iterație pentru neuronii albastri.
Iată o prezentare mai animată a RNN-urilor, acum că ai ideea principală. Să începem cu utilizarea unui RNN pentru a analiza cuvintele propoziției „Aseară am mâncat un hamburger și câteva” și să prezicem cuvântul următor („cartofi prăjiți”).
În primul rând, fiecare cuvânt este transformat într-un vector. De exemplu, „ieri” devine (0,1, 0,5, 1): această transformare este o etapă esențială de pregătire a datelor. Fiecare vector este apoi trimis pe rând la RNN, prezentat mai jos sub forma unui pătrat verde (care reprezintă celula sa, adică un neuron).
Propoziția „Aseară am mâncat un hamburger și ceva” este transformată în vectori și apoi alimentată în RNN (credit: Michaël Nguyen)
Între fiecare cuvânt trimis în RNN, ieșirea notată \ (h_t \) pentru cuvântul anterior este adăugată ca intrare cu noul cuvânt. Această ieșire se numește „starea ascunsă”
Vectorul cuvântului curent, notat \ (x_t \), și ieșirea (care este, de asemenea, un vector) pentru cuvântul anterior, notat \ (h_ \), sunt puse cap la cap, apoi trec în funcția matematică „ tanh ”Înainte de a deveni noua ieșire notată \ (h_t \)
În rețelele neuronale, este foarte frecvent să se utilizeze „funcții de activare” la ieșirea neuronilor. De exemplu, tanh prezentat opus este o funcție care convertește o valoare (de exemplu 300) într-o nouă valoare între - 1 și 1 (vezi curba). Avantajul unei astfel de funcții este de a împiedica ieșirile neuronilor să devină prea mari, deoarece acest lucru ar necesita apoi mai mult timp de calcul și memorie de calculator ...
O problemă de învățare și memorie
În ceea ce privește perceptronul din timpul său, RNN suferă de problema disipării gradientului. Ce înseamnă asta ?
Pentru a „învăța”, un RNN folosește metoda coborâre în gradient pentru a actualiza greutățile dintre neuronii săi. Aceasta se bazează pe următoarea formulă:
\ (w: = w - \ alpha \ cdot F_w \)
- \ (w \) o greutate a rețelei
- \ (\ alpha \) viteza de învățare a rețelei
- \ (F_w \) gradientul rețelei în raport cu greutatea \ (w \)
Problemă: greutățile sunt actualizate de la dreapta la stânga. Pe măsură ce ne deplasăm spre stânga, produsul \ (\ alpha \ cdot F_w \) devine foarte mic iar greutățile primelor straturi de neuroni nu se schimbă cu greu! Astfel, aceste straturi nu învață absolut nimic ...
Prin urmare, RNN poate uita cu ușurință date care sunt puțin vechi (sau cuvinte care sunt destul de departe de cuvântul curent dintr-un text) în timpul fazei de învățare: memoria lui este scurtă.
Către o arhitectură mai bună: LSTM și GRU
Dacă o celulă (neuron) a unui RNN este în cele din urmă foarte simplă (concatenăm doi vectori și apoi aplicăm tanh pe ei), acest lucru nu este cazul cu LSTM și GRU la început.
LSTM-urile și GRU-urile au fost create ca o metodă de gestionare eficientă a memoriei pe termen scurt și lung prin sistemele lor de poartă. Dacă există multe variante, versiunile originale (prezentate aici) sunt încă foarte utilizate pe scară largă în cele mai bune modele de învățare profundă pentru prelucrarea automată a limbajului natural, care se referă la recunoașterea/sinteza vorbirii, dar și la generarea de texte sau cercetarea pieței ...