Les fonctions d’erreur

La réponse en sortie d’un réseau de neurones est généralement assez simple à interpréter, du moins dans ses grandes lignes :

  • Pour un problème de régression, la sortie correspond à la valeur prédite.

  • Pour un problème de classification, le score le plus élevé indique la classe retenue.

  • Pour un problème de segmentation d’images, un masque binaire (0/1) indique les pixels ou voxels retenus.

  • Pour un problème de détection, les coordonnées des rectangles dans l’image indiquent les zones d’intérêt.

En revanche, définir une fonction d’erreur adéquate à connecter à la sortie du réseau afin de permettre l’apprentissage reste une tâche délicate. À titre d’exemple, plusieurs fonctions de loss sont présentées dans ce chapitre.

Mean Squared Error

Cette fonction d’erreur calcule la moyenne des carrés des différences entre deux séries de valeurs. Ainsi, la MSE entre un vecteur \(r\) contenant des valeurs de référence et un vecteur \(e\) contenant les valeurs estimées est définie par :

\[\frac{1}{n} \cdot \sum_{i=0}^{n-1} (e_i - r_i)^2\]

Par exemple, avec r=[6, 1, 5, 3, 5] et e=[10, 1, 2, 3, 5], on obtient :

\[\begin{split}\begin{array}{c|c|c|c} r & 6 & 1& 5 & 3 & 5 \\ \hline e & 10 & 1& 2 & 3 & 5 \\ \hline |e_i-r_i| & 4 & 0& 3 & 0 & 0 \\ \hline carré & 16 & 0& 9 & 0 & 0 \\ \end{array}\end{split}\]

Ainsi la somme des carrés est égale à 25. Comme il y a 5 éléments, nous obtenons au final une MSE de 5.

Pour les valeurs suivantes, calculez l’erreur MSE associée :

[ 1, 2, 3, 4 ] et [ -1, 4, 5, 2 ]

Dice

Dans un problème de segmentation d’images 2D, la sortie du réseau de neurones est généralement un masque de probabilités, de même dimension que l’image d’entrée. Chaque pixel est associé à une probabilité d’appartenir à l’objet recherché dans l’image.

Coefficient de Dice

Pour simplifier, considérons deux masques binaires 2D, notés r (référence) et e (estimation), où chaque pixel prend la valeur 0 ou 1. Le coefficient de Dice est défini par :

\[\mathrm{Dice}(r, e) = \frac{2 \lvert r \cap e \rvert}{\lvert r \rvert + \lvert e \rvert}\]
../_images/overlap.png

La valeur \(\mathrm{Dice}(r, e)\) mesure le taux de recouvrement (overlap) entre les deux ensembles de pixels. Elle vaut 1 lorsque les deux masques sont identiques, et 0 lorsqu’ils ne se recouvrent pas.

Dans le cas de masques probabilistes à valeurs dans [0,1] cette expression peut s’écrire sous la forme suivante :

\[\mathrm{Dice}(r, e) = \frac{2 \sum_i r_i.e_i}{\sum_i r_i + \sum_i e_i}\]

Fonction DiceLoss

Dans le cadre de l’apprentissage automatique, on convertit cette mesure de similarité en une fonction de perte à minimiser, appelée Dice loss :

\[\mathrm{DiceLoss}(r, e) = 1 - \mathrm{Dice}(r, e)\]

Lorsque les sorties du réseau prennent des valeurs continues dans l’intervalle \([0,1]\), le coefficient de Dice reste bien défini et permet de comparer un masque de probabilités à un masque de référence binaire.

Cette fonction d’erreur favorise directement un bon recouvrement global des objets, ce qui la rend particulièrement adaptée aux tâches de segmentation d’images 2D.

Softmax & Cross Entropy

Softmax

Dans le problème de la classification d’images, le réseau de neurones associe à une image plusieurs valeurs réelles correspondant à une sorte de score pour chaque catégorie étudiée. Il est naturel de supposer qu’une valeur supérieure aux autres correspond à une catégorie plus probable. Mais comment interpréter des valeurs négatives ou nulles ? Pour cela, nous utilisons la fonction Softmax qui permet de transformer toute série de valeurs \(X=(x_j)_{0\le j<n}\) en une distribution de probabilités. La i-ème composante du vecteur \(Softmax(X)\) est définie ainsi :

\[Softmax\left(X\right)_i = \frac{\exp(x_i)}{\sum_{j=0}^{n-1}{\exp(x_j)}}\]

Questions :

  • Justifiez que les valeurs obtenues par la fonction Softmax() sont dans l’intervalle [0,1]

  • Vérifiez que leur somme est égale à 1

Voici un exemple :

\[\begin{split}\begin{array}{c|c|c|c}& Input & exp(x_i) & Total & exp(x_i)/Total\\ \hline x_0 & -1 & 0,368 & & 1,59\% \\ x_1 & 1 & 2,718 & 23,172 & 11,73\% \\ x_2 & 3 & 20,08 & & 86,68\% \\ \hline \end{array}\end{split}\]

Nous pouvons remarquer deux propriétés intéressantes :

  • Croissance : si la valeur en sortie du réseau augmente alors la probabilité en sortie de la fonction Softmax augmente aussi

  • Stabilité : si les valeurs en sortie du réseau se translatent d’une constante, les probabilités sont inchangées

Pour le tenseur d’entrée suivant, calculez les probabilités obtenues en sortie grâce à l’application de la fonction Softmax. Donnez les valeurs en pourcent avec 2 chiffres :

\(x_i\)

Probabilités

\(ln(1)\)

\(ln(1)\)

\(ln(3)\)

Si une valeur d’entrée \(x_i\) diminue et que les autres restent identiques, alors sa probabilité augmente.

Les probabilités associées aux valeurs [2,8,9] sont les mêmes que celles associées aux valeurs [4,16,18].

Des valeurs en entrée [1,1,1,1] donnent des probabilités équiprobables.

Si une valeur d’entrée \(x_i\) double, alors sa probabilité associée double aussi.

La fonction Softmax peut gérer des entrées avec des valeurs négatives.

Si toutes les valeurs d’entrée sont strictement négatives, alors l’évaluation de la fonction Softmax produit une erreur d’exécution.

Les probabilités associées aux valeurs [2,8,9] sont les mêmes que celles associées aux valeurs [12,18,19].

Si une valeur d’entrée reste constante et que toutes les autres valeurs diminuent, alors sa probabilité augmente.

Logit

Il s’agit d’un terme ayant un sens spécifique dans le domaine de l’apprentissage automatique. Le logit désigne les valeurs brutes (non normalisées) en sortie du réseau. Ainsi, dans les problèmes de classification, le logit est le vecteur de valeurs qui va ensuite être transmis à la fonction Softmax pour normalisation. Le logit est un vecteur de valeurs quelconques (non-normalisées) alors que le vecteur en sortie de la fonction Softmax est un vecteur de probabilités dont les valeurs sont dans l’intervalle [0,1] et dont la somme vaut 1.

L’entropie

Nous introduisons la notion d’entropie permettant de mesurer la certitude ou l’incertitude ! Lorsque nous étudions une distribution de probabilités, deux scénarios extrêmes sont possibles :

  • Un évènement se produit quasiment tout le temps. Aucun suspense, une probabilité dans la distribution domine les autres. On associe cette situation à une entropie faible voire nulle.

  • Tous les évènements sont équiprobables. Il est, dans ce cas, impossible de prédire l’avenir de manière certaine, nous sommes dans l’incertitude. Nous associons ce scénario à une entropie élevée.

Considérons une variable aléatoire discrète prenant des valeurs \(y_0, \ldots, y_k\) selon les probabilités \(p_0, \ldots, p_k\). Nous définissons l’entropie de cette distribution par :

\[H(p) = - \sum_{i=0}^{k} p_i \ln(p_i)\]

Quelques remarques :

  • L’entropie est une grandeur positive ou nulle

  • L’entropie atteint son maximum lorsque les probabilités sont équiprobables.

Explications : les probabilités étant des valeurs dans ]0,1], les termes en ln sont tous négatifs. Ainsi, le signe – avant le grand sigma donne un résultat positif. L’entropie est nulle lorsqu’il existe un seul évènement de probabilité 1. Nous pouvons montrer que le maximum d’entropie se produit quand il y a équiprobabilité lorsque k+1=2. En effet, dans ce cas, nous pouvons écrire : \(p_1 = 1 - p_0\). De cette façon, nous avons \(H(p) = -p_0\ln(p_0)-(1-p_0)\ln(1-p_0)\). En dérivant par rapport à \(p_0\), nous obtenons \(dH/dp_0=-\ln(p_0)+\ln(1-p_0)\), dérivée qui s’annule pour \(p_0=p_1=\frac{1}{2}\).

Examinons un exemple avec trois boîtes contenant des billes rouges et des billes vertes. Ici nous avons \(y_0 = {rouge}\) et \(y_1 = {verte}\).

../_images/entropie.png

Calculons les valeurs de l’entropie pour chacune de ces situations :

  • Boîte de gauche : \(H=-14/30\cdot \ln(14/30) - 16/30\cdot \ln(16/30) = 0.6909\)

  • Boîte au centre : \(H=-26/30\cdot \ln(26/30) - 4/30\cdot \ln(4/30) = 0.3926\)

  • Boîte de droite : \(H=-30/30\cdot \ln(30/30) = 0\)

Interprétations :

  • L’entropie de la boîte de gauche est proche de l’entropie maximale \(\ln(2)=0.6931\), l’incertitude est donc très haute : il est impossible de prédire l’issue avec certitude, si nous tirons une bille, elle peut être rouge comme verte.

  • Dans la boîte au centre, l’entropie diminue mais reste haute, si nous tirons une bille, il y aura prédominance d’une couleur, mais ce n’est pas automatique.

  • Dans la boîte de droite, l’entropie est nulle, la certitude est totale, si nous tirons une bille, elle sera toujours de la même couleur.

Cross-Entropy Loss

Nous utilisons la notion d’entropie pour construire la fonction d’erreur Cross-Entropy Loss. L’entropie croisée entre deux distributions de probabilités discrètes, l’une correspondant à la référence notée r et l’autre correspondant à l’estimation du modèle notée e, est définie par :

\[\mathrm{CrossEntropyLoss}(r, e) = - \sum_{i \,:\, r_i > 0} r_i \, \ln(e_i)\]

L’entropie croisée est minimale lorsque les deux distributions sont identiques, c’est-à-dire lorsque \(r_i = e_i\) pour tout \(i\). Minimiser la Cross-Entropy Loss revient donc à faire tendre la distribution prédite e vers la distribution de référence r.

Encodage one-hot

Dans le problème de classification, la distribution de référence \(r\) est souvent encodée en one-hot, c’est-à-dire que la distribution va être nulle partout sauf pour la catégorie \(k\) correspondant à la bonne classe :

\[r = [0,\ldots,0,\underset{k}{1},0,\ldots,0]\]

L’expression de l’entropie croisée se réécrit donc dans ce contexte :

\[CrossEntropyLoss(r,e) = - \ln{\left(e_k\right)}\]

Généralement, vous allez trouver dans les librairies deux fonctions pour la CrossEntropyLoss, elles sont identiques mais diffèrent par la représentation de l’encodage one-hot :

  • Si la distribution \(r\) est encodée sous la forme d’un vecteur de 0 avec une seule valeur 1

  • Si la distribution \(r\) est encodée par le numéro de la catégorie \(k\)

L’entropie d’une distribution de probabilités discrète est toujours positive ou nulle.

L’entropie atteint son maximum avec des probabilités équiprobables.

Avec \(k=0\) et \(e_0=\frac{1}{e}\) et \(e_1=1-e_0\), alors l’entropie croisée vaut \(1\).

L’erreur associée à l’entropie croisée est nulle lorsque les probabilités sont équiprobables.

Instabilité numérique

Cette partie est réservée aux curieux, elle peut être sautée pour ceux qui sont en retard.

La fonction Softmax peut être sujette à des instabilités numériques. En effet, avec la fonction exponentielle, les valeurs produites peuvent monter très très vite. Or, les calculs dans le réseau sont faits en Float32 dont la valeur représentable maximale est \(3.402823\mbox{E}\texttt{+} 38\). Ainsi, il suffit qu’une entrée de la fonction Softmax soit supérieure à 88.72 pour que le résultat de l’exponentielle soit égal à +∞. La suite des calculs sera forcément erronée. Voici un exemple :

\[\begin{split}\begin{array}{c|c|c} x_i & exp(x_i) & exp(x_i) \mbox{ en Float32} \\ \hline 80 & 5,540622\mbox{E}\texttt{+}34 & 5,540622\mbox{E}\texttt{+}34 \\ 89 & 4,489613\mbox{E}\texttt{+}38 & +\inf \\ 90 & 1,220403\mbox{E}\texttt{+}39 & +\inf \\ \hline \end{array}\end{split}\]

Pour éviter ce problème, nous allons soustraire à l’ensemble des valeurs \(x_i\) leur maximum noté c. Ce décalage, suivant les propriétés de la fonction Softmax, ne change pas les valeurs des probabilités. Ainsi, nous évitons avec cette astuce la saturation :

\[\begin{split}\begin{array}{c|c|c|c|c|c} x_i & c & x'_i=x_i-c & exp(x'_i) & Total & Prob_i\\ \hline 80 & & -10 & 4,54\mbox{E}\texttt{-}05 & & 0,003\% \\ 89 & 90 & -1 & 0,367879 & 1,367925 & 26,893\% \\ 90 & & 0 & 1 & & 73,103\% \\ \hline \end{array}\end{split}\]

Une fois cette première astuce utilisée, nous allons rencontrer un autre problème pour les exposants avec une valeur négative forte. En effet, en Float32, le plus petit nombre positif représentable est \(m=1,4\mbox{E}\texttt{-}45\). Ainsi, lorsqu’il existe une valeur \(x'_i<-103\), nous allons obtenir un résultat nul :

\[\begin{split}\begin{array}{c|c|c|c|c|c} x_i & c & x'_i=x_i-c & exp(x'_i) & Total & Prob_i\\ \hline 2 & & -108 & 0 & & 0 \% \\ 108 & 110 & -2 & 0,135335 & 1,135335 & 11.92\% \\ 110 & & 0 & 1 & & 88.08\% \\ \hline \end{array}\end{split}\]

En soi, ce résultat n’est pas incohérent car la probabilité est quasi nulle. Cependant, nous injectons cette valeur nulle dans la CrossEntropyLoss qui applique un logarithme ce qui produit une erreur d’exécution. Pour gérer ce problème, nous allons utiliser une deuxième astuce en appliquant directement la fonction ln sur la formule de la fonction Softmax :

\[\ln(Softmax_i(X^\prime))=\ln\left(\frac{\exp({x^\prime}_i)}{\sum_{j}{\exp({x^\prime}_j)}}\right)\]

En développant cette expression, nous obtenons :

\[\ln(Softmax_i(X^\prime))=\ {x^\prime}_i-\ln{\left(\sum_{j}\exp{\left({x^\prime}_j\right)}\right)}\]

Les valeurs \(\exp({x^\prime}_j)\) sont strictement positives et par conséquent le résultat du grand sigma est lui aussi positif strict. Ainsi, le logarithme ne reçoit jamais une valeur nulle ou négative et son évaluation n’est plus problématique.

Ainsi, le couple SoftMax/CrossEntropyLoss peut être remplacé par un nouveau couple Log Softmax / Negative Log Likelihood Loss correspondant à la fonction Cross Entropy Loss privée de son logarithme :

\[Negative\ Log\ Likelihood\ Loss (X,icat) =- x_{icat}\]

Il ne s’agit pas d’une nouvelle fonction d’erreur ou d’une nouvelle fonction Softmax mais de variantes offrant une meilleure stabilité numérique.