L’interfaccia cervello-computer e le reti LSTM per compensare le disabilità
Qual è la chiave per una vita migliore per coloro che hanno perso un arto?
Certamente la soluzione sta in protesi efficienti che non siano più oggetti inerti ma che diventino quasi un’estensione del corpo, rispondendo a comandi provenienti direttamente dal cervello, proprio come si muovono il braccio o la gamba di una persona sana.
Grazie ai progressi nel campo del Brain-Computer Interface (BCI), un sistema che decodifica le intenzioni del movimento dal segnale cerebrale, il paziente potrà essere messo in grado di controllare la protesi con il pensiero.
L’interfaccia cervello-computer (BCI) è un sistema di comunicazione che permette alle persone di interagire con computer e macchine utilizzando i segnali cerebrali. Il sistema BCI raccoglie i segnali di attività cerebrale attraverso elettrodi posizionati sul cuoio capelluto o impiantati direttamente nel cervello. Questi segnali vengono poi convertiti in comandi controllati dal computer in tempo reale, consentendo così la trasmissione delle informazioni direttamente attraverso il cervello, senza dover passare per i nervi e i muscoli periferici.
“A comprehensive review on motion trajectory reconstruction for EEG-based brain-computer interface” è uno studio che si occupa di mostrare come sia possibile ricostruire i movimenti del corpo a partire dall’esame dei tracciati EEG mediante l’apprendimento automatico.
In questo articolo prendiamo spunto da questo studio per mostrare come viene impiegata una rete neurale ricorrente a memoria a lungo termine (LSTM) e capirne il funzionamento.
L’uso di reti neurali per ricostruire il movimento
Uno dei metodi più popolari per raccogliere i segnali cerebrali è l’elettroencefalogramma (EEG), che misura l’attività neurale con una risoluzione elevata e può essere utilizzato in modo non invasivo, economico e portatile. I segnali EEG trasportano una varietà di informazioni sul movimento, come ad esempio posizione, velocità, accelerazione e velocità angolare.
Tra i diversi paradigmi BCI, il ritmo sensomotorio (SMR) BCI, basato sulla classificazione multiclasse, è ampiamente utilizzato nel controllo dei robot. Questo metodo si basa sulla densità di potenza delle bande EEG mu (8-12 Hz) e beta (18-26 Hz) nella corteccia centrale e parietale.
Uno degli obiettivi dell’interfaccia cervello-computer è la ricostruzione continua della traiettoria di movimento immaginata o eseguita. Per raggiungere questo scopo, vengono svolte diverse fasi nell’ambito di un esperimento. Durante l’esecuzione del movimento (ME) o l’immaginazione del movimento (MI), i segnali neurali (segnali EEG) e i dati dinamici (traiettorie di movimento) vengono registrati contemporaneamente. I dati vengono quindi preelaborati e vengono estratte le caratteristiche più rilevanti dal segnale EEG, come il potenziale EEG e la potenza della banda. Successivamente, viene scelto un metodo di decodifica appropriato, che è fondamentale per ottenere una ricostruzione accurata. Il decodificatore viene allenato offline per massimizzare la correlazione tra la traiettoria misurata e quella ricostruita. Infine, si ricostruiscono online le traiettorie di movimento durante l’intero processo, ottimizzando dinamicamente i parametri in base ai risultati.
In uno studio condotto da Shakibaee et al. (2019), è stata utilizzata una rete neurale chiamata NARX (Nonlinear AutoRegressive with eXogenous input) per decodificare la traiettoria dell’angolo del ginocchio. La rete NARX combina diverse funzioni, tra cui modelli polinomiali non lineari e metodi di ortogonalizzazione, ed è particolarmente adatta per modellare le serie temporali. Nello studio, è stata utilizzata la struttura di serie della rete NARX, ottenendo un errore minimo quadratico medio (MSE) di 5.81E-07 durante l’esecuzione del movimento e un errore MSE di 2.36E-07 durante l’immaginazione del movimento.
Un altro approccio utilizzato nella BCI è l’utilizzo di reti neurali ibride che combinano una rete convoluzionale (CNN) e una rete ricorrente a memoria a lungo termine (LSTM). Questo tipo di modello ha dimostrato buoni risultati nel campo della BCI. Ad esempio, Jeong et al. (2022) hanno proposto un framework chiamato MDCBN (Multi-Directional CNN-BiLSTM Network) per decodificare la velocità della mano in sei direzioni nello spazio 3D e controllare un braccio robotico. Questo framework usa una CNN per estrarre informazioni spazio-temporali da diversi assi di movimento e una rete BiLSTM per apprendere le relazioni nello spazio 3D.
L’addestramento di un’interfaccia cervello-computer (BCI) mediante una rete neurale coinvolge diverse fasi e processi. Vorrei fornirti una panoramica generale di come avviene l’addestramento di un BCI utilizzando una rete neurale:
CLICCA SULL’IMMAGINE PER INGRANDIRLA

L’addestramento di un’interfaccia cervello-computer (BCI) mediante una rete neurale coinvolge diverse fasi e processi. Ecco una panoramica generale di come avviene l’addestramento di un BCI utilizzando una rete neurale:
- Raccolta dei dati: La prima fase coinvolge la raccolta dei dati necessari per addestrare il BCI. Questi dati includono i segnali cerebrali (ad es. EEG) registrati mentre il soggetto esegue o immagina determinate attività motorie. Durante questa fase, è importante ottenere un ampio numero di campioni di dati per rappresentare correttamente le diverse azioni o intenzioni che il BCI dovrà riconoscere.
- Preelaborazione dei dati: Una volta raccolti i dati, questi vengono preelaborati per migliorare la qualità e l’utilizzabilità delle informazioni. Questa fase può includere la pulizia dei segnali, l’applicazione di filtri per rimuovere il rumore indesiderato e la normalizzazione dei dati per renderli comparabili.
- Estrazione delle caratteristiche: Dopo la preelaborazione, si procede con l’estrazione delle caratteristiche dai dati. Questo processo mira a identificare i modelli o i tratti distintivi nei segnali cerebrali che corrispondono alle diverse attività motorie o intenzioni che si desidera riconoscere. Le caratteristiche possono includere il potenziale EEG, la potenza delle bande di frequenza o altre misure specifiche dell’attività cerebrale.
- Progettazione della rete neurale: Una volta ottenute le caratteristiche, si procede alla progettazione della rete neurale. Questa fase coinvolge la scelta dell’architettura della rete, il numero di strati, il tipo di unità neurali da utilizzare e la configurazione dei parametri. Per l’addestramento di un BCI, è comune utilizzare reti neurali ricorrenti, come le LSTM, che possono gestire sequenze di dati temporali.
- Addestramento della rete neurale: Con la rete neurale progettata, si può procedere all’addestramento. Durante questa fase, i dati preelaborati e le relative etichette di classificazione (che indicano l’attività o l’intenzione associata a ogni campione di dati) vengono utilizzati per regolare i pesi e i bias della rete neurale attraverso l’algoritmo di retropropagazione (backpropagation). L’obiettivo è minimizzare l’errore tra le previsioni della rete neurale e le etichette di classificazione corrispondenti.
- Validazione e test: Dopo l’addestramento, la rete neurale viene testata utilizzando dati di prova o di validazione per valutare le sue prestazioni. Durante questa fase, si misura l’accuratezza del BCI nel riconoscere correttamente le diverse attività o intenzioni. È possibile ottimizzare ulteriormente la rete neurale regolando i parametri o eseguendo ulteriori cicli di addestramento e validazione per migliorare le prestazioni del BCI.
Si noti che l’addestramento di un BCI mediante una rete neurale è un processo iterativo in cui le fasi di raccolta dati, preelaborazione, estrazione delle caratteristiche, progettazione della rete e addestramento possono essere ripetute più volte al fine di migliorare i risultati.
Reti ricorrenti (RNN) e LSTM
Una rete neurale ricorrente (RNN) è un tipo di rete neurale artificiale che ha la capacità di elaborare dati sequenziali, come testi o serie temporali. A differenza di una rete neurale feedforward, in cui l’informazione fluisce solo in una direzione, da input a output, una RNN ha connessioni cicliche che le consentono di conservare informazioni sullo stato passato e utilizzarle per influenzare la predizione dell’output corrente.
Se vuoi conoscere meglio le reti RNN puoi leggere l’articolo su HumAI.it:
La sintesi vocale con le reti neurali ricorrenti
Una problematica comune nelle RNN tradizionali è il problema del vanishing gradient, che si verifica durante la fase di retropropagazione del gradiente. In pratica, durante l’addestramento, i gradienti possono diventare molto piccoli man mano che si propagano attraverso gli strati temporali e ciò può causare problemi di apprendimento a lungo termine, poiché le informazioni passate diventano sempre meno significative man mano che ci allontaniamo nel tempo.


Il problema del vanishing gradient può portare a una scarsa capacità di una RNN nel memorizzare e utilizzare informazioni a lungo termine, specialmente quando si tratta di sequenze lunghe. Questo può limitare le prestazioni di una RNN in compiti che richiedono la comprensione di dipendenze temporali complesse.Per affrontare il problema della memoria a lungo termine nelle RNN, sono state sviluppate le reti LSTM (Long Short-Term Memory).
Le reti LSTM sono state progettate per mantenere informazioni rilevanti nel tempo, consentendo loro di catturare dipendenze a lungo termine nelle sequenze. Il design delle reti LSTM consente una migliore gestione delle informazioni a lungo termine, grazie alla capacità di memorizzare informazioni rilevanti, rimuovere le informazioni obsolete e utilizzare lo stato della cella di cancellazione per influenzare l’output. Ciò permette di affrontare i problemi di vanishing gradient e di migliorare le prestazioni delle reti nel modellare dipendenze a lungo termine.
Per comprendere meglio come funzionano le reti LSTM, consideriamo l’esempio di un’immagine che rappresenta la scrittura a mano di una frase. Supponiamo di voler utilizzare una RNN per riconoscere il testo scritto nella sequenza di immagini. Una rete LSTM può essere addestrata per analizzare le immagini una dopo l’altra e mantenere informazioni sulle caratteristiche di scrittura delle lettere precedenti, che possono essere importanti per riconoscere correttamente la parola successiva. Ad esempio, se la lettera precedente è una “h”, l’LSTM può utilizzare questa informazione per prevedere correttamente che la prossima lettera sarà “e”. In questa situazione, l’unità LSTM conserva informazioni sulla lettera “h” nel suo stato interno per influenzare le predizioni future.
Una rete LSTM è strutturata come una sequenza di blocchi come questi
CLICCA SULL’IMMAGINE PER INGRANDIRLA

Il singolo blocco:

Alcune importanti informazioni sulle notazioni
xt, ct, ht, ft, it, gt, ot, bi sono vettori, mentre Wi, Wo, Wf, Wg sono le matrici dei pesi.
La scrittura σ(v) indica il vettore le cui componenti sono date dall’applicazione della funzione sigmoide ad ogni componenti del vettore v.
La scrittura tanh(v) indica il vettore le cui componenti sono date dall’applicazione della funzione tangente iperbolica ad ogni componenti del vettore v.
La scrittura W * [ht-1, xt] indica W*ht-1 + W*xt dove * indica il prodotto matriciale.
Il simbolo * nello schema indica un prodotto tra due vettori che da come risultato un vettore le cui componenti sono il prodotto aritmetico delle componenti dei due vettori di partenza.
Il simbolo + nello schema indica la somma vettoriale
Un’operazione di moltiplicazione tra vettori induce un effetto regolatore di un vettore sull’altro, infatti se uno dei due vettore si avvicina allo zero, smorzerà il contributo dell’altro. Un’operazione di addizione costituisce un incremento di informazione.
Ricordiamo le funzioni sigmoide e tanh
La funzione tanh mappa i valori in un intervallo compreso tra -1 e 1. Questa normalizzazione è utile per mantenere la stabilità numerica durante l’addestramento della rete. Inoltre tale funzione ha l’importante scopo di introdurre la non linearità nella rete che è fondamentale per permettere al modello di apprendere da errori e fare approssimazioni più complesse.

La funzione sigmoide, che varia tra 0 e 1, agisce come peso che controlla quanto di ciascuna componente (input corrente, stato nascosto precedente, cella di memoria, ecc.) dovrebbe essere permesso di fluire attraverso la rete. In questo senso, le sigmoidei all’interno di un blocco LSTM regolano o “pesano” il flusso di informazioni, permettendo alla rete di apprendere quali informazioni sono rilevanti e quali dovrebbero essere ignorate o dimenticate.

Analizziamo una rete LSTM
La principale caratteristica delle reti LSTM è l’unità LSTM, che contiene tre porte fondamentali: la porta di input, la porta di output e la porta di cancellazione. Queste porte lavorano insieme per controllare il flusso delle informazioni all’interno dell’unità LSTM.
La cella ct raffigurata dalla linea in alto è quella che rappresenta la memoria della rete. Il lavoro di tutto il blocco è concentrato su quanta informazione di ct preservare e quanta aggiungerne.

Porta di cancellazione
La porta di cancellazione gestisce la rimozione di informazioni obsolete o non più rilevanti dalla cella c. Questo aiuta a mantenere la memoria pulita e a evitare l’accumulo di informazioni indesiderate. Lo fa mediante un’operazione di moltiplicazione tra una sigmoide e lo stato ct-1 :
ft * ct-1
dove
ft = σ(Wf * [ht-1, xt] + bf)
la cella di memoria dopo questa operazione assume il valore corrente:
c’t = ft * ct-1
Porta di input

La porta di input decide quali informazioni vengono aggiunte allo stato della cella c e lo fa mediante un’operazione di moltiplicazione
Il Nuovo stato della cella (c) combina lo stato della cella precedente aggiornata c’t con l’informazione candidata.
L’informazione candidata gt rappresenta l’informazione potenzialmente rilevante che potrebbe essere aggiunta allo stato della cella corrente ct. Questa informazione candidata viene calcolata da
gt = tanh(Wg * [ht-1, xt] + bg),
dove tanh è la funzione di attivazione tangente iperbolica, Wg rappresenta la matrice dei pesi associata a gt, ht-1 rappresenta lo stato nascosto dell’unità precedente e xt rappresenta l’input corrente.
Dopo il calcolo dell’informazione candidata gt, la rete LSTM utilizza la porta di input it, calcolata da
it = σ(Wi * [ht-1, xt] + bi),
per determinare quanto di questa informazione candidata gt viene effettivamente aggiunta allo stato della cella corrente c’t.
ct = c’t + it * gt
Ricordiamo ancora che la sigmoide varia tra 0 e 1 e viene impiegata come fattore regolatore. Il suo effetto può essere paragonato all’effetto di una valvola che lascia passare più o meno acqua attraverso un tubo. Nel nostro caso, l’acqua è rappresentata dall’informazione candidata gt
Ripetiamo ancora questo concetto importante.
La porta di input it controlla il flusso di informazioni che possono essere aggiunte o ignorate dalla cella corrente. L’output di it viene passato attraverso la funzione di attivazione sigmoide, che restituisce un valore compreso tra 0 e 1, e funge da fattore di scala per l’informazione candidata gt. In questo modo, la porta di input it, insieme all’informazione candidata gt, determina quanto dell’informazione viene effettivamente aggiunta allo stato della cella corrente ct.
Porta di output

la porta di output in una rete LSTM controlla quanto dello stato della cella c sarà utilizzato per calcolare l’output. Questo può essere adattato per prendere decisioni basate su informazioni passate.
Il valore finale di o(t) (cioè il valore dell’output della porta di output)
ot = σ(Wo * [ht-1, xt] + bo)
funge da regolatore per determinare quanto dello stato della cella ct dovrebbe essere utilizzato per calcolare l’output finale.
h(t) = ot * tanh(ct)
Ad esempio, se ot è prossimo a 0, significa che l’output dell’unità LSTM non considererà quasi nessuna informazione passata dalla cella. Al contrario, se ot è prossimo a 1, significa che l’output avrà in considerazione una maggior parte delle informazioni passate dalla cella.