Come imparano i computer

Questo articolo è indirizzato ai non addetti ai lavori che vogliono avere una comprensione di base sul funzionamento dell’apprendimento automatico (machine learning).

Tutti i programmi che eseguiamo sui nostri computer sono formati da algoritmi. Un algoritmo è una sequenza di istruzioni che il computer esegue per portare a termine un compito specifico. Dai compiti più semplici come le addizioni a quelli più complessi come ad esempio gli algoritmi di apprendimento.

Gli algoritmi di apprendimento si basano su metodologie matematiche che sono state sviluppate a partire dal 1935 nell’ambito di una branca della matematica applicata denominata ricerca operativa.

La nascita delle reti neurali, gli algoritmi su cui si basano le moderne tecniche di apprendimento, si può far risalire al 1958 quando Frank Rosenblatt nel libro Psychological review introduce il primo schema di rete neurale, detto Perceptron (percettrone).

Successivamente le reti neurali si sono evolute fino a riuscire ad eseguire compiti molto complessi come: il riconoscimento d’immagini, l’elaborazione del linguaggio naturale, la guida autonoma dei veicoli.

alt text

Di en:User:Cburnett{.extiw} – Opera propria Questa grafica vettoriale{.extiw} non W3C-specificata è stata creata con Inkscape{.extiw}., CC BY-SA 3.0, Collegamento

L’immagine sopra mostra una semplice architettura di una rete neurale, dove troviamo:

uno strato di input, dove vengono date in pasto alla rete neurale le informazioni da utilizzare per effettuare le elaborazioni; se stiamo effettuando un riconoscimento di immagini il nostro strato di input verrà alimentato con le immagini da riconoscere

uno o più strati nascosti (hidden layers) dove vengono effettuate elaborazioni per cercare i migliori coefficienti che permettono alla rete neurale di riconoscere l’immagine nella maniera più accurata possibile;

uno strato di output che conterrà il risultato del riconoscimento. Se la rete neurale ha più nodi di output potrà riconoscere più classi di immagini, in questo caso con 2 nodi di output, ad esempio, potrebbe riconoscere se nell’immagine è rappresentata un’automobile o un autobus.

Per riuscire a riconoscere le immagini la rete neurale deve essere “allenata”, allenare una rete neurale per il riconoscimento d’immagini significa dargli in pasto un grande numero di immagini classificate manualmente da qualcuno, per permettere alla rete neurale di trovare i giusti coefficienti che permetteranno successivamente di riconoscere nuove immagini che contengono gli stessi tipi di oggetti.

Tornando all’esempio delle auto e degli autobus, per allenare la nostra rete neurale a riconoscere quando in un’immagine è presente un’auto oppure un autobus sarà necessario avere un grande numero di immagini etichettate con uno 0 (zero) dove non è presente n’è un’auto n’è un autobus, con un 1 dove è presente un’auto e con 2 dove è presente un autobus.

La rete neurale modificherà automaticamente i coefficienti per minimizzare l’errore nel riconoscimento; in maniera molto semplificata elencati di seguito i passi che svolge una rete neurale per minimizzare l’errore durante il processo di allenamento:

  1. Inizializza in maniera casuale i pesi da associare alle variabili di input
  2. Propaga le variabili in input ed i pesi negli strati della rete neurale, attraversando tutti gli strati nascosti
  3. In ogni strato viene calcolata una funzione (non lineare) dell’input e vengono modificati i pesi
  4. Alla fine si compara l’output ottenuto dalla rete neurale e l’output atteso (facendo riferimento alla classificazione fatta in maniera manuale) e si minimizza l’errore con metodi di calcolo lineare (derivazione di funzioni) propagando i dati ottenuti dallo strato di output allo strato di input della rete neurale
  5. Si ripete dal punto 2 al punto 4 finché non siamo soddisfatti del risultato ottenuto.

Ripetere i cicli di allenamento non porta ad un miglioramento infinito delle prestazioni della rete neurale perché ad un certo punto la rete inizierà ad essere molto precisa sui dati di allenamento ma non riuscirà a riconoscere con precisione le nuove immagini che gli vengono date in input, questo fenomeno si chiama overfitting.

Oltre all’overfitting esistono altre limitazioni al miglioramento delle prestazioni di una rete neurale come, ad esempio, la mancanza di sufficienti dati di allenamento, la scelta di un’architettura non idonea alla risoluzione del problema che stiamo considerando (numero di strati nascosti, numero di nodi negli strati, funzioni di attivazione).

Al giorno d’oggi le reti neurali possono essere usate per la maggior parte delle attività di apprendimento automatico supervisionato ma esistono molti altri algoritmi che possono essere utilizzati per gli scopi più svariati.