A fórmula: softmax(x_i) = exp(x_i) / ∑ exp(x_j). A exponencial amplifica as diferenças: se um logit é 10 e outro é 5, a razão após softmax não é 2:1 mas aproximadamente 150:1. Esse comportamento de "o vencedor leva quase tudo" é por que modelos tendem a ser confiantes — softmax naturalmente produz distribuições com picos em vez de uniformes.
Temperatura é aplicada dividindo os logits antes do softmax: softmax(x_i / T). Temperatura T=1 é o padrão. T<1 aguiza a distribuição (mais confiante, mais determinístico). T>1 a achata (mais uniforme, mais aleatório). É exatamente assim que o parâmetro "temperatura" nas APIs de LLMs funciona — é um escalar aplicado aos logits antes do softmax final que seleciona o próximo token.
Um detalhe prático de implementação: calcular exp(x) para valores grandes de x causa overflow. A correção padrão é subtrair o valor máximo de todos os logits antes de aplicar softmax: softmax(x_i - max(x)). Isso não muda o resultado (a constante subtraída se cancela na razão) mas mantém os números em uma faixa manejável. Toda implementação de softmax em produção faz isso, e é o tipo de detalhe que importa quando se constrói do zero.