Rete Neurale Ricorrente (RNN): differenze tra le versioni

Da Wiki AI.
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(57 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'''.


# Indice
=== Funzionamento ===
- [Introduzione](#introduzione)
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](#struttura-e-funzionamento)
- [Tipi di RNN](#tipi-di-rnn)
- [Applicazioni](#applicazioni)
- [Sfide](#sfide)
- [Direzioni Future](#direzioni-future)
- [Conclusione](#conclusione)


# Introduzione
In un determinato step di esecuzione, chiamato normalmente ''t'', come mostrato in Figura 1:
Le **Reti Neurali Ricorrenti (RNN)** sono una categoria di reti neurali che si distinguono per la loro abilità nell'elaborare sequenze di dati, grazie alla capacità di mantenere uno stato interno o "memoria". Questo le rende particolarmente adatte per applicazioni che richiedono la gestione di dati sequenziali, come il linguaggio naturale, l'analisi di serie storiche e la descrizione di immagini.


# Struttura e Funzionamento
* 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
Una caratteristica fondamentale delle RNN è la presenza di uno stato nascosto che si aggiorna ad ogni passo temporale, tenendo traccia delle informazioni processate precedentemente. Questo permette alla rete di produrre output che dipendono non solo dall'input attuale ma anche dal contesto fornito dagli input precedenti.
* ''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 (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]]


# Tipi di RNN
== Tutorial ==
## Vanilla RNN
[[Come creare una RNN da zero con PyTorch]]
Le RNN "vanilla" sono la forma più semplice di reti neurali ricorrenti e sono costituite da una serie di strati nascosti che si aggiornano sequenzialmente in base all'input e allo stato nascosto precedente.


## Long Short-Term Memory (LSTM)
[https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html Tutorial ufficiale di Pytorch]
Gli LSTM sono una variante avanzata delle RNN, progettata per superare il problema della scomparsa del gradiente, attraverso l'introduzione di un meccanismo di porte che regolano il flusso di informazioni.


## Gated Recurrent Units (GRU)
== Link ==
I GRU sono simili agli LSTM ma semplificano il meccanismo di gating. Questo li rende meno complessi da calcolare e da capire, mantenendo al contempo buone prestazioni su molteplici compiti.
[https://onlinelibrary.wiley.com/doi/epdf/10.1207/s15516709cog1402_1 Finding Structure in Time (Elman, 1990)]


# Applicazioni
https://karpathy.github.io/2015/05/21/rnn-effectiveness/
Le RNN trovano applicazione in diversi campi, tra cui:


- **Modellazione del Linguaggio e Generazione di Testo:** Capacità di prevedere la parola successiva in una frase e di generare testo coerente.
[https://arxiv.org/pdf/1308.0850.pdf Generating Sequences With Recurrent Neural Networks (2014)]
- **Riconoscimento Vocale:** Conversione di audio in testo.
- **Traduzione Automatica:** Traduzione di testi da una lingua all'altra.
- **Descrizione di Immagini:** Generazione di descrizioni testuali di contenuti visivi.
- **Classificazione e Generazione di Video:** Analisi e creazione di sequenze di immagini.


# Sfide
[https://www.youtube.com/watch?v=AsNTP8Kwu80 Miglior Tutorial su Youtube]
- **Gradiente Sparito:** Difficoltà nell'addestrare le RNN su sequenze lunghe a causa della diminuzione del gradiente durante la retropropagazione.
- **Parallelizzazione:** Le caratteristiche sequenziali delle RNN rendono complesso il loro addestramento parallelo rispetto ad altre architetture neurali.


# Direzioni Future
[https://gist.github.com/karpathy/d4dee566867f8291f086 Karpathy: Minimal character-level Vanilla RNN model in C]
La ricerca sulle RNN si sta evolvendo verso la creazione di modelli sempre più efficienti e capaci di gestire dipendenze a lungo termine, attraverso innovazioni come i meccanismi di attenzione e le reti trasformative.


# Conclusione
[[Category:architettura]]
Le RNN rappresentano uno strumento essenziale per l'elaborazione di dati sequenziali nel campo dell'intelligenza artificiale e del machine learning. La loro capacità di modellare dipendenze temporali apre la strada a una vasta gamma di applicazioni, dalla comprensione del linguaggio naturale alla previsione di serie temporali, rendendole un componente critico per lo sviluppo di sistemi intelligenti avanzati.
 
{{#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