← Retour au portfolio RSS

· 12 min de lecture

M8 · Vraisemblance, Bayes et entropie

D'où viennent la MSE, la cross-entropie, la régularisation L2 et le gain d'information des arbres : les fonctions de perte vues comme des probabilités.

Mastering AI · Required Maths · Semaine 3 (probabilités et statistiques) · Partie 8

Objectif de l’étape

Jusqu’ici, on a pris la MSE et la log-loss comme des données. Elles ne tombent pas du ciel : elles découlent d’une seule idée, le maximum de vraisemblance. Avec le théorème de Bayes et la notion d’entropie, on obtient aussi la régularisation L 2 L_2 et le critère de découpage des arbres de décision.

À la fin de cet article, tu sauras :

  • appliquer le théorème de Bayes et expliquer l’effet de l’a priori ;
  • estimer un paramètre par maximum de vraisemblance ;
  • dériver la MSE d’un bruit gaussien et la cross-entropie d’un label de Bernoulli ;
  • interpréter la régularisation L 2 L_2 comme un a priori gaussien (MAP) ;
  • calculer entropie, cross-entropie, divergence KL et gain d’information.

Notions clés

1. Le théorème de Bayes

Intuition. On connaît souvent P ( indice ∣ cause ) P(\text{indice} \mid \text{cause}) (« si la région est froide, mon détecteur le dit dans 95 % des cas ») mais on veut P ( cause ∣ indice ) P(\text{cause} \mid \text{indice}) (« le détecteur dit froide : quelle chance qu’elle le soit vraiment ? »). Bayes retourne la flèche, à condition de connaître la fréquence de base, l’a priori.

P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P ( B ) = P ( B ∣ A ) P ( A ) + P ( B ∣ A ¯ ) P ( A ¯ ) \begin{aligned} P(A \mid B) &= \frac{P(B \mid A)\,P(A)}{P(B)} \\ P(B) &= P(B \mid A)P(A) + P(B \mid \bar A)P(\bar A) \end{aligned}

Exemple fil rouge : 70 % des régions sont froides. Un détecteur dit « froide » pour 95 % des régions froides et, par erreur, pour 20 % des chaudes. Quand il dit « froide », la probabilité que la région soit en fait chaude (un faux froid) est :

P ( chaude ∣ dit froide ) = 0 , 20 × 0 , 30 0 , 95 × 0 , 70 + 0 , 20 × 0 , 30 = 0 , 06 0 , 725 ≈ 8 , 3 % \begin{aligned} P(\text{chaude} \mid \text{dit froide}) &= \frac{0{,}20 \times 0{,}30}{0{,}95 \times 0{,}70 + 0{,}20 \times 0{,}30} \\ &= \frac{0{,}06}{0{,}725} \approx 8{,}3\,\% \end{aligned}

Le même détecteur, sur un workload où seulement 20 % des régions sont froides, donne 46 % de faux froids. La qualité d’un classifieur ne se lit jamais sans la fréquence de base : on le reverra en partie 15 avec la précision.

2. La vraisemblance

Intuition. On a des données et un modèle avec un paramètre θ \theta . La vraisemblance L ( θ ) L(\theta) est la probabilité d’avoir observé exactement ces données si le paramètre valait θ \theta . Le maximum de vraisemblance (MLE) choisit le θ \theta qui rend les données les plus probables.

Pour des observations indépendantes, la vraisemblance est un produit, qu’on transforme en somme avec le logarithme (plus stable numériquement, et même maximum) :

θ ^ = arg⁡ max θ ∑ i = 1 n log p ( x i ∣ θ ) \hat\theta = \arg\max_\theta \sum_{i=1}^n \log p(x_i \mid \theta)

Exemple : des comptages d’accès supposés suivre une loi de Poisson( λ \lambda ). En annulant la dérivée de la log-vraisemblance, on trouve λ ^ = x ¯ \hat\lambda = \bar x : l’estimateur du maximum de vraisemblance est la moyenne empirique.

Log-vraisemblance d’une loi de Poisson en fonction de λ pour 200 comptages d’accès observés : une courbe concave dont le maximum est atteint en λ = 3,545, exactement la moyenne empirique des données.

Minimiser une perte, c’est maximiser une vraisemblance. En ML, on écrit tout comme une minimisation : la perte est la log-vraisemblance négative (NLL) moyenne.

3. Bruit gaussien ⇒ MSE

Hypothèse : y i = w ⊤ x i + ε i y_i = w^\top x_i + \varepsilon_i avec un bruit ε i ∼ 𝒩︀ ( 0 , σ 2 ) \varepsilon_i \sim \mathcal{N}(0, \sigma^2) indépendant. La NLL vaut :

− log L ( w , σ ) = n 2 log ( 2 π σ 2 ) + 1 2 σ 2 ∑ i = 1 n ( y i − w ⊤ x i ) 2 -\log L(w, \sigma) = \frac{n}{2}\log(2\pi\sigma^2) + \frac{1}{2\sigma^2}\sum_{i=1}^n \big(y_i - w^\top x_i\big)^2

Pour σ \sigma fixé, seul le second terme dépend de w w : c’est la somme des carrés des erreurs. Maximiser la vraisemblance gaussienne revient exactement à minimiser la MSE. Et l’estimateur de σ \sigma est la racine de la MSE.

Corollaire : la MSE suppose un bruit symétrique, sans valeurs extrêmes. Avec des valeurs aberrantes, une loi de Laplace donne la perte | y − y ^ | |y - \hat y| (MAE), plus robuste.

4. Label de Bernoulli ⇒ cross-entropie

Hypothèse : y i ∈ { 0 , 1 } y_i \in \{0, 1\} suit une loi de Bernoulli de paramètre p i = σ ( w ⊤ x i ) p_i = \sigma(w^\top x_i) . La probabilité d’un label s’écrit p i y i ( 1 − p i ) 1 − y i p_i^{y_i}(1 - p_i)^{1 - y_i} , d’où :

− log L ( w ) = − ∑ i = 1 n [ y i log p i + ( 1 − y i ) log ( 1 − p i ) ] -\log L(w) = -\sum_{i=1}^n \big[y_i \log p_i + (1 - y_i)\log(1 - p_i)\big]

C’est exactement la log-loss (ou cross-entropie binaire) de la régression logistique. Elle punit très fort une prédiction confiante et fausse : prédire p = 0 , 01 p = 0{,}01 pour une région qui sera accédée coûte − log 2 0 , 01 ≈ 6 , 6 -\log_2 0{,}01 \approx 6{,}6 bits.

Cross-entropie binaire en fonction de la probabilité prédite p : −log2 p quand le label vaut 1 (tend vers l’infini quand p tend vers 0), −log2(1 − p) quand le label vaut 0, et en pointillés l’entropie H(p), maximale (1 bit) en p = 0,5.

5. MAP : la régularisation comme a priori

Intuition. Avant de voir les données, on peut avoir une opinion : « les poids sont probablement petits ». Bayes permet de combiner cet a priori avec la vraisemblance. On maximise alors la probabilité a posteriori (MAP) :

w ^ MAP = arg⁡ max w [ log p ( données ∣ w ) + log p ( w ) ] \hat w_{\text{MAP}} = \arg\max_w \big[\log p(\text{données} \mid w) + \log p(w)\big]

Avec un a priori gaussien w ∼ 𝒩︀ ( 0 , τ 2 I ) w \sim \mathcal{N}(0, \tau^2 I) , on a log p ( w ) = − ‖ w ‖ 2 2 τ 2 + cste \log p(w) = -\frac{\|w\|^2}{2\tau^2} + \text{cste} : on retrouve la régularisation L 2 L_2 (Ridge), avec λ = σ 2 / τ 2 \lambda = \sigma^2/\tau^2 . Un a priori de Laplace donnerait L 1 L_1 (Lasso). La régularisation, ce n’est pas une astuce : c’est une croyance a priori sur les poids (M11, partie 16).

6. Entropie, cross-entropie et divergence KL

Intuition. L’entropie mesure l’incertitude d’une loi, en bits : le nombre moyen de questions oui/non nécessaires pour deviner le résultat. Une pièce équilibrée vaut 1 bit, une pièce truquée qui tombe toujours sur pile vaut 0.

H ( p ) = − ∑ k p k log 2 p k H(p) = -\sum_k p_k \log_2 p_k

La cross-entropie H ( p , q ) = − ∑ k p k log 2 q k H(p, q) = -\sum_k p_k \log_2 q_k mesure le coût moyen quand la vérité suit p p mais qu’on code (ou prédit) avec q q . L’écart est la divergence de Kullback-Leibler :

H ( p , q ) = H ( p ) + K L ( p ‖ q ) K L ( p ‖ q ) = ∑ k p k log 2 p k q k ≥ 0 \begin{aligned} H(p, q) &= H(p) + \mathrm{KL}(p \,\|\, q) \\ \mathrm{KL}(p \,\|\, q) &= \sum_k p_k \log_2 \frac{p_k}{q_k} \geq 0 \end{aligned}

La KL est nulle si et seulement si q = p q = p , et elle n’est pas symétrique. Comme H ( p ) H(p) ne dépend pas du modèle, minimiser la cross-entropie revient à minimiser la KL entre la vraie loi des labels et celle que prédit le modèle.

7. Le gain d’information des arbres

Un arbre de décision (partie 17) choisit, à chaque nœud, le découpage qui réduit le plus l’entropie des labels :

gain = H ( nœud ) − ∑ enfants n enfant n nœud H ( enfant ) \text{gain} = H(\text{nœud}) - \sum_{\text{enfants}} \frac{n_{\text{enfant}}}{n_{\text{nœud}}}\, H(\text{enfant})

Un découpage qui sépare bien les régions chaudes des froides produit des enfants « purs », d’entropie faible, donc un gain élevé.


Exemple de code

Bayes et le poids de l’a priori

p_froide = 0.70             # a priori : 70 % des régions sont froides (Zipf)
p_dit_froide_si_froide = 0.95
p_dit_froide_si_chaude = 0.20
p_dit_froide = p_dit_froide_si_froide * p_froide + p_dit_froide_si_chaude * (1 - p_froide)
p_chaude_si_dit_froide = p_dit_froide_si_chaude * (1 - p_froide) / p_dit_froide
print(f"P(dit froide) = {p_dit_froide:.3f} | P(en fait chaude | dit froide) = {p_chaude_si_dit_froide:.3f}")
for prior in (0.9, 0.5, 0.2):
    pdf = p_dit_froide_si_froide * prior + p_dit_froide_si_chaude * (1 - prior)
    print(f"  a priori froide = {prior:.1f} -> P(chaude | dit froide) = {p_dit_froide_si_chaude * (1 - prior) / pdf:.3f}")
Part de régions froides P ( chaude ∣ dit froide ) P(\text{chaude} \mid \text{dit froide})
90 % 2,3 %
70 % 8,3 %
50 % 17,4 %
20 % 45,7 %

Même détecteur, mêmes taux d’erreur : la proportion de faux froids parmi les régions déclarées froides passe de 2 % à 46 % selon le workload.

Maximum de vraisemblance : Poisson, gaussienne et Ridge

import numpy as np
from scipy.optimize import minimize, minimize_scalar
from scipy.special import gammaln

rng = np.random.default_rng(0)

# 1. Poisson : le MLE de λ est la moyenne
acces = rng.poisson(3.2, 200)
nll_poisson = lambda lam: -np.sum(acces * np.log(lam) - lam - gammaln(acces + 1))
res = minimize_scalar(nll_poisson, bounds=(0.1, 10), method="bounded")
print(f"Poisson : λ MLE numérique = {res.x:.4f} | moyenne empirique = {acces.mean():.4f}")

# 2. Bruit gaussien => MSE
n, d = 300, 3
X = rng.normal(size=(n, d))
y = X @ np.array([2.0, -1.0, 0.5]) + rng.normal(0, 0.5, n)

def nll_gauss(params):
    w, log_sigma = params[:d], params[d]
    sigma2 = np.exp(2 * log_sigma)
    r = y - X @ w
    return 0.5 * n * np.log(2 * np.pi * sigma2) + (r @ r) / (2 * sigma2)

opt = minimize(nll_gauss, np.zeros(d + 1))
w_mc = np.linalg.lstsq(X, y, rcond=None)[0]
print(f"w MLE gaussien    : {opt.x[:d].round(4)} | σ MLE = {np.exp(opt.x[d]):.4f}")
print(f"w moindres carrés : {w_mc.round(4)} | √(MSE) = {np.sqrt(np.mean((y - X @ w_mc) ** 2)):.4f}")

# 3. MAP avec a priori gaussien => Ridge
lam = 10.0
w_ridge = np.linalg.solve(X.T @ X + lam * np.eye(d), X.T @ y)
w_map = minimize(lambda w: np.sum((y - X @ w) ** 2) + lam * w @ w, np.zeros(d)).x
print(f"Ridge (forme fermée) : {w_ridge.round(4)} | MAP numérique : {w_map.round(4)}")
Méthode Résultat
MLE Poisson (optimisation numérique) λ ^ = 3 , 5450 \hat\lambda = 3{,}5450
Moyenne empirique 3 , 5450 3{,}5450
MLE gaussien w = ( 2 , 0067 ; − 0 , 9955 ; 0 , 4344 ) w = (2{,}0067;\ -0{,}9955;\ 0{,}4344) , σ ^ = 0 , 5097 \hat\sigma = 0{,}5097
Moindres carrés w = ( 2 , 0067 ; − 0 , 9955 ; 0 , 4344 ) w = (2{,}0067;\ -0{,}9955;\ 0{,}4344) , MSE = 0 , 5097 \sqrt{\text{MSE}} = 0{,}5097
Ridge, forme fermée ( λ = 10 \lambda = 10 ) w = ( 1 , 948 ; − 0 , 9622 ; 0 , 4151 ) w = (1{,}948;\ -0{,}9622;\ 0{,}4151)
MAP numérique, a priori gaussien w = ( 1 , 948 ; − 0 , 9622 ; 0 , 4151 ) w = (1{,}948;\ -0{,}9622;\ 0{,}4151)

Trois paires de méthodes, trois coïncidences exactes : le MLE de Poisson est la moyenne, le MLE gaussien est la solution des moindres carrés, et le MAP gaussien est la régression Ridge. Remarque aussi que Ridge rétrécit tous les poids vers 0, comme le prévoit l’a priori.

Entropie, KL et gain d’information

import numpy as np


def H(p):
    p = np.asarray(p, float)
    p = p[p > 0]
    return -np.sum(p * np.log2(p))


def CE(p, q):
    return -np.sum(np.asarray(p) * np.log2(q))


def KL(p, q):
    return CE(p, q) - H(p)


p = np.array([0.7, 0.2, 0.1])
q = np.array([0.2, 0.3, 0.5])
print(f"H(p) = {H(p):.3f} bits | H(uniforme sur 3) = {H([1/3] * 3):.3f} bits")
print(f"CE(p, q) = {CE(p, q):.3f} = H(p) + KL(p||q) = {H(p):.3f} + {KL(p, q):.3f}")
print(f"KL(p||q) = {KL(p, q):.3f} | KL(q||p) = {KL(q, p):.3f}")

# gain d'information d'un découpage sur 100 régions (30 chaudes, 70 froides)
y_noeud = np.array([1] * 30 + [0] * 70)
gauche = np.array([1] * 27 + [0] * 8)                   # depuis_dernier < seuil
droite = np.array([1] * 3 + [0] * 62)
Hb = lambda v: H([v.mean(), 1 - v.mean()])
gain = Hb(y_noeud) - (len(gauche) * Hb(gauche) + len(droite) * Hb(droite)) / len(y_noeud)
print(f"entropie du nœud {Hb(y_noeud):.3f} | gauche {Hb(gauche):.3f} | droite {Hb(droite):.3f} | gain {gain:.3f} bits")
  • H ( p ) = 1 , 157 H(p) = 1{,}157 bit, contre 1 , 585 1{,}585 pour la loi uniforme sur 3 valeurs (le maximum possible) : p p est assez prévisible.
  • H ( p , q ) = 2 , 073 = 1 , 157 + 0 , 916 H(p, q) = 2{,}073 = 1{,}157 + 0{,}916 : la cross-entropie est bien l’entropie plus la KL.
  • K L ( p ‖ q ) = 0 , 916 \mathrm{KL}(p \| q) = 0{,}916 mais K L ( q ‖ p ) = 0 , 975 \mathrm{KL}(q \| p) = 0{,}975 : la KL n’est pas une distance symétrique.
  • Le découpage fait passer l’entropie de 0 , 881 0{,}881 bit (nœud) à 0 , 776 0{,}776 (gauche) et 0 , 270 0{,}270 (droite) : un gain de 0 , 434 0{,}434 bit. La branche droite (62 froides, 3 chaudes) est presque pure.

Exercice pratique

  1. Bayes à la main. Un test de détection a une sensibilité de 99 % et une spécificité de 99 %. Si la condition touche 1 personne sur 1 000, quelle est la probabilité d’être concerné quand le test est positif ? Vérifie par simulation.
  2. MLE de Bernoulli. Pour n n observations 0/1, écris la log-vraisemblance de p p et montre que p ^ \hat p est la proportion de 1. Vérifie avec minimize_scalar.
  3. Laplace et MAE. Montre que si le bruit suit une loi de Laplace, la NLL est proportionnelle à ∑ | y i − w ⊤ x i | \sum |y_i - w^\top x_i| . Ajoute 5 valeurs aberrantes dans y et compare les poids obtenus par MSE et par MAE (scipy.optimize.minimize).
  4. La KL n’est pas symétrique. Trouve deux lois p p et q q sur 2 valeurs pour lesquelles K L ( p ‖ q ) \mathrm{KL}(p\|q) et K L ( q ‖ p ) \mathrm{KL}(q\|p) diffèrent d’un facteur au moins 3.
  5. Fil rouge. Sur le dataset de la partie 14, calcule le gain d’information du découpage depuis_dernier < s pour plusieurs seuils s s . Quel seuil maximise le gain ? Compare avec le premier découpage d’un DecisionTreeClassifier(criterion="entropy", max_depth=1).

Indice pour la question 1 : la réponse est autour de 9 %, pas 99 %.


Ressources pour aller plus loin

  • Bishop, Pattern Recognition and Machine Learning, chapitres 1 et 2 : vraisemblance, MAP et Bayes appliqués au ML.
  • Murphy, Probabilistic Machine Learning: An Introduction, chapitres 4 et 6 (estimation et théorie de l’information), gratuit en ligne.
  • 3Blue1Brown, Bayes theorem, the geometry of changing beliefs (vidéo).
  • Christopher Olah, Visual Information Theory (blog colah.github.io).

Ce que tu dois savoir faire avant de passer à la suite

  • Appliquer Bayes et expliquer l’effet de la fréquence de base
  • Écrire une log-vraisemblance et trouver son maximum
  • Dériver la MSE d’un bruit gaussien et la log-loss d’un label de Bernoulli
  • Expliquer la régularisation L 2 L_2 comme un a priori gaussien
  • Calculer entropie, cross-entropie et KL, et relier les trois
  • Calculer le gain d’information d’un découpage

Partie suivante : M9 · Statistique inférentielle pour comparer des modèles. Comment affirmer, chiffres et intervalles de confiance à l’appui, qu’un modèle est meilleur qu’un autre.