Pilier 5

Cross-entropy : l'erreur d'une prédiction probabiliste

Idée

Mesurer à quel point la distribution de probabilités sortie par le modèle est éloignée de la bonne réponse.

Outil

Pour un seul exemple : $L = -\log(p_{\text{vraie classe}})$. C'est l'opposé du log-vraisemblance familier en statistique — la fonction $-\log$ punit fortement les probabilités proches de 0, comme $-\log x \to +\infty$ quand $x \to 0^+$.

Formule

Une fonction de coût (ou loss) est un nombre $L(\theta)$ qui mesure à quel point le modèle, paramétré par $\theta = (w, b, \ldots)$, se trompe sur le dataset. Plus $L$ est petit, mieux le modèle prédit ; tout l'entraînement consiste à descendre $L$ par modification de $\theta$. Pour la classification binaire, on utilise la log-loss (ou entropie croisée binaire) : $L = -\frac{1}{m} \sum_{i} \big[ y_i \log(a_i) + (1 - y_i) \log(1 - a_i) \big]$, où $y_i \in {0, 1}$ est la vraie étiquette et $a_i \in (0, 1)$ la probabilité prédite. Pourquoi pas le simple $(a - y)^2$ ? Deux raisons : (i) l'entropie croisée explose quand le modèle prédit 0.99 alors que la vérité est 0 — c'est exactement ce qu'on veut, une prédiction sûre et fausse doit faire mal ; (ii) son gradient sur la sigmoïde se simplifie en $(a - y)$ pur, sans le facteur $\sigma'(z)$ qui écrase le signal d'apprentissage quand la sigmoïde saturé. C'est l'analogue probabiliste de la log-vraisemblance : minimiser l'entropie croisée, c'est maximiser la vraisemblance des données sous le modèle.

Piège

Pytorch CrossEntropyLoss attend des labels en indices (entiers de 0 à C-1), pas en one-hot. Si on passe one-hot par erreur, l'erreur de dimension peut être silencieuse (broadcasting bizarre) ou explicite. Le notebook passe Y directement (Cell 15 : log_loss(A.T, Y) avec Y = tensor([5, 0, 4, ...])) — c'est correct. Copier d'autres frameworks (où on attend du one-hot) casse.