Come funziona una rete neurale?

La mia banca dovrebbe concedere il prestito a un certo imprenditore? Quale è il film giusto da consigliare al mio cliente? Che video devo proporre a questo utente per massimizzare la probabilità che rimanga davanti allo schermo? Queste sono tutte domande alle quali non sappiamo rispondere in maniera precisa al 100%, perché non conosciamo la legge matematica esatta che le regola. Non abbiamo quella che si chiama una soluzione analitica del problema, tuttavia abbiamo a disposizione una quantità incredibile di dati: possiamo provare a dare una soluzione statistica del problema.

Una rete neurale è un algoritmo incredibilmente efficace nel dare soluzioni statistiche a problemi di questo genere. Essa risponde benissimo alla domanda “se questo problema nei precedenti mille casi è stato risolto così, quale è la soluzione più probabile per la volta mille e uno?”. Ancora meglio, quello che cerchiamo non è una risposta singola, ma un algoritmo che sappia darmi la risposta più accurata ogni volta. Non cerchiamo una risposta, cerchiamo una regola che ad ogni domanda associ la risposta giusta. Una rete neurale approssima la natura, sia perché apprende dai dati che vengono raccolti (e quindi ha un approccio puramente empirico), sia perché il suo funzionamento vuole ricalcare il comportamento del cervello. Ma in che modo esattamente lo imita? Fino a che punto i “neuroni” di una rete neurale artificiale sono simili ai nostri?

1) Livelli, neuroni e pesi

In realtà, una rete neurale è una struttura incredibilmente più semplice di un cervello: i “neuroni” di una rete neurale sono soltanto dei numeri, il cui valore può andare da 0 a 1. Vengono chiamati neuroni non perché sono simili ai singoli neuroni del cervello, ma per via del modo in cui sono organizzati: essi sono infatti raggruppati in layers, o livelli.

Una rete neurale molto semplice

I neuroni del primo livello sono detti neuroni di input, e sono quelli incaricati di tradurre il dato che diamo come input, come può essere una foto o un testo, in un dato che la rete neurale può capire. Ad esempio, nel caso di un’immagine, ogni neurone di input corrisponderà a un pixel, e ci sarà un codice che indica il colore di quel pixel. I neuroni dell’ultimo livello sono detti neuroni di output, e in questo caso ogni neurone corrisponde a una delle possibili risposte che la rete neurale può dare. Ad esempio, se la nostra rete deve riconoscere che animale è presente in una foto, avremo un neurone di output che corrisponde all’animale “leone”, uno per “criceto”, uno per “pesce” e così via. Fra il livello di input e il livello di output ci sono tutta una serie di livelli cosiddetti “nascosti”, che sono quelli dove avviene la bellezza: ogni neurone di un livello è collegato a tutti i neuroni del livello immediatamente precedente e a tutti quelli del livello immediatamente successivo. Questi collegamenti hanno un valore numerico che è chiamato peso, che è una misura di quanto importante è il collegamento fra due particolari neuroni.

Proviamo ora a renderci conto di quanti numeri sono coinvolti in questo algoritmo: ci sono tutti i neuroni più tutti i pesi, più un altro paio di parametri che servono perché la rete non abbia un comportamento troppo anomalo… già solo se vogliamo una rete molto semplice che sappia riconoscere dei numeri scritti a mano, i parametri coinvolti sono dell’ordine delle centinaia di migliaia. Deciderli uno per uno a mano, provando e riprovando finché la rete non funziona, richiederebbe un tempo infinito, ed è in questo senso che una soluzione analitica non è possibile da trovare. Sarebbe troppo lungo e complicato! Quel che si fa allora, è usare un metodo statistico.

2) Training

Questa è la parte importante della creazione dell’algoritmo, quella che trasforma un insieme di numerelli senza valore in un potentissimo algoritmo capace di azzeccare risposte complicatissime… tanto che Facebook rilascia regolarmente le proprie reti neurali “grezze” e non allenate, ma non pubblica mai i dati per allenarle: il potere della rete neurale è nella sua esperienza. E come si fa a farle fare esperienza? Il metodo che di solito si usa è detto backpropagation, letteralmente “propagazione all’indietro”, e consiste nel far digerire alla rete neurale una quantità enorme di esempi svolti in modo da impostare i suoi pesi e i suoi neuroni. Alla rete neurale viene dato un input, lo fa passare attraverso tutti i suoi livelli, e quando arriva in fondo essa guarda che risposta avrebbe dato, di solito casuale. Molto probabilmente questa risposta è sbagliata, ma dato che si tratta di un esempio svolto la rete ha la possibilità di vedere “di quanto” ha sbagliato, e di correggere l’output. La rete neurale fa poi il processo inverso, una sorta di “bene, se questa era la risposta esatta, significa che devo impostare i parametri in modo leggermente diverso nel livello subito prima dell’output”. La rete neurale risale di nuovo tutti i livelli, e da qui il nome di propagazione all’indietro. Dopo un buon numero di esempi digeriti e propagati all’indietro, la rete inizia a fare le associazioni giuste, e inizierà a dare risposte corrette con più e più probabilità.

3) Testing

In questa fase si prendono un po’ degli esempi svolti e li si danno alla rete neurale senza dirle però la soluzione. Servono al programmatore per capire se la rete è pronta ad affrontare dei problemi nuovi, o se ancora sbaglia troppo spesso. Se la rete non ci prende la maggior parte delle volte viene bocciata e si ritorna alla fase di training, altrimenti viene promossa e si passa all’uso sui dati veri.

4) Messa in atto

Il nostro algoritmo si è appena diplomato alla scuola per reti neurali. Milioni di sessioni di training e testing l’hanno resa uno strumento statistico di potenza inaudita. Ma il mondo del lavoro non è tutto rose e fiori per lei… la aspettano altri test là fuori. E come fa la rete a sapere se questi test li sta passando bene o no? Beh, è molto importante creare dei meccanismi di feedback anche per gli algoritmi che sono già stati allenati, sia perché non c’è limite a quanto possono diventare accurati sia perché le mode e le tendenze degli esseri umani cambiano nel tempo, e le reti devono essere in grado di aggiornarsi quasi in tempo reale. Un esempio di feedback? Vediamo come lo fa Google, forse il più grande magnate dell’informatica che fa massiccio uso di reti neurali. Esempio: cerchiamo la mia cantante preferita, Beyoncé. Uno dei primissimi risultati che Google ci propone è la pagina di Wikipedia con la biografia dell’artista, e se noi ci clicchiamo sopra con il tasto destro vediamo che non veniamo reindirizzati direttamente alla pagina wikipedia, ma passiamo per una tappa intermedia che è una pagina con dominio google. Su questa pagina stiamo una frazione di secondo, giusto il tempo che serve alla rete neurale per capire che se ci ha fornito un risultato giusto o se ha sbagliato le associazioni. È così che riescono a stare aggiornate e a seguire i cambiamenti del mercato e degli interessi umani, con continui milioni di test al giorno.

In conclusione: una rete neurale non è un artefatto magico, ma un algoritmo basato su un’idea molto semplice, ma anche molto efficace. Impara in modo molto simile a un cervello, e anche in fretta. Dobbiamo per ciò averne paura? Risponderemo nel prossimo articolo a questa domanda. Per ora, limitiamoci a essere felici che un’idea così rudimentale si sia rivelata tanto efficiente. È entusiasmante vivere in un’epoca in cui avviene una tale rivoluzione!

From: Learning from Data – Abu Mostafa

Costanza Polastri studia fisica dei sistemi complessi a Torino. Nel tempo libero ogni tanto scrive e crea i video per il suo canale youtube Polynerdeia e ogni tanto canta le canzoni di Beyoncé con scarso successo.

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: