Reti Neurali: L'Architettura dell'AI Moderna
Come funzionano i neuroni artificiali
🧠Struttura di una Rete Neurale
Una è composta da : input (riceve i dati), hidden (trasformano i segnali) e output (produce la previsione finale). Ogni connessione tra neuroni ha un peso che regola quanto una informazione influenza il risultato. Aumentare i può migliorare la capacità di rappresentare pattern complessi, ma aumenta anche costo e rischio di . Nota pratica: parti con un'architettura piccola e aggiungi complessità solo se i dati lo richiedono. Nel flusso di una contano anche principi di , , e .
Takeaway: una è efficace quando bilancia capacità, costo e generalizzazione.
📌Il Processo di Backpropagation
La è il meccanismo con cui la rete si corregge: confronta previsione e valore reale, calcola l'errore e aggiorna i pesi in direzione che riduce la perdita. In pratica è un ciclo continuo di tentativo, feedback e aggiustamento. Segnale utile: se la loss di training scende ma quella di validation peggiora, stai probabilmente overfittando. Nota pratica: monitora sempre training e validation insieme, non un solo numero.
Takeaway: il training efficace è guidato da feedback misurabile, non da tentativi casuali.
🚀Startup Lens
Le reti neurali hanno senso quando i pattern sono davvero complessi (immagini, linguaggio, segnali). Se il problema è lineare o il dataset è piccolo, un modello più semplice può dare risultati simili con costi minori, tempi più rapidi e maggiore spiegabilità.
⚠️Errore comune + Check rapido
Errore comune: aumentare senza una strategia di validazione.
Check rapido (2 min): guarda il tuo scenario e rispondi: stai scegliendo profondità perché serve davvero ai dati o solo perché sembra più potente?
🎙️ Podcast
In arrivoUn episodio riflessivo sulle decisioni architetturali nelle reti neurali. Partendo dall'errore più comune — aggiungere layer perché 'sembra più potente' — il podcast guida lo studente attraverso 3 domande concrete: i dati supportano questa complessità? Il costo computazionale è giustificato? L'interpretabilità conta nel tuo contesto? Collega il concetto di profondità con la Startup Lens (quando un modello semplice batte uno complesso), con il rischio di overfitting visto in CH4, e con la scelta strategica del modello affrontata nel Capitolo 9. Takeaway operativo: la profondità non è un obiettivo — è una conseguenza dei dati.
media/ch05-neural-networks/sec-04/podcast.mp3
Mini Lab — La Tua Prima Rete Neurale
📋 Setup
Cosa imparerai in questo lab:
- Caricare e visualizzare il dataset MNIST (immagini da 28x28 pixel)
- Pre-processare i dati (Scaling) per accelerare l'apprendimento
- Costruire un Multi-Layer Perceptron (MLP)
- Valutare le predizioni visualizzando i numeri scritti a mano
🛠️ Perché Scikit-Learn e non PyTorch?
Nell'industria moderna si usano framework giganti come PyTorch o TensorFlow. Tuttavia in questo lab useremo Scikit-Learn. Perché?
- Nessuna GPU richiesta: non devi installare 1GB+ di roba. Gira sul tuo PC in 5 secondi.
- Focus sulla teoria: con PyTorch dovresti scrivere tu i cicli per i gradienti. Qui chiami
.fit()e ti concentri sui livelli della rete, non sull'ingegneria del calcolo.
Prerequisiti:
- ✅ Python 3.7+
- ✅ pip installato
Comandi di avvio:
# 1. Estrai lo ZIP Lab 2 e accedi
$ cd ml-lab-02-neural-networks/
# 2. Installa le dipendenze
$ pip install -r requirements.txt
# 3. Esegui il lab (scaricherà MNIST la prima volta)
$ python main.py
Scarica i Dati (MNIST)
Carica un subset di MNIST: 10.000 immagini di numeri scritti a mano — ogni immagine è una griglia 28×28 pixel = 784 feature per immagine.
Scarica i Dati (MNIST) — Codice
python
🎯 Prova: Prova: stampa X.shape — cosa rappresentano quei 784 valori? (suggerimento: 28×28 pixel)
Preprocessing (Scaling)
Le reti neurali lavorano male con pixel da 0 a 255. Lo StandardScaler porta media a 0 e deviazione standard a 1 — la discesa del gradiente converge molto più velocemente.
Preprocessing (Scaling) — Codice
python
🎯 Prova: Rifletti: se non scalassi i dati, la discesa del gradiente farebbe balzi enormi — prova a commentare lo StandardScaler e confronta i risultati.
Definisci e Allena l'Architettura
Crea un Multi-Layer Perceptron: hidden_layer_sizes=(50,) = 1 layer nascosto con 50 neuroni. Il solver SGD aggiorna i pesi con la backpropagation — vedrai la loss scendere ad ogni epoca.
Definisci e Allena l'Architettura — Codice
python
🎯 Prova: Sperimenta: cambia hidden_layer_sizes=(50,) in (100, 50) — aggiungi un layer. L'accuracy migliora?
Visualizza le Predizioni
Il modello prevede il numero dai pixel. La griglia 2×5 mostra i risultati: verde = corretto, rosso = sbagliato — gli errori di solito sono numeri ambigui come 4 vs 9 o 3 vs 8.
Visualizza le Predizioni — Codice
python
🎯 Prova: Guarda l'immagine: gli errori sono su numeri scritti male? Per vedere numeri diversi, apri main.py e cambia random_state=42 nello Step 2 (es. random_state=7 o random_state=99) — ogni valore mostra un set completamente diverso.
🎯 Punti Chiave
- •Neuroni artificiali imitano il cervello
- •Peso dei neuroni = importanza della connessione
- •Backprop aggiusta i pesi per ridurre errori
- •Più layer = più capacità di astrazione
- •Learning outcome: descrivere come i pesi vengono aggiornati durante il training
💬 Discussione in Aula
- •Perché una rete neurale con 100 layer sarebbe diversa da una con 2 layer?
- •Come è simile Backpropagation al processo di imparare dai propri errori?
- •Cosa succederebbe se i pesi iniziali non fossero random ma zero?
Media del Capitolo
2/3 prontiGli slot con media reale non sono più placeholder; gli altri restano placeholder finché non carichiamo i file.
🎙️ Podcast
In arrivoVersione audio del Capitolo 5: architettura delle reti neurali, backpropagation e decisioni operative. Quando usare reti neurali vs modelli più semplici, come leggere i segnali di overfitting durante il training, e perché la profondità non è sempre la risposta giusta. Orientato a chi deve scegliere, costruire e validare modelli in un contesto startup.
Durata target: 10-15 min
Path previsto: media/ch05-neural-networks/podcast.mp3
🧠 Quiz del Capitolo
1. Un MLP con hidden_layer_sizes=(50, 50) ha due layer nascosti da 50 neuroni ciascuno. Cosa succede rispetto a (50,) con lo stesso dataset?