Tout savoir sur lâactivation Softmax

Bienvenue sur apprendre-le-deep-learning.com !
Si vous ĂȘtes nouveau ici, vous voudrez sans doute lire mon livre "le calcul diffĂ©rentiel pour le Deep Learning". Cliquez ici pour tĂ©lĂ©charger le livre gratuitement !
La fonction dâactivation softmax est un Ă©lĂ©ment important dans la conception dâun rĂ©seau de neurones. Dans cet article tu vas apprendre :
- LâintĂ©rĂȘt de softmax.
- DâoĂč sort cette fonction.
- Comment elle est définie.
LâintĂ©rĂȘt des fonctions dâactivations
Dâabord de maniĂšre gĂ©nĂ©rale, les fonctions dâactivation servent Ă deux choses :
- Casser la linĂ©aritĂ© entre deux couches successives, si la fonction dâactivation portent sur les couches cachĂ©es du rĂ©seau.
- Remettre les valeurs dâune couche dans un intervalle donnĂ©, si la fonction dâactivation est sur la derniĂšre couche.
Lâactivation softmax sert exclusivement dans le deuxiĂšme cas comme on va lâexpliquer.
Le cadre dâutilisation de softmax est celui du problĂšme de classification multi-classe. Dans un tel problĂšme, on demande en gĂ©nĂ©ral que le modĂšle prĂ©dictif renvoie :
- Soit la classe prédite (identifiée par un numéros par exemple).
- Soit la liste des probabilitĂ©s dâappartenance Ă chaque classe. Le modĂšle renvoie alors un vecteur de probabilitĂ©, câest-Ă -dire une vecteur de nombres entre 0 et 1, dont la somme vaut 1.
Si le modĂšle est un rĂ©seau de neurones, alors il est obligĂ© dâĂȘtre dans le deuxiĂšme cas, car câest un modĂšle qui doit ĂȘtre dĂ©rivable si lâon veut utiliser la mĂ©thode du gradient.
La fonction sigmoĂŻde, qui est lâactivation la plus standard, ne renvoie pas de vecteur de probabilitĂ©s, car il nâest pas garanti que la somme des valeurs valent 1. On pourrait quand mĂȘme utiliser cette activation, mais dans ce cas il y a les inconvĂ©nients suivants :
- Lâutilisateur du rĂ©seau doit Ă la main normaliser les valeurs pour obtenir un vecteur de probabilitĂ©.
- Lors de lâapprentissage, le rĂ©seau doit lui mĂȘme apprendre que les valeurs cibles sont des vecteurs de probabilitĂ©s.
- Certaines mĂ©triques nĂ©cessitent que la prĂ©diction donnĂ©e par le rĂ©seau soit un vecteur de probabilitĂ©, comme par exemple lâentropie croisĂ©e (ce nâest pas le cas pour la mĂ©trique MeanSquareError).
Ainsi la fonction dâactivation softmax sert Ă forcer le rĂ©seau de neurones Ă renvoyer des vecteurs de probabilitĂ©s.
Lâactivation Softmax
La définition de softmax
Le principe de softmax est simple : on part dâun vecteur avec des coefficients quelconques, et on veut obtenir un vecteur avec des coefficients positifs de somme 1. Il suffit alors :
- De remplacer chaque
par
pour obtenir un nombre positif.
- Puis de diviser par la somme des coefficients pour le normaliser le résultat.
Ce qui donne comme formule , oĂč les
valent :
Illustrons sur un exemple concret. Si par exemple on prend :
Alors pour calculer , il faut calculer :
Ensuite diviser chacun de ces nombre par la somme :
Ce qui donne :
Ainsi . Et tu peux vérifier que la somme des coefficients valent bien 1.
Lien avec Argmax
DâoĂč vient le nom softmax ? Il vient du fait que câest une approximation de la fonction Argmax en une fonction lisse (smooth en anglais).
La version One-Hot-Encoded de Argmax renvoie renvoie un vecteur de probabilitĂ© de type Dirac, câest-Ă -dire une valeur Ă 1 et que des 0 ailleurs. Par exemple sur le vecteur , la version One-Hot-Encoded de son argmax est le vecteur
, oĂč la position du 1 est la position du plus grand coefficient de
. LâinconvĂ©nient est que cette fonction nâest pas dĂ©rivable.
Dans la dĂ©finition de softmax, lâutilisation de a pour rĂŽle de rendre les coefficients positifs, mais il a aussi pour effet de rendre dominant la plus grande valeur
par rapport autres. Autrement dit
vaut environ 1 lorsque
vaut
et vaut environ
sinon.
Tu peux dâailleurs voir que est une assez bonne approximation de
.
Ainsi softmax est une approximation dérivable de la version One-Hot-Encoded de Argmax, autrement dit softmax permet de calculer Argmax de maniÚre « soft ».
Lien avec la fonction sigmoĂŻde
La fonction sigmoïde est généralement utilisée comme activation de la derniÚre couche pour les problÚmes de classification binaire.
Il se trouve, en fait que sigmoĂŻde est la mĂȘme chose que softmax pour les classifications binaires. En effet, sigmoĂŻde peut sâĂ©crire :
Ce qui est précisément la premiÚre composante de softmax appliquée à . Tu peux vérifier que :
Et plus généralement, je te laisse démontrer que :
Ainsi, on peut voir softmax comme une généralisation de sigmoïde pour les classifications non binaires.
Comment implémenter softmax
La maniĂšre naĂŻve dâimplĂ©menter la fonction softmax est dâutiliser sa formule. Ce donnerait par exemple le code suivant en python.
1 2 3 4 5 6 7 8 9 10 11 12 13 | import math def softmax(x): y = x.copy() # copie de la liste x for i in range(len(x)): y[i] = math.exp(x[i]) #calcul de l'exponentielle sumExp = sum(y) # Calcul de la somme for i in range(len(x)): y[i] = y[i]/sumExp # normalisation return y |
A premiĂšre vue, tout semble correcte, mais en pratique cela pose problĂšme . En effet, lorsquâon entraĂźne un rĂ©seau de neurones, il arrive que les valeurs soient supĂ©rieures Ă 500, ce qui entraĂźne que lâexponentiel produit des valeurs infinies
.
Cependant, il existe une astuce pour contourner ce problĂšme. En effet, il faut remarquer la fonction softmax est invariante par translation, câest-Ă -dire que tout nombre :
Cela vient du fait que . Par conséquent pour éviter des valeurs, on peut décaler les valeurs par le maximum de
de sorte que lâexponentiel ne produise pas de valeurs infinies. Ainsi la bonne implĂ©mentation de softmax est la suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import math def softmax(x): y = x.copy() # copie de la liste x t = max(y) # valeur maximale for i in range(len(x)): y[i] = math.exp(x[i]-t) # decalage + calcul de l'exponentielle sumExp = sum(y) # Calcul de la somme for i in range(len(x)): y[i] = y[i]/sumExp # normalisation return y |
Conclusion
Maintenant tu sais tout sur la fonction softmax . NâhĂ©site pas Ă dire en commentaire si tu as des questions ou si cet article tâas aidĂ©
.

Le guide du calcul différentiel pour le Deep-Learning
En cadeau, recevez par email le guide du calcul différentiel pour apprendre du Deep-Learning
2 commentaires
Benabou · 6 mars 2024 à 15h33
Super article ! merci !
Auguste Hoang · 1 avril 2024 à 16h27
Merci pour ton commentaire !