Volver al archivo
#ai#llm#glossary#aigen

Decode

Ya ha aparecido el primer fragmento de la respuesta. El siguiente debe tener en cuenta lo que acaba de escribirse: después de «Hoy bebo té», el modelo tiene un contexto distinto que después de «Hoy bebo agua». Hay que desarrollar sucesivamente ese texto que va cambiando.

Decode es la etapa de generación de la continuación tras procesar la entrada inicial. En el bucle habitual, el modelo procesa el último token elegido —un fragmento de texto—, calcula las probabilidades del siguiente y una regla de selección añade uno de los candidatos.

El fragmento elegido se convierte en la entrada del siguiente paso. KV Cache conserva los resultados necesarios de cálculos anteriores, de modo que no hay que procesar de nuevo todo el historial.

Se crea una dependencia entre las elecciones sucesivas, aunque varias respuestas distintas pueden atenderse juntas. Aquí Decode significa desarrollar el texto mediante el modelo, no solo convertir los números de los tokens en caracteres. Prefill prepara el contexto inicial.

Fuente del mecanismo: Shazeer, Fast Transformer Decoding, §2.4.

Mecanismo y detalles

Una fila de puntos de tejido ya hechos termina en un punto nuevo que se forma en la aguja.

El primer token de la respuesta puede elegirse a partir del resultado de Prefill. Si la generación continúa, ese token se convierte en la entrada de la siguiente pasada por el modelo. Sus nuevas K y V se añaden a la caché KV, y su consulta utiliza la posición actual y las anteriores. Elegir el identificador de un token todavía no añade su representación a la caché. Esto se ve en el bucle de generación de Hugging Face, «Cache storage implementation».

Token elegido, pero aún sin procesar

El modelo miniatura propio tiene tres tokens: A, B y C. Sus vectores son, respectivamente, (1,0)(1,0), (0,1)(0,1) y (−1,−1)(-1,-1). Tomamos Q=K=VQ=K=V iguales a esos vectores; la atención utiliza la escala 1/21/\sqrt{2}. A partir del resultado h=(h0,h1)h=(h_0,h_1) creamos los logits [h1,h0,−h0−h1][h_1,h_0,-h_0-h_1], y la decodificación voraz elige el mayor.

El prompt A B produce aproximadamente h=(0,330;0,670)h=(0{,}330;0{,}670), así que la primera respuesta es A. Por ahora, la caché contiene solo las dos posiciones del prompt. La siguiente pasada será la que procese el A elegido.

Es un modelo de demostración completamente especificado, sin aprendizaje, posiciones, múltiples capas ni token de final. Su respuesta repetitiva no tiene significado lingüístico. La comparación con volver a calcular todo el prefijo comprueba la concordancia de los resultados, y el contador incluye solo las posiciones para las que se calcularon K/V.

La caché elimina los cálculos repetidos de K/V anteriores, pero attention sigue leyendo el contexto. Con batches pequeños, la transferencia de pesos o de la caché suele convertirse en el límite; depende del modelo, el hardware y la longitud de la secuencia. En la arquitectura Disaggregated Serving [Polski], Decode se ejecuta en recursos separados tras recibir la caché. En este sentido, Decode no es la conversión de identificadores de tokens de nuevo en texto mediante el tokenizador.

Utilizo contenido generado por IA como parte de mi proceso de aprendizaje diario.