Siri, Google e studio dei segnali: scopriamo l’importanza delle reti neurali

“Al momento il traffico è scorrevole dal luogo in cui sei al tuo posto di lavoro, il tragitto dura 57 minuti”. Questo è quello che l’assistente vocale del nostro smartphone riesce a fare  con un comando vocale.  Cercheremo ora di capire il ruolo che le reti neurali hanno in piattaforme come Google Assistant, Siri, Cortana e molte altre.

neural_networks-jpeg

 

Tutto cominciò tra gli anni ’50 e ’60, quando, presso i Bell Labs, venne sviluppato il primo sistema in grado di distinguere singoli numeri detti a voce. Basato sulla teoria della fonetica acustica, cioè la decomposizione di segnali acustici complessi nelle loro componenti più semplici, questo sistema era in grado di individuare le vocali del segnale ricevuto e capire che numero fosse. Negli anni ’80 queste tecnologie continuano a crescere, riuscendo ad elaborare varie migliaia di parole e si intravedono le prime applicazioni commerciali.

 

Come vengono rappresentate le nostre parole?

Per cominciare bisogna creare una sorta di ponte tra il parlato e il computer, tradurre cioè i nostri suoni in segnali comprensibili dalla macchina.

Un modo comune per rappresentare un segnale è tramite la sua forma d’onda (waveform): un grafico bidimensionale con il tempo sulle ascisse e l’ampiezza del segnale stesso sulle ordinate. Il problema di questa rappresentazione balza subito all’occhio confrontando i due segnali qui sotto: parole completamente diverse hanno una forma d’onda molto simile.

useless

 

Un’altra rappresentazione è lo spettrogramma: un grafico a tre dimensioni in cui sull’asse x troviamo il tempo, sull’asse y la frequenza del segnale e sull’asse z l’intensità dello stesso. Solitamente negli spettrogrammi si preferisce tenere una vista 2D: a ciascuna coppia sul piano tempo, frequenza viene associato un colore rappresentante l’intensità del suono. Lo spettrogramma non è altro che la messa in pratica della trasformata di Fourier. Ma ancora non ci siamo. Lo spettrogramma non è la soluzione ideale, infatti non riesce  a catturare caratteristiche fondamentali di un segnale: la stessa parola può essere pronunciata più o meno velocemente, avere intensità diverse in vari istanti temporali o semplicemente non iniziare nello stesso momento. Purtroppo segnali così processati rimangono scomodi ed è quindi necessario introdurre un nuovo oggetto: il Cepstrum. La definizione di questo oggetto è intrinseca nella parola: il ceps-trum è l’inverso dello spec-trum.

Sebbene la pulizia e pre-elaborazione dei dati sia fondamentale per le prestazioni e l’affidabilità di qualsiasi modello matematico, non ci dilungheremo su questo aspetto. Una volta puliti i dati e capito come tradurre i segnali in linguaggio macchina, bisogna mettere in piedi un algoritmo che sia in grado di apprendere e auto-migliorarsi con l’esperienza. È a questo punto che entrano in gioco le reti neurali.

 

Che cos’è una rete neurale?

E’ facile immaginare cosa sia una rete neurale biologica: un insieme di neuroni interconnessi. Il ruolo di ogni neurone all’interno della rete può essere schematizzato in tre passaggi:

  1. ricevere in input segnali del tipo acceso/spento dai neuroni adiacenti tramite i dendriti;
  2. elaborare la risposta nel soma;
  3. trasmettere la risposta ai neuroni collegati attraverso l’assone.

Sebbene ogni neurone svolga operazioni piuttosto “elementari”, il comportamento estremamente intelligente della rete emerge dal grande numero di elementi e di connessioni tra le cellule. Ci sono infatti circa 100 miliardi di neuroni e 100 bilioni di sinapsi con una media di 1000 connessioni per neurone.

L’apprendimento e la memoria sono rese possibili dalla plasticità delle sinapsi che modula la forza dei collegamenti tra i neuroni, e dalla permeabilità della membrana cellulare che influenza la soglia di reazione. Una rete neurale è dunque una struttura complessa capace di modificarsi in base agli stimoli esterni.

 

reteneurale

 

Ma come funziona una rete artificiale? L’esempio più elementare possibile di rete neurale formata da un singolo neurone: il Percettrone. Immaginamiamo quindi un neurone postsinaptico in collegamento con altri n neuroni presinaptici che funzionano  da input per il primo. Gli elementi che entrano in gioco sono: un vettore di pesi θ=(θ0,…,θn)∈Rn+1c he rappresenta la “forza” delle connessioni tra il neurone e gli altri n adiacenti.

Se la somma pesata dei segnali in entrata supera una certa soglia di attivazione h peculiare del neurone, esso si attiva e invia uno spike, altrimenti rimane in stato passivo.

Una rete neurale artificiale, dunque, non è altro che un insieme di neuroni collegati tra di loro in modo da non formare cicli, ossia un grafo diretto aciclico, in cui l’output di un neurone funziona da input per i neuroni post-sinaptici cui è collegato.

 

Il training di una rete

Supponiamo di avere a disposizione un insieme, detto training set, abbastanza ricco di coppie. Tale insieme permette di allenare la rete e fare in modo che predica risultati accettabili su nuovi input x non appartenenti al training set.

Nel caso di una rete formata da un solo neurone è molto semplice definire una funzione di costo e cercare quel valore che minimizzi l’errore sulle coppie.

Nel caso di una rete “vera e propria”, non avendo a disposizione ouput di riferimento intermedi, è più complicato calcolare l’errore su ogni neurone e sfruttarlo per scegliere le giuste connessioni sinaptiche. Tuttavia conosciamo l’errore sull’output finale e in qualche modo ce lo facciamo bastare!

 

Possiamo quindi immaginare una rete neurale come una black box: un meccanismo di cui ignoriamo il funzionamento interno e vediamo soltanto il risultato finale. È a questo punto che entra in gioco l’algoritmo di backpropagation.

 

In due parole portiamo l’input avanti lungo tutta la rete, calcoliamo l’errore, e infine portiamo l’errore indietro. L’errore calcolato sull’ultimo nodo della rete è causato da una combinazione di quelli sui neuroni interni: tanto più un neurone ha un collegamento sinaptico forte con il suo successivo, tanto più sarà responsabile dell’errore finale. In questo senso è lecito scrivere l’errore finale come una media pesata di tutti gli errori nei layer interni con pesi i coefficienti delle connessioni sinaptiche.

 

 

 

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.