Long Short-Term Memory (LSTM)

Cos’è una Long Short-Term Memory (LSTM)?

Scopri le modalità di funzionamento, i campi di applicazione e le modalità di progettazione delle LSTM

Una rete a lunga memoria a breve termine (Long Short-Term Memory o LSTM) è un tipo di rete neurale ricorrente (RNN). Le LSTM sono prevalentemente usate per apprendere, elaborare e classificare dati sequenziali in quanto sono in grado di apprendere le dipendenze a lungo termine tra fasi temporali di dati.

Modalità di funzionamento delle LSTM

LSTM e RNN

Le reti LSTM sono una forma specializzata dell’architettura RNN. Le RNN usano le informazioni passate per migliorare le prestazioni di una rete neurale su input attuali e futuri. Contengono uno stato nascosto e loop, che consentono alla rete di memorizzare le informazioni passate nello stato nascosto e di operare su sequenze. Le RNN hanno due pesi: uno per il vettore dello stato nascosto e uno per gli input. Durante l’addestramento, la rete apprende i pesi sia per gli input che per lo stato nascosto. Dopo l’implementazione, l’output è basato sull’input attuale, così come sullo stato nascosto, che è basato sugli input precedenti.

Nella pratica, le RNN semplici sono limitate nella loro capacità di apprendere le dipendenze a più lungo termine. Le RNN vengono comunemente addestrate mediante retropropagazione, in cui possono riscontrare problemi di scomparsa ed esplosione del gradiente. Questi problemi fanno sì che i pesi della rete diventino molto piccoli oppure molto grandi, limitando l’efficacia nelle applicazioni che richiedono che la rete apprenda relazioni a lungo termine.

La RNN usa uno stato nascosto basato sull’input, che viene anche usato come input aggiuntivo per la RNN nella fase temporale successiva.

Flusso di dati nella fase temporale t per una RNN tradizionale.

Architettura a strati LSTM

Gli strati LSTM usano porte aggiuntive per controllare quali informazioni nello stato nascosto vengono esportate come output e nel successivo stato nascosto. Queste porte aggiuntive superano il problema comune delle RNN di apprendere le dipendenze a lungo termine. Oltre allo stato nascosto nelle RNN tradizionali, l’architettura per un blocco LSTM comprende in genere una cella di memoria, una porta di input, una porta di output e una porta di dimenticanza. Le porte aggiuntive consentono alla rete di apprendere le relazioni a lungo termine nei dati in modo più efficace. Una minore sensibilità al gap temporale rende le reti LSTM migliori delle RNN semplici per l’analisi di dati sequenziali. Nella figura seguente, è possibile vedere l’architettura LSTM e il flusso di dati alla fase temporale t.

Una rete LSTM usa unità aggiuntive quali la porta di dimenticanza e la cella di memoria per prevenire problemi di scomparsa ed esplosione del gradiente.

Flusso di dati alla fase temporale t per una unità LSTM. La porta di dimenticanza e la cella di memoria prevengono i problemi di scomparsa ed esplosione del gradiente.

I pesi e i bias alla porta di input controllano fino a che punto un nuovo valore confluisce nella unità LSTM. Analogamente, i pesi e i bias alla porta di dimenticanza e alla porta di output controllano, rispettivamente, fino a che punto un valore rimane nell’unità e fino a che punto il valore nell’unità viene usato per calcolare l’attivazione dell’output del blocco LSTM.

Il seguente diagramma illustra il flusso di dati attraverso uno strato LSTM con più fasi temporali. Il numero di canali nell’output corrisponde al numero di unità nascoste nello strato LSTM.

Diagramma che mostra come le informazioni si propagano attraverso le varie fasi di uno strato LSTM.

Flusso di dati per un LSTM con più fasi temporali. Ogni operazione LSTM riceve lo stato nascosto e lo stato della cella dell’operazione precedente e passa uno stato e uno stato della cella aggiornati all’operazione successiva.

Architettura di rete LSTM

Le LSTM funzionano bene con dati di sequenze e di serie storiche per attività di classificazione e regressione, come anche sui video, che sono sostanzialmente una sequenza di immagini. Analogamente all’utilizzo coi segnali, è utile eseguire un’estrazione delle feature prima dell’alimentazione delle sequenza di immagini nello strato LSTM. Sfrutta le reti neurali convoluzionali (CNN) (ad es. GoogLeNet) per estrarre le feature su ciascun frame. La figura seguente mostra come progettare una rete LSTM per diverse attività.

Diagramma dell’architettura di rete LSTM con strati usata per costruire una RNN per diverse attività.

Architettura di rete LSTM per attività di classificazione, regressione e classificazione di video.

LSTM bidirezionali

Una LSTM bidirezionale (BiLSTM) apprende le dipendenze bidirezionali tra fasi temporali di dati di sequenze o di serie storiche. Queste dipendenze possono essere utili quando si vuole che la rete impari dalle serie storiche complete in ogni fase temporale. Le reti BiLSTM consentono un addestramento aggiuntivo in quanto i dati di input vengono fatti passare due volte attraverso lo strato LSTM, il che può aumentare le prestazioni della tua rete.

Una BiLSTM è costituita da due componenti LSTM: LSTM in avanti e LSTM all’indietro. L’LSTM in avanti funziona dalla prima fase temporale all’ultima. L’LSTM all’indietro funziona dall’ultima fase temporale alla prima. Dopo aver fatto passare i dati attraverso i due componenti dell’LSTM, l’operazione concatena gli output lungo la dimensione del canale.

Diagramma che mostra le operazioni LSTM in avanti e all’indietro in una BiLSTM.

Architettura di una BiLSTM con più fasi temporali.

Come iniziare con gli esempi LSTM in MATLAB

Applicazioni di LSTM

Le LSTM sono particolarmente efficaci nei lavori con dati sequenziali, che possono variare in lunghezza, e nell’apprendimento delle dipendenze a lungo termine tra fasi temporali di tali dati. Le applicazioni più comuni di LSTM includono sentiment analysis, modellazione del linguaggio, riconoscimento vocale e analisi di video.

Ampie applicazioni di LSTM

Le RNN rappresentano una tecnologia chiave in applicazioni come:

  • Elaborazione di segnali. I segnali sono dati naturalmente sequenziali, spesso raccolti da sensori nel tempo. La classificazione e la regressione automatiche su grandi set di dati di segnali consentono una previsione in tempo reale. I dati grezzi dei segnali possono essere inseriti in reti profonde o pre-elaborati per concentrarsi su feature specifiche, quali le componenti di frequenza. L’estrazione delle feature può migliorare notevolmente le prestazioni della rete.
  • Elaborazione del linguaggio naturale (NLP). Il linguaggio è naturalmente sequenziale e le parti di testo hanno lunghezza variabile. Le LSTM sono un ottimo strumento per attività di elaborazione del linguaggio naturale, quali classificazione del testo, generazione di testo, traduzione automatica e sentiment analysis, perché possono imparare a contestualizzare le parole in una frase.

Prova i seguenti esempi per iniziare ad applicare le LSTM all’elaborazione di segnali e all’elaborazione del linguaggio naturale.

Applicazioni verticali di LSTM

Poiché le applicazioni del Deep Learning continuano ad aumentare, le LSTM sono usate in applicazioni verticali quali:

Utilizzo di reti LSTM per la stima delle emissioni di NOx

Gli ingegneri di Renault hanno usato le LSTM nello sviluppo di tecnologie di prossima generazione per i veicoli a zero emissioni (ZEV).

Hanno ottenuto i dati di addestramento tramite test realizzati su un motore reale. Durante tali test, il motore è stato sottoposto a cicli di guida comuni. I dati acquisiti, che includevano coppia e velocità del motore, temperatura del refrigerante ed emissioni delle marce inserite, sono stati utilizzati come input per la rete LSTM. Dopo più iterazioni sulla progettazione dell’architettura LSTM, la versione finale della LSTM ha raggiunto una precisione dell’85-90% nella previsione dei livelli di NOX.

LSTM con MATLAB

Utilizzando MATLAB® con Deep Learning Toolbox™ è possibile progettare, addestrare e distribuire LSTM. Con Text Analytics Toolbox™ o Signal Processing Toolbox™ è possibile applicare LSTM all’analisi di testo o di segnali.

Progettazione e addestramento delle reti

È possibile progettare e addestrare LSTM in modo programmatico con sole poche righe di codice. Utilizza strati LSTM, strati LSTM bidirezionali e strati LSTM di proiezione per costruire LSTM. È inoltre possibile progettare, analizzare e modificare le LSTM in modo interattivo utilizzando l’app Deep Network Designer.

Screenshot di una rete BiLSTM semplice, costruita in modo interattivo con l’app Deep Network Designer.

Utilizzo dell’app Deep Network Designer per la costruzione, visualizzazione e modifica interattive di reti LSTM.

Importazione ed esportazione di reti

È possibile scambiare reti LSTM con framework di Deep Learning basati su Python®:

  • Importa modelli PyTorch®, TensorFlow™ e ONNX™ con una riga di codice.
  • Importa in modo interattivo modelli PyTorch e TensorFlow con Deep Network Designer.
  • Esporta reti LSTM su TensorFlow e ONNX con una riga di codice.
Diagramma che mostra l’interoperabilità per le LSTM e altre reti neurali profonde tra MATLAB, TensorFlow, ONNX e PyTorch.

Conversione di reti LSTM tra MATLAB, TensorFlow, ONNX e PyTorch.

Distribuzione reti

Distribuisci le tue reti LSTM addestrate su sistemi embedded, sistemi enterprise o sul Cloud.

  • Genera automaticamente codice CUDA e codice C/C++ ottimizzato per la distribuzione su CPU e GPU.
  • Genera codice Verilog® e VHDL® sintetizzabile per la distribuzione su FPGA e SoC.
Diagramma che mostra la generazione di codice MATLAB e Simulink per la distribuzione di reti neurali profonde su CPU, GPU, microcontroller e FPGA.

Distribuisci rapidamente reti di Deep Learning addestrate alla produzione.