Cos'è una rete neurale ricorrente (RNN)?

4 ottobre 2024 

Autore

Cole Stryker

Editorial Lead, AI Models

Cos'è una rete neurale ricorrente?

Una rete neurale ricorrente, o RNN, è una rete neurale profonda addestrata su dati sequenziali o temporali per creare un modello di machine learning in grado di fare previsioni o conclusioni sequenziali basate su input sequenziali.

Una RNN potrebbe essere utilizzata per prevedere i livelli di inondazione giornalieri sulla base dei dati giornalieri passati relativi a inondazioni, maree e meteo. Ma le RNN possono essere utilizzate anche per risolvere problemi ordinali o temporali, come la traduzione linguistica, l'elaborazione del linguaggio naturale (NLP), l'analisi del sentiment, il riconoscimento vocale e i sottotitoli delle immagini.

Design 3D di palline che rotolano su una pista

Le ultime notizie e insight sull'AI 


Scopri notizie e insight selezionati da esperti in materia di AI, cloud e molto altro nella newsletter settimanale Think. 

Come funzionano le RNN

Analogamente alle reti neurali tradizionali, come le reti neurali feedforward e le reti neurali convoluzionali (CNN), le reti neurali ricorrenti utilizzano i dati di addestramento per apprendere. Si distinguono per la loro "memoria", in quanto prendono informazioni da input precedenti per influenzare l’input e l’output correnti.

Mentre le reti di deep learning tradizionali presuppongono che gli input e gli output siano indipendenti l'uno dall'altro, l'output delle reti neurali ricorrenti dipende dagli elementi precedenti all'interno della sequenza. Sebbene anche gli eventi futuri siano utili per determinare l'output di una determinata sequenza, le reti neurali ricorrenti unidirezionali non possono tenere conto di questi eventi nelle loro previsioni.

Per spiegare cosa sono le RNN, prendiamo un'espressione idiomatica, come "sentirsi giù di corda", che si usa comunemente per indicare che si è tristi. Affinché questo modo di dire abbia senso, deve essere espresso in quell'ordine specifico. Di conseguenza, le reti ricorrenti devono tenere conto della posizione di ogni parola nell'espressione idiomatica e usano tali informazioni per prevedere la parola successiva nella sequenza.

Ogni parola della frase "sentirsi giù di corda" fa parte di una sequenza in cui l'ordine conta. La RNN tiene traccia del contesto mantenendo uno stato nascosto a ogni passo temporale. Si crea un ciclo di feedback passando lo stato nascosto da un passo temporale al successivo. Lo stato nascosto agisce come una memoria che memorizza le informazioni sugli input precedenti. A ogni passo temporale, la RNN elabora l'input corrente (ad esempio, una parola in una frase) insieme allo stato nascosto del passo temporale precedente. Questo permette alla RNN di "ricordare" i punti dati precedenti e di utilizzare queste informazioni per influenzare l'output attuale.

Un'altra caratteristica distintiva delle reti ricorrenti è che condividono parametri in ogni strato della rete. Mentre le reti feedforward hanno pesi diversi in ogni nodo, le reti neurali ricorrenti condividono lo stesso parametro di peso all'interno di ogni strato della rete. Detto questo, questi pesi sono ancora regolati attraverso i processi di retropropagazione e discesa del gradiente per facilitare l'apprendimento per rinforzo.

Le RNN utilizzano la propagazione in avanti e gli algoritmi di retropropagazione nel tempo (BPTT) per determinare i gradienti (o derivate), il che è leggermente diverso dalla retropropagazione tradizionale, in quanto è specifico per i dati di sequenza. I principi della BPTT sono gli stessi della retropropagazione tradizionale, in cui il modello addestra se stesso calcolando gli errori dal suo strato di output al suo strato di input. Questi calcoli ci consentono di adattare e modificare opportunamente i parametri del modello. La BPTT si differenzia dall'approccio tradizionale in quanto la BPTT somma gli errori a ogni passo temporale, mentre le reti feedforward non hanno bisogno di sommare gli errori, in quanto non condividono i parametri in ogni strato.

Funzioni di attivazione comuni

Una funzione di attivazione è una funzione matematica applicata all'output di ogni strato di neuroni nella rete per introdurre la non linearità e consentire alla rete di apprendere schemi più complessi nei dati. Senza funzioni di attivazione, la RNN calcolerebbe semplicemente le trasformazioni lineari dell'input e non avrebbe la capacità di gestire problemi non lineari. La non linearità è fondamentale per apprendere e modellare schemi complessi, in particolare in compiti come l'NLP, l'analisi delle serie temporali e la previsione dei dati sequenziali.

La funzione di attivazione controlla l'entità dell'output del neurone, mantenendo i valori entro un intervallo specificato (ad esempio, tra 0 e 1 o -1 e 1), il che aiuta a evitare che i valori diventino troppo grandi o troppo piccoli durante le fasi di propagazione in avanti e indietro. Nelle RNN, le funzioni di attivazione vengono applicate a ogni passo temporale agli stati nascosti, controllando il modo in cui la rete aggiorna la sua memoria interna (stato nascosto) in base all'input corrente e agli stati nascosti precedenti.

Le funzioni di attivazione comuni (illustrate di seguito) includono:

La funzione sigmoidea serve a interpretare l'output come probabilità o a controllare i gate che decidono quanta informazione conservare o dimenticare. Tuttavia, la funzione sigmoidea è soggetta al problema della scomparsa del gradiente (spiegato successivamente), il che la rende meno ideale per reti più profonde.

La funzione Tanh (tangente iperbolica), che viene spesso utilizzata perché restituisce output centrati intorno allo zero, il che aiuta a migliorare il flusso del gradiente e a facilitare l'apprendimento delle dipendenze a lungo termine.

La ReLU (Rectified Linear Unit) potrebbe causare problemi con l'esplosione del gradiente a causa della sua natura illimitata. Tuttavia, per mitigare alcuni di questi problemi sono state utilizzate varianti come Leaky ReLU e Parametric ReLU.

Per maggiori informazioni sul funzionamento delle RNN, guarda il nostro approfondimento sulle reti neurali ricorrenti.

Tipi di RNN

Le reti feedforward mappano un input su un output, e anche se abbiamo visualizzato le reti neurali ricorrenti in questo modo nei diagrammi precedenti, in realtà non hanno questo vincolo. Invece, i loro input e output possono variare in lunghezza e si utilizzano diversi tipi di RNN per diversi casi d'uso, come la generazione di musica, la classificazione del sentiment e la traduzione automatica. Le varianti più diffuse di architettura di rete neurale ricorrente includono:

  • RNN standard
  • Reti neurali ricorrenti bidirezionali (BRRN)
  • Memoria a breve-lungo termine (LSTM)
  • Unità ricorrenti gate (GRU)
  • RNN encoder-decoder

RNN standard

La versione più semplice di una RNN, in cui l'output a ogni passo temporale dipende sia dall'input corrente che dallo stato nascosto del passo temporale precedente, presenta problemi come la scomparsa del gradiente e ha difficoltà ad apprendere dipendenze a lungo termine. Eccelle in compiti semplici con dipendenze a breve termine, come prevedere la parola successiva in una frase (per frasi brevi e semplici) o il valore successivo in una serie temporale semplice.

Le RNN sono adatte per compiti che prevedono l'elaborazione di dati in sequenza in tempo reale, come l'elaborazione dei dati dei sensori per rilevare anomalie in brevi intervalli di tempo, in cui gli input vengono ricevuti uno alla volta e le previsioni devono essere effettuate immediatamente in base agli input più recenti.

Reti neurali ricorrenti bidirezionali (BRNN)

Mentre le RNN unidirezionali possono attingere solo da input precedenti per fare previsioni sullo stato attuale, le RNN bidirezionali, o BRNN, utilizzano anche dati futuri per migliorarne l'accuratezza. Tornando all'esempio di "sentirsi giù di corda", un modello basato su una BRNN può prevedere meglio che la seconda parola in quella frase è "giù" se sa che l'ultima parola nella sequenza è "corda".

Memoria a breve-lungo termine (LSTM)

LSTM è una popolare architettura RNN, introdotta da Sepp Hochreiter e Juergen Schmidhuber come soluzione al problema della scomparsa del gradiente. Il loro articolo ha affrontato il problema delle dipendenze a lungo termine. Ovvero, se lo stato precedente che influenza la previsione attuale non è nel passato recente, il modello RNN potrebbe non essere in grado di prevedere con precisione lo stato attuale.

Ad esempio, supponiamo di voler prevedere le parole: "Alice è allergica alla frutta secca. Non può mangiare il burro di arachidi. Il contesto di un'allergia alla frutta secca può aiutarci a prevedere che l'alimento che non può essere mangiato contiene frutta secca. Tuttavia, se tale contesto si trovasse qualche frase prima, per la RNN sarebbe difficile, o persino impossibile, collegare le informazioni.

Per ovviare a questo problema, le reti LSTM sono dotate di "celle" negli strati nascosti della rete neurale artificiale, che hanno 3 gate: un input gate, un output gate e un forget gate. Questi gate controllano il flusso di informazioni necessario per prevedere l'output nella rete. Ad esempio, se i pronomi di genere, come "lei", sono stati ripetuti più volte nelle frasi precedenti, è possibile escluderli dallo stato della cella.

Unità ricorrenti gate (GRU)

Una GRU è simile a una LSTM, in quanto risolve anch'essa il problema della memoria a breve termine dei modelli RNN. Anziché utilizzare uno "stato della cella" per regolare le informazioni, utilizza stati nascosti e invece di tre gate, ne ha due: un reset gate e un update gate. Analogamente ai gate all'interno delle LSTM, i gate di reset e aggiornamento controllano la quantità e le informazioni da conservare.

Grazie alla loro architettura più semplice, le GRU sono più efficienti dal punto di vista computazionale e richiedono meno parametri rispetto alle LSTM. Questo le rende più veloci da addestrare e spesso più adatte per determinate applicazioni in tempo reale o con risorse limitate.

RNN encoder-decoder

Sono comunemente usate per compiti sequence-to-sequence, come la traduzione automatica. L'encoder elabora la sequenza di input in un vettore a lunghezza fissa (contesto) e il decoder utilizza quel contesto per generare la sequenza di output. Tuttavia, il vettore di contesto a lunghezza fissa può diventare un collo di bottiglia, soprattutto per sequenze di input lunghe.

Limitazioni delle RNN

L'uso delle RNN è diminuito nell'intelligenza artificiale, soprattutto a favore di architetture come i modelli transformer, ma le RNN non sono obsolete. Le RNN sono state a lungo utilizzate per l'elaborazione di dati sequenziali (ad esempio, serie temporali e modellazione del linguaggio) grazie alla loro capacità di gestire le dipendenze temporali.

Tuttavia, la vulnerabilità delle RNN ai problemi di scomparsa ed esplosione del gradiente e l'ascesa di modelli transformer come BERT e GPT hanno causato il loro declino. I trasformatori sono in grado di catturare le dipendenze a lungo raggio in modo molto più efficace, sono più facili da parallelizzare e offrono migliori prestazioni in compiti come l'NLP, il riconoscimento vocale e la previsione di serie temporali.

Detto questo, le RNN sono ancora utilizzate in contesti specifici in cui la loro natura sequenziale e il meccanismo di memoria possono essere utili, soprattutto in ambienti più piccoli e con risorse limitate o per compiti in cui l'elaborazione dei dati trae vantaggio dalla ricorrenza graduale.

Per chi desidera sperimentare questi casi d'uso, Keras è una popolare libreria open source, ora integrata nella libreria TensorFlow, che fornisce un'interfaccia Python per le RNN. L'API è intuitiva e personalizzabile e consente agli utenti di definire la propria cella RNN con comportamento personalizzato.

Mixture of Experts | Podcast

Decoding AI: Weekly News Roundup

Unisciti al nostro gruppo di livello mondiale di ingegneri, ricercatori, leader di prodotto e molti altri mentre si fanno strada nell'enorme quantità di informazioni sull'AI per darti le ultime notizie e gli ultimi insight sull'argomento.

Soluzioni correlate
IBM watsonx.ai

Addestra, convalida, adatta e implementa le funzionalità di AI generativa, foundation model e machine learning con IBM watsonx.ai, uno studio aziendale di nuova generazione per builder AI. Crea applicazioni AI in tempi ridotti e con una minima quantità di dati.

Scopri watsonx.ai
Soluzioni di intelligenza artificiale

Metti l'AI al servizio della tua azienda grazie all'esperienza leader di settore e alla gamma di soluzioni di IBM nel campo dell'AI.

Esplora le soluzioni AI
Consulenza e servizi sull'AI

Reinventa i flussi di lavoro e le operazioni critiche aggiungendo l'AI per massimizzare le esperienze, il processo decisionale in tempo reale e il valore di business.

Esplora i servizi AI
Fai il passo successivo

Ottieni l'accesso completo a funzionalità che coprono l'intero ciclo di vita dello sviluppo dell'AI. Crea soluzioni AI all'avanguardia con interfacce intuitive, workflow e accesso alle API e agli SDK standard di settore.

Esplora watsonx.ai Prenota una demo live