Una RNN, o rete neurale ricorrente, è una rete neurale costruita per sequenze come testo, parlato o serie temporali. A ogni passaggio combina l'input corrente con uno stato nascosto del passaggio precedente, così l'output può dipendere da ciò che è arrivato prima.

Questa è l'idea chiave: una RNN ha una memoria progressiva. Una LSTM è un tipo di RNN con porte che gestisce quella memoria in modo più attento quando informazioni importanti devono sopravvivere per molti passaggi.

Cosa fa una RNN a ogni passo temporale

Al passo temporale tt, una RNN semplice aggiorna il suo stato nascosto con una regola come

ht=tanh(Wxxt+Whht1+b).h_t = \tanh(W_x x_t + W_h h_{t-1} + b).

Qui xtx_t è l'input corrente, ht1h_{t-1} è lo stato nascosto precedente e hth_t è il nuovo stato nascosto. Le matrici WxW_x e WhW_h e il bias bb vengono appresi durante l'addestramento.

Se il modello produce anche un output a ogni passaggio, una forma comune è

yt=Wyht+c.y_t = W_y h_t + c.

La regola esatta dell'output dipende dal compito. Alcuni problemi richiedono un output per ogni passaggio, mentre altri usano solo lo stato nascosto finale.

Perché lo stato nascosto è importante

Una rete feedforward vede un input e poi passa oltre. Una RNN riutilizza parte del suo calcolo precedente. È proprio questo riuso che la rende utile per testo, parlato, serie temporali e altri dati ordinati.

Puoi pensare allo stato nascosto come a una nota compatta che il modello scrive a sé stesso dopo ogni passaggio. Il passaggio successivo legge quella nota, la aggiorna e inoltra la versione rivista.

Se cambi l'ordine degli stessi input, di solito cambiano anche gli stati nascosti. L'ordine della sequenza conta.

Esempio svolto di RNN

Le RNN reali usano di solito vettori e attivazioni non lineari. Per mantenere i calcoli leggibili, usa uno stato giocattolo con un solo numero:

ht=0.5ht1+xt,h0=0.h_t = 0.5 h_{t-1} + x_t, \quad h_0 = 0.

Ora elabora la sequenza x1=2x_1 = 2, x2=1x_2 = -1, x3=3x_3 = 3.

Primo passaggio:

h1=0.5(0)+2=2.h_1 = 0.5(0) + 2 = 2.

Secondo passaggio:

h2=0.5(2)+(1)=0.h_2 = 0.5(2) + (-1) = 0.

Terzo passaggio:

h3=0.5(0)+3=3.h_3 = 0.5(0) + 3 = 3.

Qui non conta la formula esatta. Conta la dipendenza dallo stato precedente. Al passaggio 2, l'aggiornamento non usa solo x2x_2; usa anche ciò che è stato portato avanti dal passaggio 1. Questa è l'idea centrale di una RNN.

Se inverti l'ordine e usi x1=1x_1 = -1, x2=2x_2 = 2, x3=3x_3 = 3, allora

h1=1,h2=0.5(1)+2=1.5,h3=0.5(1.5)+3=3.75.h_1 = -1, \quad h_2 = 0.5(-1) + 2 = 1.5, \quad h_3 = 0.5(1.5) + 3 = 3.75.

Lo stato finale è diverso anche se compaiono gli stessi numeri. È proprio per questo che le RNN sono modelli di sequenza e non modelli a sacco di input.

Perché le RNN di base faticano con sequenze lunghe

In una RNN di base, le vecchie informazioni devono sopravvivere attraverso molti aggiornamenti ripetuti. Se la sequenza è lunga, questo può essere difficile. I segnali utili possono attenuarsi e, durante l'addestramento, anche i gradienti possono ridursi troppo o esplodere lungo molti passaggi.

Per questo le RNN semplici spesso faticano quando il compito dipende da informazioni molto lontane nella sequenza. Il problema non è che la ricorrenza sia sbagliata. Il problema è che mantenere memoria a lungo raggio è difficile con un semplice aggiornamento dello stato nascosto.

Come la LSTM migliora la memoria delle RNN

Una LSTM, abbreviazione di long short-term memory, è una RNN con porte. Introduce un percorso di memoria più strutturato, di solito chiamato stato di cella, più porte che controllano quali informazioni vengono dimenticate, quali nuove informazioni vengono scritte e quale parte viene esposta come output.

Non serve conoscere tutte le equazioni delle porte per capire il punto. Questa struttura dà al modello più controllo sulla memoria. Se un dettaglio deve sopravvivere per molti passaggi, una LSTM è più adatta di una RNN semplice a conservarlo.

Questo non significa che una LSTM ricordi tutto per sempre. Significa che l'architettura è più adatta a imparare quando preservare l'informazione e quando scartarla.

RNN vs. LSTM in parole semplici

Una RNN di base ha un solo stato progressivo e lo aggiorna ripetutamente. Una LSTM aggiunge a questa idea un meccanismo di memoria più forte.

Se la sequenza è breve e la dipendenza è locale, una RNN semplice può bastare. Se il compito dipende da informazioni molto precedenti nella sequenza, una LSTM è spesso la scelta più sicura.

Errori comuni su RNN e LSTM

Pensare che una RNN veda tutta la sequenza in una volta

Di solito non è così. L'immagine standard è un'elaborazione passo dopo passo, con lo stato portato in avanti.

Supporre che la LSTM risolva perfettamente il problema della memoria

Aiuta con le dipendenze a lungo raggio, ma resta comunque un modello addestrato con capacità finita e limiti pratici.

Ignorare l'ordine della sequenza

Le RNN sono costruite per dati ordinati. Mescolare gli elementi della sequenza cambia il calcolo.

Trattare lo stato nascosto come una memoria leggibile da un umano

Lo stato nascosto è una rappresentazione numerica appresa, non un riassunto pulito simile a una frase.

Quando si usano RNN e LSTM

Si usano per problemi di sequenza come modellazione del linguaggio, parlato, scrittura a mano, flussi di sensori e previsione di serie temporali. Oggi molti compiti linguistici usano invece i transformer, ma RNN e LSTM restano importanti perché insegnano in modo chiaro la memoria nelle sequenze e possono ancora essere utili in contesti più piccoli o specializzati.

Prova una tua versione

Scrivi una sequenza di quattro passaggi e applica la regola giocattolo ht=0.5ht1+xth_t = 0.5 h_{t-1} + x_t. Poi scambia l'ordine di due input e confronta lo stato finale. Questo piccolo esperimento rende il ruolo della ricorrenza molto più chiaro del solo acronimo.

Se vuoi esplorare un altro caso, confronta questa pagina con una spiegazione su transformer o catene di Markov e osserva cosa fa ciascun modello con le informazioni passate.

Hai bisogno di aiuto con un problema?

Carica la tua domanda e ottieni una soluzione verificata, passo dopo passo, in pochi secondi.

Apri GPAI Solver →