Andiamo dritti al punto: cos'è la Cross Entropy?
Se ti occupi di Machine Learning o stai provando a capire come un modello di Deep Learning impara a distinguere un gatto da un cane, prima o poi sbatterai contro il concetto di cross entropy. In parole povere, è un modo per misurare quanto una previsione sia "lontana" dalla realtà.
Immaginala come una sorta di metro che misura l'errore. Più il valore della cross entropy è alto, più il modello sta sbagliando. Se invece tende a zero, significa che le probabilità assegnate dal software coincidono quasi perfettamente con i dati reali.
Un concetto fondamentale. Senza questo calcolo, l'algoritmo non saprebbe in che direzione muoversi per migliorare.
Tecnicamente, parliamo di una funzione di perdita (loss function) utilizzata principalmente nei problemi di classificazione. Perché proprio questa e non il semplice errore quadratico medio? Semplice: perché quando lavoriamo con probabilità, la geometria dell'errore cambia completamente.
La logica matematica senza mal di testa
Non serve essere un premio Fields per capire il meccanismo, ma un minimo di contesto aiuta. La cross entropy si basa sulla teoria dell'informazione. L'idea è quella di confrontare due distribuzioni di probabilità: quella reale (il target) e quella prevista dal modello.
Quando il modello spara una previsione, non dice quasi mai "è un gatto al 100%". Dice piuttosto: "c'è l'85% di probabilità che sia un gatto e il 15% che sia un cane".
La formula matematica penalizza pesantemente le previsioni sicure ma sbagliate. Se il modello è convinto al 99% che l'immagine sia un cane, ma in realtà è un gatto, la cross entropy esplode verso l'alto. Questo "shock" matematico costringe il modello a correggersi rapidamente durante la fase di addestramento.
È un meccanismo di punizione efficace.
Binary Cross Entropy vs Categorical Cross Entropy
Qui le cose si dividono in base a quello che stai cercando di risolvere. Se hai solo due opzioni (Sì/No, Spam/Non Spam, Cane/Gatto), userai la Binary Cross Entropy. In questo caso, il modello produce un singolo valore tra 0 e 1 tramite una funzione sigmoid.
Se invece le classi sono molteplici — diciamo che devi riconoscere tutte le razze di cani esistenti — passi alla Categorical Cross Entropy. Qui entra in gioco la funzione softmax, che distribuisce la probabilità su tutte le categorie disponibili, assicurandosi che la somma totale sia sempre pari a 1.
- Binary: Due classi, output singolo, sigmoid.
- Categorical: Molte classi, vettore di output, softmax.
Un dettaglio non da poco è l'uso della Sparse Categorical Cross Entropy. Si usa quando le etichette sono numeri interi (0, 1, 2...) invece di vettori one-hot encoded. Risparmia memoria e rende il calcolo più fluido.
Perché non usare l'accuratezza come metrica di addestramento?
Questa è la domanda che molti si pongono all'inizio. "Perché complicarsi la vita con i logaritmi della cross entropy se posso semplicemente guardare quanti esempi ho indovinato?".
Il problema è che l'accuratezza è una funzione a gradini. O hai indovinato, o hai sbagliato. Per un algoritmo di ottimizzazione come la Stochastic Gradient Descent (SGD), i gradini sono un incubo perché non forniscono una direzione chiara per migliorare.
La cross entropy invece è una curva continua e differenziabile. Fornisce un segnale preciso: non ti dice solo che hai sbagliato, ma di quanto sei lontano dal bersaglio.
Senza questa granularità, l'apprendimento sarebbe lentissimo o, peggio, rimarrebbe bloccato in minimi locali senza mai convergere verso una soluzione ottimale.
Il ruolo dei logaritmi nel calcolo
Se guardi la formula della cross entropy, vedrai che il cuore è un logaritmo naturale. Perché?
Perché il logaritmo trasforma le probabilità (che sono numeri tra 0 e 1) in valori che possono andare da zero a infinito. Quando la probabilità prevista si avvicina allo zero per una classe che invece è quella corretta, il valore del logaritmo tende a meno infinito. Poiché nella formula c'è un segno meno davanti, l'errore diventa enorme.
Proprio così. È questo che rende la funzione così aggressiva nel correggere gli errori grossolani.
Consigli pratici per evitare il "NaN"
Chi implementa queste funzioni da zero o usa framework come TensorFlow e PyTorch ha spesso a che fare con un problema fastidioso: l'errore NaN (Not a Number).
Succede quando il modello prevede una probabilità esattamente pari a 0. Il logaritmo di 0 non è definito, e il sistema crasha o restituisce valori senza senso.
La soluzione? L'aggiunta di un valore infinitesimale, chiamato epsilon (ad esempio $1e-7$), per evitare che l'input del logaritmo sia mai esattamente zero. Un trucco semplice, ma vitale per la stabilità numerica del modello.
Come ottimizzare i risultati
Usare la cross entropy è il primo passo, ma non è tutto. Per far funzionare davvero un modello, devi bilanciare la loss function con una buona strategia di regolarizzazione.
Se il modello diventa "troppo sicuro" delle sue previsioni (overfitting), potrebbe assegnare probabilità vicine a 1 anche quando non è certo. In questi casi, tecniche come il label smoothing possono aiutare. Invece di usare target netti come [0, 1], si usano valori leggermente ammorbiditi come [0.05, 0.95].
Questo impedisce alla cross entropy di spingere i pesi del modello verso valori estremi, rendendo la rete neurale più robusta e capace di generalizzare meglio su dati che non ha mai visto prima.
Sintesi finale per chi programma
Se stai scrivendo codice ora, ricorda queste tre regole d'oro:
1. Se hai due classi $
ightarrow$ Binary Cross Entropy + Sigmoid.
2. Se hai più classi $
ightarrow$ Categorical Cross Entropy + Softmax.
3. Se le etichette sono interi $
ightarrow$ Sparse Categorical Cross Entropy.
Il calcolo della loss è l'unico modo che abbiamo per "parlare" con la macchina e dirle cosa sta sbagliando. Capire a fondo come funziona la cross entropy significa avere il controllo totale sul processo di apprendimento del proprio modello.