Blog.

Neural Network Training Theory | 6.S191 – Deep Learning


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

deep-learning-training-neural-network-guida-italiano-teoria-bocconi-laurea-intelligenza-artificiale-machine-learning-blog-data-science

Neural Network Training? In altre parole: how to train a neural network.

Una frase che abbiamo cercato spesso su Google.

In questo articolo faremo chiarezza sui meccanismi matematici che consentono a una rete neurale profonda, deep neural network, di allenarsi su un set di dati: ecco il neural network training!

Inserite le giuste parole chiave per ottimizzare il SEO del post, possiamo ora iniziare a macinare informazioni utili.

Prima di procedere ci dobbiamo allineare un attimo.

Dai un’occhiata qui.

Potremmo spiegare il significato di Deep Learning alla nostra amata nonnina, perché seguendo le indicazioni del grande Richard Feynman siamo riusciti a sviscerare ogni concetto cogliendo il cuore dell’informazione.

Pensaci un attimo.

Abbiamo fatto chiarezza sulla struttura delle reti neurali artificiali (ANN, Artificial Neural Network) studiando il perceptron, il primo esemplare storico di neurone artificiale, guidati da nientepopodimeno che F. Rosenblatt.

Inutile che ti freni: ogni camminata ci porta a una nuova tappa nel magico mondo del Deep learning!

Cosa abbiamo oggi all’orizzonte? Il processo di training!

Allineamento completato, procediamo l’ascesa!

Neural Network Training

Molti framework come Tensorflow, grazie anche all’implementazione ufficiale di Keras, e PyTorch ci risparmiano parte del lavoro implementando tutti gli algoritmi matematici per eseguire l’allenamento di una rete neurale with ease.

Con la sola necessità di porre attenzione ad alcune piccole regole strutturali, molti potrebbero avventurarsi nella creazione di deep neural network ignorandone completamente il funzionamento hunder the hood.

Oggi vedremo assieme i meccanismi fondamentali grazie ai quali una deep neural network è in grado di scatenare tutta la sua potenza!

Forward Propagation

Partiamo dalle basi, aggiungendo livelli di complessità progressivi: sbucciamo una cipolla dall’interno. (n.d.r, WTF?)

Consideriamo, a titolo esemplificativo, una rete semplice costituita da un singolo neurone.

Commentando l’immagine di cui sopra diremmo che l’ouput della rete sia calcolato applicando a una somma pesata d’input Xm e di relativi pesi Wm, a cui aggiungiamo un parametro aggiuntivo, il bias W0 , una funzione di attivazione (activation function) non lineare.

In questo modo l’informazione scorre (flow) attraverso un neurone in un processo definito di forward propagation (o forward pass).

Ora smontiamo gli elementi che abbiamo definito.

Questa è la funzione appena descritta:

[latexpage]
$$
\hat{y}=g\left(w_{0}+\sum_{i=1}^{m} x_{i} w_{i}\right)
$$

Possiamo riscriverla usando l’algebra lineare in termini di vettori e dot product. Quindi consideriamo un vettore d’input X e uno di pesi W:

[latexpage]
$$
\hat{y}=g\left(w_{0}+X^{T} W\right)
$$

Ed ecco i nostri vettori:

[latexpage] $$ \boldsymbol{X}=\left[\begin{array}{c} {x_{1}} \ {\vdots} \ {x_{m}} \end{array}\right] \text { and } \boldsymbol{W}=\left[\begin{array}{c} {w_{1}} \ {\vdots} \ {w_{m}} \end{array}\right] $$

Per calcolare l’output di un singolo neurone, tutto ciò di cui abbiamo bisogno è calcolare il dot product usando un approccio element wise e applicare infine una funzione non lineare denotata da G.

Quale funzione non lineare?

Una funzione di attivazione.

Activation Function

I dati descrivono il nostro mondo.

Entrambi sappiamo quanto sia riduttivo descrivere la realtà con sole funzioni lineari: abbiamo bisogno di maggiore flessibilità.

Ecco perché introduciamo le funzioni di attivazione.

Le activation function aggiungono non linearità nella rete, consentendoci di catturare relazioni complesse.

Abbiamo affrontato l’argomento nel post inerente alle Reti Neurali Artificiali, ti esorto a dargli un’occhiata per trovare una spiegazione ad alcune comuni funzioni non lineari (e.g. ReLU e Sigmoid).

Quindi.

Abbiamo definito la struttura della nostra deep neural network; sappiamo quanti parametri devono essere appresi (weights) e dopo averi inizializzati casualmente produciamo la prima previsione.

Il risultato predetto? 40

Il valore reale? 500

Bene.

Ci serve un metodo per quantificare l’errore compiuto.

Idee?

Usiamo una funzione costo!

Cost Function

Cost function, un nostro caro amico del passato, ha sempre da rivelarci qualcosa di nuovo.

Ripassiamo e scaviamo più a fondo!

Una funzione costo (a me piace chiamarla funzione di costo), è comunemente indicata anche con altri appellativi quali:

  • cost function 🙂
  • empirical risk :O
  • objective function :O

Il concetto è chiaro: a ogni iterazione di training occorre quantificare la perdita (quantifying the loss).

Abbiamo bisogno di una funzione matematica che calcoli l’errore sull’intero dataset di training, poiché evidentemente i dati su cui operiamo sono più di uno.

Definiamo individual loss l’errore calcolato su una singola previsione e usiamo metodi come l’empirical loss per misurare quello su tutto il set di dati, in questo caso come media delle singole inesattezze.

Facciamo altri esempi.

In un modello di classificazione binaria, potremmo impiegare il binary cross entropy loss e riservare un’altra funzione, ad esempio il cross entropy loss ,ai casi in cui le classi da maneggiare fossero 3. (i.e. calcolando una probabilità per ognuna delle classi).

Breve digressione sul concetto di Cross Entropy.

Claude Shannon, alma mater MIT, lo formulò riflettendo su come fosse possibile calcolare la dissimilitudine di due distribuzioni.

Ne abbiamo parlato in modo divertente qui.

Perfetto mio capitano.

Anche questa vela è stata ammainata.

Un momento!

Sembra ne manchino due!

Rete inizializzata, valori calcolati ed errore misurato.

Come facciamo però a sapere di quale valore aggiornare i pesi, e come riusciamo a compiere efficacemente l’operazione?

Riflettici: potremmo avere una ResNet con 152 layer, e qualche milione di parametri da aggiornare.

Mmmm.

Dobbiamo calcolare quei valori di weights tali per cui la cost function abbia un valore minimo: è un problema di ottimizzazione.

Optimization Function

loss-optimization-deep-learning-engineer-model-training-guida-italiano

Un algoritmo comunemente impiegato per il calcolo del gradiente (la direzione verso cui aggiornare i weights) e chiamato Gradient Descent o discesa del gradiente.

Così siamo in grado di sapere come aggiornare i parametri, in senso opposto al gradiente.

Un attimo! La modifica di quale valore deve essere fatta?

A determinarlo è un altro concetto: il learning rate.

Il learning rate è un parametro (eta, η) che moltiplicato per il gradiente, stabilisce la velocità di apprendimento.

Indica infatti quanto aggressivamente aggiornare i pesi della rete e muoversi verso il punto di minimo. (weights)

Determinare opportunamente il learning rate è cosa ardua:

  • troppo piccolo, e l’algoritmo di ottimizzazione potrebbe non convergere o bloccarsi in un minimo locale anziché globale (global optima)
  • troppo grande, e l’algoritmo potrebbe invece aumentare l’errore anziché diminuirlo

Ottimo! Ora sappiamo di quanto (più o meno) aggiornare i pesi.

Come facciamo però?

Usiamo il segreto di un grande lupo di mare: l’algoritmo di backpropagation

BackPropagation: neural network training

Pur essendo un concetto chiave nel funzionamento di una rete neurale artificiale, saremo veloci sulla descrizione dell’algoritmo di BackPropagation avendone già parlato in precedenza.

Ho però pensato di dedicarne ampio spazio in un post dedicato.

Continua a seguirmi!

Dicevamo? Ah, sì!

Per il momento ti basti sapere che per calcolare matematicamente i wieghts usiamo la regola della catena per il calcolo delle derivate: questo processo ha in se la retropropagazione dell’errore.

Non temere, queste burrascose acque saranno a breve domate.

Abbiamo quindi visto le funzioni cardine del processo di allenamento di una rete neurale profonda.

Domani affrontiamo altri due concetti chiave: regularization, adaptive learning rate e minibatches!

Per il momento è tutto.

Un caldo abbraccio, Andrea

Taggeddeep learningneural network


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