Softmax con temperatura
El parámetro temperature de un LLM divide los logits antes del softmax. Impleméntalo de forma numéricamente estable y observa su efecto.
Escribe softmax(logits, temperature = 1) que devuelva un array de probabilidades. Divide cada logit entre temperature, resta el máximo de esos valores (así Math.exp no se desborda con logits grandes), aplica Math.exp y normaliza para que la suma sea 1.
Lanza un error si temperature no es un número mayor que 0. Con una temperatura más baja, la opción con el logit mayor gana probabilidad; con una más alta, la distribución se aplana.
LOGITS contiene los logits de cuatro tokens candidatos.
Retos 0/5
- softmax([1, 2, 3]) da 0,0900 / 0,2447 / 0,6652
- Las probabilidades suman 1
- Es estable con logits grandes (sin NaN)
- Menos temperatura da más probabilidad a la opción mayor
- Lanza un error si la temperatura es 0 o negativa
function softmax(logits, temperature = 1) {
// divide por la temperatura, resta el máximo, aplica exp y normaliza
const exps = logits.map((x) => Math.exp(x));
const sum = exps.reduce((a, b) => a + b, 0);
return exps.map((e) => e / sum);
}
console.log(softmax(LOGITS, 0.5));Para profundizar: la referencia de Hugging Face (en inglés) →
¿Esto en producción, con tus datos? Hablemos 15 minutos →