Uno sguardo nel Machine Learning - Le reti neurali
Usiamo ogni giorno oggetti tecnologici che ci semplificano la vita. Molti li usano senza sapere come funzionano, preoccupandosi solamente che funzionino correttamente, ma alcuni curiosi invece si pongono delle domande.
Questo blog è nato dal corso universitario di Tecnologie della comunicazione scientifica della magistrale in Fisica di Pavia. Io e un gruppo di miei compagni di corso abbiamo deciso di soddisfare quella curiosità di alcuni utilizzando questo blog.
In particolare cercherò di farvi osservare per un poco quel mondo sommerso e ignoto ai più del Machine Learning, in particolare delle Reti Neurali (Artificiali).
| Input pesati di un singolo neurone |
La forma matematica precisa per il calcolo dello stato di attivazione di un singolo neurone è riportata di seguito:
Nelle reti neurali non vi è un solo neurone, ma un insieme di questi. Le reti neurali sono modellate come un insieme di neuroni che comunicano tramite delle connessioni. Ogni neurone compie un singolo calcolo, ovvero il computo del proprio stato di attivazione, e la combinazione dell’elaborazione di più neuroni produce un comportamento complesso della rete.
| Esempio di rete neurale organizzata in strati |
Affinchè una rete neurale risolva correttamente il problema sottopostole deve avere i pesi wj di ogni connessione e la costante b per ogni neurone adatti al problema. Quindi si pone il quesito di come trovare i parametri migliori. La risposta è allenare la rete!
Per allenare la rete si usa un set di dati di cui si conosce la risposta finale ricercata tramite la rete neurale. In questo modo si va a studiare in quali casi la rete neurale tramite quei determinati parametri dà la risposta finale sbagliata. Questo concetto è tradotto in una Funzione di costo (loss function) che rappresenta il costo che si ha quando la rete dà una risposta sbagliata. Ogni risposta sbagliata aumenta il costo totale. Quindi il nostro scopo è quello di ottenere il valore minimo della funzione di costo, poiché questo significa aver trovato i parametri migliori, cioè wj e b. La funzione di costo è diversa in base alla tipologia di problema affrontato, ma tutte si basano sulla probabilità e sulla statistica.
Durante l'allenamento della rete si calcola la funzione di costo totale ottenuta tramite i parametri utilizzati. Grazie alla funzione di costo calcolata si modificano i parametri, ottenendo quindi dei nuovi valori per i parametri, in modo tale da avvicinarsi al minimo della funzione di costo. Terminata questa operazione si ripete il calcolo della funzione di costo totale con i nuovi parametri e si procede in questo modo fino alla localizzazione del minimo della funzione di costo.
Per variare i parametri si sottrae ai parametri la derivata prima della funzione di costo rispetto ai parametri stessi. Questo perché il gradiente (cioè il vettore con all’interno le derivate prime) indica verso dove si ha il massimo incremento della funzione, perciò spostandosi in direzione opposta si procede verso il minimo della funzione di costo. Questo è l’approccio più semplice, ma ha al suo interno delle problematiche tecniche che lo rendono poco efficiente nelle reti neurali, nonostante questo l’idea su cui si basano gli altri metodi per modificare i parametri è la medesima, ma con dei piccoli accorgimenti.
Una volta allenata la rete e trovati i parametri ottimali, questa sarà in grado di risolvere il nostro problema anche sottoponendole dati su cui non si è allenata.
Quanto descritto fino ad ora è valido in generale, ma compiti diversi richiedono strutture delle reti neurali diverse.
- La struttura più diffusa è quella in cui ogni neurone in uno strato è connesso a ogni neurone dello strato successivo e lo stato di attivazione è calcolato come spiegato in precedenza. Questo è il multilayer Perceptron ed è in grado di rispondere a molte tipologie di problemi.
- Per analizzare segnali, come immagini o suoni, si ricercano dei pattern, come un viso, una macchina o una parola precisa. Per questo compito si usano le Reti neurali basate sulle convoluzioni (Covolutional Neural Networks). In questa tipologia di rete ogni neurone in uno strato è connesso solo a un numero preciso di neuroni dello strato successivo, inoltre i valori delle connessioni di un neurone in un layer sono gli stessi di quelli degli altri neuroni nello stesso strato. Questo fa sì che di fatto vi siano le stesse connessioni ripetute e condivise tra neuroni, e ciò permette l’identificazione di un determinato pattern in tutto il segnale e non in una sola posizione.
- Per il riconoscimento vocale o per l’elaborazione di linguaggi si usano reti neurale ricorrenti (Recurrent neural networks), questo perché i dati in ingresso hanno dimensioni variabili. Non tutti i testi hanno la stessa lunghezza, così come i file audio. Ciò che caratterizza questo tipo di rete neurale è che, a differenza delle precedenti, vi sono delle connessioni che formano dei cicli. Queste particolari connessioni servono da memoria per immagazzinare le passate elaborazioni, cosicché ciò che è stato osservato in precedenza influenzi ciò che è osservato nel presente.
- Esistono altri tipi di reti neurali più specifici e complicati, ma qui non verranno trattati.
Presentiamo un esempio:
Tutti conoscono le assistenti virtuali Alexa e Siri, ebbene entrambe alla base funzionano nel medesimo modo, poiché entrambe usano il riconoscimento vocale. Per funzionare vi è un processo che riconosce la parola chiave “Alexa” o “Siri”, e nel caso venga individuata si attiva la rete neurale ricorrente. I dati inseriti nella rete sono gli spettrogrammi di quello registrato dall’assistente, ovvero le nostre voci. Lo spettrogramma è la rappresentazione grafica dell’intensità di un suono in funzione del tempo e della frequenza. La rete che è stata allenata a riconoscere parole dagli spettrogrammi è in grado di associare un significato al suono registrato e a eseguire gli ordini impartiti all’assistente.
Fonti:
“Notes on machine learning”, Clausio Cusano, spring 2021
https://en.wikipedia.org/wiki/Neural_network
Commenti
Posta un commento