L'ABC delle reti neurali

Le Reti Neurali Artificiali sono una delle tecnologie più importanti nei sistemi di Intelligenza Artificiale, vediamo come sono fatte.

il
Sviluppatore / Ingegnere informatico / Funzionario, Collaboratore di IProgrammatori

Se ci pensiamo, molte innovazioni tecnologiche sono nate dallo studio della natura, quindi dal comportamento e funzionamento degli animali, delle piante e dell’Uomo stesso. Come non ha senso “reinventare l’acqua calda”, utilizzando, invece, le conoscenze e le tecniche già acquisite, allo stesso modo replicare le funzionalità e le caratteristiche degli esseri viventi è molto più sensato, perché ci permette di utilizzare qualcosa che ha già avuto successo nella scala evolutiva.

La natura stessa utilizza gli stessi schemi in più contesti perché, se hanno già funzionato, nulla vieta che possano funzionare ancora, in contesti apparentemente diversi: pensate alla serie di Fibonacci (sezione aurea), individuata dal matematico Leonardo Pisano nel 1202 d.C., che è presente in natura in tante forme diverse.

Quindi, se dobbiamo creare una intelligenza artificiale, perché non dovremmo attingere a quello che conosciamo dell’intelligenza umana?

Anni fa, il computer era chiamato anche cervello elettronico, ma un computer comunemente utilizzato, anche con la potenza di calcolo odierna, è ben lontano da essere paragonabile alla struttura di un cervello. È soltanto quando si è pensato di implementare degli algoritmi in grado di replicare i neuroni presenti nel cervello umano, con la creazione delle reti neurali, che si è fatto un grande passo avanti.

Le Reti Neurali Artificiali

Le Reti Neurali Artificiali (ANN = Artificial Neural Networks) sono una delle tecnologie più rivoluzionarie nell'ambito dell'intelligenza artificiale, perché imitano il funzionamento del cervello umano per elaborare informazioni e prendere decisioni. Grazie alla loro capacità di apprendere da grandi quantità di dati, le reti neurali sono diventate fondamentali in vari settori, dall'industria alla medicina, migliorando l'efficienza e l'accuratezza delle operazioni.

Per chi non ne avesse sentito parlare prima del rilascio di ChatGPT al grande pubblico, cioè meno di due anni fa, potrebbe sembrare una conquista recente. In realtà, le reti neurali hanno origini che risalgono agli anni '40 del secolo scorso, con i primi modelli teorici proposti da Warren McCulloch e Walter Pitts. Tuttavia, è solo negli anni '80, con l'introduzione degli algoritmi di retropropagazione (backpropagation), che le reti neurali hanno iniziato a guadagnare popolarità, ma i tempi non erano ancora maturi, perché la potenza di calcolo e la quantità di dati non erano ancora sufficienti.

Più recentemente, superati gli scogli che ne impedivano lo sviluppo, le reti neurali hanno visto una crescita esponenziale, diventando uno strumento chiave nell'arsenale dell'intelligenza artificiale. Questa evoluzione ha portato allo sviluppo di reti sempre più complesse e capaci, utilizzate oggi in un'ampia gamma di applicazioni innovative.

Cenni sul funzionamento delle Reti Neurali

Come fa una rete neurale a replicare così bene alcune funzioni del cervello umano? Le reti neurali sono composte da unità di calcolo fondamentali chiamate neuroni, organizzati in strati (layer). Gli strati principali, che ci sono sempre in una rete neurale, sono tre: lo strato di input, uno o più strati nascosti (hidden layers) e lo strato di output.

NOTA: all’indirizzo https://www.asimovinstitute.org/neural-network-zoo/ potete trovare uno schema probabilmente esaustivo di tutte le reti neurali al momento conosciute.

Ogni neurone artificiale riceve degli input, li elabora attraverso una funzione di attivazione e produce un output. Questo diventa l’input per i neuroni del livello successivo.

Quello che fa ogni neurone artificiale è simile alla funzione degli strati: lo strato di input riceve i dati iniziali grezzi; gli strati nascosti li elaborano con calcoli intermedi e trasformazioni sui dati (per esempio la funzione sigmoide o ReLU), attraverso pesi e funzioni di attivazione; lo strato di output produce il risultato del processo. I pesi vengono adattati durante il processo di training per migliorare le prestazioni della rete neurale.

Tecnologie basate su reti neurali

Tra le tecnologie più avanzate troviamo:

  • Reti Neurali Convoluzionali (CNN, Convolutional Neural Networks), ottimizzate per l’elaborazione delle immagini;
  • Reti Neurali Ricorrenti (RNN, Recurrent Neural Networks), adatte per l’elaborazione di dati sequenziali come testo e serie temporali;
  • Trasformatori (Transformers), sono innovativi nel campo del Natural Language Processing (NLP), con modelli come BERT e GPT che hanno migliorato notevolmente la comprensione del linguaggio naturale (in qualsiasi lingua!).

Per ottenere ottime prestazioni bisogna essere allenati

Abbiamo accennato, poche righe sopra, al processo di training, dicendo che è fondamentale per migliorare le prestazioni della rete neurale. Un tipico esempio di machine learning, con relativo training, è quello che richiede di indicare se una persona è sopravvissuta o meno all’affondamento del Titanic sulla base di un insieme di dati parziali (https://www.kaggle.com/c/titanic/data). Lo scopo non è quello di conoscere quello che già si conosce, ma di “proiettarlo” su altri individui, non conosciuti dal sistema, per capire cosa probabilmente sarebbe successo a loro nella stessa situazione.

Ci sono diverse tecniche di training:

  • Supervisionato: la rete impara da esempi etichettati. È il metodo più comune e prevede che ogni input sia associato (con delle “etichette” apposte da un operatore) a un output desiderato. È abbastanza simile ai sistemi esperti a cui accennavamo in un precedente articolo, tranne il fatto che l’algoritmo non è formato da innumerevoli “if … then”, ma impara dai dati forniti;
  • Non supervisionato: la rete cerca autonomamente di trovare schemi o strutture nei dati non etichettati. In questo caso non ci sono operatori che indicano le risposte e il sistema deve trovarle da sé;
  • Per rinforzo (Reinforcement Learning): la rete impara attraverso un processo di tentativi ed errori, ricevendo ricompense o penalità. La rete tenderà, quindi, a massimizzare le ricompense e a ridurre le penalità. Un tipico esempio di questa tecnica è quella del gioco (scacchi, dama, Go o qualsiasi altro che abbia delle regole e obiettivi ben definiti). Il sistema viene istruito sulle regole e viene messo a giocare: dai successi o insuccessi impara e acquisisce abilità crescenti.

Allenamento con i pesi

Vediamo quindi a cosa servono i pesi e come vengono adattati per ottenere il risultato corretto.

Le principali fasi del training sono:

  • Inizializzazione: i pesi della rete vengono inizializzati, spesso con valori casuali;
  • Propagazione in avanti (Forward Propagation): i dati vengono inviati attraverso la rete per ottenere un output;
  • Calcolo dell’errore: l’output della rete viene confrontato con il valore atteso (label = etichetta) e viene calcolato un errore tramite una “funzione di perdita” (loss function);
  • Propagazione all’indietro (Backpropagation): l’errore viene propagato all’indietro attraverso la rete, aggiornando i pesi mediante l’algoritmo di discesa del gradiente (gradient descent).

Il punto cardine è proprio la retropropagazione dell’errore: infatti, questo è un meccanismo che intuitivamente applichiamo anche noi “umani” in ogni nostra attività: dobbiamo fare una certa attività, per esempio fare canestro con una palla da basket; proviamo il tiro, vediamo il risultato e calcoliamo di quanto abbiamo sbagliato. Poi ci prepariamo a fare un nuovo tiro, modificando l’impostazione (movimento del braccio, forza impressa sulla palla, direzione ecc.) sulla base dei risultati precedenti, finché non riusciamo a ripetere l’esercizio correttamente.

Conclusione

La comprensione di come sono fatte le reti neurali non è fondamentale per poter utilizzare un sistema di machine learning o di sistemi NLP come ChatGPT. In fin dei conti, per guidare un’automobile non è necessario conoscere in dettaglio il funzionamento del motore, dei freni o dell’impianto elettrico. È però interessante per chi vuole capire meglio come sono fatti questi sistemi, sia per capire la vera natura di quella che è definita “intelligenza artificiale”, sia per eventualmente prepararsi all’utilizzo dei numerosi “mattoncini” (“blocchi” software anche open source) con cui ogni tecnico, mediamente esperto, potrebbe creare un proprio sistema di intelligenza artificiale personalizzato.