Cerca in News Spazio

lunedì 7 gennaio 2019

Intelligenza Artificiale #05, imitare il cervello umano, le Reti Neurali Artificiali


NEWS SPAZIO :- Torniamo a parlare di Intelligenza Artificiale (IA), una delle tecnologie più dirompenti e che più di tutte promettono di cambiare la nostra vita. Abbiamo iniziato già da qualche tempo una nuova sezione del blog in cui approfondiamo quest'area di indagine


E' importante farci un'idea delle sue potenzialità, il fine ultimo di questa serie di articoli è quello di stimolare i lettori, creare uno strato di cultura che possa darci un'idea quanto meno su come provare a cavalcare questa innovazione, questo fenomeno che assume sempre più carattere globale e necessita di altrettante strategie globali per essere affrontato.

E' un po' che in questo blog si affrontano discussioni su argomenti di innovazione che impattano sulle nostre vite


Oggi continuiamo l'esplorazione di quell'area di studio che in IA viene denominata approccio connessionista, che si rifà più di tute alle scoperte delle neuroscienze. Abbiamo visto il neurone biologico, il suo modello artificiale e adesso vediamo di farci un'idea sui sistemi basati su tali elementi, quei sistemi che si chiamano Reti Neurali Artificiali.



Dunque, una rete neurale (artificiale) è un software (un programma per computer) che realizza un modello di calcolo in cui vi sono molte piccole unità di elaborazione, simili a quelle che ho presentato nel precedente post,

(Credit Sergio Sestili)

organizzate in strati ed opportunamente collegate tra loro.

Gli stessi McCulloch e Pitts dimostrarono che utilizzando sistemi basati sul loro modello di neurone era possibile realizzare tutte le funzioni fondamentali della logica booleana AND, OR, NOT (disciplina alla base dei moderni calcolatori elettronici - e non solo!).

Vediamolo con un piccolo esempio: proviamo a costruire una rete neurale per calcolare la funzione AND con 2 ingressi.
Innanzi tutto che cos'è la funzione AND? Si tratta di una funzione booleana, cioè che può avere solamente due valori, zero e uno. In particolare, AND ha valore 1 solamente se tutti i suoi input hanno valore 1, altrimenti il suo valore è 0. In altre parole, esprime il concetto del verificarsi contemporaneamente di tutte le condizioni. Possiamo vederla anche così, nel ca odi 2 ingressi

(Credit Sergio Sestili)

questa schematizzazione si chiama Tavola di Verità di una funzione e ne rappresenta in maniera compatta ed elegante tutti i possibili valori di input (x1 e x2) insieme ai corrispondenti valori di output (x1 AND x2).

Bene, a questo punto costruiamo la nostra rete neurale, che in questo caso è costituita da un solo neurone artificiale con 2 ingressi, impostando pesi e valore di soglia per calcolare la funzione AND. Eccola

(Credit Sergio Sestili)

Entrambi i pesi hanno valore 1, quindi la loro SOMMA pesata è data semplicemente da X1 + X2.

La soglia è impostata al valore 1 in modo che venga superata solamente se entrambi gli ingressi hanno valore 1. Basta infatti che almeno uno di essi sia a 0 che la loro SOMMA non riesce ad essere maggiore del valore di soglia. Perciò l'impulso in output ad 1 viene sparato solamente

se x1=1 e se x2=1

E' un esempio molto semplice di come utilizzare questo tipo di computazione. E' un tipo di calcolo differente dalla programmazione "tradizionale", in cui è l'essere umano - il programmatore! - che  scrive un programma in cui dettaglia ogni passo che la macchina deve eseguire.

In un approccio basato sulle reti neurali l'obiettivo generale, dopo aver identificato l'architettura della rete ed impostato alcuni parametri generali, è individuare i giusti valori per tutti i pesi al fine di risolvere correttamente il compito dato. Tenete bene a mente questa cosa.

Come ho accennato in cima al post, sistemi basati su reti neurali per risolvere problemi complessi hanno bisogno di molti, moltissimi neuroni collegati tra loro. Centinaia, migliaia di neuroni con centinaia, migliaia, decine di migliaia di collegamenti tra loro.
Intravedete la complessità di dover trovare i valori giusti per tutti i pesi in modo che, ad esempio, una rete neurale possa riconoscere un'immagine? Certamente non è un compito che può essere svolto manualmente. Ed infatti...

Torniamo al neurone di McCullock e Pitts. Il passo successivo venne rappresentato dal Perceptron (Italianizzato in Percettrone) che si deve allo psicologo Americano Frank Rosenblatt, un altro nome storico in IA, e che risale al 1957. Si differenzia dal predecessore per alcuni aspetti cruciali e ne costituisce un'importante evoluzione, anche a costo di distanziarsi dal riferimento biologico di partenza. Tra questi il fatto che i pesi possono assumere valori sia positivi che negativi, i pesi la soglia possono avere valori differenti tra loro, la funzione di OUTPUT può variare tra -1 e +1, ecc. ecc.

Ma uno degli aspetti più importanti che caratterizzano il Perceptron è che viene introdotta una Regola di Apprendimento, un metodo cioè per calcolare automaticamente i valori dei pesi e non doverli impostare manualmente, così come avveniva con il neurone di McCullock e Pitts.
In tal modo la rete neurale è in grado di imparare i valori dei pesi che le consentono di risolvere il compito assegnato.

Si tratta di un punto fondamentale per tutta la ricerca in IA, dotare le macchine di capacità di Apprendimento Automatico, o Machine Learning, la cui più attuale espressione, forse la più diffusa ai nostri giorni,  è indicata come Deep Learning. Ne parleremo più diffusamente in seguito.

Il Perceptron ebbe molto successo nella comunità scientifica e fu tutto un fiorire di progetti. Ma negli anni '70 del secolo scorso, un altro grande nome in IA, Marvin Minsky e Seymour S. Papert pubblicarono "Perceptrons: An Introduction to Computational Geometry".

Il testo divenne un lavoro fondamentale nel campo dell'analisi delle reti neurali ed evidenziò i molti limiti delle reti con 2 strati basate sul Perceptron.
La ricerca nel campo delle reti neurali ne ricevette un duro colpo che ne decretò praticamente la scomparsa.

Almeno fino alla metà degli agli anni '80, quando venne riscoperto l'algoritmo di Backpropagation, che divenne di primaria importanza per il rifiorire della ricerca sulle reti neurali.
Si tratta di un potente metodo per modificare i pesi di tutta una rete neurale a più strati in modo da diminuire progressivamente il suo errore di calcolo per giungere alla fine ad avere una rete in grado di svolgere con successo il proprio compito. Per anni è stato il fondamento dei sistemi di questo tipo. E lo è ancora oggi.

Gettiamo un po' di luce, semplificando il più possibile, giusto per capirne il funzionamento. Non è difficile, promesso!
Prendiamo come riferimento la seguente rete neurale, composta da 3 strati di neuroni, come quella che avete qui sotto


(Credit Sergio Sestili)

Intanto conosciamola meglio. Partendo da sinistra e procedendo verso destra abbiamo il 1° strato di ingresso X in cui si presentano alla rete i valori in input (INPUT layer). Segue uno strato nascosto, cioè non accessibile dall'esterno, in cui ogni neurone è collegato con (prende input da) ogni neurone dello strato di input (HIDDEN layer). Infine abbiamo lo strato di uscita in cui anche qui ogni cellula è collegata a tutte le cellule dello strato precedente, i cui assoni costituiscono l'output Y della rete (OUTPUT layer).

Questa è la struttura, l'architettura, di una classica rete neurale che potevate incontrare alla fine degli anni '80, ed ovviamente anche adesso.

Il numero di cellule che formano i vari strati, così come la scelta della particolare funzione di attivazione di ogni cellula (tipicamente tutti i neuroni di uno strato hanno la stessa) sono elementi importanti che l'esperto umano di reti neurali deve stabilire con cura, sulla base delle caratteristiche del particolare problema da risolvere e della propria esperienza.

Per adesso mi fermo qui, abbiamo messo tanta carne al fuoco. Continueremo il viaggio nel prossimo post ed approfondiremo questo affascinante argomento. Per prima cosa vedremo proprio cosa farci di una rete neurale a 3 strati come quella che avete qui sopra. Per adesso, stay tuned!

(Parte 4 - Parte 5 - Parte 6)

Nessun commento:

Posta un commento

Chiunque può liberamente commentare e condividere il proprio pensiero. La sola condizione è voler contribuire alla discussione con un approccio costruttivo e rispettoso verso tutti. Evitate di andare off-topic e niente pubblicità, grazie.