Blog.

Artificial Neural Network – ANN| Rete Neurale Artificiale


Autore
Andrea Provino
Data
Tempo di lettura
9 minuti
Categoria
AI, machine-learning

artificial_neural_network_explanation_spiegazione_semplice_rete_neurale_artificiale_data_science_machine_learning_blog_guida_italiano_backpropagation_perceptron_bias

Un rete neurale artificiale (ANN Artificial Neural Network) è in grado di eseguire task computazionali coinvolgendo molteplici entità denominate neuroni (neuron), organizzati in una fitta rete (network) suddivisa in livelli (layer), che calcolano il valore di una serie di parametri (weight) utili a minimizzare una funzione di costo (cost function).

Mother of neurons…

Con una definizione simile, saresti alieno se i tuoi neuroni non iniziassero a fumare.

Non ti stanno fumando i neuroni?

Niente paura. La CIA non sta cercando alieni per il momento.

Torniamo a noi, e procediamo con ordine.

Negli ultimi post ho citato spesso le reti neurali artificiali (artificial neural network) accorgendomi di non aver mai dedicato spazio a sufficienza per introdurre questo argomento così interessante e vasto, seppur in passato avessimo affrontato insieme qualche concetto sporadico a loro attinente.

Signori e signore.

E’ arrivato il momento delle reti neurali artificiali!

This image has no sense at all. Do not try to understand its meaning according to those of the sentence. I just like it.

Una Neural Networks è composta da più neuron.

Com’è fatto un neurone artificiale?

E’ molto meno fantascientifico di quanto tu possa pensare.

Storia Artificial Neural Network (ANN) | TLDR (Too Long Don’t Read)

È utile collocare l’origine delle reti neurali nel tempo, e comprendere come l’idea si sia evoluta sino ai giorni nostri.

Non sono un amante della Storia, quindi cercherò di essere sintetico.

Artificial Neuron

Nel 1943 il neurofisiologo Warren McCulloch e il matematico Walter Pitts pubblicarono “A Logical Calculus of Ideas Immanent in Neuron Activity” presentando un modello computazionale semplificato sul presunto funzionamento dei neuroni biologici nei cervelli animali per il calcolo di operazioni complesse usando proposizioni logiche (propositional logic).

AND, OR, NOT.

Fu la prima architettura di una rete neurale artificiale: altre ne seguirono.

Il loro modello rappresentava una semplificazione del neurone biologico: sarebbe stato conosciuto come neurone artificiale (artificial neuron): uno o più input binari e un solo output binario.

I due ricercatori riuscirono a dimostrare come fosse possibile costruire reti di neuroni per calcolare qualsivoglia proposizione logica, seppur con una struttura di partenza semplice e minimale.

The Perceptron

Nel 1957, Frank Rosenblatt inventò una delle più semplici architetture ANN: the perceptron, il percettrone.

perceptron-percettrone-neural-network-data-science-machine-learning-deep-neural-network-keras-tensorflow
Il perceptron come entità computazionale. Quest’immagine è un po’ fuorviante. Il perceptron è un’architettura composta da almeno un TLU. Quello al centro sarebbe un TLU

Il perceptron si basa su un artificial neuron leggermente diverso chiamato Threshold Logic Unit (TLU) o Linear Threshold Unit (LTU): input e output, prima entità binarie, sono ora veri e propri numeri, e a ciascun input in ingresso è associato un parametro, il weight.

Il TLU calcola quindi una somma pesata (weighted sum) di tutti gli input e applica una step function al risultato.

Tra le funzioni più comuni usate nel Perceptron ci sono:

  • Heaviside Step Function
  • Sign function (estrae il segno di un numero reale)

Un Percepton è quindi generalmente composto da un solo livello (single layer) costituito da multipli TLU, sebbene spesso si usi il termine per indicare una piccola rete composta da un singolo TLU. (Come nell’immagine precedente).

Come può un perceptron apprendere?

Ora, esiste una regola denominata Hebbs’ rule (Hebbian Learning) secondo la quale quando un neurone attiva (trigger) un altro neurone, la connessione tra i due si fortifica:

Cells that fire together, wire together

Siegrid Löwel

In altre parole l’Hebbian Learning prevede che qualora due neuroni avessero avuto lo stesso output, il peso della connessione sarebbe aumentato (increase of weight).

Rosenblatt, basandosi su questo principio, elaborò un algoritmo di apprendimento per il Perceptron: prendendo in considerazione l’errore della rete (network) le connessioni che avrebbero portato a output errato non sarebbero state rinforzate.

L’apprendimento di un perceptron avviene un’istanza alla volta: per ogni istanza viene prodotta una previsione.

Ora un l’architettura di un perceptron è troppo semplice per imparare pattern complessi: occorre introdurre i Multi-Layer Perceptron (MLP).

Multi-Layer Perceptron

Un Multi-Layer Perceptron è costiutito da un input layer, uno o più layer di TLU chiamati hidden layer e un output layer. Ogni livello escluso l’ultimo presenta un bias neuron fully connected a un layer successivo.

Un bias neuron rappresenta una bias feature e produce come output 1 in ogni situazione.

Quando un ANN ha 2 o più hidden layer è chiamata Deep Neural Network (DNN), una Rete Neurale Profonda.

Quindi abbiamo la nostra rete con tanti layer e molteplici neuron, ma dobbiamo allenarla. Usiamo il metodo di prima?

No, non possiamo.

Alcuni anni dopo, nel 1986 D. E. Rumelhart et al. in una pubblicazione rivoluzionaria presentarono un nuovo algoritmo: il backpropagation training algorithm.

Oggi potremmo descrivere il backprogation come un Gradient Descent con un reverse-mode automatic differentiation.

L’algoritmo inizia caricando ogni istanza di allenamento (training istance) nella rete e calcola l’output per ogni neurone in ciascun livello consecutivo (forward pass).

Prima di procedere a caricare l’istanza successiva parte una nuova operazione.

Viene calcolato l’errore dell’output finale della rete (i.e la differenza tra il valore reale e quello predetto dalla rete) attraverso una funzione di costo (cost function) e valuta quanto ciascun neurone dell’ultimo hidden layer abbia contribuito a ciascun errore nell’output di un neurone.

Calcola quindi nuovamente quali neuroni del precedente hidden layer abbiano contribuito a determinare gli errori dei neuroni e procede a ritroso sino all’input layer.

Questo reverse pass misura efficientemente l’errore del gradiente (spiegheremo il gradiente prossimamente) attraverso ogni parametro di connessione (weight) propagandolo all’indietro: retropropagazione dell’errore, o backpropagation.

Ok. Facciamo un rapido riassunto.

Backpropagation Summary

Per ogni istanza di allenamento, l’algoritmo di retropropagazione calcola una previsione (processo di forward pass), ne misura l’errore con l’ausilio di una cost function (funzione di costo), procedendo poi a ritroso e per ciascun livello della rete determinando il contributo di ciascuna connessione all’errore. Alla fine ottimizza leggermente (tweaks) il parametro di connessione (connection weight) per ridurre l’errore.

Ora, affinché questo sistema funzionasse correttamente fu necessario modificare l’architettura della MLP, sostituendo la step function con una logistic function, principalmente per ragioni matematiche.

Una step function contiene unicamente segmenti piatti e non presenta alcun gradiente su cui operare.

Al contrario, una logistic function ha una derivata non nulla in ogni punto, consentendo all’algoritmo di Gradient Descent di progredire a ogni iterazione alla ricerca del minimo.

Un caso particolare di funzione logistica è la Sigmoid function:

neural_network_sigmoid_function

Siamo quindi limitati a usare solo la funzione logistica?

No. Possiamo infatti usare il backpropagation algorithm con altre funzioni di attivazione (activation function)

Activation Function in a Neural Network

Il motivo per cui le funzioni di attivazione sono necessarie è presto detto.

Come ben sai (e qui voi care donne siete fenomenali) la realtà è complicata.

Non possiamo descrivere processi naturali con l’ausilio di qualche becera funzione lineare. Abbiamo bisogno di funzioni non lineari, in altre parole la nostra Neural Network deve contenere non linearità nella sulla struttura: ecco dive si collocano le activation function.

MIT course 6.S191

Ripetiamolo ancora una volta: un activation function è quindi necessaria per aggiungere non linearità al modello.

La non linearità di consente di approssimare arbitrariamente funzioni complesse.

Questo è ciò che rende le reti neurali così potenti.

Due popolari funzioni di attivazione sono la tangente iperbolica (hyperbolic tangent) e il rettificatore lineare (Rectified Linear Unit, abbreviato in ReLU)

ReLU Activation Function

Una funzione Rectified Linear unit, o rettificatore lineare, abbreviato per comodità in ReLu è una particolare funzione lineare, che non è confinata da un intervallo di valori.

Infatti, in una funzione lineare la y può assumere un qualsiasi valore (-∞, +∞).

Le parentesi tonde indicano, secondo la notazione matematica, che l’intervallo è aperto e non comprende gli estremi. Non è quindi una scelta grammaticale.

La ReLu ha però una particolarità. La defnizione per i profani in materia è: la y è sempre 0 se l’argomento della funzione è negativo; assume invece un valore diverso da 0 se è positivo.

Per evitare suicidi di massa tra i matematici in ascolto, il rettificatore è una funzione definita come la parte positiva del suo argomento.

neural_network_relu_activation_function
Une funzione di tipo ReLu, restitusice il massimo tra 0 e un valore x

Questo è il suo vero punto di forza. E’ talmente ‘comoda’ che una funzione di tipo ReLu è usata pressoché in ogni rete neurale convoluzionale, o nel deep learning. Perché?

ReLU properties| Proprietà

Un funzione di tipo ReLU è contraddistinta da:

  • una derivata costante; torna particolarmente utile maneggiando reti neurali profonde (deep neural networks) che soffrono di vanishing and explosion gradient (ci arriveremo)
  • la sua equazione differenziale in 0 non esiste. Questa caratteristica impedisce alla ReLU di essere la scelta migliore quando il risultato finale deve essere una funzione continua, ma è certamente più potente in contesti dove ad essere estratte sono features of pattern recognition come nelle reti convoluzionali (che esploreremo a breve)

Hyperbolic tangent funtion

La funzione di tangente iperbolica, così come una comune funzione logistica, è contraddistinta dalla tipica forma a ‘S’.

Hyperbolic tangent properties| Proprietà

Una funzione di tangente iperbolica ha le seguenti proprietà:

  • è continua
  • differenziabile
  • l’ouput ha un intervallo di valori [-1,1] (diverso da quello [0,1] della funzione logistica) che porta ogni ouput del livello a essere più o meno normalizzato (i.e. centrato attorno al valore 0) all’inizio del training. Questo aiuta spesso a velocizzare la convergenza.

Summary

Il goal di una neural network è calcolare quei parametri (weight) tali da minimizzare la funzione di costo (cost function).

Come vengono calcolati questi parametri? Inizializzati con valori causali, sono aggiornati (wieght updates) a ogni nuova iterazione o epoca (epoch).

Updates

L’obiettivo di questo articolo è fornire un overview introduttiva all’affascinante mondo delle reti neurali artificiali. Continuerò ad aggiornarlo, migliorando la spiegazione e aggiungendo ulteriori parti.

Per il momento però è tutto. Un cado abbraccio, Andrea.

Taggeddeep learningmachine learningneural networkteoria


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo
Cos’è Ethereum

Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain. È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli […]

Andrea Provino
ethereum