AI-For-Beginners/translations/ro/lessons/5-NLP/16-RNN
leestott fee00e62ca 🌐 Update translations via Co-op Translator 2025-08-30 01:17:50 +00:00
..
README.md 🌐 Update translations via Co-op Translator 2025-08-26 01:51:51 +00:00
RNNPyTorch.ipynb 🌐 Update translations via Co-op Translator 2025-08-30 01:17:50 +00:00
RNNTF.ipynb 🌐 Update translations via Co-op Translator 2025-08-30 01:17:50 +00:00
assignment.md 🌐 Update translations via Co-op Translator 2025-08-26 01:51:51 +00:00

README.md

Rețele Neuronale Recurente

Chestionar înainte de curs

În secțiunile anterioare, am utilizat reprezentări semantice bogate ale textului și un clasificator liniar simplu deasupra acestor embedding-uri. Această arhitectură captează sensul agregat al cuvintelor dintr-o propoziție, dar nu ia în considerare ordinea cuvintelor, deoarece operația de agregare deasupra embedding-urilor elimină această informație din textul original. Deoarece aceste modele nu pot modela ordonarea cuvintelor, ele nu pot rezolva sarcini mai complexe sau ambigue, cum ar fi generarea de text sau răspunsul la întrebări.

Pentru a capta sensul unei secvențe de text, trebuie să utilizăm o altă arhitectură de rețea neuronală, numită rețea neuronală recurentă, sau RNN. În RNN, trecem propoziția prin rețea un simbol la un moment dat, iar rețeaua produce un statut, pe care îl trecem din nou prin rețea împreună cu următorul simbol.

RNN

Imagine realizată de autor

Având secvența de intrare de tokeni X0,...,Xn, RNN creează o secvență de blocuri de rețea neuronală și antrenează această secvență cap-coadă folosind backpropagation. Fiecare bloc de rețea primește o pereche (Xi,Si) ca intrare și produce Si+1 ca rezultat. Statutul final Sn sau (ieșirea Yn) este transmis unui clasificator liniar pentru a produce rezultatul. Toate blocurile de rețea împărtășesc aceleași greutăți și sunt antrenate cap-coadă folosind o singură trecere de backpropagation.

Deoarece vectorii de statut S0,...,Sn sunt trecuți prin rețea, aceasta poate învăța dependențele secvențiale dintre cuvinte. De exemplu, atunci când cuvântul nu apare undeva în secvență, rețeaua poate învăța să nege anumite elemente din vectorul de statut, rezultând o negare.

Deoarece greutățile tuturor blocurilor RNN din imaginea de mai sus sunt împărtășite, aceeași imagine poate fi reprezentată ca un singur bloc (în dreapta) cu un circuit de feedback recurent, care transmite statutul de ieșire al rețelei înapoi la intrare.

Anatomia unei Celule RNN

Să vedem cum este organizată o celulă RNN simplă. Aceasta acceptă statutul anterior Si-1 și simbolul curent Xi ca intrări și trebuie să producă statutul de ieșire Si (și, uneori, ne interesează și o altă ieșire Yi, ca în cazul rețelelor generative).

O celulă RNN simplă are două matrici de greutăți interne: una transformă un simbol de intrare (să o numim W), iar cealaltă transformă un statut de intrare (H). În acest caz, ieșirea rețelei este calculată ca σ(W×Xi+H×Si-1+b), unde σ este funcția de activare și b este un bias suplimentar.

Anatomia unei celule RNN

Imagine realizată de autor

În multe cazuri, tokenii de intrare sunt trecuți prin stratul de embedding înainte de a intra în RNN pentru a reduce dimensionalitatea. În acest caz, dacă dimensiunea vectorilor de intrare este emb_size, iar vectorul de statut este hid_size - dimensiunea lui W este emb_size×hid_size, iar dimensiunea lui H este hid_size×hid_size.

Memorie pe Termen Lung și Scurt (LSTM)

Una dintre principalele probleme ale RNN-urilor clasice este așa-numita problemă a gradientelor care dispar. Deoarece RNN-urile sunt antrenate cap-coadă într-o singură trecere de backpropagation, este dificil să se propage eroarea către primele straturi ale rețelei, iar astfel rețeaua nu poate învăța relații între tokeni distanți. Una dintre modalitățile de a evita această problemă este introducerea gestionării explicite a statutului prin utilizarea așa-numitelor porți. Există două arhitecturi bine cunoscute de acest tip: Memorie pe Termen Lung și Scurt (LSTM) și Unitatea de Releu Gated (GRU).

Imagine care arată un exemplu de celulă LSTM

Sursa imaginii TBD

Rețeaua LSTM este organizată într-un mod similar cu RNN, dar există două stări care sunt transmise de la un strat la altul: statutul actual C și vectorul ascuns H. La fiecare unitate, vectorul ascuns Hi este concatenat cu intrarea Xi, iar acestea controlează ceea ce se întâmplă cu statutul C prin intermediul porților. Fiecare poartă este o rețea neuronală cu activare sigmoid (ieșire în intervalul [0,1]), care poate fi considerată ca o mască bitwise atunci când este înmulțită cu vectorul de statut. Există următoarele porți (de la stânga la dreapta în imaginea de mai sus):

  • Poarta de uitare ia un vector ascuns și determină ce componente ale vectorului C trebuie uitate și care trebuie transmise mai departe.
  • Poarta de intrare ia informații din vectorii de intrare și ascunși și le inserează în statut.
  • Poarta de ieșire transformă statutul printr-un strat liniar cu activare tanh, apoi selectează unele dintre componentele sale folosind vectorul ascuns Hi pentru a produce un nou statut Ci+1.

Componentele statutului C pot fi considerate ca niște semnale care pot fi activate sau dezactivate. De exemplu, atunci când întâlnim un nume Alice în secvență, putem presupune că se referă la un personaj feminin și activăm semnalul în statut că avem un substantiv feminin în propoziție. Când întâlnim ulterior expresia și Tom, vom activa semnalul că avem un substantiv plural. Astfel, prin manipularea statutului, putem presupune că urmărim proprietățile gramaticale ale părților propoziției.

O resursă excelentă pentru înțelegerea detaliilor interne ale LSTM este acest articol minunat Understanding LSTM Networks de Christopher Olah.

RNN-uri Bidirecționale și Multistrat

Am discutat despre rețelele recurente care operează într-o singură direcție, de la începutul unei secvențe până la sfârșit. Pare natural, deoarece seamănă cu modul în care citim și ascultăm vorbirea. Totuși, deoarece în multe cazuri practice avem acces aleatoriu la secvența de intrare, ar putea avea sens să rulăm calculul recurent în ambele direcții. Astfel de rețele se numesc RNN-uri bidirecționale. Când lucrăm cu o rețea bidirecțională, vom avea nevoie de doi vectori de statut ascuns, câte unul pentru fiecare direcție.

O rețea recurentă, fie unidirecțională, fie bidirecțională, captează anumite modele dintr-o secvență și le poate stoca într-un vector de statut sau le poate transmite ca ieșire. La fel ca în cazul rețelelor convoluționale, putem construi un alt strat recurent deasupra primului pentru a capta modele de nivel superior și a construi din modelele de nivel inferior extrase de primul strat. Acest lucru ne conduce la noțiunea de RNN multistrat, care constă din două sau mai multe rețele recurente, unde ieșirea stratului anterior este transmisă stratului următor ca intrare.

Imagine care arată un RNN multistrat cu LSTM

Imagine din acest articol minunat de Fernando López

✍️ Exerciții: Embedding-uri

Continuă învățarea în următoarele notebook-uri:

Concluzie

În această unitate, am văzut că RNN-urile pot fi utilizate pentru clasificarea secvențelor, dar de fapt, ele pot gestiona multe alte sarcini, cum ar fi generarea de text, traducerea automată și altele. Vom analiza aceste sarcini în unitatea următoare.

🚀 Provocare

Citește literatură despre LSTM-uri și ia în considerare aplicațiile lor:

Chestionar după curs

Recapitulare și Studiu Individual

Temă: Notebook-uri

Declinare de responsabilitate:
Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.