Esercizio - Dimensioni e parametri di una CNN
Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.
In questa pagina 5
Testo. Una CNN riceve immagini a colori ed è composta da:
- Conv filtri , stride , padding nullo (valid), ReLU;
- MaxPool , stride ;
- Conv filtri , stride , padding same (), ReLU;
- MaxPool , stride ;
- Flatten;
- Dense con ReLU;
- Dense con softmax.
Si calcolino la forma dell'uscita e il numero di parametri di ogni strato, il totale, il campo recettivo dopo il secondo strato convolutivo (considerando anche il primo pooling) e si dica cosa cambierebbe usando stride nella seconda convoluzione. Si calcolino infine i parametri del primo strato di AlexNet.
Teoria usata: Reti neurali convolutive (CNN)approfondimento: non nel programma di Telecomunicazioni. Una rete convolutiva (CNN) sostituisce gli strati densi con filtri piccoli che scorrono sull'immagine: ogni neurone vede solo una patch locale (campo recettivo) e i pesi del filtro sono condivisi in tutta l'immagine, quindi i parametri non dipendono dalla dimensione dell'immagine ($K^2C_{in}C_{out}+C_{out}$ per strato) e si conserva l'informazione spaziale. Dimensione dell'uscita: $\lfloor(W-K+2P)/S\rfloor+1$. Pooling (max 2x2, stride 2) sottocampiona e dà invarianza locale; i filtri 1x1 riducono i canali; struttura tipica CONV+ReLU, POOL, ..., FLATTEN, FC, SOFTMAX, addestrata con cross-entropy e backpropagation. Tre strati 3x3 hanno il campo recettivo di un 7x7 con meno parametri e più non linearità (VGG). Architetture: LeNet, AlexNet (ReLU, dropout, data augmentation), VGG, GoogLeNet (moduli Inception), ResNet (blocchi residui $H(x)=F(x)+x$), EfficientNet. Nel lab: CNN su Fashion-MNIST (241 546 parametri) e su CIFAR-10 (122 570).Reti neurali convolutive (CNN) →, Reti neurali - neuroni e funzioni di attivazioneUn neurone calcola $\hat y=g(w_0+w^\top x)$: somma pesata degli ingressi più bias, poi una funzione di attivazione $g$ non lineare (Perceptron a soglia, sigmoide, tanh, ReLU e varianti). Senza non linearità ogni rete è equivalente a un solo modello lineare. Una rete feed-forward impila strati di neuroni: $a^{(k)}=g(W^{(k)}a^{(k-1)}+b^{(k)})$; con uno strato nascosto è già un approssimatore universale, ma più strati rappresentano funzioni complesse con molti meno neuroni e imparano feature gerarchiche (bordi, parti, oggetti). Lo strato di uscita e la loss si scelgono dal compito: lineare+MSE (regressione), sigmoide+cross-entropy binaria, softmax+cross-entropy (multiclasse). Il numero di parametri di uno strato denso è $n_{in}n_{out}+n_{out}$. Nel lab (Keras, MNIST) una rete 784-512-10 ha 407 050 parametri e supera il 98% di accuratezza.Reti neurali - neuroni e funzioni di attivazione →.
Formule: lato dell'uscita ; parametri di una convoluzione ; pooling, flatten e ReLU non hanno parametri.
Strato per strato
1. Conv , filtri. : uscita . Parametri: ogni filtro vede tutti i canali, pesi più bias, per filtri: .
2. MaxPool. : . Parametri .
3. Conv , filtri, . (padding same: la dimensione si conserva): . Parametri: pesi per filtro più il bias, per filtri: .
4. MaxPool. : . Parametri .
5. Flatten. valori. Parametri .
6. Dense . .
7. Dense . .
| strato | uscita | parametri |
|---|---|---|
| Conv | ||
| MaxPool | ||
| Conv (same) | ||
| MaxPool | ||
| Flatten | ||
| Dense | ||
| Dense |
Totale: parametri. Quasi il è nello strato denso (): gli strati convolutivi sono economici grazie alla condivisione dei pesi.
Campo recettivo
Un neurone dopo la prima convoluzione vede pixel. Il pooling con stride allarga il campo: ogni uscita del pooling dipende da neuroni vicini, quindi da una regione dei pixel originali; e da questo punto i passi sono di pixel. La seconda convoluzione guarda tre neuroni consecutivi del pooling: ognuno è spostato di pixel, quindi la regione copre pixel di lato. Campo recettivo dopo il secondo strato convolutivo. (Regola: per strati con stride il campo è , senza pooling; con il pooling i passi successivi valgono il doppio.)
Stride 2 nella seconda convoluzione
: l'uscita diventerebbe già senza pooling; con il pooling successivo valori da appiattire, e lo strato Dense avrebbe parametri invece di : il totale scenderebbe a .
Primo strato di AlexNet
Ingresso , filtri , stride : , uscita . Parametri : pochi rispetto ai milioni totali, che sono quasi tutti negli strati densi finali (FC6 ha pesi circa).
Controllo con Keras
model = Sequential([Input((32, 32, 3)),
Conv2D(16, 5, activation="relu"), MaxPool2D(2),
Conv2D(32, 3, padding="same", activation="relu"), MaxPool2D(2),
Flatten(), Dense(64, activation="relu"), Dense(10, activation="softmax")])
model.summary() # Total params: 106,922