Explicación más en detalle de cómo obtienen los LLMs las probabilidades para generar el siguiente token
Sampling
En cada posición el modelo tiene una bolsa con miles de tokens posibles. Sampling es el proceso de no coger siempre el token más probable, si no de orientarlo a coger respuestas con determinadas características.
Si el modelo escogiera siempre el token con más probabilidades, obtendríamos respuestas aburridas y repetitivas.
Logits
Para generar el siguiente token, una red neuronal calcula primero los vectores de logits, donde cada logit corresponde a un valor posible. El tamaño de estos vectores de logits es tan grande como el vocabulario completo del modelo.
(representación de vectores de logits)
flowchart LR
N1["What's your favorite color?"]:::note --> Z
Z --> A1 --> A
Z --> B1 --> B
Z --> C1 --> C
Z --> D1 --> D
Z["Neural network"]
A["a"]
A1["(-0.5)"]
B["green"]
B1["(0.7)"]
C["red"]
C1["(0.5)"]
D["the"]
D1["(-1.2)"]
classDef note fill:none,stroke:none,color:#777;
Los logits NO representan probabilidades ya que no suman 1 y pueden incluso ser negativos (la probabilidades no pueden). Para convertir logits a probabilidades se usa una Softmax layer
Temperature
La temperatura es una constante que se aplica a los logits antes de la transformación de la Softmax layer. Se usa para ajustar la creatividad del modelo y redistribuir la probabilidad de los valores. Una temperatura más alta hace que el modelo sea más creativo ya que aumenta las posibilidades de elegir tokens menos probables.
xychart-beta
title "Temperatura vs Probabilidad"
x-axis "Temperatura (T)" [0.1, 0.2, 0.5, 1, 2, 5]
y-axis "Probabilidad" 0 --> 1
line "P(token1)" [0.9999546, 0.9933071, 0.8807971, 0.7310586, 0.6224593, 0.5498340]
line "P(token2)" [0.0000454, 0.0066929, 0.1192029, 0.2689414, 0.3775407, 0.4501660]
Ejemplos de temperaturas:
- Low (0.2-0.3): El modelo es cauto y elige las palabras más probables. Output factual y predecible.
- Medium (0.5-0.7): Un mix de confiabilidad y engagement
- High (0.9-1.0): Toma riesgos y es impredecible
Respuesta posibles con la siguiente frase
Once upon a time, there was a dragon…
- Temp 0.2: …who lived in a cave guarding treasure
- Temp 0.7: …who dreamed of becoming friends with the villagers
- Temp 1.0: …who loved baking cookies and singing karaoke
Cuanta más alta la temperatura, más imaginativo, creativo y loco es el modelo, lo cual no siempre es bueno. Para usos creativos se suele usar una temperatura de 0.7 e ir iterando desde allí.
Softmax layer
Softmax es la función que convierte estos logits en una distribución de probabilidad: números entre 0 y 1 que en total suman 1. Tras su ejecución ya tenemos las probabilidades del siguiente token.
(ejemplo de distribución de probabilidades tras aplicar la softmax layer)
flowchart LR
B1 --> B
C1 --> C
D1 --> D
A1 --> A
A["a"]
A1["(0.05)"]
B["green"]
B1["(0.62)"]
C["red"]
C1["(0.21)"]
D["the"]
D1["(0.12)"]
classDef note fill:none,stroke:none,color:#777;
Logprobs
Muchos modelos devuelven las probabilidades como log probabilities o logprobs. Esta escala se prefiere ya que ayuda a reducir el underflow (es lo contrario de un overflow. Un número tan pequeño que tiende a redondearse a 0).
Estos valores por lo general son privados por temas de seguridad, ya que podrían ayudar a exfiltrar un modelo.
Reference(s)
Los ejemplos que uso y parte de las explicaciones están tomados del libro AI Engineering by Chip Huyen. Lo recomiendo encarecidamente para aprender más sobre el tema.