Rete Neurale Ricorrente (RNN): differenze tra le versioni

Da Wiki AI.
(Creata pagina con "### Reti Neurali Ricorrenti (RNN) #### Panoramica Le Reti Neurali Ricorrenti (RNN) sono una classe di reti neurali specializzate nell'elaborazione di sequenze di dati. Si distinguono per la loro capacità di creare connessioni temporali, rendendole ideali per compiti che implicano input sequenziali, come il trattamento del linguaggio naturale, l'analisi di serie temporali e la descrizione di immagini. A differenza delle reti neurali tradizionali, le RNN possono gestire...")
 
Nessun oggetto della modifica
 
(60 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
### Reti Neurali Ricorrenti (RNN)
{{template architettura
|NomeInglese=Recurrent Neural Networks
|Sigla=RNN
|AnnoDiCreazione=1990
|Pubblicazione=Finding Structure in Time
|URLHomePage=https://onlinelibrary.wiley.com/doi/epdf/10.1207/s15516709cog1402_1
|Topic=sequenze, Reti neurali
}}
Sono una delle due tipologie in cui si dividono le Reti Neurali, insieme a quella [[Feed-Forward]], dalla quale si differenziano per avere la capacità di "memoria": l'output a una determinata esecuzione non dipende solamente dall'input corrente, ma anche dagli output passati. Questo le rende particolarmente adatte all'elaborazione di '''sequenze di lunghezza arbitraria'''.


#### Panoramica
=== Funzionamento ===
Le Reti Neurali Ricorrenti (RNN) sono una classe di reti neurali specializzate nell'elaborazione di sequenze di dati. Si distinguono per la loro capacità di creare connessioni temporali, rendendole ideali per compiti che implicano input sequenziali, come il trattamento del linguaggio naturale, l'analisi di serie temporali e la descrizione di immagini. A differenza delle reti neurali tradizionali, le RNN possono gestire input di lunghezza variabile e mantenere uno stato interno per ricordare informazioni passate, permettendo loro di fare previsioni basate sulla storia degli input ricevuti.
Al centro del funzionamento della RNN vi è un '''vettore monodimensionale''' chiamato "hidden layer", di lunghezza arbitraria a seconda della dimensione del contenuto che si vuole la rete apprenda: questo parametro è chiamato normalmente ''dimensione del layer nascosto, o hidden_layer_size.'' Un vettore troppo piccolo per l'obiettivo dell'addestramento non convergerà, un vettore troppo grande provocherà overfitting.


#### Struttura e Funzionamento
In un determinato step di esecuzione, chiamato normalmente ''t'', come mostrato in Figura 1:
Un'RNN elabora sequenze iterando attraverso gli elementi della sequenza, mantenendo uno stato nascosto che codifica informazioni sugli elementi che ha elaborato fino a quel momento. La caratteristica principale che distingue le RNN da altre reti neurali è questo stato nascosto, che viene aggiornato ad ogni passo della sequenza in base all'input corrente e allo stato nascosto precedente. Questo meccanismo permette alle RNN di mostrare un comportamento temporale dinamico e di catturare dipendenze temporali nei dati.


#### Tipi di Architetture RNN
* all'input della rete viene passato un vettore di input ''X_t'' di lunghezza predefinita (''input_size_'': questa può essere ad esempio una rappresentazione one-hot, embedding, le posizioni sui tre assi cartesiani, i pixel di un'immagine oppure una concatenazione di features provenienti da sensori
1. **RNN Vanilla:** La forma più semplice di RNN, che aggiorna il suo stato nascosto con una semplice matrice di peso e funzione di attivazione.
* ''X_t'' viene moltiplicato per la matrixe ''Wih'' e vengono aggiunti i bias ''Bih''
2. **Long Short-Term Memory (LSTM):** Un'architettura RNN avanzata progettata per superare il problema del gradiente sparito delle RNN vanilla. Gli LSTM includono meccanismi chiamati porte che controllano il flusso delle informazioni.
* Il contenuto precendente (''H_1)'' del vettore nascosto viene moltiplicato per la matrice ''Whh'', e vengono aggiunti i bias ''Bhh''
3. **Gated Recurrent Units (GRU):** Simili agli LSTM, i GRU semplificano il meccanismo di gating per rendere la rete più facile da calcolare e comprendere.
* I vettori precedenti vengono sommati, e questa somma è il nuovo valore del vettore del layer nascosto, '''H_t'''
* Questo valore viene poi passato da un Layer di pesi e bias per ottenere i [[Logit (Reti Neurali)|logit]] in output
[[File:Calcolo Matriciale RNN.png|nessuno|miniatura|600x600px|Figura 1: Calcolo matriciale all'interno di una RNN]]
[[File:Rete Neurale Ricorrente (RNN).png|nessuno|miniatura|600x600px|Rete Neurale Ricorrente (RNN) - RNN Standard e RNN Srotolata]]
[[File:Rete Neurale Ricorrente - Funzionamento.png|nessuno|miniatura|600x600px|Rete Neurale Ricorrente - Funzionamento]]


#### Applicazioni
== Tutorial ==
- **Modellazione del Linguaggio e Generazione di Testo:** Le RNN possono prevedere la probabilità della parola successiva in una frase basandosi sulle parole precedenti, consentendo loro di generare testo coerente.
[[Come creare una RNN da zero con PyTorch]]
- **Riconoscimento Vocale:** Elaborando sequenze audio, le RNN possono trascrivere il linguaggio parlato in testo.
- **Traduzione Automatica:** Le RNN possono tradurre testi da una lingua all'altra comprendendo la sequenza di parole in entrambe le lingue.
- **Descrizione di Immagini:** Combinando CNN per l'elaborazione delle immagini con RNN per la generazione di sequenze, i modelli possono descrivere il contenuto delle immagini in linguaggio naturale.
- **Classificazione e Generazione di Video:** Le RNN possono analizzare e generare sequenze di immagini, consentendo la comprensione e la creazione di contenuti video.


#### Sfide e Soluzioni
[https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html Tutorial ufficiale di Pytorch]
- **Problema del Gradiente Sparito:** Le RNN sono soggette a questo problema, in cui i gradienti diventano troppo piccoli per effettuare aggiornamenti significativi durante la retropropagazione. Gli LSTM e i GRU sono progettati per mitigare questo problema.
- **Difficoltà nella Parallelizzazione:** La natura sequenziale delle RNN le rende più difficili da parallelizzare rispetto alle CNN. Questo può essere parzialmente affrontato attraverso ottimizzazioni del modello e accelerazioni hardware.


#### Direzioni Future
== Link ==
Le RNN continuano a evolversi, con ricerche incentrate sul miglioramento della loro efficienza, capacità di gestire sequenze più lunghe e abilità nel modellare dipendenze complesse. Innovazioni come i meccanismi di attenzione e le reti trasformative si basano sui principi delle RNN per migliorare le prestazioni nei compiti basati su sequenze.
[https://onlinelibrary.wiley.com/doi/epdf/10.1207/s15516709cog1402_1 Finding Structure in Time (Elman, 1990)]


#### Conclusione
https://karpathy.github.io/2015/05/21/rnn-effectiveness/
Le RNN sono uno strumento potente nel toolkit di AI e machine learning, specialmente per compiti che coinvolgono dati sequenziali. La loro capacità di ricordare input passati e di modellare dati dipendenti dal tempo le rende unicamente adatte per una vasta gamma di applicazioni, dalla elaborazione del linguaggio naturale all'analisi di serie
 
[https://arxiv.org/pdf/1308.0850.pdf Generating Sequences With Recurrent Neural Networks (2014)]
 
[https://www.youtube.com/watch?v=AsNTP8Kwu80 Miglior Tutorial su Youtube]
 
[https://gist.github.com/karpathy/d4dee566867f8291f086 Karpathy: Minimal character-level Vanilla RNN model in C]
 
[[Category:architettura]]
 
{{#seo:
            |title=Your page title
            |title_mode=append
            |keywords=reti neurali, "deep learning", "intelligenza artificiale", "apprendimento automatico", "RNN", "reti neurali ricorrenti", "elaborazione del linguaggio naturale", "serie temporali", "modelli predittivi", "algoritmi di apprendimento"
            |description=Le Reti Neurali Ricorrenti (RNN) sono un tipo di rete neurale artificiale particolarmente adatta all'elaborazione di sequenze di dati. Questo articolo spiega il funzionamento delle RNN, la loro struttura e le loro applicazioni, come l'elaborazione del linguaggio naturale e le serie temporali.
            |image="Calcolo Matriciale RNN.png"
            }}

Versione attuale delle 13:47, 17 ago 2024

Rete Neurale Ricorrente (RNN)
Nome Inglese Recurrent Neural Networks
Sigla RNN
Anno Di Creazione 1990
Pubblicazione Finding Structure in Time
URL https://onlinelibrary.wiley.com/doi/epdf/10.1207/s15516709cog1402 1
Topic sequenze, Reti neurali

Sono una delle due tipologie in cui si dividono le Reti Neurali, insieme a quella Feed-Forward, dalla quale si differenziano per avere la capacità di "memoria": l'output a una determinata esecuzione non dipende solamente dall'input corrente, ma anche dagli output passati. Questo le rende particolarmente adatte all'elaborazione di sequenze di lunghezza arbitraria.

Funzionamento

Al centro del funzionamento della RNN vi è un vettore monodimensionale chiamato "hidden layer", di lunghezza arbitraria a seconda della dimensione del contenuto che si vuole la rete apprenda: questo parametro è chiamato normalmente dimensione del layer nascosto, o hidden_layer_size. Un vettore troppo piccolo per l'obiettivo dell'addestramento non convergerà, un vettore troppo grande provocherà overfitting.

In un determinato step di esecuzione, chiamato normalmente t, come mostrato in Figura 1:

  • all'input della rete viene passato un vettore di input X_t di lunghezza predefinita (input_size_: questa può essere ad esempio una rappresentazione one-hot, embedding, le posizioni sui tre assi cartesiani, i pixel di un'immagine oppure una concatenazione di features provenienti da sensori
  • X_t viene moltiplicato per la matrixe Wih e vengono aggiunti i bias Bih
  • Il contenuto precendente (H_1) del vettore nascosto viene moltiplicato per la matrice Whh, e vengono aggiunti i bias Bhh
  • I vettori precedenti vengono sommati, e questa somma è il nuovo valore del vettore del layer nascosto, H_t
  • Questo valore viene poi passato da un Layer di pesi e bias per ottenere i logit in output
Figura 1: Calcolo matriciale all'interno di una RNN
Rete Neurale Ricorrente (RNN) - RNN Standard e RNN Srotolata
Rete Neurale Ricorrente - Funzionamento

Tutorial

Come creare una RNN da zero con PyTorch

Tutorial ufficiale di Pytorch

Link

Finding Structure in Time (Elman, 1990)

https://karpathy.github.io/2015/05/21/rnn-effectiveness/

Generating Sequences With Recurrent Neural Networks (2014)

Miglior Tutorial su Youtube

Karpathy: Minimal character-level Vanilla RNN model in C