Una semplice spiegazione della funzione Softmax

Softmax trasforma valori reali arbitrari in probabilità, che sono spesso utili nel Machine Learning. La matematica dietro è abbastanza semplice: dati alcuni numeri,

  1. Alza e (la costante matematica) alla potenza di ognuno di quei numeri.
  2. Somma tutti gli esponenziali (potenze di eee). Questo risultato è il denominatore.
  3. Utilizza l’esponenziale di ogni numero come numeratore.
  4. Probabilità=NumeratoreDenominatore{Probabilità} = \frac{Numeratore}}{\testo{Denominatore}}Probabilità=DenominatoreNumeratore.

Scritto in modo più fantasioso, Softmax esegue la seguente trasformazione su nnn numeri 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

Gli output della trasformazione Softmax sono sempre nell’intervallo e sommano a 1. Quindi, formano una distribuzione di probabilità.

Un semplice esempio

Abbiamo i numeri -1, 0, 3 e 5. Per prima cosa, calcoliamo il denominatore:

Denominatore=e-1+e0+e3+e5=169.87\begin{aligned}{Denominatore} &= e^{-1} + e^0 + e^3 + e^5 \2637>= \boxed{169.87} \\fine{aligned}Denominatore=e-1+e0+e3+e5=169.87

Poi, possiamo calcolare i numeratori e le probabilità:

xxx Numeratore (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

Più grande è la xxx, maggiore è la sua probabilità. Inoltre, notate che le probabilità si sommano tutte a 1, come detto prima.

Implementazione di Softmax in Python

Utilizzare numpy rende tutto questo super facile:

import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) # 
np.exp() eleva e alla potenza di ogni elemento dell’array di input.

Nota: per gli utenti più avanzati, probabilmente vorrai implementare questo usando il trucco LogSumExp per evitare problemi di underflow/overflow.

Perché Softmax è utile?

Immagina di costruire una Rete Neurale per rispondere alla domanda: Questa foto è di un cane o di un gatto?

Un progetto comune per questa rete neurale avrebbe in uscita 2 numeri reali, uno che rappresenta il cane e l’altro il gatto, e applicare Softmax su questi valori. Per esempio, diciamo che la rete produce :

Animal xxx exe^xex Probability
Dog -1 0.368 0.047
Gatto 2 7.39 0.953

Questo significa che la nostra rete è sicura al 95,3% che la foto sia di un gatto. Softmax ci permette di rispondere a domande di classificazione con probabilità, che sono più utili di risposte più semplici (ad esempio, binario sì/no).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.