• Home
  • Chi sono
  • Risorse
  • Contatti
  • Approfondimenti
  • Cerca nel sito

Lorenzo Govoni

Business e Tecnologia

  • Big Data
  • Business
  • Excel
  • Intelligenza Artificiale

Semplice architettura di rete neurale convoluzionale

rete neurale convoluzionale

Nel settore della visione artificiale una delle innovazioni più promettenti negli ultimi anni sono state le reti neurali convoluzionali. Esse infatti hanno raggiunto una notevole rilevanza in quanto il loro record di errori di classificazione si è ridotto drasticamente, permettendo a Alex Krizhevsky di vincere la competizione mondiale nel 2012 di computer vision.

Da allora, anche le più grandi aziende tecnologiche ne fanno utilizzo: Facebook le utilizza per i loro algoritmi di codifica automatica, Google per la ricerca di foto, Amazon per i consigli sui prodotti, Pinterest per la personalizzazione dei feed di casa e Instagram per l’infrastruttura di ricerca.

 

Ma che si intende per rete neurale convoluzionale?

La Convolutional Neural Networks (CNN) rappresenta un’architettura di rete neurale artificiale di grande successo nelle applicazioni di visione artificiale e ampiamente utilizzate anche in applicazioni che processano media come audio e video.

L’applicazione più popolare di rete neurale convoluzionale resta comunque quella di identificare, da parte di un computer (e con una certa probabilità), cosa un’immagine rappresenta.

Nel precedente articolo abbiamo visto che un computer vede un’immagine come un insieme di numeri.

Tramite una rete neurale convoluzionale il computer è in grado di classificare cosa un’immagine mostra e identificare con buona probabilità il suo contenuto.

Tieni presente che le reti neurali sono costruite per analizzare immagini incluse dentro certi set di dati (ad esempio dataset di animali includono immagini di animali, dataset di riconoscimento facciale includono immagini di volti, dataset di autoveicoli includono immagini di veicoli, e così via), e classificare gli oggetti nelle immagini al loro interno.

Non puoi ad esempio ottenere un riscontro positivo da un computer se fai analizzare un’immagine di un volto umano a una rete neurale convoluzionale che accetta solamente immagini di autoveicoli, in quanto non capisce le forme e gli oggetti che la nuova immagine rappresenta.

Dopo questa breve premessa, vediamo un esempio di architettura di questa tipologia di rete neurale.

 

Architettura di rete neurale convoluzionale

Un’architettura di rete neurale convoluzionale può essere formata da:

 

 

dove Input, Conv, Relu, Pool e Fully Connected identificano ciascuno un livello della rete neurale convoluzionale.

In altre parole, abbiamo il:

– Livello di input: rappresenta l’insieme di numeri che rappresenta, per il computer, l’immagine da analizzare. Essa è rappresentata come un insieme di pixel. Ad esempio, 32 x 32 x 3 indica la larghezza (32), altezza (32) e profondità (3, i tre colori Red, Green e Blue nel formato RGB) dell’immagine.

– Livello convoluzionale (Conv): è il livello principale della rete. Il suo obiettivo è quello di individuare schemi, come ad esempio curve, angoli, circonferenze o quadrati raffigurati in un’immagine con elevata precisione. Sono più di uno, e ognuno di essi si concentra nella ricerca di queste caratteristiche nell’immagine iniziale. Maggiore è il loro numero e maggiore è la complessità della caratteristica che riescono ad individuare.

– Livello ReLU (Rectified Linear Units): si pone l’obiettivo di annullare valori negativi ottenuti nei livelli precedenti e solitamente è posto dopo i livelli convoluzionali.

– Livello Pool: permette di identificare se la caratteristica di studio è presente nel livello precedente. Semplifica e rende più grezza l’immagine, mantenendo la caratteristica utilizzata dal livello convoluzionale.

– Livello FC (o Fully connected, completamente connesso): connette tutti i neuroni del livello precedente al fine di stabilire le varie classi identificative visualizzate nei precedenti livelli secondo una determinata probabilità. Ogni classe rappresenta una possibile risposta finale che il computer ti darà.

Ad esempio, in CIFAR-10 (che è un dataset di immagini utilizzato per algoritmi di machine learning e visione artificiale), il computer può decidere fra 10 classi cosa l’immagine rappresenta, in base ai risultati ottenuti dai livelli precedenti sceglierà quella con maggior probabilità.

Vediamo ora un po’ più in dettaglio cosa rappresentano questi livelli.

 

Livello convoluzionale

Supponiamo che l’input di una CNN sia un’immagine rappresentante un 7 (esempio molto semplice, ma per far rendere l’idea), che accetta immagini dall’MNIST handwritten dataset.

Nel linguaggio macchina tale figura si può rappresentare tramite un array di 28 x 28 x 3 pixel.

 

Per procedere con la comprensione del suo funzionamento e di che cosa rappresenta una CNN devi conoscere cosa sono i filtri e cosa rappresenta il passo.

Per filtro generalmente, si intende una piccola matrice di poche righe e colonne che rappresenta una caratteristica (feature) che il livello convoluzionale vuole identificare, ad esempio le curve o una linea retta.

Inizialmente per i primi livelli si dice che il filtro rappresenta una caratteristica di basso livello perché identifica semplici oggetti come appunto curve o linee.

Per un livello convoluzionale il filtro identificherà le curve, per un altro linee orizzontali, per un altro ancora circonferenze, e così via negli ultimi livelli, fino a formare figure complesse che rappresentaranno oggetti più complicati.

In quest’ultimo caso si dice che il filtro rappresenta una caratteristica di alto livello perché identifica oggetti complessi, come il becco di un uccello, una mano o un volto.

Ipotizziamo che il filtro sia un rivelatore di curve.

Identificata la caratteristica che il filtro identificherà nel livello convoluzionale, si decide la dimensione del filtro e il numero di filtri da utilizzare nel livello. 

Nel nostro esempio si decide di utilizzare un filtro dalle dimensioni 3×3 (ossia 3 righe e 3 colonne), che per il primo livello convoluzionale assume valori casuali (detti anche pesi).

 

                                               Esempio di filtro di dimensione 3 x 3

Per quanto riguarda il numero, ipotizziamo ora un solo filtro per semplicità, anche se in realtà quelli utilizzati sono diversi per ogni livello.

Successivamente si parte ad analizzare il cosiddetto campo ricettivo, che ha la stessa dimensione del filtro (quindi 3 x 3).

Esso viene inizialmente rappresentato dal primo blocco di pixel 3 x 3 in alto a sinistra del livello di input.

Il risultato, che otterremo in alto a sinistra nel livello successivo (Conv1) della rete neurale, si ottiene facendo un prodotto scalare dei valori del filtro con i valori di questo primo blocco (cioè facendo moltiplicazioni a livello di elemento per i pixel 3 x 3 del campo ricettivo e i pesi dei neuroni del filtro 3 x 3, e infine il risultato sarà la somma dei vari prodotti così ottenuti).

Questo ci dà un numero unico: tale valore sarà più alto in prossimità di curve, e più basso nel caso contrario.

 

 

Siccome nell’immagine sopra il primo risultato non è in prossimità di curve esso assumerà valore 0 (inoltre ogni pixel del volume di input assume valore nullo, quindi il risultato del prodotto scalare è pari a zero).

L’operazione appena vista va ripetuta per tutti i blocchi che l’immagine di input può contenere.

Di conseguenza, il campo ricettivo viene fatto spostare di un determinato passo (o stride) verso destra.

Ad esempio, ipotizzando di avere un volume di input 7 x 7 (numero di righe e di colonne del livello di input), un filtro 3 x 3 e un passo di 1, il campo ricettivo (sempre 3 x 3) si sposterà di una unità verso destra, come nell’immagine seguente:

 

 

Se il passo fosse di 2, la rappresentazione sarebbe la seguente:

 

 

Il campo ricettivo si sta spostando di 2 unità ora e quindi il volume di output si restringe.

Per l’esempio iniziale, ipotizziamo un passo per ogni convoluzione (ossia passo = 1).

Il passaggio quindi sposta il campo ricettivo a destra di 1 unità, per analizzare il secondo blocco (e così via per tutti gli altri, fino a ricoprire l’intero volume di input).

 

 

Dopo aver fatto scivolare il campo ricettivo su tutte le posizioni, otteniamo una matrice di numeri 26 x 26 x 1. La ragione per cui è 26 x 26 è che si ottengono 686 differenti pixel che un filtro di 3 x 3 può analizzare in un’immagine 28 x 28, come era quella proposta all’inizio.

La profondità, invece, risulta pari a 1 perché ho utilizzato un solo filtro in questo esempio.

L’insieme dei valori che si ottengono seguendo la procedura appena enunciata si dice mappa di attivazione (rappresentata in questo caso dalla matrice 26 x 26 x 1).

Se avessimo avuto più numeri di filtri, la stessa procedura andava ripetuta, per un numero di volte pari al numero dei filtri del livello (n), ottenendo n mappe di attivazione.

 

Dimensione del filtro, passo e padding

Ci sono 4 parametri principali (definiti iperparametri) che influenzano il comportamento di un livello convoluzionale. Tre li abbiamo già visti: passo, dimensione del filtro e numero.

Il quarto è il riempimento zero, o zero-padding dall’inglese: esso identifica uno strato da apporre al volume di input iniziale al fine di evitare di perdere alcune informazioni al passaggio da un livello a un altro.

Vediamo un esempio.

Cosa succede quando si applicano tre filtri 5 x 5 x 3 a un volume di input 32 x 32 x 3?

Il volume di output sarebbe 28 x 28 x 3. Il motivo è sempre che si ottengono 784 differenti pixel che un filtro 5 x 5 può coprire in un’immagine 32 x 32. La profondità è data dal numero di filtri, quindi 3.

Si noti che le dimensioni spaziali diminuiscono.

Man mano che continuiamo ad applicare i livelli convoluzionali, la dimensione del volume diminuirà più velocemente di quanto vorremmo.

Nei primi strati della nostra rete, però, è bene conservare il maggior numero di informazioni sul volume di input originale in modo da poter estrarre tali caratteristiche di basso livello, che altrimenti andrebbero perse e sarebbe poi impossibile recuperarle nei livelli successivi.

Quindi, quello che si vuole è che il volume di output rimanga 32 x 32 x 3.

Per fare ciò, si applica uno spessore zero di dimensione 2 al primo livello.

In altre parole, si riempe il volume di input con zeri attorno al bordo: otterremo così un volume di input 36 x 36 x 3.

 

 

Per scegliere gli iperparametri di una rete neurale convoluzionale, non esiste uno standard stabilito che viene utilizzato da tutti i ricercatori, in quanto la rete dipende in gran parte dal tipo di dati a disposizione.

 

Livello ReLU (Rectified Linear Units)

Quando attraversiamo un altro livello convoluzionale, l’output del primo livello convoluzionale diventa l’input del secondo livello.

Di conseguenza, l’output del livello convoluzionale diventa l’input del livello ReLU, che solitamente è collocato subito dopo il livello convoluzionale.

Il livello ReLU rappresenta un livello non lineare, il cui scopo è quello di introdurre la non linearità a un sistema che sostanzialmente sta calcolando operazioni lineari durante i livelli convoluzionali (tramite il prodotto scalare tra il filtro e il campo ricettivo).

I ricercatori hanno scoperto che con questi livelli le reti neurali convoluzionali funzionano molto meglio perché la rete è in grado di allenarsi molto più velocemente (a causa dell’efficienza computazionale) senza impattare significativamente sull’accuratezza dei risultati.

Il livello ReLU applica la funzione f (x) = max (0, x) a tutti i valori nel volume di input.

In parole semplici, questo livello annulla tutti i valori negativi, aumentando le proprietà non lineari del modello e della rete globale senza influenzare i campi ricettivi del livello convoluzionale.

 

Livello Pool

Dopo alcuni livelli ReLU, i programmatori possono scegliere di applicare un livello pool.

Questo livello può essere eseguito secondo diversi risultati: il massimo è il più popolare, e per questo si considererà quello.

Secondo questa classificazione il livello richiede un filtro (normalmente di dimensione 2×2) e un passo della stessa lunghezza. Quindi lo applica al volume di input del livello precedente e genera il numero massimo in ogni campo ricettivo attorno al quale il filtro ruota.

 

 

Ad esempio, per il primo riquadro in rosa: 6 risulta il massimo tra il primo blocco (1, 0, 4 e 6), e così viene riportato nella prima posizione. E lo stesso per le altre 3.

Il ragionamento intuitivo alla base di questo livello è che una volta che sappiamo che una caratteristica specifica è nel volume di input originale (ci sarà un alto valore di attivazione) e la sua posizione esatta non è importante quanto la sua posizione relativa rispetto alle altre caratteristiche.

Questo livello riduce drasticamente la dimensione spaziale (l’altezza e la larghezza cambiano ma non la profondità) del volume di input ed i requisiti computazionali per i livelli futuri.

 

Livello FC (Full connection)

Solitamente è l’ultimo livello di una rete neurale convoluzionale.

Questo livello prende fondamentalmente un volume di input (qualunque sia l’output del livello convoluzionale o del ReLU o del livello pool che lo precede) e genera un vettore N dimensionale in cui N è il numero di classi tra cui il programma deve scegliere.

Ad esempio, se si desidera un programma di classificazione delle cifre, N sarà 10 poiché 10 sono le cifre (0,1,2,3,4,5,6,7,8 e 9). Ogni numero in questo vettore di dimensione N rappresenta la probabilità di una certa classe.

Se il vettore risultante per un programma di classificazione di cifre è

[0 0 15 10 0 0 0 65 0 10]

allora questo rappresenta una probabilità del 15% che l’immagine sia 2, una probabilità del 10% che l’immagine rappresenti un 3, una probabilità del 65% che l’immagine sia un 7 e una probabilità del 10% che l’immagine sia un 9 (tutti gli altri numeri hanno probabilità nulla di essere scelti).

Il modo in cui questo livello completamente connesso funziona è che guarda l’output del livello precedente (che dovrebbe rappresentare le mappe di attivazione di caratteristiche di alto livello) e determina quali caratteristiche sono maggiormente correlate a una particolare classe.

Ad esempio, se il programma prevede che un’immagine sia un cane, avrà valori elevati nelle mappe di attivazione che rappresentano caratteristiche di alto livello come una zampa o 4 zampe, o il muso, e così via.

Analogamente, se il programma prevede che un’immagine sia un uccello, avrà valori alti nelle mappe di attivazione che rappresentano caratteristiche di alto livello come le ali o un becco, e così via.

Fondamentalmente, un livello FC guarda quali caratteristiche di alto livello sono maggiormente correlate ad una particolare classe e calcola i prodotti tra i pesi e il livello precedente per ottenere le probabilità corrette per le diverse classi.

 

 

L’articolo ha preso spunto dalle seguenti fonti che ti lascio per maggiori approfondimenti (solo in lingua inglese):

  • Spiegazione della CNN;
  • Architettura delle CNN;
  • Convolutional Neural Network.
  • Rete Neurale, Deep Learning e principali applicazioni
    Rete Neurale, Deep Learning e principali applicazioni
  • Computer Vision: come una macchina riconosce gli oggetti
    Computer Vision: come una macchina riconosce gli oggetti
  • Cos’è il cloud computing e come può semplificare l’analisi big data
    Cos’è il cloud computing e come può semplificare…
  • Cos'è l'Intelligenza Artificiale e perchè se ne parla tanto
    Cos'è l'Intelligenza Artificiale e perchè se ne parla tanto
Share1
Pin
Share
Tweet

Intelligenza Artificiale Computer Vision, Rete Neurale Artificiale, Rete neurale convoluzionale

  • Home
  • Archivio
  • Risorse
  • Newsletter
  • Cerca nel sito

Copyright © 2021 · Lorenzo Govoni - Privacy Policy