Una rete neurale convoluzionale, o CNN, è una rete neurale che cerca piccoli pattern locali e poi li combina in pattern più grandi. Nelle immagini, i primi layer spesso rilevano bordi o angoli, i layer intermedi rilevano texture o parti, e i layer più profondi usano questi segnali per supportare una previsione finale.

L'idea chiave è la condivisione dei pesi. Invece di apprendere un peso separato per ogni coppia pixel-posizione, una CNN riutilizza lo stesso piccolo filtro in molte posizioni. Questo la rende molto meno costosa di un layer denso applicato all'immagine grezza e la aiuta a rilevare lo stesso tipo di pattern in più punti.

Cosa fa una rete neurale convoluzionale

In un layer completamente connesso, ogni output può dipendere da tutti i valori di input contemporaneamente. Una CNN è più strutturata. Usa piccoli kernel, spesso chiamati filtri, che osservano una patch locale alla volta.

Per un input a canale singolo xx e un kernel k×kk \times k KK, un elemento dell'output può essere scritto come

yi,j=m=0k1n=0k1Km,nxi+m,j+n.y_{i,j} = \sum_{m=0}^{k-1} \sum_{n=0}^{k-1} K_{m,n} x_{i+m,j+n}.

Questa è l'idea della somma pesata locale alla base di un layer convoluzionale. In molte librerie di machine learning, l'operazione implementata è tecnicamente una cross-correlazione piuttosto che una convoluzione matematica con kernel ribaltato, ma l'intuizione pratica è la stessa: il kernel scorre sull'input e produce una feature map.

La feature map ti dice dove il pattern appreso compare con maggiore intensità.

Perché i filtri condivisi aiutano

Se lo stesso bordo verticale compare vicino all'angolo in alto a sinistra di un'immagine o vicino al centro, di solito vogliamo che il modello lo noti in entrambi i casi. Una CNN lo rende possibile riutilizzando gli stessi parametri del filtro in posizioni diverse.

Questo ha due effetti pratici:

  • Riduce il numero di parametri appresi rispetto a un layer denso applicato all'immagine grezza.
  • Spinge la rete a rilevare pattern locali ricorrenti invece di memorizzare una sola posizione fissa.

Questo riuso è uno dei motivi per cui le CNN sono diventate efficaci nei compiti sulle immagini.

Com'è fatta un'architettura CNN di base

Una CNN di base segue spesso questo schema:

  1. layer convoluzionale
  2. attivazione come ReLU
  3. pooling o downsampling opzionale
  4. altri blocchi convoluzionali
  5. layer finale di previsione

I primi layer di solito catturano strutture locali semplici. I layer più profondi combinano queste risposte in feature più grandi e più specifiche per il compito.

Il pooling non è obbligatorio, ma quando viene usato riduce le dimensioni spaziali così i layer successivi possono lavorare con una rappresentazione più compatta. Un esempio comune è il max pooling, che mantiene il valore più grande in ogni piccola regione.

Se lo stride è 11 e il padding è 00, allora un input n×nn \times n con un kernel k×kk \times k produce un output (nk+1)×(nk+1)(n-k+1) \times (n-k+1). Questa regola sulle dimensioni è utile per controllare se un esempio svolto ha senso.

Esempio svolto: come si crea una feature map in una CNN

Prendi questa immagine di input 4×44 \times 4:

X=[3300330000330033]X = \begin{bmatrix} 3 & 3 & 0 & 0 \\ 3 & 3 & 0 & 0 \\ 0 & 0 & 3 & 3 \\ 0 & 0 & 3 & 3 \end{bmatrix}

Usa questo kernel 2×22 \times 2:

K=[1111]K = \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix}

Assumi stride 11 e nessun padding. Poiché l'input è 4×44 \times 4 e il kernel è 2×22 \times 2, l'output deve essere 3×33 \times 3. Ogni elemento dell'output è la somma di una patch 2×22 \times 2 perché ogni elemento del kernel è uguale a 11.

Il valore di output in alto a sinistra è

y1,1=3(1)+3(1)+3(1)+3(1)=12.y_{1,1} = 3(1) + 3(1) + 3(1) + 3(1) = 12.

La patch un passo più a destra è

[3030],\begin{bmatrix} 3 & 0 \\ 3 & 0 \end{bmatrix},

quindi

y1,2=3+0+3+0=6.y_{1,2} = 3 + 0 + 3 + 0 = 6.

Calcolando tutte le posizioni valide si ottiene

Y=[12606660612].Y = \begin{bmatrix} 12 & 6 & 0 \\ 6 & 6 & 6 \\ 0 & 6 & 12 \end{bmatrix}.

Questo output è la feature map. I valori grandi mostrano dove il kernel ha trovato una corrispondenza forte. Qui il filtro risponde più intensamente dove compare un blocco luminoso completo 2×22 \times 2.

Se ora applichi ReLU, non cambia nulla perché tutti gli elementi sono già non negativi. Se poi usi max pooling 2×22 \times 2 con stride 11, l'output dopo il pooling diventa

[126612].\begin{bmatrix} 12 & 6 \\ 6 & 12 \end{bmatrix}.

Questo non crea nuove informazioni. Mantiene le risposte vicine più forti e riduce la griglia spaziale.

Questo esempio è semplice, ma mostra chiaramente il meccanismo centrale: un filtro scorre, calcola somme pesate locali e crea una mappa di dove compare un pattern.

Cosa apprende una CNN durante l'addestramento

Il kernel sopra è stato scelto a mano, ma in una CNN reale i valori del filtro vengono appresi dai dati. L'addestramento regola questi valori in modo che le feature map risultanti diventino utili per il compito.

Se il compito è la classificazione di immagini, la rete apprende filtri che aiutano a separare le classi. Se il compito è la segmentazione o il rilevamento, i layer successivi vengono invece addestrati per quegli output. Il meccanismo di base è lo stesso: forward pass, loss, backpropagation, aggiornamento dei parametri.

Errori comuni quando si studiano le CNN

Pensare che una CNN significhi solo "classificatore di immagini"

Le immagini sono l'esempio standard, ma le CNN riguardano in realtà la struttura locale e i filtri condivisi. Se i valori vicini contano, la stessa idea può essere utile anche oltre le immagini.

Supporre che il pooling sia sempre necessario

È comune, non universale. Alcune architetture riducono la dimensione spaziale con convoluzioni con stride, e altre mantengono più a lungo un maggior dettaglio spaziale.

Ignorare stride e padding

La dimensione della feature map dipende da queste scelte. Se cambi stride o padding, cambi non solo la forma dell'output, ma anche quali vicinati locali ogni unità può vedere.

Trattare il layer come se fosse solo una formula

La formula della convoluzione conta, ma conta anche l'architettura. Una CNN funziona perché convoluzione, attivazione, sovrapposizione dei layer e addestramento lavorano insieme.

Quando le reti neurali convoluzionali sono utili

Le CNN sono ampiamente usate nei compiti di computer vision come classificazione di immagini, object detection e segmentazione. Compaiono anche in alcuni contesti di elaborazione dei segnali e delle sequenze in cui i pattern locali sono significativi.

Sono particolarmente utili quando l'input ha una struttura evidente a griglia o di vicinato ordinato. Se questa condizione è debole, un'architettura diversa può essere più adatta.

Un modello mentale che rende le CNN più facili da capire

Pensa a una CNN come a un rilevatore di pattern che parte da elementi piccoli e diventa più astratto con la profondità. Un layer chiede: "Questo piccolo pattern compare qui?" I layer successivi chiedono: "Questi pattern più semplici si combinano in qualcosa di più significativo?"

Per questo le CNN sono più facili da capire quando ti concentri sulle feature map, non solo sulla parola "convoluzione".

Prova una tua variante

Mantieni lo stesso input, ma cambia il kernel in

[1111].\begin{bmatrix} 1 & -1 \\ 1 & -1 \end{bmatrix}.

Ricalcola la feature map e osserva quali regioni producono ora grandi risposte positive o negative. Questo piccolo cambiamento rende molto più chiaro come filtri diversi rilevino pattern diversi.

Hai bisogno di aiuto con un problema?

Carica la tua domanda e ottieni una soluzione verificata, passo dopo passo, in pochi secondi.

Apri GPAI Solver →