Exemplicação de como as LLMs preveem o próximo token.
Code exemplo:
*// Função fictícia que simula a aplicação de softmax em um vetor de valores
function softmax(values) {
const expValues = values.map(value => Math.exp(value));
const sumExp = expValues.reduce((total, val) => total + val, 0);
return expValues.map(val => val / sumExp);
}
// Valores hipotéticos produzidos pelo modelo para três possíveis tokens
const logits = [2.0, 1.0, 0.1];
const probabilities = softmax(logits);
console.log(probabilities);*
Agora, para analisar o código, vamos simular a execução do passo a passo da função softmax com os valores fornecidos no código para compreender o resultado final.
Entrada: logits = [2.0, 1.0, 0.1]
Passo 1 - Calcular exponenciais:
· exp(2.0) ≈ 7.389
· exp(1.0) ≈ 2.718
· exp(0.1) ≈ 1.105
Passo 2 - Somar as exponenciais:
· sumExp ≈ 7.389 + 2.718 + 1.105 = 11.212
Passo 3 - Dividir cada exponencial pela soma:
· 7.389 / 11.212 ≈ 0.659 (≈ 65.9%)
· 2.718 / 11.212 ≈ 0.242 (≈ 24.2%)
· 1.105 / 11.212 ≈ 0.099 (≈ 9.9%)
Resultado exibido no console:
[0.659, 0.242, 0.099]
(Valores aproximados com 3 casas decimais)
Observação: A soma das probabilidades é 1.0, confirmando que é uma distribuição de probabilidade válida, e o maior logit (2.0) recebe a maior probabilidade.