Corso accelerato di reti neurali convoluzionali per l'apprendimento automatico
Le reti neurali convoluzionali sono una potente tecnica di rete neurale artificiale.
Queste reti preservano la struttura spaziale del problema e sono state sviluppate per compiti di riconoscimento di oggetti come il riconoscimento di cifre scritte a mano. Sono popolari perché le persone possono ottenere risultati all’avanguardia su impegnative attività di visione artificiale e di elaborazione del linguaggio naturale.
In questo post scoprirai le reti neurali convoluzionali per il deep learning, chiamate anche ConvNets o CNN. Dopo aver completato questo corso intensivo, saprai:
- Gli elementi costitutivi utilizzati nelle CNN, come i livelli convoluzionali e i livelli pool
- Come gli elementi costitutivi si incastrano con un breve esempio
- Best practice per la configurazione delle CNN nelle attività di riconoscimento degli oggetti
- Riferimenti per reti allo stato dell'arte applicate a problemi complessi di machine learning
Avvia il tuo progetto con il mio nuovo libro Deep Learning With Python, che include tutorial passo passo e i file codice sorgente Python per tutti esempi.
Cominciamo.
Il caso delle reti neurali convoluzionali
Dato un set di dati di immagini in scala di grigi con dimensioni standardizzate di 32×32 pixel ciascuna, una rete neurale feed-forward tradizionale richiederebbe 1024 pesi di input (più un bias).
Ciò è abbastanza giusto, ma l'appiattimento della matrice dei pixel dell'immagine in un lungo vettore di valori di pixel perde tutta la struttura spaziale dell'immagine. A meno che tutte le immagini non vengano ridimensionate perfettamente, la rete neurale avrà grandi difficoltà a risolvere il problema.
Le reti neurali convoluzionali si aspettano e preservano la relazione spaziale tra i pixel apprendendo le rappresentazioni delle caratteristiche interne utilizzando piccoli quadrati di dati di input. Le funzionalità vengono apprese e utilizzate nell'intera immagine, consentendo agli oggetti nelle immagini di essere spostati o traslati nella scena ma comunque rilevabili dalla rete.
Questo è il motivo per cui la rete è così utile per il riconoscimento degli oggetti nelle fotografie, individuando cifre, volti, oggetti e così via con orientamenti diversi.
In sintesi, di seguito sono riportati alcuni vantaggi derivanti dall’utilizzo delle reti neurali convoluzionali:
- Usano meno parametri (pesi) per apprendere rispetto a una rete completamente connessa
- Sono progettati per essere invarianti rispetto alla posizione dell'oggetto e alla distorsione nella scena
- Apprendono e generalizzano automaticamente le funzionalità dal dominio di input
Elementi costitutivi delle reti neurali convoluzionali
Esistono tre tipi di strati in una rete neurale convoluzionale:
- Strati convoluzionali
- Livelli di raggruppamento
- Livelli completamente connessi
1. Strati convoluzionali
I livelli convoluzionali sono costituiti da filtri e mappe di caratteristiche.
Filtri
I filtri sono i “neuroni” dello strato. Prendono input ponderati e producono un valore. La dimensione dell'input è un quadrato fisso chiamato patch o campo ricettivo.
Se il livello convoluzionale è un livello di input, la patch di input corrisponderà ai valori dei pixel. Se si trova più in profondità nell'architettura di rete, il livello convoluzionale prenderà input da una mappa delle caratteristiche del livello precedente.
Mappe delle caratteristiche
La mappa delle caratteristiche è l'output di un filtro applicato al livello precedente.
Un dato filtro viene disegnato sull'intero livello precedente, spostato un pixel alla volta. Ogni posizione determina l'attivazione del neurone e l'output viene raccolto nella mappa delle caratteristiche. Puoi vedere che se il campo ricettivo viene spostato di un pixel da un'attivazione all'altra, il campo si sovrapporrà all'attivazione precedente in base ai valori di input (larghezza del campo - 1).
Imbottitura zero
La distanza di spostamento di un filtro attraverso l'input dal livello precedente per ciascuna attivazione viene definita passo.
Se la dimensione dello strato precedente non è nettamente divisibile per la dimensione del campo recettivo del filtro e per la dimensione del passo, allora è possibile che il campo recettivo tenti di leggere il bordo della mappa delle caratteristiche di input. In questo caso, tecniche come il riempimento zero possono essere utilizzate per inventare input fittizi da leggere nel campo recettivo.
2. Livelli di raggruppamento
I livelli di pooling sottocampionano la mappa delle caratteristiche del livello precedente.
I livelli di pooling seguono una sequenza di uno o più livelli convoluzionali e hanno lo scopo di consolidare le caratteristiche apprese ed espresse nella mappa delle caratteristiche del livello precedente. In quanto tale, il pooling può essere considerato una tecnica per comprimere o generalizzare le rappresentazioni delle caratteristiche e in generale ridurre l'adattamento eccessivo dei dati di addestramento da parte del modello.
Anch'essi hanno un campo recettivo, spesso molto più piccolo dello strato convoluzionale. Inoltre, il passo o il numero di input con cui viene spostato il campo recettivo per ciascuna attivazione è spesso uguale alla dimensione del campo recettivo per evitare qualsiasi sovrapposizione.
Il raggruppamento dei livelli è spesso molto semplice, poiché prende la media o il massimo del valore di input per creare la propria mappa delle caratteristiche.
Per ulteriori informazioni sul raggruppamento dei livelli, vedere il post:
- Una breve introduzione al pooling dei livelli per le reti neurali convoluzionali
3. Livelli completamente connessi
I livelli completamente connessi sono il normale livello di rete neurale flat feed-forward.
Questi strati possono avere una funzione di attivazione non lineare o un'attivazione softmax per produrre probabilità di previsioni di classe.
I livelli completamente connessi vengono utilizzati alla fine della rete dopo che l'estrazione e il consolidamento delle caratteristiche sono stati eseguiti dai livelli convoluzionali e di pooling. Vengono utilizzati per creare combinazioni non lineari finali di caratteristiche e per fare previsioni da parte della rete.
Esempio lavorato di una rete neurale convoluzionale
Ora conosci i livelli convoluzionali, di pooling e completamente connessi. Rendiamolo più concreto esaminando il modo in cui questi tre livelli possono essere collegati insieme.
1. Dati di input dell'immagine
Supponiamo che tu abbia un set di dati di immagini in scala di grigi. Ciascuna immagine ha la stessa dimensione di 32 pixel di larghezza e 32 pixel di altezza e i valori dei pixel sono compresi tra 0 e 255, ad esempio una matrice di 32x32x1 o 1024 valori di pixel.
I dati di input dell'immagine sono espressi come matrice tridimensionale di larghezza * altezza * canali. Se nell'esempio utilizzassi immagini a colori, avresti tre canali per i valori dei pixel rosso, verde e blu, ad esempio 32x32x3.
2. Strato convoluzionale
Definisci uno strato convoluzionale con dieci filtri, un campo recettivo largo 5 pixel e alto 5 pixel e una lunghezza del passo pari a 1.
Poiché ciascun filtro può ricevere input solo da (ovvero, "vedere") 5×5 o 25 pixel alla volta, è possibile calcolare che ciascuno richiederà 25 + 1 pesi di input (più 1 per l'input bias).
Trascinando il campo ricettivo 5×5 sui dati dell'immagine di input con una larghezza del passo pari a 1 si otterrà una mappa delle caratteristiche di valori di output 28×28 o 784 attivazioni distinte per immagine.
Hai dieci filtri, quindi verranno create dieci diverse mappe di caratteristiche 28×28 o 7.840 output per un'immagine.
Infine, sai di avere 26 input per filtro, dieci filtri e valori di output 28×28 da calcolare per filtro. Pertanto, hai un totale di 26x10x28x28 o 203.840 "connessioni" nel tuo livello convoluzionale se vuoi esprimerlo usando la nomenclatura tradizionale delle reti neurali.
Gli strati convoluzionali fanno uso anche di una funzione di trasferimento non lineare come parte dell'attivazione, e la funzione di attivazione del raddrizzatore è quella comunemente utilizzata per impostazione predefinita.
3. Livello della piscina
È possibile definire un livello di pooling con un campo ricettivo con una larghezza di 2 ingressi e un'altezza di 2 ingressi. Puoi anche usare un passo di 2 per assicurarti che non ci siano sovrapposizioni.
Ciò si traduce in mappe di caratteristiche che sono la metà delle dimensioni delle mappe di caratteristiche di input, da dieci diverse mappe di caratteristiche 28×28 come input a dieci diverse mappe di caratteristiche 14×14 come output.
Utilizzerai un'operazione max() per ciascun campo ricettivo in modo che l'attivazione rappresenti il valore di input massimo.
4. Livello completamente connesso
Infine, puoi appiattire le mappe delle caratteristiche quadrate in un tradizionale livello piatto e completamente connesso.
Puoi definire il livello completamente connesso con 200 neuroni nascosti, ciascuno con 10x14x14 connessioni di input o 1960 + 1 pesi per neurone. Si tratta di un totale di 392.200 connessioni e pesi da apprendere in questo livello.
È possibile utilizzare una funzione di trasferimento sigmoide o softmax per generare direttamente le probabilità dei valori delle classi.
Best practice per le reti neurali convoluzionali
Ora che conosci gli elementi costitutivi di una rete neurale convoluzionale e come i livelli si tengono insieme, puoi rivedere alcune best practice da considerare quando le applichi.
- Dimensioni del campo ricettivo di input: l'impostazione predefinita è 2D per le immagini, ma potrebbe essere 1D per le parole in una frase o 3D per un video che aggiunge una dimensione temporale.
- Dimensione del campo ricettivo: la patch dovrebbe essere la più piccola possibile ma abbastanza grande da "vedere" le funzionalità nei dati di input. È comune utilizzare 3×3 su immagini piccole e 5×5 o 7×7 e oltre su immagini di dimensioni più grandi.
- Larghezza passo: utilizza il passo predefinito pari a 1. È facile da capire e non è necessario il riempimento per gestire il campo recettivo che cade dal bordo delle immagini. Questo potrebbe essere aumentato a 2 o più per immagini più grandi.
- Numero di filtri: i filtri sono i rilevatori di funzionalità. In genere, vengono utilizzati meno filtri nello strato di input e sempre più filtri vengono utilizzati negli strati più profondi.
- Padding: impostato su zero e chiamato riempimento zero durante la lettura di dati non di input. Ciò è utile quando non puoi o non vuoi standardizzare le dimensioni dell'immagine di input o quando vuoi utilizzare il campo ricettivo e le dimensioni del passo che non dividono chiaramente le dimensioni dell'immagine di input.
- Pooling: il pooling è un processo distruttivo o di generalizzazione volto a ridurre l'overfitting. Il campo ricettivo è quasi sempre impostato a 2×2 con un passo pari a 2 per scartare il 75% delle attivazioni dall'output dello strato precedente.
- Preparazione dei dati: valuta la possibilità di standardizzare i dati di input, sia le dimensioni delle immagini che i valori dei pixel.
- Architettura modello: è prassi comune creare uno schema di livelli nell'architettura di rete. Potrebbe trattarsi di uno, due o un certo numero di livelli convoluzionali seguiti da uno strato di pooling. Questa struttura può poi essere ripetuta una o più volte. Infine, gli strati completamente connessi vengono spesso utilizzati solo all'estremità di uscita e possono essere impilati uno, due o più in profondità.
- Dropout: le CNN hanno l'abitudine di sovradimensionarsi, anche con livelli di pooling. Dovrebbe essere utilizzato il dropout, ad esempio tra livelli completamente connessi e forse dopo aver raggruppato i livelli.
Conosci altre buone pratiche per l'utilizzo delle CNN?
Fatemelo sapere nei commenti.
Ulteriori letture sulle reti neurali convoluzionali
Hai solo scalfito la superficie delle reti neurali convoluzionali. Il campo si sta muovendo molto velocemente e vengono discusse e utilizzate continuamente architetture e tecniche nuove e interessanti.
Se stai cercando una comprensione più profonda della tecnica, dai un'occhiata all'articolo fondamentale di LeCun et al. intitolato "Apprendimento basato sul gradiente applicato al riconoscimento dei documenti" [PDF]. In esso, introducono LeNet applicato al riconoscimento delle cifre scritte a mano e spiegano attentamente i livelli e come è connessa la rete.
Ci sono molti tutorial e discussioni sulle CNN sul web. Di seguito sono elencati alcuni esempi di scelte. Personalmente trovo utili le immagini esplicative nei post solo dopo aver capito come funziona la rete. Molte delle spiegazioni sono confuse e in caso di dubbio ti rimandano all’articolo di LeCun.
- Reti convoluzionali in DeepLearning4J
- Modello di Reti Convoluzionali nel corso Stanford CS231n
- Reti convoluzionali e applicazioni nella visione [PDF]
- Capitolo 6 nel libro aperto Deep Learning di Michael Nielsen
- Reti neurali convoluzionali VGG pratiche da Oxford
- Comprendere le reti neurali convoluzionali per la PNL di Denny Britz
Riepilogo
In questo post hai scoperto le reti neurali convoluzionali. Hai imparato a conoscere:
- Perché le CNN sono necessarie per preservare la struttura spaziale nei dati di input e i vantaggi che offrono
- Gli elementi costitutivi della CNN includono livelli convoluzionali, di pooling e completamente connessi.
- Come gli strati di una CNN stanno insieme
- Migliori pratiche quando applichi una CNN ai tuoi problemi
Hai qualche domanda sulle reti neurali convoluzionali o su questo post? Poni le tue domande nei commenti e farò del mio meglio per rispondere.