|
|
||
|---|---|---|
| .. | ||
| lab | ||
| GenerativePyTorch.ipynb | ||
| GenerativeTF.ipynb | ||
| README.md | ||
README.md
Rețele generative
Chestionar înainte de curs
Rețelele Neuronale Recurente (RNN) și variantele lor cu celule cu porți, cum ar fi celulele Long Short Term Memory (LSTM) și Gated Recurrent Units (GRU), oferă un mecanism pentru modelarea limbajului, deoarece pot învăța ordinea cuvintelor și pot oferi predicții pentru următorul cuvânt dintr-o secvență. Acest lucru ne permite să folosim RNN pentru sarcini generative, cum ar fi generarea obișnuită de text, traducerea automată și chiar generarea de descrieri pentru imagini.
✅ Gândește-te la toate momentele în care ai beneficiat de sarcini generative, cum ar fi completarea textului în timp ce tastezi. Fă niște cercetări despre aplicațiile tale preferate pentru a vedea dacă au folosit RNN.
În arhitectura RNN discutată în unitatea anterioară, fiecare unitate RNN producea următoarea stare ascunsă ca ieșire. Totuși, putem adăuga și o altă ieșire fiecărei unități recurente, ceea ce ne-ar permite să generăm o secvență (egală ca lungime cu secvența originală). Mai mult, putem folosi unități RNN care nu acceptă o intrare la fiecare pas, ci doar iau un vector de stare inițială și apoi produc o secvență de ieșiri.
Acest lucru permite diferite arhitecturi neuronale, așa cum sunt prezentate în imaginea de mai jos:
Imagine din articolul Unreasonable Effectiveness of Recurrent Neural Networks de Andrej Karpaty
- One-to-one este o rețea neuronală tradițională cu o singură intrare și o singură ieșire
- One-to-many este o arhitectură generativă care acceptă o singură valoare de intrare și generează o secvență de valori de ieșire. De exemplu, dacă dorim să antrenăm o rețea pentru descrierea imaginilor care să producă o descriere textuală a unei imagini, putem folosi o imagine ca intrare, să o trecem printr-o CNN pentru a obține starea ascunsă și apoi să folosim un lanț recurent pentru a genera descrierea cuvânt cu cuvânt
- Many-to-one corespunde arhitecturilor RNN descrise în unitatea anterioară, cum ar fi clasificarea textului
- Many-to-many, sau secvență-la-secvență, corespunde sarcinilor precum traducerea automată, unde avem un prim RNN care colectează toate informațiile din secvența de intrare în starea ascunsă, iar un alt lanț RNN desfășoară această stare într-o secvență de ieșire.
În această unitate, ne vom concentra pe modele generative simple care ne ajută să generăm text. Pentru simplitate, vom folosi tokenizarea la nivel de caracter.
Vom antrena acest RNN să genereze text pas cu pas. La fiecare pas, vom lua o secvență de caractere de lungime nchars și vom cere rețelei să genereze următorul caracter de ieșire pentru fiecare caracter de intrare:
Când generăm text (în timpul inferenței), începem cu un prompt, care este trecut prin celulele RNN pentru a genera starea intermediară, iar apoi din această stare începe generarea. Generăm câte un caracter pe rând și transmitem starea și caracterul generat unei alte celule RNN pentru a genera următorul, până când generăm suficiente caractere.
Imagine realizată de autor
✍️ Exerciții: Rețele generative
Continuă învățarea în următoarele notebook-uri:
Generare moale de text și temperatură
Ieșirea fiecărei celule RNN este o distribuție de probabilitate a caracterelor. Dacă alegem întotdeauna caracterul cu cea mai mare probabilitate ca următor caracter în textul generat, textul poate deveni adesea "ciclic", repetând aceleași secvențe de caractere din nou și din nou, ca în acest exemplu:
today of the second the company and a second the company ...
Totuși, dacă ne uităm la distribuția de probabilitate pentru următorul caracter, este posibil ca diferența dintre câteva dintre cele mai mari probabilități să nu fie mare, de exemplu, un caracter poate avea probabilitatea 0.2, iar altul 0.19, etc. De exemplu, când căutăm următorul caracter în secvența 'play', următorul caracter poate fi la fel de bine un spațiu sau e (ca în cuvântul player).
Acest lucru ne conduce la concluzia că nu este întotdeauna "corect" să alegem caracterul cu probabilitatea cea mai mare, deoarece alegerea celui de-al doilea cel mai probabil poate duce tot la un text semnificativ. Este mai înțelept să eșantionăm caracterele din distribuția de probabilitate oferită de ieșirea rețelei. Putem folosi și un parametru, temperatura, care va aplatiza distribuția de probabilitate dacă dorim să adăugăm mai multă aleatorie sau o va face mai abruptă dacă dorim să ne concentrăm mai mult pe caracterele cu probabilitate mai mare.
Explorează cum este implementată această generare moale de text în notebook-urile menționate mai sus.
Concluzie
Deși generarea de text poate fi utilă în sine, beneficiile majore vin din abilitatea de a genera text folosind RNN dintr-un vector de caracteristici inițial. De exemplu, generarea de text este utilizată ca parte a traducerii automate (secvență-la-secvență, în acest caz vectorul de stare de la encoder este folosit pentru a genera sau decoda mesajul tradus) sau pentru generarea unei descrieri textuale a unei imagini (în acest caz vectorul de caracteristici provine dintr-un extractor CNN).
🚀 Provocare
Urmează câteva lecții pe Microsoft Learn pe acest subiect:
- Generare de text cu PyTorch/TensorFlow
Chestionar după curs
Recapitulare și studiu individual
Iată câteva articole pentru a-ți extinde cunoștințele:
- Diferite abordări pentru generarea de text cu Markov Chain, LSTM și GPT-2: articol pe blog
- Exemplu de generare de text în documentația Keras
Temă
Am văzut cum să generăm text caracter cu caracter. În laborator, vei explora generarea de text la nivel de cuvânt.
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.

