Cómo los LLM eligen sus palabras: un recorrido práctico por Logits, Softmax y Sampling

Los modelos de lenguaje grande (LLM) pueden producir resultados variados, creativos y, a veces, sorprendentes incluso cuando se les da el mismo mensaje. Esta aleatoriedad no es un error, sino una característica central de cómo el modelo toma muestras de su siguiente token a partir de una distribución de probabilidad. En este artículo, desglosamos las estrategias de muestreo clave y demostramos cómo parámetros como la temperatura, top-k y top-p influyen en el equilibrio entre coherencia y creatividad.

En este tutorial, adoptamos un enfoque práctico para comprender:

Cómo los logits se convierten en probabilidades Cómo funcionan los muestreos de temperatura, top-k y top-p Cómo las diferentes estrategias de muestreo dan forma a la distribución del siguiente token del modelo

Al final, comprenderá la mecánica detrás de la inferencia de LLM y podrá ajustar la creatividad o el determinismo del resultado.

Empecemos.

Cómo los LLM eligen sus palabras: un recorrido práctico por Logits, Softmax y Sampling
Foto de Colton Duke. Algunos derechos reservados.

Descripción general

Este artículo se divide en cuatro partes; ellos son:

Cómo los logits se convierten en probabilidades Temperatura Muestreo Top-k Muestreo Top-p

Cómo los logits se convierten en probabilidades

Cuando le haces una pregunta a un LLM, genera un vector de logits. Los logits son puntuaciones brutas que el modelo asigna a cada posible siguiente token en su vocabulario.

Si el modelo tiene un vocabulario de tokens $V$, generará un vector de logits $V$ para cada posición de palabra siguiente. Un logit es un número real. Se convierte en probabilidad mediante la función softmax:

$$
p_i = frac{e^{x_i}}{sum_{j=1}^{V} e^{x_j}}
$$

donde $x_i$ es el logit del token $i$ y $p_i$ es la probabilidad correspondiente. Softmax transforma estas puntuaciones brutas en una distribución de probabilidad. Todos los $p_i$ son positivos y su suma es 1.

Supongamos que le damos al modelo este mensaje:

El clima de hoy es tan ___

El modelo considera cada token de su vocabulario como una posible siguiente palabra. Para simplificar, digamos que solo hay 6 tokens en el vocabulario:

El modelo produce un logit para cada token. A continuación se muestra un conjunto de logits de ejemplo que el modelo podría generar y las probabilidades correspondientes basadas en la función softmax:

Token Logit Probabilidad maravilloso 1,2 0,0457 nublado 2,0 0,1017 agradable 3,5 0,4556 cálido 3,0 0,2764 sombrío 1,8 0,0832 delicioso 1,0 0,0374

Puede confirmar esto utilizando la función softmax de PyTorch:

Según este resultado, el token con mayor probabilidad es "agradable". Los LLM no siempre seleccionan el token con mayor probabilidad ; en cambio, toman muestras de la distribución de probabilidad para producir un resultado diferente cada vez. En este caso, hay un 46% de probabilidad de ver “agradable”.

Si desea que el modelo dé una respuesta más creativa, ¿cómo puede cambiar la distribución de probabilidad de modo que las respuestas “nublado”, “caliente” y otras también aparezcan con más frecuencia?

Temperatura

La temperatura ($T$) es un parámetro de inferencia del modelo. No es un parámetro del modelo; es un parámetro del algoritmo que genera la salida. Escala logits antes de aplicar softmax:

$$
p_i = frac{e^{x_i / T}}{sum_{j=1}^{V} e^{x_j / T}}
$$

Puede esperar que la distribución de probabilidad sea más determinista si $T<1$, ya que la diferencia entre cada valor de $x_i$ será exagerada. Por otro lado, será más aleatorio si $T>1$, ya que la diferencia entre cada valor de $x_i$ se reducirá.

Ahora, visualicemos este efecto de la temperatura en la distribución de probabilidad:

Este código genera una distribución de probabilidad sobre cada token del vocabulario. Luego toma muestras de una ficha según la probabilidad. La ejecución de este código puede producir el siguiente resultado:

y el siguiente gráfico que muestra la distribución de probabilidad para cada temperatura:

El efecto de la temperatura en la distribución de probabilidad resultante.

¡El modelo puede producir el mensaje absurdo "El clima de hoy es tan delicioso" si configura la temperatura en 10!

Muestreo Top-k

La salida del modelo es un vector de logits para cada posición en la secuencia de salida. El algoritmo de inferencia convierte los logits en palabras reales o, en términos de LLM, en tokens.

El método más simple para seleccionar el siguiente token es el muestreo codicioso, que siempre selecciona el token con la mayor probabilidad. Si bien es eficiente, esto a menudo produce resultados repetitivos y predecibles. Otro método consiste en muestrear el token a partir de la distribución de probabilidad softmax derivada de los logits. Sin embargo, debido a que un LLM tiene un vocabulario muy amplio, la inferencia es lenta y existe una pequeña posibilidad de producir tokens sin sentido.

El muestreo Top-$k$ logra un equilibrio entre determinismo y creatividad. En lugar de tomar muestras de todo el vocabulario, restringe el grupo de candidatos a los $k$ tokens y muestras más probables de ese subconjunto. A los tokens fuera de este grupo superior de $k$ se les asigna probabilidad cero y nunca serán elegidos. No sólo acelera la inferencia al reducir el tamaño efectivo del vocabulario, sino que también elimina tokens que no deben seleccionarse.

Al filtrar tokens extremadamente improbables y al mismo tiempo permitir la aleatoriedad entre los más plausibles, el muestreo de $k$ superiores ayuda a mantener la coherencia sin sacrificar la diversidad. Cuando $k=1$, top-$k$ se reduce a un muestreo codicioso.

A continuación se muestra un ejemplo de cómo se puede implementar el muestreo top-$k$:

Este código modifica el ejemplo anterior llenando los logits de algunos tokens con $-infty$ para que la probabilidad de esos tokens sea cero. La ejecución de este código puede producir el siguiente resultado:

El siguiente gráfico muestra la distribución de probabilidad después del filtrado superior de $k$:

La distribución de probabilidad después del filtrado top $k$

Puedes ver que para cada $k$, las probabilidades de que haya exactamente $Vk$ tokens son cero. Esos tokens nunca serán elegidos bajo la configuración superior $k$ correspondiente.

Muestreo superior p

El problema con el muestreo de $k$ superiores es que siempre selecciona entre un número fijo de tokens, independientemente de cuánta masa de probabilidad representen colectivamente. El muestreo incluso de los tokens $k$ superiores aún puede permitir que el modelo elija entre la larga cola de opciones de baja probabilidad, lo que a menudo conduce a resultados incoherentes.

El muestreo Top-$p$ (también conocido como muestreo de núcleo) aborda este problema muestreando tokens de acuerdo con su probabilidad acumulativa en lugar de un recuento fijo. Selecciona el conjunto más pequeño de tokens cuya probabilidad acumulada excede un umbral $p$, creando efectivamente un $k$ dinámico para cada posición para filtrar probabilidades de cola no confiables y retener solo los candidatos más plausibles. Cuando el modelo es nítido y alcanza su punto máximo, el $p$ superior produce menos tokens candidatos; cuando la distribución es plana, se expande en consecuencia.

Establecer $p$ cerca de 1,0 se acerca al muestreo completo de todos los tokens. Establecer $p$ en un valor muy pequeño hace que el muestreo sea más conservador. Así es como puedes implementar el muestreo top-$p$:

La ejecución de este código puede producir el siguiente resultado:

y el siguiente gráfico muestra la distribución de probabilidad después del filtrado top-$p$:

La distribución de probabilidad después del filtrado top-$p$

A partir de este gráfico, es menos probable que vea el efecto de $p$ en la cantidad de tokens con probabilidad cero. Este es el comportamiento previsto, ya que depende de la confianza del modelo en el siguiente token.

Lecturas adicionales

A continuación se muestran algunas lecturas adicionales que pueden resultarle útiles:

Resumen

Este artículo demostró cómo las diferentes estrategias de muestreo afectan la elección de la siguiente palabra por parte de un LLM durante la fase de decodificación. Aprendió a seleccionar diferentes valores para los parámetros de muestreo de temperatura, top-$k$ y top-$p$ para diferentes casos de uso de LLM.