MimìrCast: le novità sull’AI ogni giorno
Ascolta il podcast ➔
Reti neurali convoluzionali: perché trovano l'oggetto ovunque ma non se lo ruoti

Reti neurali convoluzionali: perché trovano l’oggetto ovunque ma non se lo ruoti

Apri Google Foto, digiti «cane» nella barra di ricerca e ti tornano quarantatré scatti. Il cane in mezzo all’inquadratura, il cane in un angolo, il cane piccolissimo in fondo a una spiaggia, il cane controluce di cui si vede solo il profilo. Nessuna di quelle foto è taggata. Nessuno ha scritto «qui c’è un cane, in alto a destra».

Poi fai una prova stupida: prendi la foto migliore, la ruoti di 90 gradi e la reimporti. Su molti sistemi il cane sparisce dai risultati. La macchina che trovava l’animale in qualunque punto dell’immagine non lo trova più se lo giri di un quarto di giro. È il primo indizio su come sono fatte le reti neurali convoluzionali che stanno sotto a quella ricerca.

Quell’asimmetria, la posizione non conta, l’orientamento sì, non è un difetto casuale. È l’impronta precisa del meccanismo che sta sotto: le reti neurali convoluzionali. E si può contare, pesa 1.792 numeri contro 150 milioni, e si vede in un foglio di calcolo.

In questo articolo scoprirai:

  • Un esempio di rete neurale: sposta l’oggetto ma non ruotarlo
  • Cos’è una rete neurale convoluzionale e come funziona il filtro
  • Cosa significa convoluzionale: il peso riusato che vale milioni
  • Come le reti neurali convoluzionali gestiscono i dati immagine
  • I diversi tipi di reti neurali come scommesse diverse sui dati

Un esempio di rete neurale: sposta l’oggetto ma non ruotarlo

Il comportamento è riproducibile su qualunque servizio di questo tipo. Prova con Apple Foto, con Google Foto, con la ricerca visuale di Amazon: lo spostamento dell’oggetto nell’inquadratura è quasi gratis, la rotazione costa carissima. Sposta il soggetto di duecento pixel e la risposta non cambia; ruotalo di 45 gradi e la confidenza crolla. Lo stesso vale per il riquadro «sfoca lo sfondo» di una videochiamata: funziona se sei di fronte alla webcam, comincia a mangiarti un orecchio se inclini la testa oltre un certo angolo.

Reti neurali convoluzionali alla prova: spostamento contro rotazione

È la stessa cosa che vedi quando un controllo qualità industriale riconosce il pezzo difettoso in qualunque posizione del nastro trasportatore, ma va ritarato se la telecamera viene montata storta. Un sistema che «capisse» l’oggetto non dovrebbe avere questo problema. Un sistema costruito su un’assunzione precisa su come sono fatte le immagini, invece, ce l’ha per forza, e l’assunzione è una sola.

Cos’è una rete neurale convoluzionale e come funziona il filtro

Una rete neurale convoluzionale non guarda l’immagine tutta insieme: fa passare sopra i pixel una piccola finestra di pochi numeri, tipicamente 3×3, e in ogni posizione calcola la somma dei pixel moltiplicati per quei numeri, producendo una nuova griglia di valori chiamata mappa di attivazione. I pesi della finestra sono gli stessi in tutte le posizioni: è questo riuso, e non un ragionamento sull’oggetto, che rende la risposta indipendente da dove si trova la cosa nell’inquadratura.

Il conto lo puoi fare a mano. Prendi un filtro classico per i bordi verticali, la matrice con −1, 0, +1 sulla prima riga, −2, 0, +2 sulla seconda, −1, 0, +1 sulla terza, e appoggialo su due punti diversi della stessa immagine.

Lo stesso filtro 3×3 applicato in due punti della stessa immagine: su una zona uniforme il risultato è 0, su un bordo è 760 Un pezzo di immagine (luminosità dei pixel) Il filtro 3×3 gli stessi 9 pesi, sempre Uscita 10101010200200 10101010200200 10101010200200 posizione A posizione B −10+1 −20+2 −10+1 0 760 niente bordo bordo trovato A: (−1·10 + 0·10 + 1·10) + (−2·10 + 0·10 + 2·10) + (−1·10 + 0·10 + 1·10) = 0 + 0 + 0 = 0 B: (−1·10 + 0·200 + 1·200) + (−2·10 + 0·200 + 2·200) + (−1·10 + 0·200 + 1·200) = 190 + 380 + 190 = 760 Gli stessi 9 pesi, riusati in ogni posizione: è per questo che dove sta l’oggetto non conta.
Lo stesso filtro, due posizioni, due risultati. Il filtro non sa dove si trova: sa solo cosa ha sotto.

Sulla zona uniforme il risultato è zero. Sul bordo è 760. Il filtro non ha idea di essere «in alto a destra»: ha una regola locale e la applica dove capita. Se il bordo si sposta, si sposta anche il 760, e il resto della rete continua a vederlo. In una rete addestrata quei nove numeri non li scrive nessuno: li trova la discesa del gradiente, provando e correggendo.

Convoluzionale: cosa significa, letteralmente

«Convoluzione» è il nome matematico di quell’operazione: far scorrere una funzione sopra un’altra e integrare il prodotto. Nel caso delle immagini è esattamente il conto qui sopra, ripetuto in ogni posizione, moltiplicazioni e somme, cioè algebra lineare e nient’altro. «Convoluzionale» quindi non descrive un tipo di intelligenza: descrive la forma del calcolo. È la stessa differenza che passa tra dire «questo motore è potente» e dire «questo motore è a quattro tempi».

Cosa significa convoluzionale: il peso riusato che vale milioni

Ecco perché quel riuso non è un dettaglio elegante, ma la ragione per cui la visione artificiale esiste. Prendi l’ingresso standard di quasi tutte le reti da immagine: 224 × 224 pixel, tre canali di colore. Sono 224 × 224 × 3 = 150.528 numeri in entrata.

Ora due modi di trattarli.

  • Strato pienamente connesso (ogni ingresso collegato a ogni uscita), con 1.000 uscite: 150.528 × 1.000 + 1.000 bias = 150.529.000 pesi. Centocinquanta milioni di numeri da imparare, per un solo strato.
  • Strato convoluzionale con 64 filtri 3×3 sui tre canali: 3 × 3 × 3 × 64 + 64 bias = 1.792 pesi.

Il rapporto è 150.529.000 ÷ 1.792 ≈ 84.000 volte meno parametri. E il lavoro non è sparito: quei 1.792 pesi, applicati in ognuna delle 224 × 224 = 50.176 posizioni, fanno 1.728 × 50.176 = 86.704.128 moltiplicazioni. Ottantasei milioni di conti, ma sempre con le stesse 1.728 cifre. È da questa sproporzione, tanto calcolo, pochissima memoria, che nasce tutto il resto: si può andare in profondità senza far esplodere il numero di cose da imparare.

Come contare i parametri di uno strato convoluzionale, a mano

La formula è una sola: altezza filtro × larghezza filtro × canali in ingresso × numero di filtri, più un bias per filtro. La documentazione ufficiale di Keras riporta un esempio verificabile in tre righe: un ingresso di forma (4, 10, 10, 128) passato a Conv2D(32, 3) restituisce (4, 8, 8, 32), perché con padding valid e passo 1 l’uscita è 10 − 3 + 1 = 8, e i valori di default sono appunto strides=(1,1), padding="valid", use_bias=True (documentazione Keras, layer Conv2D). I pesi di quello strato sono 3 × 3 × 128 × 32 + 32 = 36.896. Chiamando model.summary() trovi lo stesso numero stampato: è un conto che puoi rifare tu in un minuto.

Come le reti neurali convoluzionali gestiscono i dati immagine

Un filtro 3×3 vede tre pixel. Il secondo strato vede tre uscite del primo, cioè cinque pixel originali. Ogni pooling, l’operazione che dimezza la griglia tenendo il valore massimo di ogni quadratino, raddoppia il passo con cui lo sguardo si allarga. La ricorrenza è semplice: campo recettivo nuovo = campo recettivo vecchio + (dimensione filtro − 1) × passo accumulato, con il passo che si moltiplica per lo stride a ogni pooling.

Applicandola all’architettura VGG-16, 16 strati con pesi e filtri 3×3 in tutta la rete, quella descritta in Very Deep Convolutional Networks for Large-Scale Image Recognition, dove gli autori dichiarano di avere valutato «reti di profondità crescente con un’architettura a filtri di convoluzione molto piccoli, 3×3», vengono fuori questi numeri.

Schema VGG-16: la griglia si stringe, i canali aumentano, il campo recettivo passa da 5 a 212 pixel e i pesi si concentrano negli strati densi VGG-16, ingresso 224×224×3: la griglia si stringe, lo sguardo si allarga, i pesi si spostano in fondo 224×224×3224×224×6456×56×2567×7×5124.0961.000 ingressopixel RGB conv 3×3blocco 1 conv + poolblocchi 2, 3 conv + poolblocchi 4, 5 2 stratidensi uscita1.000 classi pesi dello strato , 38.7201.696.76812.979.200119.545.8564.097.000 campo recettivo di un neurone 1 px5 px40 px212 pxtutta l’immagine, 13 strati convoluzionali = 14.714.688 pesi · 3 strati densi = 123.642.856 pesi · totale 138.357.544 Il 10,6% dei pesi fa tutto il lavoro di visione. L’89,4% serve a decidere alla fine.
I tredici strati convoluzionali di VGG-16 pesano 14,7 milioni di parametri. I tre strati densi finali ne pesano 123,6. Somma: 138,4 milioni.

Il numero da tenere è 212 pixel su un’immagine di 224

Il numero da tenere è 212 pixel su un’immagine di 224: alla fine della pila convoluzionale, un singolo neurone guarda praticamente tutto il fotogramma, ma ci è arrivato accumulando filtri da tre pixel, non collegandosi a tutti i pixel insieme. E il secondo numero è ancora più eloquente: un solo strato denso, quello che prende i 7 × 7 × 512 = 25.088 valori finali e li porta a 4.096, pesa 25.088 × 4.096 = 102.760.448 parametri, quasi sette volte l’intera parte convoluzionale. È esattamente il motivo per cui le architetture successive hanno buttato via quello strato.

Che tipo di dati gestiscono bene le reti convoluzionali (oltre alle immagini)

L’assunzione della convoluzione non riguarda le immagini: riguarda i dati in cui ciò che conta è locale e può stare in qualunque posizione. Per questo funziona anche altrove. Un segnale audio trasformato in spettrogramma è una griglia di numeri, e un filtro convoluzionale ci trova un attacco di percussione indipendentemente dal secondo in cui accade: è il meccanismo dietro il rilevamento della parola di attivazione su un altoparlante smart, dove piccole reti convoluzionali scorrono proprio sullo spettrogramma del microfono (Hello Edge: Keyword Spotting on Microcontrollers). Una serie storica di sensori è una griglia a una dimensione. Una sequenza di DNA anche. Non funziona, invece, su dati tabellari, dove la colonna 3 e la colonna 4 non sono «vicine» in alcun senso utile, e far scorrere un filtro su di esse è un’ipotesi falsa.

I diversi tipi di reti neurali come scommesse diverse sui dati

La domanda «quali sono i diversi tipi di reti neurali» ha una risposta noiosa se la si dà per elenco, e una risposta utile se la si dà per assunzione incorporata. Ogni famiglia di architetture è una scommessa su come sono fatti i dati, e quella scommessa è ciò che le fa vincere o perdere.

  • Rete pienamente connessa: nessuna scommessa. Ogni ingresso può parlare con ogni uscita. Massima flessibilità, costo in parametri insostenibile, i 150 milioni del conto di prima.
  • Rete convoluzionale: scommette che i pattern siano locali e ripetibili in qualunque posizione. Paga in flessibilità (la rotazione la spiazza), incassa in parametri.
  • Rete ricorrente (RNN, LSTM): scommette che il dato sia una sequenza ordinata, e mantiene uno stato che passa da un elemento al successivo. Ottima ipotesi per il testo e il parlato, con un difetto duro: lo stato va aggiornato in ordine, quindi non si parallelizza.
  • Transformer: butta via sia la località sia l’ordine obbligato, e lascia che ogni elemento pesi tutti gli altri tramite l’attenzione. Costa più calcolo, ma si parallelizza e non ha un limite di distanza. È il salto che abbiamo raccontato in dettaglio parlando di cosa cambia nei transformer rispetto a RNN e LSTM.

Reti convoluzionali contro Vision Transformer: la partita non è chiusa

Dal 2020 i transformer sono arrivati anche sulle immagini, e per un paio d’anni è sembrato che la convoluzione fosse archeologia. Nel 2022 il lavoro A ConvNet for the 2020s ha rimesso le cose in ordine: gli autori aprono riconoscendo che «i “ruggenti anni Venti” del riconoscimento visivo sono cominciati con l’introduzione dei Vision Transformer, che hanno rapidamente scalzato le ConvNet come modello allo stato dell’arte per la classificazione di immagini», e poi mostrano che una rete costruita con moduli convoluzionali standard, riprogettata con le ricette moderne, arriva all’87,8% di accuratezza top-1 su ImageNet e batte gli Swin Transformer su rilevamento oggetti e segmentazione. Il pezzo che aveva spostato l’equilibrio non era l’attenzione in sé, ma il modo di allenare. Vale anche al contrario: modelli multimodali come CLIP sono nati proprio dal tentativo di superare i limiti del classificatore convoluzionale addestrato su etichette fisse.

I limiti delle reti neurali convoluzionali che i manuali saltano

Qui va la riga che nessuna risposta automatica vi darà, perché smentisce a metà tutto quello che avete letto sopra.

Primo: la famosa «invarianza alla traslazione» delle reti convoluzionali, in pratica, non c’è. Il riuso dei pesi la garantirebbe, ma il pooling con passo 2 la rompe: sottocampionare senza filtrare prima viola il teorema del campionamento e introduce aliasing. Richard Zhang lo dice in apertura del suo lavoro all’ICML 2019, Making Convolutional Networks Shift-Invariant Again: «le reti convoluzionali moderne non sono invarianti alla traslazione, perché piccoli spostamenti dell’ingresso possono causare cambiamenti drastici nell’uscita». Spostare la stessa immagine di un pixel può cambiare l’etichetta prevista. Il rimedio che propone, un filtro passa-basso prima di ogni sottocampionamento, è un pezzo di elaborazione dei segnali degli anni Sessanta, «immeritatamente trascurato nelle reti moderne».

Reti convoluzionali e bias di texture: cosa guarda davvero il modello

Secondo: la rete probabilmente non riconosce la forma che credete. Geirhos e colleghi, in ImageNet-trained CNNs are biased towards texture (ICLR 2019), hanno costruito immagini in cui forma e texture dicono cose diverse, la sagoma di un gatto con la pelle di un elefante, e le hanno mostrate a reti e a persone, su 48.560 prove psicofisiche con 97 osservatori umani. Risultato: «le CNN addestrate su ImageNet sono fortemente inclini a riconoscere le texture piuttosto che le forme, in netto contrasto con l’evidenza comportamentale umana». Quando il vostro classificatore dice «leopardo» guardando un divano a chiazze, non ha sbagliato a caso: ha guardato la cosa su cui è stato premiato per anni.

Ed è qui la falsificazione da tenere a mente: la spiegazione di questo articolo vale finché la scommessa della convoluzione è vera per i vostri dati. Se il soggetto può comparire in qualunque punto ma sempre con lo stesso orientamento, radiografie, ispezione su nastro, documenti scansionati, l’ipotesi tiene e vi regala quel fattore 84.000. Se l’orientamento è libero, o se ciò che conta è una relazione fra due parti lontane dell’immagine, l’ipotesi è sbagliata e nessuna profondità in più la salva: serve un’altra architettura, o dei dati aumentati con le rotazioni. Prima di scegliere, vale la pena aver capito la regola di base che una rete neurale applica e come si incastra nel percorso completo che va dal dato che entra alla risposta che esce.

Questa è anche la ragione per cui, in azienda, il pezzo difficile non è quasi mai il modello. È capire se il proprio problema assomiglia a quello per cui l’architettura è stata pensata, una domanda che si risolve guardando i dati veri, non il catalogo. È il motivo per cui accanto all’agente mimir.bot non vendiamo soltanto lo strumento: c’è un onboarding assistito in cui quella domanda la si fa insieme, prima di scrivere una riga di codice.

Fonti:

Domande frequenti

Cosa significa «convoluzionale»?

Indica l'operazione matematica di convoluzione: far scorrere un piccolo filtro sopra il dato e calcolare, in ogni posizione, la somma dei valori moltiplicati per i pesi del filtro. È la forma del calcolo, non una proprietà dell'intelligenza del modello.

Qual è la differenza fra CNN e rete neurale ricorrente?

La CNN assume che i pattern siano locali e possano stare in qualunque posizione, e riusa gli stessi pesi in tutte le posizioni. La rete ricorrente assume che il dato sia una sequenza ordinata e mantiene uno stato che passa da un elemento al successivo: più adatta al linguaggio, ma non parallelizzabile.

Quanti parametri ha una CNN tipica?

Dipende da dove stanno. In VGG-16 i tredici strati convoluzionali sommano 14.714.688 pesi, i tre strati densi finali 123.638.760, per un totale di 138.353.448. Le architetture successive hanno ridotto drasticamente la seconda voce.

Le CNN servono ancora, con i transformer?

Sì. Sono ancora l'opzione più efficiente dove i dati sono locali e la latenza conta: telefoni, sensori, controllo qualità. Nel 2022 ConvNeXt ha mostrato che, riprogettate con le ricette di addestramento moderne, competono con i Vision Transformer anche sui benchmark grandi.

Tabella dei contenuti
Articoli correlati:
Vuoi che l'AI diventi il tuo motore di valore più potente?

Ti accompagniamo noi con Mimír AI Agent.