Uma simples explicação da função Softmax

Softmax transforma valores reais arbitrários em probabilidades, que são muitas vezes úteis no Aprendizado de Máquina. A matemática por trás é bastante simples: dados alguns números,

  1. Subir e (a constante matemática) para a potência de cada um desses números.
  2. Subir todos os exponenciais (potências de eee). Este resultado é o denominador.
  3. Utilizar o exponencial de cada número como seu numerador.
  4. Probabilidade=NumeradorDenominador\texto{Probabilidade} = \frac{\texto{\i}}{\i1}Probabilidade=NumeradorDenominador

Escrito mais fantasticamente, Softmax executa a seguinte transformação nos números nnn 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

As saídas da transformada Softmax estão sempre no intervalo e somam até 1. Portanto, elas formam uma distribuição de probabilidade.

Um Exemplo Simples

Dizemos que temos os números -1, 0, 3, e 5. Primeiro, calculamos o denominador:

Denominador=e-1+e0+e3+e5=169.87\begin{alinhado}\texto{Denominador} &= e^{-1} + e^0 + e^3 + e^5 \\\\&= \boxed{169.87} \\\{alinhado}Denominador=e-1+e0+e3+e5=169.87

Então, podemos calcular os numeradores e probabilidades:

xxx Numerador (exe^xex) Probabilidade (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

Quanto maior o xxx, maior a sua probabilidade. Observe também que as probabilidades somam todas até 1, como mencionado anteriormente.

Implementando Softmax em Python

Usar numpy torna isso super 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 para a potência de cada elemento no array de entrada.

Nota: para usuários mais avançados, você provavelmente vai querer implementar isto usando o truque LogSumExp para evitar problemas de sub/sobrefluxo.

Por que Softmax é útil?

Imagine construindo uma Rede Neural para responder a pergunta: É esta imagem de um cão ou de um gato?

Um desenho comum para esta rede neural teria como resultado 2 números reais, um representando o cão e o outro o gato, e aplicar Softmax sobre estes valores. Por exemplo, digamos as saídas da rede :

Animal xxx exe^xex Probabilidade
Dog -1 0.368 0,047
Cat 2 7,39 0,953

Isto significa que a nossa rede está 95,3% confiante de que a imagem é de um gato. Softmax nos permite responder perguntas de classificação com probabilidades, que são mais úteis que respostas mais simples (por exemplo, binário sim/não).

Deixe uma resposta

O seu endereço de email não será publicado.