Una explicación sencilla de la función Softmax

Softmax convierte valores reales arbitrarios en probabilidades, que suelen ser útiles en el aprendizaje automático. La matemática que hay detrás es bastante sencilla: dados unos números,

  1. Suma e (la constante matemática) a la potencia de cada uno de esos números.
  2. Suma todos los exponenciales (potencias de eee). Este resultado es el denominador.
  3. Usa el exponencial de cada número como su numerador.
  4. Probabilidad=NumeradorDenominador\text{probabilidad} = \frac{text{Numerador}}{text{Denominador}}Probabilidad=DenominadorNumerador.

Escrito de forma más fantasiosa, Softmax realiza la siguiente transformación sobre nnn números x1…xnx_1 \ldots x_nx1…xn:

s(xi)=exi∑j=1nexjs(x_i) = \frac{e^{x_i}}{suma_{j=1}^n e^{x_j}}s(xi)=∑j=1nexjexi

Los resultados de la transformación Softmax están siempre en el rango y suman 1. Por lo tanto, forman una distribución de probabilidad.

Un ejemplo sencillo

Supongamos que tenemos los números -1, 0, 3 y 5. Primero, calculamos el denominador:

Denominador=e-1+e0+e3+e5=169,87\begin{aligned}\text{Denominador} &= e^{-1} + e^0 + e^3 + e^5 \&= \boxed{169,87} \\ {alineado}Denominador=e-1+e0+e3+e5=169,87

Entonces, podemos calcular los numeradores y las probabilidades:

xxx Numerador (exe^xex) Probabilidad (ex169.87frac{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

Cuanto mayor sea la xxx, mayor será su probabilidad. Además, fíjate en que todas las probabilidades suman 1, como se ha dicho antes.

Implementación de Softmax en Python

Usar numpy hace que esto sea súper fácil:

import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) # 
np.exp() eleva e a la potencia de cada elemento de la matriz de entrada.

Nota: para los usuarios más avanzados, probablemente querrá implementar esto usando el truco LogSumExp para evitar problemas de subdesbordamiento/sobredesbordamiento.

¿Por qué es útil Softmax?

Imagina construir una Red Neural para responder a la pregunta: ¿Es esta foto un perro o un gato?

Un diseño común para esta red neuronal tendría la salida de 2 números reales, uno representando el perro y el otro el gato, y aplicar Softmax en estos valores. Por ejemplo, digamos que la red produce :

Animal xxx exe^xex Probabilidad
Perro -1 0.368 0,047
Gato 2 7,39 0,953

Esto significa que nuestra red tiene un 95,3% de confianza en que la foto es de un gato. Softmax nos permite responder a preguntas de clasificación con probabilidades, que son más útiles que las respuestas más simples (por ejemplo, sí/no binario).

Deja una respuesta

Tu dirección de correo electrónico no será publicada.