Ir al contenido

¿Qué son los Logits en IA?

Distribución de logits antes de aplicar softmax mostrando puntuaciones brutas

Un logit es un número. Es la puntuación bruta que el modelo asigna a cada token posible antes de decidir cuál es el siguiente.

Cuando un LLM está a punto de generar una palabra, no elige directamente. Primero calcula un número para cada token de su vocabulario. Si el vocabulario tiene 200.000 tokens, produce 200.000 números. Esos números son los logits.

Un logit puede ser cualquier valor: positivo, negativo, grande, pequeño. No es una probabilidad. No está entre 0 y 1. No suma nada. Es una puntuación sin procesar.

Los logits salen de la última capa del modelo. Después de que el texto ha pasado por todos los bloques del Transformer, con sus mecanismos de atención y sus capas feed-forward, el resultado final es un vector de números. Ese vector se multiplica por una matriz enorme que tiene una fila por cada token del vocabulario.

El resultado de esa multiplicación son los logits. Uno por cada token posible.

No hay decisión todavía en este punto. Solo hay puntuaciones brutas. Es como tener una lista de todos los candidatos con una nota al lado, pero sin haber elegido al ganador.

Los logits por sí solos no sirven para elegir nada porque no son probabilidades. Un logit de 5.0 no significa un 50% de probabilidad. Un logit de -2.0 no significa un -20%.

Para convertir los logits en algo útil hay que pasarlos por la función softmax. Softmax toma todos los logits, aplica la función exponencial a cada uno, y divide cada resultado por la suma total. El resultado son probabilidades que suman 1.

Los logits son la entrada de softmax. Las probabilidades son la salida.

Imagina que el modelo tiene un vocabulario de solo 5 tokens y genera estos logits:

gato: 4.2
perro: 3.1
mesa: 0.5
correr: -1.0
azul: -3.5

Estos números no significan nada por sí solos. Pero después de softmax:

gato: 0.658 (65.8%)
perro: 0.220 (22.0%)
mesa: 0.016 (1.6%)
correr: 0.004 (0.4%)
azul: 0.0003 (0.03%)

Ahora sí hay probabilidades. Ahora sí se puede elegir.

El logit de “gato” era solo 1.1 puntos mayor que el de “perro”. Pero después de softmax, la probabilidad de “gato” es tres veces mayor. Eso es por la exponencial: amplifica las diferencias.

Si solo te interesa el resultado final, los logits no te importan. Softmax los convierte en probabilidades y el modelo elige.

Pero los logits son fundamentales para entender tres cosas:

Primera: La temperatura. La temperatura funciona dividiendo los logits por un número antes de aplicar softmax. Si no entiendes qué son los logits, no puedes entender qué hace la temperatura.

Segunda: El logit bias. Las APIs de algunos proveedores permiten modificar manualmente los logits de tokens específicos antes de que pasen por softmax. Si quieres que el modelo nunca diga una palabra concreta, le pones un logit bias de -100 a ese token. Si quieres que diga algo más a menudo, le sumas un valor positivo. Es una forma de intervenir directamente en el mecanismo de decisión.

Tercera: La interpretabilidad. Los investigadores analizan los logits para entender qué está haciendo el modelo. Ver los logits en bruto revela cuánto de seguro está el modelo de su predicción. Si el logit más alto es 15.0 y el segundo es 0.3, el modelo está muy seguro. Si el más alto es 2.1 y el segundo es 2.0, el modelo está dudando.

Los logits pueden ir de menos infinito a más infinito. No tienen límite.

Los logits no son probabilidades. Son puntuaciones sin normalizar.

El orden de los logits sí importa. El token con el logit más alto siempre tendrá la mayor probabilidad después de softmax.

Pero la distancia entre logits también importa. Si todos los logits son similares, softmax produce una distribución plana donde muchos tokens tienen probabilidades parecidas. Si un logit es mucho mayor que los demás, softmax produce una distribución concentrada donde un token domina.

import math
logits = {"gato": 4.2, "perro": 3.1, "mesa": 0.5, "correr": -1.0, "azul": -3.5}
exps = {k: math.exp(v) for k, v in logits.items()}
total = sum(exps.values())
probs = {k: e / total for k, e in exps.items()}
for token, prob in probs.items():
print(f"{token}: logit={logits[token]:.1f} -> probabilidad={prob:.4f} ({prob*100:.1f}%)")

Ejecuta este código y comprueba cómo los logits se transforman en probabilidades.

Para que veas dónde encajan los logits en todo el proceso de generación de tokens:

  1. Tokenización: Texto se convierte en números.
  2. Bloques Transformer: Los números pasan por capas de atención y feed-forward.
  3. Capa de salida: Se generan los logits (un número por cada token del vocabulario).
  4. División por temperatura: Los logits se dividen por T.
  5. Softmax: Los logits ajustados se convierten en probabilidades.
  6. Sampling: Se elige un token según las probabilidades.
  7. Se repite desde el paso 2 para el siguiente token.

Observa los logits en bruto y cómo cambian con la temperatura en nuestro simulador interactivo. Puedes ver en tiempo real cómo las puntuaciones se transforman en probabilidades.

  • Cuando los logits de varios tokens son parecidos, el modelo está dudando.
  • Un logit muy alto respecto a los demás indica alta confianza del modelo en esa opción.
  • Cambiar ligeramente el prompt puede alterar completamente los logits.

Pensar que los logits son probabilidades. No lo son. Son puntuaciones brutas que hay que transformar con softmax antes de significar algo.