La fonction d'erreur d'entropie croisée dans les réseaux de neurones

115

Dans le MNIST For ML Beginners, ils définissent l’entropie croisée comme

Hy(y):=iyilog(yi)

i y ' iyi est la valeur de probabilité prédite pour la classe et est la probabilité vraie pour cette classe.iyi

question 1

N'est-ce pas un problème que (dans ) puisse être 0? Cela voudrait dire que nous avons bien sûr un très mauvais classificateur. Mais pensez à une erreur dans notre ensemble de données, par exemple une "évidence" étiquetée . Cela tomberait-il simplement en panne? Est-ce que le modèle que nous avons choisi (activation de softmax à la fin) ne donne fondamentalement jamais la probabilité 0 pour la classe correcte? me connecte ( y i )yilog(yi)13

question 2

J'ai appris que l'entropie croisée est définie comme

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

Qu'est-ce qui est correct? Avez-vous des références de manuels scolaires pour l'une ou l'autre version? Comment ces fonctions diffèrent-elles dans leurs propriétés (en tant que fonctions d'erreur pour les réseaux de neurones)?

Martin Thoma
la source
Voir aussi: article de blog de Kullback-Leibler Divergence Explained .
Piotr Migdal

Réponses:

101

Une façon d'interpréter l'entropie croisée consiste à le voir comme une log-vraisemblance (moins) pour les données , sous un modèle .yiyi

Supposons que vous ayez un modèle fixe ("hypothèse"), qui prédit pour classes leurs probabilités d’apparition hypothétiques . Supposons que vous maintenant (en réalité) instances de classe , instances de classe , instances de classe , etc. Selon votre modèle, la probabilité que cela se produise est la suivante: Utilisation du logarithme et modification du signe: n{1,2,,n}y1,y2,,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
N = k 1 + k 2 + + k n y ' i = k i Si vous divisez maintenant la somme de droite par le nombre d'observations et notez les probabilités empiriques sous la forme , vous obtiendrez une entropie croisée: N=k1+k2++knyi=ki/N
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

De plus, la vraisemblance log d'un ensemble de données donné à un modèle peut être interprétée comme une mesure de la "longueur de codage" - le nombre de bits que vous prévoyez dépenser pour coder cette information si votre schéma de codage serait basé sur votre hypothèse.

Cela découle de l'observation selon laquelle un événement indépendant de probabilité nécessite au moins bits pour le coder (en supposant un codage efficace) et, par conséquent, l'expression est littéralement la longueur attendue du codage. , où les longueurs de codage pour les événements sont calculées à l'aide de la distribution "supposée", tandis que l'attente est remplacée par la distribution réelle.yilog2yi

iyilog2yi,

Enfin, au lieu de dire "mesure de la longueur de codage attendue", j'aime beaucoup utiliser le terme informel "mesure de surprise". Si vous avez besoin de beaucoup de bits pour coder un événement attendu d'une distribution, la distribution est "vraiment surprenante" pour vous.

Avec ces intuitions en tête, les réponses à vos questions peuvent être vues comme suit:

  • Question 1 . Oui. C'est un problème lorsque le correspondant est différent de zéro en même tempsyi . Cela correspond à la situation dans laquelle votre modèle estime qu'une classe a une probabilité d'occurrence nulle, mais que la classe apparaît en réalité. En conséquence, la "surprise" de votre modèle est infiniment grande: votre modèle n’a pas pris en compte cet événement et a maintenant besoin d’un nombre infini de bits pour le coder. C'est pourquoi vous obtenez l'infini comme entropie croisée.

    Pour éviter ce problème, vous devez vous assurer que votre modèle ne fait pas de suppositions irréfléchies sur le fait que quelque chose est impossible alors que cela peut arriver. En réalité, les gens ont tendance à utiliser des fonctions sigmoïdes ou "softmax" comme modèles d'hypothèse, suffisamment conservateurs pour laisser au moins une chance à chaque option.

    Si vous utilisez un autre modèle d’hypothèses, il vous appartient de le régulariser (ou «lisser») pour qu’il ne suppose pas des zéros là où il ne devrait pas.

  • Question 2 . Dans cette formule, on suppose habituellement pour être soit ou , tandis que est l'hypothèse de probabilité du modèle pour l'entrée correspondante. Si vous regardez de plus près, vous verrez que c'est simplement un pour les données binaires, un équivalent de la deuxième équation de cette réponse.yi01yilogP[data|model]

    Par conséquent, à proprement parler, bien que cela reste un log-vraisemblance, cela n’est pas syntaxiquement équivalent à l’entropie croisée. Ce que certaines personnes veulent dire en parlant d'une telle expression comme entropie croisée, c'est qu'il s'agit en fait d'une somme sur des entropies croisées binaires pour des points individuels du jeu de données: où et doit être interprété comme les distributions binaires correspondantes et .

    iH(yi,yi),
    yiyi(yi,1yi)(yi,1yi)

KT.
la source
1
Pouvez-vous fournir une source où ils définissent ? Ici, ils le définissent comme une distribution one-hot pour le label de classe actuel. Quelle est la différence? yi=kiN
Lenar Hoyt
1
Dans le didacticiel MNIST TensorFlow, ils le définissent également en termes de vecteurs one-hot.
Lenar Hoyt
@LenarHoyt Lorsque , serait équivalent à one-hot. Vous pouvez considérer one-hot comme le codage d'un élément basé sur sa probabilité catégorique empirique (réelle). N=1ki/N
THN
"un événement indépendant nécessite ... de l'encoder" - pourriez-vous expliquer ce bit s'il vous plaît?
Alex
@Alex Cela nécessitera peut-être des explications plus longues pour bien comprendre - lisez sur les codes de Shannon-Fano et sur la relation entre le codage optimal et l'équation d'entropie de Shannon. Pour mettre les choses en sourdine, si un événement a la probabilité 1/2, votre meilleur pari est de le coder en utilisant un seul bit. Si elle a une probabilité de 1/4, vous devriez dépenser 2 bits pour la coder, etc. En général, si votre ensemble d'événements a des probabilités de la forme 1/2 ^ k, vous devriez leur donner des longueurs k - ainsi votre code approcher la longueur optimale de Shannon.
KT.
22

La première formule de perte de journal que vous utilisez concerne la perte de journal multiclass, où l' indice énumère les différentes classes dans un exemple. La formule suppose qu'un seul dans chaque exemple est à 1 et que les autres sont tous égaux à 0.iyi

Cela signifie que la formule ne capture que les erreurs sur la classe cible. Il supprime toute notion d'erreur que vous pourriez considérer comme "faux positif" et ne se soucie pas de la façon dont les probabilités prédites sont distribuées autres que la probabilité prédite de la classe vraie.

Une autre hypothèse est que pour les prédictions de chaque exemple. Cela se fait automatiquement par une couche softmax - si vous utilisez quelque chose de différent, vous devrez redimensionner les sorties pour répondre à cette contrainte.iyi=1

question 1

N'est-ce pas un problème que le (dans le ) puisse être 0?yilog(yi)

Oui, cela peut être un problème, mais ce n’est généralement pas pratique. Il est très peu probable qu'une couche softmax initialisée de manière aléatoire produise un résultat exact 0dans une classe. Mais c'est possible, donc cela vaut la peine de le permettre. D'abord, n'évaluez pas le pour aucun , car les classes négatives contribuent toujours à 0 à l'erreur. Deuxièmement, dans le code pratique, vous pouvez limiter la valeur à quelque chose comme pour la stabilité numérique - dans de nombreux cas, cela n’est pas obligatoire, mais c’est une programmation défensive judicieuse.log(yi)yi=0log( max( y_predict, 1e-15 ) )

question 2

J'ai appris que l'entropie croisée est définie commeHy(y):=i(yilog(yi)+(1yi)log(1yi))

Cette formulation est souvent utilisée pour un réseau avec une sortie prédisant deux classes (généralement, appartenance à une classe positive pour 1 et négative pour une sortie 0). Dans ce cas, ne peux avoir qu'une seule valeur - vous pouvez perdre la somme sur .ii

Si vous modifiez un tel réseau pour qu'il ait deux sorties opposées et utilisez softmax plus la première définition de perte de journal, vous constaterez qu'il s'agit en fait de la même mesure d'erreur mais en repliant la métrique d'erreur de deux classes en une seule sortie.

S'il y a plus d'une classe dont on peut prédire l'appartenance et que les classes ne sont pas exclusives, c'est-à-dire qu'un exemple peut être n'importe quelle classe ou toutes les classes en même temps, vous devrez alors utiliser cette deuxième formulation. Pour la reconnaissance de chiffres, ce n'est pas le cas (un chiffre écrit ne doit avoir qu'une seule "vraie" classe)

Neil Slater
la source
Notez qu'il y a une certaine ambiguïté dans la présentation de la seconde formule - elle pourrait en théorie ne supposer qu'une classe et énumérerais ensuite les exemples. i
Neil Slater
Je suis désolé, j'ai demandé quelque chose de différent de ce que je voulais savoir. Je ne vois pas de problème dans , mais dans , à cause de . Pourriez-vous ajuster votre réponse à cela? log(yi)=0yi=0log(yi)
Martin Thoma
@NeilSlater si les classes ne sont pas mutuellement exclusives, le vecteur de sortie de chaque entrée peut contenir plus d'un 1, devrions-nous utiliser la deuxième formule?
Médias
1
@ Media: Pas vraiment. Vous souhaitez cependant examiner des éléments tels que la classification hiérarchique. . .
Neil Slater
1
@Javi: Dans la question du PO, est la vérité au sol, donc généralement 0 ou 1. C'est qui est la sortie softmax. Cependant, peut finir par être nul en pratique en raison de l'arrondi en virgule flottante. Cela se produit réellement. yiyiyi
Neil Slater
11

Compte tenu , vous souhaitez optimiser votre méthode d'apprentissage de la machine pour obtenir le le plus près possible de .ytrueypredictytrue

Première question:

La réponse ci-dessus a expliqué le contexte de votre première formule, l’entropie croisée définie dans la théorie de l’information.

D'une opinion autre que la théorie de l'information:

vous pouvez examiner vous-même que la première formule n'entraîne aucune pénalité pour les faux positifs (la vérité est fausse, mais votre modèle prédit qu'elle est juste), tandis que la seconde formule prévoit des pénalités pour les faux positifs. Par conséquent, le choix de la première formule ou de la seconde affectera vos mesures (autrement dit, quelle quantité statistique vous souhaitez utiliser pour évaluer votre modèle).

En mot profane:

Si vous voulez accepter que presque toutes les bonnes personnes soient votre ami mais acceptent que certaines mauvaises personnes deviennent votre ami, utilisez la première formule comme critère.

Si vous voulez vous punir d'accepter que certaines personnes mauvaises soient votre ami, mais que votre taux d'acceptation des bonnes personnes soit peut-être inférieur à la première condition, utilisez la deuxième formule.

Tandis que, je suppose que la plupart d’entre nous sommes critiques et aimerions choisir le second (de sorte que beaucoup de paquets ML supposent ce qui est de l’entropie croisée).

Deuxième question:

Entropie croisée par échantillon par classe:

ytruelog(ypredict)

Entropie croisée pour des ensembles de données entiers:

inkKytrue(k)log(ypredict(k))

Ainsi, quand il n'y aura que deux classes (K = 2), vous aurez la deuxième formule.

Intelligence artificielle
la source
5

Ces problèmes sont résolus par l'utilisation de softmax dans le tutoriel.

Pour 1), vous avez raison de dire que softmax garantit une sortie non nulle car il expose son entrée. Pour les activations qui ne donnent pas cette garantie (comme relu), il est simple d'ajouter un très petit terme positif à chaque sortie pour éviter ce problème.

Quant à 2), ils ne sont évidemment pas les mêmes, mais la formulation de softmax qu’ils ont donnée s’occupe de la question. Si vous n'utilisiez pas softmax, cela vous ferait apprendre d'énormes termes de biais qui supposent 1 pour chaque classe, quelle que soit l'entrée. Mais comme ils normalisent le softmax dans toutes les classes, le seul moyen de maximiser le résultat de la classe correcte est de le rendre relativement grand par rapport aux classes incorrectes.

Jamesmf
la source
"vous avez raison de dire que softmax garantit une sortie non nulle" - je sais que c'est théoriquement le cas. En réalité, peut-il arriver que (en raison de problèmes numériques) cela devienne 0?
Martin Thoma
Bonne question. Je suppose qu'il est parfaitement possible que la fonction d'exponentiation produise 0.0 si votre entrée est trop petite pour la précision de votre float. Cependant, je suppose que la plupart des implémentations ajoutent le minuscule terme positif pour garantir une entrée non nulle.
jamesmf
0

N'est-ce pas un problème que (dans ) puisse être 0?yilog(yi)

Oui, puisque n'est pas défini, mais ce problème est évité en utilisant en pratique.log(0)log(yi+ϵ)

Qu'est-ce qui est correct?
(a) ou (b) ?Hy(y):=iyilog(yi)
Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a) est correct pour une prédiction à plusieurs classes (il s’agit en fait d’une double somme), (b) est identique à (a) pour une prédiction à deux classes. Les deux sont entropie croisée.

Exemple:

Supposons que chaque donnée d'apprentissage porte l'étiquette et que le modèle prédit .xici{0,1}ci[0,1]

Pour 5 points de données, l'étiquette vraie et la prédiction du modèle sont: cici

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)} (1),

Définir les vecteurs et comme yiyi

  • yik:=1 si , et sinon, ci=k:=0

  • yik:=p(k|xi) est la probabilité que appartienne à la classe , qui est estimée par le modèle.xik

Exemple (1) en notation se transforme en: (yi,yi)

(yi,yi)={([1,0],[0.9,0.1]), ([1,0],[0.6,0.4]), ([1,0],[0.2,0.8]), ([0,1],[0.2,0.8]), ([0,1],[0.8,0.2])} ,

(A) et (b) sont calculés comme suit:

Hy(y)=1/5([log(0.9)+log(0.6)+log(0.2)]ci=0+[log(0.8)+log(0.2)]ci=1)=0.352

Dérivation:

Supposons qu'il y ait plusieurs classes à . Pour le point d’entraînement , est équivalent à ce qui correspond à 1 dans la position et à 0 ailleurs. Lorsque , nous voulons que la sortie du modèle soit proche de 1. Par conséquent, la perte de peut être définie comme , ce qui donne . Les pertes sur toutes les classes peuvent être combinées comme suit:1K
(xi,ci)ci=kyi=[0,..,1,0,..]kthyik=1yik=p(k|xi)(xi,k)log(yik)yik1log(yik)0

L(yi,yi)=k=1Kyiklog(yik) .

Lorsque , la perte de toutes les autres classes est désactivée, car , ainsi, par exemple, si true est , la perte serait être:yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim) .

La formule finale sur tous les points d'entraînement est la suivante:

Hy(y)=(xi,yi)k=1Kyiklog(yik) .

Pour la classification binaire, nous avons (étiquettes vraies) et (prédictions du modèle), donc (a) peut être réécrit comme suit:yi0=1yi1yi0=1yi1

Hy(y)=(xi,yi)yi1log(yi1)+yi0log(yi0)=(xi,yi)yi1log(yi1)+(1yi1)log(1yi1)

qui est le même que (b).

Entropie croisée (a) sur les classes (une somme)

L'entropie croisée (a) sur les classes est:

Hy(y)=k=1Kyklog(yk) ,

Cette version ne peut pas être utilisée pour la tâche de classification. Permet de réutiliser les données de l'exemple précédent:

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

Les probabilités de classe empiriques sont: , et ,y0=3/5=0.6y1=0.4

Les probabilités de classe estimées par le modèle sont les suivantes: ety0=3/5=0.6y1=0.4

(a) est calculé comme : .y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

Deux points de données et ont été classés, mais et ont été estimés correctement!(0,0.8)(1,0.2)y0y1

Si tous les 5 points ont été classés correctement comme : ,
(ci,ci)={(0,0.1),(0,0.4),(0,0.2),(1,0.8),(1,0.8)}

(a) reste le même, puisque est à nouveau estimé à .y0y0=3/5

Esmailien
la source