Entropie croisée et divergence KL -- Mesurer la différence entre les distributions
L'entropie croisée est la fonction de perte la plus couramment utilisée pour les tâches de classification.La divergence KL mesure à quel point deux distributions de probabilité sont dissemblables.
Analyse du concept
Dans le chapitre précédent, nous avons étudié l'entropie — mesurant le désordre d'une distribution unique elle-même. Les deux concepts de ce chapitre mesurentla différence entre deux distributions, ce qui détermine directement la conception des fonctions de perte dans les tâches de classification.
Entropie croisée
\[ H(p, q) = -\sum_x p(x) \log q(x) \]Signification : En utilisant la distribution prédite q pour encoder les données de la distribution réelle p, combien d'informations sont dépensées en moyenne.
Divergence KL (Entropie relative)
\[ D_{KL}(p \| q) = \sum_x p(x) \log \frac{p(x)}{q(x)} = \underbrace{H(p,q)}_{\text{cross-entropy}} - \underbrace{H(p)}_{\text{true entropy}} \]Signification : L'information supplémentaire gaspillée après que q remplace p. KL ≥ 0, et lorsqu'il est égal à 0, p = q.
Divergence KLest asymétrique: D_KL(p||q) ≠ D_KL(q||p), donc ce n'est pas une véritable "distance".
Lorsque la distribution réelle p est one-hot (déterministe), H(p) = 0, et l'entropie croisée est égale à la divergence KL.
Pourquoi la classification utilise-t-elle l'entropie croisée au lieu de MSE ?
Le gradient de l'entropie croisée + Softmax = \( \hat{y} - y \) (prédiction - vraie), qui est simple et efficace.
Le gradient de MSE + Softmax s'approche de 0 lorsque la prédiction est confiante — gradient qui disparaît, rendant l'apprentissage impossible.
Exemples concrets
Conception de codebook
Vous écrivez des lettres en utilisant un ensemble de codes (les codes courts représentent les caractères courants, les codes longs représentent les caractères rares).
Mais si vos codes sont conçus en fonction de la fréquence de l'anglais alors que vous écrivez en chinois—l'efficacité de codage est faible.
Utiliser la mauvaise distribution q pour encoder des données provenant de la vraie distribution p gaspille des bits supplémentaires = divergence KL.
Exercices pratiques Python
Exemple
def cross_entropy(p, q):
return -np.sum(p * np.log(q + 1e-10))
p_true = np.array([1.0, 0.0, 0.0]) # Vrai : classe 0
for q, desc in [([0.9,0.05,0.05],"Bonne prédiction"),
([0.4,0.3,0.3],"Ambigu"),
([0.1,0.8,0.1],"Faux")]:
print(f"{desc}: entropie croisée={cross_entropy(p_true, q):.4f}")
# Comparer les gradients de CE et MSE
print("\n"Très mauvaise prédiction (y_pred=0.01, true=1): CE gradient=-100, MSE gradient=-1.98")
print("L'EC donne un gradient important lorsque les prédictions sont fausses → apprend rapidement")
Sortie de l'exécution :
好预测: 交叉熵=0.1054 模糊: 交叉熵=0.9163 错误: 交叉熵=2.3026 预测很差(y_pred=0.01, 真=1): CE梯度=-100, MSE梯度=-1.98 CE在预测错误时给出大梯度 → 学得快
Comparaison des gradients : entropie croisée vs MSE
Scénarios d'application en IA
Standard pour les tâches de classification : perte d'entropie croisée
nn.CrossEntropyLoss de PyTorch et categorical_crossentropy de TensorFlow sont les fonctions de perte par défaut pour les tâches de classification. Elles intègrent en interne Softmax + log-vraisemblance négative—une seule fonction de perte effectue à la fois l'activation et le calcul de la perte, et la forme du gradient est extrêmement simple : \( \nabla = \hat{y} - y \).
Pourquoi ne pas utiliser MSE pour la classification ? Les propriétés du gradient déterminent l'efficacité
Lorsque le modèle prédit de manière incorrecte (par exemple, la probabilité de la vraie classe devrait être proche de 1 mais est prédite à 0.01), le gradient de l'entropie croisée est d'environ -100—ce qui donne un signal de correction extrêmement fort. MSE, en revanche, n'a qu'un gradient de -1.98 dans la même situation—il n'apprend presque pas. Cela explique pourquoi MSE converge extrêmement lentement, voire ne converge pas, dans les tâches de classification.
Divergence KL dans la distillation de connaissances
Distillation de connaissances : utiliser la sortie Softmax d'un grand modèle (enseignant) comme étiquettes douces pour entraîner un petit modèle (élève). L'élève doit non seulement correspondre aux vraies étiquettes, mais aussi minimiser la divergence entre sa propre distribution de sortie et celle de l'enseignant via la divergence KL. Les étiquettes douces contiennent des informations de similarité entre les classes (par exemple, les probabilités de sortie pour « chat » et « tigre » sont toutes deux plus élevées que pour « voiture »), ce qui est une connaissance cachée que les étiquettes one-hot n'ont pas.
Terme de régularisation de divergence KL dans le VAE
La fonction de perte du VAE = erreur de reconstruction + KL(N(μ,σ²) || N(0,I)). Le terme KL contraint la distribution latente produite par l'encodeur afin qu'elle ne s'écarte pas trop de la normale standard pour chaque échantillon—cela agit comme un régularisateur, garantissant que l'espace latent est continu et lisse, et que les échantillons de différentes classes peuvent transiter en douceur dans l'espace latent.
Contrainte KL dans RLHF
Des modèles tels que ChatGPT, lorsqu'ils sont affinés avec RLHF (apprentissage par renforcement à partir de retours humains), ajoutent une contrainte de divergence KL à l'objectif d'optimisation : ne pas laisser la politique actuelle s'écarter trop du modèle SFT initial. Cela empêche le modèle de produire un texte étrange pour satisfaire le modèle de récompense, tout en maintenant la qualité de génération.
Autres extensions