# Função softmax

A função softmax, também conhecida como softargmax$^{:184}$ ou função exponencial normalizada,$^{:198}$ converte um vetor de K números reais em uma distribuição de probabilidade de K resultados possíveis. É uma generalização da função logística para várias dimensões e é usada na regressão logística multinomial [en]. A função softmax é frequentemente usada como a última função de ativação [en] de uma rede neural para normalizar a saída de uma rede para uma distribuição de probabilidade sobre as classes de saída previstas, com base no axioma de escolha de Luce [en].

## Definição

A função softmax recebe como entrada um vetor z de K números reais e o normaliza em uma distribuição de probabilidade que consiste em K probabilidades proporcionais aos exponenciais dos números de entrada. Ou seja, antes de aplicar a softmax, alguns componentes do vetor podem ser negativos ou maiores que um e podem não somar 1, mas, após aplicar a softmax, cada componente estará no intervalo $(0,1)$, e os componentes serão somados a 1, de modo que possam ser interpretados como probabilidades. Além disso, os componentes de entrada maiores corresponderão a probabilidades maiores.
A função softmax padrão (unitária) $\sigma :\mathbb {R} ^{K}\mapsto (0,1)^{K}$, na qual $K\geq 1$ define-se por $\sigma (\mathbf {z} )_{i}={\frac {e^{z_{i}}}{\sum _{j=1}^{K}e^{z_{j}}}}\ \ {\text{ for }}i=1,\dotsc ,K{\text{ and }}\mathbf {z} =(z_{1},\dotsc ,z_{K})\in \mathbb {R} ^{K}.$
Em outras palavras, é aplicada a função exponencial padrão a cada elemento $z_{i}$ do vetor de entrada $\mathbf {z}$ e esses valores são normalizados dividindo-se pela soma de todos esses exponenciais. A normalização garante que a soma dos componentes do vetor de saída $\sigma (\mathbf {z} )$ seja 1. O termo "softmax" deriva dos efeitos de amplificação do exponencial em qualquer máximo no vetor de entrada. Por exemplo, o softmax padrão de $(1,2,8)$ é aproximadamente $(0.001,0.002,0.997)$, o que equivale a atribuir quase todo o peso unitário total no resultado à posição do elemento máximo do vetor (de 8).
Em geral, em vez de e, uma Base [en] diferente b > 0 pode ser usada. Se 0 < b < 1, componentes de entrada menores resultarão em probabilidades de saída maiores, e a diminuição do valor de b criará distribuições de probabilidade mais concentradas em torno das posições dos menores valores de entrada.
Por outro lado, como acima, se b > 1 componentes de entrada maiores resultarão em probabilidades de saída maiores, e o aumento do valor de b criará distribuições de probabilidade mais concentradas em torno das posições dos maiores valores de entrada. Escrever $b=e^{\beta }$ ou $b=e^{-\beta }$ (para β real) produz as expressões:$\sigma (\mathbf {z} )_{i}={\frac {e^{\beta z_{i}}}{\sum _{j=1}^{K}e^{\beta z_{j}}}}{\text{ ou }}\sigma (\mathbf {z} )_{i}={\frac {e^{-\beta z_{i}}}{\sum _{j=1}^{K}e^{-\beta z_{j}}}}{\text{ for }}i=1,\dotsc ,K.$Em alguns campos, a base é fixa, correspondendo a uma escala fixa,, enquanto em outros o parâmetro β é variado.

## Interpretações
### Arg max suave

O nome "softmax" é enganoso. A função não é um máximo suave [en] (ou seja, uma aproximação suave da função máxima), mas uma aproximação suave da função arg max [en]: a função cujo valor é o "índice" do maior elemento de um vetor. De fato, o termo "softmax" também é usado para a função LogSumExp [en], que é um máximo suave. Por esse motivo, alguns preferem o termo mais preciso "softargmax", mas o termo "softmax" é convencional no aprendizado de máquina. Esta seção usa o termo "softargmax" para enfatizar essa interpretação.
Formalmente, em vez de considerar o arg max como uma função com saída categórica $1,\dots ,n$ (correspondente ao índice), considere a função arg max com representação one-hot da saída (supondo que haja um arg máximo exclusivo):
    $\operatorname {arg\,max} (z_{1},\,\dots ,\,z_{n})=(y_{1},\,\dots ,\,y_{n})=(0,\,\dots ,\,0,\,1,\,0,\,\dots ,\,0),$
em que a coordenada de saída $y_{i}=1$ se e somente se $i$ for o arg max de $(z_{1},\dots ,z_{n})$, o que significa que $z_{i}$ é o único valor máximo de $(z_{1},\,\dots ,\,z_{n})$. Por exemplo, nessa codificação, $\operatorname {arg\,max} (1,5,10)=(0,0,1),$ já que o terceiro argumento é o máximo.
Isso pode ser generalizado para vários valores de arg max (vários iguais a $z_{i}$ sendo o máximo) dividindo o 1 entre todos os args max; formalmente 1/k onde k é o número de argumentos que assumem o máximo. Por exemplo, $\operatorname {arg\,max} (1,\,5,\,5)=(0,\,1/2,\,1/2),$ já que o segundo e o terceiro argumento são ambos máximos. No caso de todos os argumentos serem iguais, isso é simplesmente $\operatorname {arg\,max} (z,\dots ,z)=(1/n,\dots ,1/n).$ Os pontos z com vários valores de arg max são pontos singulares (ou singularidades, e formam o conjunto singular) - esses são os pontos em que arg max é descontínuo (com uma descontinuidade de salto [en]) - enquanto os pontos com um único arg max são conhecidos como pontos não-singulares ou regulares.
Com a última expressão dada na introdução, softargmax é agora uma aproximação suave de arg max: como $\beta \to \infty$, softargmax converge para arg max. Há várias noções de convergência de uma função; softargmax converge para arg max pontualmente, o que significa que, para cada entrada fixa z} como $\beta \to \infty$, $\sigma _{\beta }(\mathbf {z} )\to \operatorname {arg\,max} (\mathbf {z} ).$ No entanto, softargmax não converge uniformemente para arg max, o que significa intuitivamente que pontos diferentes convergem em taxas diferentes e podem convergir de forma arbitrariamente lenta. De fato, o softargmax é contínuo, mas o arg max não é contínuo no conjunto singular em que duas coordenadas são iguais, enquanto o limite uniforme de funções contínuas é contínuo. O motivo pelo qual ele não converge uniformemente é que, para entradas em que duas coordenadas são quase iguais (e uma é a máxima), o arg max é o índice de uma ou outra, portanto, uma pequena alteração na entrada produz uma grande alteração na saída. Por exemplo, $\sigma _{\beta }(1,\,1.0001)\to (0,1),$ mas $\sigma _{\beta }(1,\,0.9999)\to (1,\,0),$ e $\sigma _{\beta }(1,\,1)=1/2$ para todas as entradas: quanto mais próximos os pontos estiverem do conjunto singular $(x,x)$, mais lentamente eles convergem. No entanto, o softargmax faz converge de forma compacta [en] no conjunto não-singular.
Por outro lado, como $\beta \to -\infty$, softargmax converge para arg min da mesma forma, onde aqui o conjunto singular são pontos com dois valores de arg min. Na linguagem da análise tropical [en], o softmax é uma deformação [en] ou "quantização" de arg max e arg min, correspondendo ao uso do semi-anel logarítmico [en] em vez do semi-anel tropical máximo [en] (respectivamente semi-anel tropical mínimo [en]), e a recuperação do arg max ou arg min tomando o limite é chamada de "tropicalização" ou "dequantização".
Também ocorre que, para qualquer β fixo, se uma entrada $z_{i}$ for muito maior do que as outras "relativas" à temperatura, $T=1/\beta$, o resultado será aproximadamente o arg max. Por exemplo, uma diferença de 10 é grande em relação a uma temperatura de 1:$\sigma (0,\,10):=\sigma _{1}(0,\,10)=\left(1/\left(1+e^{10}\right),\,e^{10}/\left(1+e^{10}\right)\right)\approx (0.00005,\,0.99995)$No entanto, se a diferença for pequena em relação à temperatura, o valor não estará próximo do valor máximo de arg. Por exemplo, uma diferença de 10 é pequena em relação a uma temperatura de 100:$\sigma _{1/100}(0,\,10)=\left(1/\left(1+e^{1/10}\right),\,e^{1/10}/\left(1+e^{1/10}\right)\right)\approx (0.475,\,0.525).$Como $\beta \to \infty$, a temperatura vai para zero, $T=1/\beta \to 0$, portanto, todas as diferenças acabam se tornando grandes (em relação a uma temperatura cada vez menor), o que proporciona outra interpretação para o comportamento limite.

### Teoria da probabilidade

Na teoria da probabilidade, a saída da função softargmax pode ser usada para representar uma distribuição categórica [en], ou seja, uma distribuição de probabilidade sobre K diferentes resultados possíveis.

### Mecânica estatística

Na mecânica estatística, a função softargmax é conhecida como distribuição de Boltzmann (ou distribuição de Gibbs):$^{:7}$ o conjunto de índices ${1,\,\dots ,\,k}$ são os microestados do sistema; as entradas $z_{i}$ são as energias desse estado; o denominador é conhecido como a função de partição, geralmente denotada por Z; e o fator β é chamado de frieza (ou beta termodinâmico, ou temperatura inversa).

## Aplicações

A função softmax é usada em vários métodos de classificação multiclasse [en], como a regressão logística multinomial [en] (também conhecida como regressão softmax)$^{:206–209}$ análise discriminante linear [en] multiclasse, classificador Naive Bayes e redes neurais artificiais. Especificamente, na regressão logística multinomial e na análise discriminante linear, a entrada para a função é o resultado de K funções lineares distintas, e a probabilidade prevista para a j-ésima classe, dado um vetor de amostra x e um vetor de ponderação w é:
    $P(y=j\mid \mathbf {x} )={\frac {e^{\mathbf {x} ^{\mathsf {T}}\mathbf {w} _{j}}}{\sum _{k=1}^{K}e^{\mathbf {x} ^{\mathsf {T}}\mathbf {w} _{k}}}}$
Isso pode ser visto como a composição de funções lineares K $\mathbf {x} \mapsto \mathbf {x} ^{\mathsf {T}}\mathbf {w} _{1},\ldots ,\mathbf {x} \mapsto \mathbf {x} ^{\mathsf {T}}\mathbf {w} _{K}$ e a função softmax (em que $\mathbf {x} ^{\mathsf {T}}\mathbf {w}$ denota o produto interno de $\mathbf {x}$ e $\mathbf {w}$). A operação é equivalente à aplicação de um operador linear definido por $\mathbf {w}$ aos vetores $\mathbf {x}$, transformando assim a entrada original, provavelmente altamente dimensional, em vetores em um espaço $\mathbb {R} ^{K}$ dimensional K.

### Redes neurais

A função softmax padrão é frequentemente usada na camada final de um classificador baseado em rede neural. Essas redes são comumente treinadas em um regime de perda logarítmica (ou entropia cruzada), fornecendo uma variante não linear da regressão logística multinomial. Como a função mapeia um vetor e um índice específico $i$ para um valor real, a derivada precisa levar o índice em consideração:${\frac {\partial }{\partial q_{k}}}\sigma ({\textbf {q}},i)=\sigma ({\textbf {q}},i)(\delta _{ik}-\sigma ({\textbf {q}},k)).$Essa expressão é simétrica nos índices $i,k$ e, portanto, também pode ser expressa como
    ${\frac {\partial }{\partial q_{k}}}\sigma ({\textbf {q}},i)=\sigma ({\textbf {q}},k)(\delta _{ik}-\sigma ({\textbf {q}},i)).$
Aqui, o delta de Kronecker é usado por simplicidade (cf. a derivada de uma função sigmoide, sendo expressa por meio da própria função).
Para obter cálculos numéricos estáveis da derivada, geralmente subtrai-se uma constante do vetor de entrada. Em teoria, isso não altera a saída e nem a derivada. Mas é mais estável, pois pode controlar explicitamente o maior valor computado em cada expoente. Se a função for dimensionada com o parâmetro $\beta$, essas expressões deverão ser multiplicadas por $\beta$.

### Aprendizado por reforço

No segmento de aprendizado por reforço [en], uma função softmax pode ser usada para converter valores em probabilidades de ação. A função comumente usada é:$P_{t}(a)={\frac {\exp(q_{t}(a)/\tau )}{\sum _{i=1}^{n}\exp(q_{t}(i)/\tau )}}{\text{,}}$em que o valor da ação $q_{t}(a)$ corresponde à recompensa esperada de seguir a ação a e $\tau$ é chamado de parâmetro de temperatura (em alusão à mecânica estatística). Para temperaturas altas ($\tau \to \infty$), todas as ações têm praticamente a mesma probabilidade e, quanto mais baixa a temperatura, mais as recompensas esperadas afetam a probabilidade. Para uma temperatura baixa ($\tau \to 0^{+}$), a probabilidade da ação com a maior recompensa esperada tende a 1.

## Complexidade computacional e soluções

Em aplicações de redes neurais, o número K de resultados possíveis costuma ser grande, por exemplo, no caso de modelos de linguagem neural que preveem o resultado provável de um vocabulário que pode conter milhões de palavras possíveis.
Isso pode tornar os cálculos para a camada softmax (ou seja, as multiplicações de matriz para determinar o $z_{i}$, seguidas pela aplicação da própria função softmax) computacionalmente caros. Além disso, o método de retropropagação [en] de declive gradiente para treinar essa rede neural envolve o cálculo do softmax para cada exemplo de treinamento, e o número de exemplos de treinamento também pode se tornar grande. O esforço computacional para o softmax tornou-se um fator limitante importante no desenvolvimento de modelos de linguagem neural maiores, motivando várias soluções para reduzir o tempo de treinamento.
As abordagens que reorganizam a camada de softmax para um cálculo mais eficiente incluem o softmax hierárquico e o softmax diferenciado. O softmax hierárquico (introduzido por Morin e Bengio em 2005) usa uma estrutura de árvore binária em que os resultados (palavras do vocabulário) são as folhas e os nós intermediários são "classes" de resultados adequadamente selecionadas, formando variáveis latentes. A probabilidade desejada (valor softmax) de uma folha (resultado) pode então ser calculada como o produto das probabilidades de todos os nós no caminho da raiz até essa folha. Idealmente, quando a árvore estiver equilibrada, isso reduziria a complexidade computacional de $O(K)$ para $O(\log _{2}K)$. Na prática, os resultados dependem da escolha de uma boa estratégia para agrupar os resultados em classes. Uma árvore de Huffman foi usada para isso nos modelos word2vec [en] do Google (introduzidos em 2013) para obter escalabilidade.
Um segundo tipo de solução se baseia na aproximação do softmax (durante o treinamento) com funções de perda modificadas que evitam o cálculo do fator de normalização completo. Isso inclui métodos que restringem a soma de normalização a uma amostra de resultados (amostragem de importância, amostragem de alvo, por exemplo).

## Propriedades matemáticas

Geometricamente, a função softmax mapeia o espaço vetorial $\mathbb {R} ^{K}$ para a fronteira do simplex padrão $(K-1)$, reduzindo a dimensão em um (o intervalo é um simplex $(K-1)$-dimensional em um espaço $K$-dimensional), devido à restrição linear de que todos os resultados somam 1, o que significa que ele está em um hiperplano. Ao longo da diagonal principal $(x,\,x,\,\dots ,\,x),$ a softmax é apenas a distribuição uniforme nos resultados, $(1/n,\dots ,1/n)$: pontuações iguais geram probabilidades iguais. De modo geral, o softmax é invariável sob tradução pelo mesmo valor em cada coordenada: adicionando $\mathbf {c} =(c,\,\dots ,\,c)$ às entradas $\mathbf {z}$, obtém-se $\sigma (\mathbf {z} +\mathbf {c} )=\sigma (\mathbf {z} )$, porque ele multiplica cada expoente pelo mesmo fator, $e^{c}$ (porque $e^{z_{i}+c}=e^{z_{i}}\cdot e^{c}$), de modo que as proporções não mudam:
    $\sigma (\mathbf {z} +\mathbf {c} )_{j}={\frac {e^{z_{j}+c}}{\sum _{k=1}^{K}e^{z_{k}+c}}}={\frac {e^{z_{j}}\cdot e^{c}}{\sum _{k=1}^{K}e^{z_{k}}\cdot e^{c}}}=\sigma (\mathbf {z} )_{j}.$
Geometricamente, a softmax é constante ao longo das diagonais: essa é a dimensão que é eliminada e corresponde ao resultado da softmax ser independente de uma tradução nas pontuações de entrada (uma escolha de pontuação 0). É possível normalizar as pontuações de entrada supondo que a soma seja zero (subtraia a média: $\mathbf {c}$ onde c=1/n ∑z$_i${\textstyle c={\frac {1}{n}}\sum z_{i}}) e, em seguida, a softmax usa o hiperplano de pontos que somam zero, ∑z$_i$=0{\textstyle \sum z_{i}=0}, para o simplex aberto de valores positivos que somam 1 ∑σ(z)$_i$=1{\textstyle \sum \sigma (\mathbf {z} )_{i}=1}, de forma análoga a como o expoente leva de 0 a 1, $e^{0}=1$ e é positivo.
Por outro lado, a softmax não é invariável sob escala. Por exemplo, $\sigma {\bigl(0,\,1){\bigr )}={\bigl1/(1+e),\,e/(1+e){\bigr )}$ mas $\sigma {\bigl(0,2){\bigr )}={\bigl1/\left(1+e^{2}\right),\,e^{2}/\left(1+e^{2}\right){\bigr )}.$
A função logística padrão é o caso especial de um eixo unidimensional em um espaço bidimensional, por exemplo, o eixo x no plano (x, y). Uma variável é fixada em 0 (digamos $z_{2}=0$), portanto $e^{0}=1$, e a outra variável pode variar, denotando $z_{1}=x$, portanto e$^{z1}$/∑$_{k=1}$$^2$e$^{zk}$=e$^x$/(e$^x$+1), {\textstyle e^{z_{1}}/\sum _{k=1}^{2}e^{z_{k}}=e^{x}/\left(e^{x}+1\right), } a função logística padrão, e e$^{z2}$/∑$_{k=1}$$^2$e$^{zk}$=1/(e$^x$+1), {\textstyle e^{z_{2}}/\sum _{k=1}^{2}e^{z_{k}}=1/\left(e^{x}+1\right), } seu complemento (o que significa que eles somam 1). A entrada unidimensional poderia, alternativamente, ser expressa como a linha $(x/2,\,-x/2)$, com saídas $e^{x/2}/\left(e^{x/2}+e^{-x/2}\right)=e^{x}/\left(e^{x}+1\right)$ e $e^{-x/2}/\left(e^{x/2}+e^{-x/2}\right)=1/\left(e^{x}+1\right).$
A função softmax também é o gradiente da função LogSumExp [en], um máximo suave [en]:
    ${\frac {\partial }{\partial z_{i}}}\operatorname {LSE} (\mathbf {z} )={\frac {\exp z_{i}}{\sum _{j=1}^{K}\exp z_{j}}}=\sigma (\mathbf {z} )_{i},\quad {\text{ for }}i=1,\dotsc ,K,\quad \mathbf {z} =(z_{1},\,\dotsc ,\,z_{K})\in \mathbb {R} ^{K},$
em que a função LogSumExp é definida como $\operatorname {LSE} (z_{1},\,\dots ,\,z_{n})=\log \left(\exp(z_{1})+\cdots +\exp(z_{n})\right)$.

## Histórico

A função softmax foi usada na mecânica estatística como a distribuição de Boltzmann no artigo fundamental Boltzmann (1868),formalizada e popularizada no influente livro-texto Gibbs (1902).
O uso da softmax na teoria da decisão é creditado a Luce (1959),$^{:1}$ que usou o axioma da independência de alternativas irrelevantes [en] na teoria da escolha racional para deduzir a softmax no axioma de escolha de Luce [en] para preferências relativas.
No aprendizado de máquina, o termo "softmax" é creditado a John S. Bridle em dois artigos de conferência de 1989, Bridle (1990a):$^{:1}$ e Bridle (1990b):
   Dado um conjunto de valores sem restrições, $V_{j}(x)$, podemos garantir ambas as condições usando uma transformação exponencial normalizada:
       $Q_{j}(x)=\left.e^{V_{j}(x)}\right/\sum _{k}e^{V_{k}(x)}$

## Exemplo

Se pegarmos uma entrada de [1, 2, 3, 4, 1, 2, 3], a softmax disso é [0,024, 0,064, 0,175, 0,475, 0,024, 0,064, 0,175]. A saída tem a maior parte de seu peso onde o "4" estava na entrada original. É para isso que a função é normalmente usada: para destacar os maiores valores e suprimir os valores que estão significativamente abaixo do valor máximo. Mas observe: a softmax não é invariante em escala, portanto, se a entrada fosse [0.1, 0.2, 0.3, 0.4, 0.1, 0.2, 0.3] (que soma 1,6), a softmax seria [0.125, 0.138, 0.153, 0.169, 0.125, 0.138, 0.153]. Isso mostra que, para valores entre 0 e 1, a softmax, de fato, reduz a ênfase no valor máximo (observe que 0,169 não é apenas menor que 0,475, mas também é menor que a proporção inicial de 0,4/1,6=0,25). Cálculo desse exemplo usando o código Python:
Confira um exemplo de código Julia:
Exemplo de código R:
Exemplo de código Elixir:
Exemplo de código Raku [en]: