Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Pooling


Per semplificare e rendere più gestibili features Map, riducendo il numero di parametri

Pooling

Nei modelli di reti neurali convoluzionali (CNN), il pooling è una tecnica utilizzata per ridurre la dimensione delle feature map, mantenendo le informazioni più rilevanti.
Il pooling viene utilizzato per semplificare e rendere più gestibili le rappresentazioni delle feature, riducendo il numero di parametri e il carico computazionale della rete.

Max-pooling

Il max-pooling è una delle tecniche di pooling più comuni nelle CNN. Il max-pooling suddivide l'input in regioni disgiunte e restituisce il valore massimo all'interno di ciascuna regione.
Questo processo riduce la dimensione dell'input mantenendo solo le caratteristiche più significative.

Quando usare Max-Pooling

Il max-pooling viene comunemente utilizzato nelle reti neurali convoluzionali (CNN) per ridurre la dimensione delle feature map e ottenere alcune importanti proprietà di invarianza spaziale.
Ecco alcuni scenari in cui il max-pooling è utilizzato nelle CNN:

  • Dimensionalità delle feature map**: Dopo le operazioni di convoluzione, le feature map tendono ad avere una dimensione relativamente grande. Il max-pooling viene utilizzato per ridurre la dimensione delle feature map mantenendo le caratteristiche più rilevanti, riducendo così il carico computazionale e il rischio di overfitting.

  • Invarianza di traslazione**: Il max-pooling introduce una sorta di invarianza di traslazione, poiché il massimo valore all'interno di una regione di pooling rimane lo stesso anche se l'oggetto nell'immagine viene spostato leggermente. Questa proprietà aiuta la rete a identificare le caratteristiche importanti indipendentemente dalla loro posizione precisa nell'immagine.

  • Riconoscimento delle caratteristiche principali**: Il max-pooling tende a preservare le caratteristiche più rilevanti delle feature map, poiché seleziona solo i valori massimi in ciascuna regione. Questo è particolarmente utile per il riconoscimento di pattern e oggetti all'interno delle immagini.

  • Riduzione del sovrappiattimento**: Il max-pooling può contribuire a ridurre il sovrappiattamento (overfitting) riducendo il numero di parametri della rete. Ciò aiuta a migliorare la generalizzazione del modello sui dati di test.

  • Aumento della generalizzazione**: Riducendo la dimensione delle feature map, il max-pooling può aiutare a estrarre caratteristiche più generali e invarianti dalle immagini, migliorando la capacità del modello di generalizzare su nuovi dati.

Codice Utilizzo con Keras

Ecco un esempio di utilizzo del max-pooling in Python utilizzando TensorFlow e Keras:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# Definizione del modello CNN con max-pooling
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D((2, 2)))  # Max-pooling con dimensione della finestra 2x2
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))

# Aggiunta degli strati fully connected per la classificazione
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))  # Output layer per classificazione in 10 classi

# Compilazione e addestramento del modello
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

In questo esempio, il max-pooling viene utilizzato dopo ogni strato di convoluzione per ridurre la dimensione delle feature map.
Le dimensioni delle finestre di max-pooling sono specificate come (2, 2), il che significa che ogni regione di pooling è una finestra 2x2 e viene selezionato il valore massimo all'interno di ciascuna finestra.

La differenza principale tra max-pooling e average-pooling è il modo in cui viene calcolato il valore per ciascuna regione:

  • Nel max-pooling, viene selezionato il valore massimo.

  • Nell'average-pooling, viene calcolata la media dei valori.

Il max-pooling viene utilizzato in varie fasi di una CNN, solitamente dopo alcune operazioni di convoluzione.
Questo strato di pooling aiuta a ridurre la dimensione delle feature map e a mantenere le caratteristiche più importanti rilevate dalle operazioni di convoluzione.