Softmax transforme des valeurs réelles arbitraires en probabilités, qui sont souvent utiles en apprentissage automatique. Les mathématiques qui la sous-tendent sont assez simples : étant donné certains nombres,
- Elever e (la constante mathématique) à la puissance de chacun de ces nombres.
- Sommer toutes les exponentielles (puissances de eee). Ce résultat est le dénominateur.
- Utiliser l’exponentielle de chaque nombre comme son numérateur.
- Probabilité=NumérateurDénominateur\text{Probabilité} = \frac{\text{Numérateur}}{\text{Dénominateur}}Probabilité=DénominateurNumérateur.
Ecrit de manière plus fantaisiste, Softmax effectue la transformation suivante sur nnn nombres x1…xnx_1 \ldots x_nx1…xn :
s(xi)=exi∑j=1nexjs(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}s(xi)=∑j=1nexjexi
Les sorties de la transformation de Softmax sont toujours dans l’intervalle et s’additionnent à 1. Par conséquent, elles forment une distribution de probabilité.
Un exemple simple
Disons que nous avons les nombres -1, 0, 3 et 5. Tout d’abord, nous calculons le dénominateur :
Dénominateur=e-1+e0+e3+e5=169,87\begin{aligned}\text{Dénominateur} &= e^{-1} + e^0 + e^3 + e^5\\\&= \boxed{169.87} \\\\Nend{aligned}Dénominateur=e-1+e0+e3+e5=169.87
Alors, on peut calculer les numérateurs et les probabilités :
xxx | Numérateur (exe^xex) | Probabilité (ex169.87\frac{e^x}{169.87}169.87ex) |
---|---|---|
-1 | 0.368 | 0.002 |
0 | 1 | 0.006 |
3 | 20.09 | 0.118 |
5 | 148,41 | 0,874 |
Plus le xxx est grand, plus sa probabilité est élevée. Remarquez également que les probabilités s’additionnent toutes à 1, comme mentionné précédemment.
Mise en œuvre de Softmax en Python
L’utilisation de numpy rend cela super facile :
import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) #
Note : pour les utilisateurs plus avancés, vous voudrez probablement implémenter ceci en utilisant l’astuce LogSumExp pour éviter les problèmes de underflow/overflow.
Pourquoi Softmax est-il utile ?
Imaginez construire un réseau neuronal pour répondre à la question : Cette photo est-elle celle d’un chien ou d’un chat ?
Une conception commune pour ce réseau neuronal lui ferait sortir 2 nombres réels, l’un représentant le chien et l’autre le chat, et appliquerait Softmax sur ces valeurs. Par exemple, disons que le réseau sort :
Animal | xxx | exe^xex | Probabilité |
---|---|---|---|
Chien | -1 | 0.368 | 0,047 |
Chat | 2 | 7,39 | 0,953 |
Ce qui signifie que notre réseau est confiant à 95,3% que la photo est celle d’un chat. Softmax nous permet de répondre à des questions de classification avec des probabilités, qui sont plus utiles que des réponses plus simples (par exemple, binaire oui/non).