Come è fatta una rete neurale (prima parte)

AI

Per capire la vera essenza delle reti neurali è importante tenere presente che in qualche modo, esse si ispirano ai principi di funzionamento del cervello. A tal proposito giusto per introdurre gradualmente il tema, ritengo che abbia senso, l’approccio generalmente usato, di introdurre le stesse parlando in prima istanza del nostro cervello. Pensare alle reti neurali attraverso similitudini, può aiutare a capire lo spirito che c’è dietro questa meravigliosa tecnologia. Approcciare alle reti neurali non significa sviluppare software, programmare nel senso stretto della parola ma significa modellare le reti per specializzare il loro comportamento. Il lavoro per chi approccia alle reti neurali, infatti è simile ad un lavoro continuo di modellazione anziché di programmazione, sebbene alla fine una rete neurale si dimostrerà in tutto il suo splendore come un algoritmo semplice ed assolutamente affascinante. Dunque, passiamo al tema oggetto dell’articolo: che cosa è una rete neurale? La rete neurale più grande e complicata conosciuta è Il nostro cervello. Questa meravigliosa rete è enorme, costituita da circa 90 miliardi di singoli neuroni tutti connessi insieme che costantemente ricevono e interpretano informazioni dai nostri sensi. Un neurone biologico è l’elemento base della catena del nostro cervello ed è costituito 

da una serie di connessioni in ingresso dette dendriti ed una connessione in uscito chiamato assone, che a sua volta si connette con altri neuroni. Queste connessioni sono, di fatto, delle linee di trasmissione che connettono insieme i neuroni e permettono alle informazioni di essere elaborate dal nostro cervello; solo grazie allo studio di questi meccanismi si è arrivati a teorizzare   un modello digitale dello stesso e che ha portato nel tempo al perfezionamento delle reti neurali.

Lo scambio d’informazioni tra i vari neuroni avviene grazie ai dendriti e agli assoni, dove i dendriti fungono da periferica di input e l’assone da periferica di Output. Quando l’impulso elettrico attraversa l’assone ed arriva alle connessioni sinaptiche (bottoni sinaptici), esso stimola la produzione di alcuni neurotrasmettitori che trasportano a loro volta l’impulso elettrico tramite la sinapsi al neurone successivo a cui è collegato e così via dicendo.

Di fatto il neurone nella sua essenza è uno elemento semplice che può essere attivato se si verificano determinate condizioni “elettriche”. Su queste basi è possibile modellizzare un neurone artificiale. Il neurone artificiale, infatti, può essere modellizzato da un punto di vista matematico attraverso uno schema semplice come rappresentato in figura:

Come si può evincere per analogia confrontandolo con il neurone biologico, si riscontra che entrambi hanno una serie di linee di input (xi) ed un solo output (y).

Come abbiamo detto il neurone si attiva se ci sono delle condizioni elettriche/chimiche che consentono di attivare lo stesso, diciamo che se le condizioni di ingresso riescono ad attivare il neurone l’informazione passa nell’assone e così via. Nello stesso modo i neuroni artificiali si attivano se si verificano determinate condizioni.

Si tratta solo di definire le condizioni ed il modello matematico che si applica al singolo neurone (chiamato anche percettrone). Un modello matematico può essere il seguente:

Ogni Input xi viene moltiplicato per suo un peso wi e sommato insieme agli altri, il risultato di questa somma ‘passa’ attraverso la funzione fviene ottenuto in Output Y.

 

 

Cerchiamo di fare un passo alla volta cercando di capire i meccanismi intrinseci di un sistema che sia in grado di apprendere e risolvere problemi. Prima di tutto cerchiamo di semplificare ancora di più il modello appena accennato di neurone ed in questa fase ignoriamo per il momento il concetto di funzione F di attivazione semplificando la stessa con la sola funzione lineare che nel caso di un solo input ed un solo output si riduce a:

y=x*w+b

 

In tal caso il nostro modello è in effetti rappresentato da una retta. Questo cosa vuol dire? Supponiamo di voler modellare un sistema che sia in grado di fornire una risposta che sia il più attendibile possibile; in altri termini supponiamo di voler costruire un sistema che sia in grado di effettuare delle predizioni, in tal caso il nostro modello dovrà essere in grado di rappresentare al meglio l’osservazione reale.

osservazione campione

Se dovessimo pertanto creare un modello semplice che possa ridurre al minimo l’errore di predizione un metodo semplice sarebbe quello di utilizzare una regressione lineare. Infatti, se si osserva lo spazio campione o grafico di dispersione sembrerebbe quasi che ci sia una retta che può attraversare tutti i punti o comunque arrivarci molto vicino.

In termini pratici, quello che si sta facendo è di trovare la retta che idealmente passi per tutti i punti che rappresentano i dati dello spazio campione.

Poiché ciò non è matematicamente possibile, quello che si può fare è trovare la retta che sia il più possibile vicina ai nostri dati ovvero la retta che minimizza il Costo o errore quadratico 

ove y è il valore reale atteso e  il valore predetto sulla curva di regressione. In altri termini si tratta di minimizzare la seguente funzione

ovvero trovare il giusto equilibrio delle distanze minimizzate. Per capire meglio il concetto si può osservare il grafico seguente in cui la media delle distanze è rappresentata dalle frecce.

 

In definitiva trovare la retta che minimizza il costo significa scegliere opportunamente w e b, cioè il coefficiente angolare l’intercetta della retta. Il problema che ci stiamo ponendo pertanto è quello di trovare un metodo che ci consenta di individuare i valori corretti ed a tal proposito una scelta ottimale è quella del metodo “Gradient Descent” o discesa del gradiente. Vediamo di cosa si tratta. Continuiamo, pertanto, ad usare un approccio semplificato per comprendere il problema in oggetto evitando dimostrazioni e dando però per assodato l’approccio matematico.

Algoritmo della discesa del gradiente (Gradient Descent)

È un algoritmo generico per il calcolo del minimo della funzione di costo. L’algoritmo è molto interessante e viene usato spesso in problemi di Machine Learning e Neural Network. Si tratta di un algoritmo iterativo che stima nuovi parametri fino a raggiungere il minimo. Questo metodo converge ed ha una soluzione certa se la funzione di costo è convessa. Nel nostro caso la funzione di costo è quella dell’errore quadratico; Fissata dunque la funzione J(w,b) l’algoritmo lavorerà in modo di scegliere iterativamente i valori di w e b con l’obiettivo di ridurre il valore di J(w,b).

Metodo iterativo:

– Inizializzare dei valori arbitrari di w e b

– Calcolare nuovi valori di w e b che riducono J(w,b)

– Terminare quando si è raggiunto il minimo.

Procediamo con un esempio ( preso da wikipedia ) :

Si supponga di voler minimizzare la funzione

e si scelga come soluzione iniziale il vettore :

.

Allora

muovendosi in un di intorno X0

Questi calcoli mostrano che, per individuare dei punti vicini a X0 in corrispondenza dei quali la funzione assuma un valore minore di f(X0) conviene spostarsi lungo direzioni che abbiano la prima e la terza componente x1 e x3 più piccole o seconda componente x2 più grande. Inoltre, esistono delle direzioni preferenziali lungo le quali la funzione f decresce più velocemente (ad esempio scegliere una coordinata x1 più piccola è preferibile, ad esempio, rispetto a far diminuire x3). La procedura può essere iterata partendo da un nuovo punto, ad esempio  , fino ad individuare un minimo per . 

L’esempio mostra che una procedura che aggiorni la soluzione in modo iterativo sulla base delle informazioni disponibili localmente può portare ad individuare un punto di minimo per la funzione assegnata. Un algoritmo che implementa il metodo del gradiente discendente può essere:

 

articolo successivo ( seconda parte )

 

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    Comments