Scopo di questo articolo è affrontare i principali concetti che stanno alla base delle reti neurali artificiali (ANN), aspetti peraltro ricorrenti sia nel mondo del machine learning che del deep learning. Mostreremo inoltre come ESPertino, pur essendo una board basata su un normale microcontrollore, possa essere utilizzata per implementare, addestrare e testare una rete neurale artificiale
Introduzione
Nonostante la teoria delle reti neurali artificiali (note anche come ANN, acronimo di Artificial Neural Network) sia stata formulata parecchi anni or sono, soltanto recentemente si è manifestato un crescente interesse verso questo tipo di tecnologia. Il motivo, come spesso accade, è da imputarsi alla attuale disponibilità di computer, CPU e soprattutto GPU con prestazioni sempre più elevate. Grazie all'avvento delle architetture multi core e alla possibilità di eseguire algoritmi anche molto complessi sfruttando l'esecuzione parallela, siamo oggi in grado di definire, addestrare e validare anche le reti più complesse utilizzate nelle applicazioni di deep learning. In questo articolo cominceremo ad esaminare i concetti basilari delle reti neurali, che saranno poi approfonditi ed estesi nei prossimi articoli, più orientati alle tecniche di ML (Machine Learning) e DL (Deep Learning).
Le Reti Neurali Artificiali
Storicamente, il concetto di rete neurale artificiale ha origine nel 1943, con il lavoro pubblicato da Warren McCulloch e Walter Pitts, in cui venne proposto il primo modello di neurone artificiale. La caratteristica principale di questo modello consisteva nel confrontare la somma pesata di tutti i segnali in ingresso al neurone con una determinata soglia: se la somma è maggiore o uguale alla soglia, l'uscita del neurone è pari a 1, altrimenti l'uscita è pari a 0. I due studiosi dimostrarono come le reti composte da tali neuroni potessero, in linea di principio, risolvere ogni tipo di funzione matematica oppure logica. Qualche anno più tardi, Donald Hebb ipotizzò per primo la presenza di un meccanismo di apprendimento nei neuroni biologici. La prima applicazione pratica delle reti neurali artificiali fu proposta verso la fine degli anni '50, con l'introduzione del modello di percettrone (perceptron). Frank Rosenblatt e i suoi colleghi realizzarono infatti una rete di percettroni, dimostrando la loro capacità di eseguire il riconoscimento di pattern. Per neurone artificiale si intende un modello computazionale il cui comportamento si ispira a quello del neurone naturale. Come visibile nello schema semplificato di Figura 1, nel neurone naturale possiamo identificare tre parti significative ai fini della trasmissione dell'impulso: [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2846 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
ciao Stefano, davvero bello questo articolo. Volevo chiederti, nello sketch la scelta di un solo layer hidden deriva dalla semplicità dell’esempio, è una tua scelta o altro?
mi sono divertito. Grazie Stefano!
Antonio Bottaro
Mi fa piacere che abbia gradito la lettura dell’articolo. Le reti neurali sono meno complesse di quanto si possa immaginare e le loro applicazioni sono innumerevoli.
trovo che l’interessante sia stato l’aver applicato le reti neurali in un ‘caso’ tipicamente deterministico, dove si comprende come sia facile rispondere con apposito algoritmo ‘cablato’ (peraltro molto più semplice)… immagino come il vero campo applicativo delle machine learning, basate su reti neurali, in realtà dovrebbe fornire il massimo di aiuto in contesti del tutto non deterministici.
un saluto
Antonio
L’esempio di rete proposto nell’articolo è certamente molto semplice, con finalità più didattiche che pratiche. Nel caso del machine learning le reti neurali hanno a che fare con margini di incertezza molto maggiori: basti pensare al semplice riconoscimento di numeri scritti a mano, o ancor peggio alla classificazione di immagini eseguita in tempo reale. In questi casi si utilizzano reti neurali con architetture studiate “ad hoc”, come ad esempio le reti neurali convoluzionali (CNN). Sulle architetture di reti neurali è stato recentemente pubblicato un articolo (https://it.emcelettronica.com/architetture-di-reti-neurali-per-il-deep-learning), ma sono già pianificati ulteriori articoli di approfondimento sulle singole tipologie di reti.
Ciao Andrea, ti ringrazio per i complimenti. Il motivo per cui è stato scelto un solo hidden layer è proprio per mantenere il codice più semplice possibile. In questo modo, infatti, si riesce a comprendere meglio il meccanismo della backpropagation e si riduce la complessitå dello sketch.
Articolo molto interessante. Mostrare come concetti complessi ed attuali, possano essere applicati su un piccolo sistema embedded è il modo giusto per avvicinare il futuro alla realtà.
Entusiasmante articolo, che rivela le basi di quella enorme capacità che ha questa nuova tecnologia di automatizzare una gran quantità di processi decisionali utili alla nostra vita. Mi riprometto di approfondirlo.
Ho scoperto che ESPertino, pur nel suo piccolo ma potente cuore, e grazie alle risorse del linguaggio C++ (peraltro ancora un poco misteriose), è in grado di realizzare un divertente gioco di abilità, dove il training gli permette di diventare pressochè imbattibile.
Il gioco che ho realizzato con ESPertino è quello del 31 (sommatoria di puntate successive da 1 a 5 condizionate dalla puntate precedente). Il giocatore interagisce con Espertino attraverso un Bot di Telegram (modalità recepita da un Vostro precedente articolo), mentre il training di Espertino avviene sulla analisi di circa 2000 giocate, sviluppate e analizzate automaticamente in un tempo di circa quattro ore.
Buongiorno,
ho letto e riletto più volte trovando una certa difficoltà nel comprendere le formule di pag. 17 che applicano la Backpropagation, pur avendone compreso il concetto. Sono poi riuscito a comprendere bene il tutto analizzando lo sketch, che era molto ben dettagliato. Onestamente mi avrebbe aiutato qualche riga in più nelle espressioni riportate a pagina 17, magari se fossero state accompagnate da un semplice esempio. Comunque ripeto, complimenti per lo sketch, dove il meccanismo delle derivate in successione appare con chiarezza.