Comprendiendo los vectores Q, K, V en modelos Transformer
En la inteligencia artificial moderna, especialmente en el procesamiento del lenguaje natural, la arquitectura Transformer se ha convertido en la columna vertebral de modelos como GPT, BERT y muchos otros. En el núcleo de esta arquitectura se encuentra el mecanismo de atención, que se basa en tres vectores clave: Query (Q), Key (K) y Value (V). Este artículo explicará cómo se derivan estos vectores a partir de tokens, cómo se utilizan durante el procesamiento de prompts y cómo funcionan la atención de múltiples cabezas (multi-head attention) y las operaciones de all-reduce para producir la salida final.
De palabras a tokens y embeddings
El primer paso en el procesamiento de texto es convertir cada palabra (o subpalabra) en un token. El vocabulario del modelo contiene un conjunto fijo de tokens, cada uno con un ID entero único. Una vez que la oración de entrada se divide en tokens, cada token se asigna a un vector denso llamado embedding. Este embedding es una representación de alta dimensión (por ejemplo, 512 o 768 dimensiones) que captura el significado semántico del token. Estos embeddings se aprenden durante el entrenamiento y se almacenan en una matriz de embeddings.
Derivación de vectores Query, Key y Value
Para habilitar el mecanismo de atención, el embedding de cada token se transforma en tres vectores diferentes: Query, Key y Value. Esto se hace multiplicando el vector de embedding por tres matrices de pesos aprendidas: Wq, Wk y Wv. Estas matrices son parámetros del modelo, actualizados durante el entrenamiento. Los vectores resultantes tienen una dimensión más pequeña (a menudo llamada d_k) en comparación con la dimensión original del embedding, lo que ayuda a un cálculo eficiente.
El vector Query (Q) representa lo que el token está 'buscando' en el contexto. El vector Key (K) representa lo que el token 'ofrece' como etiqueta. El vector Value (V) contiene la información real que se agregará. El mecanismo de atención determina cuánto debe atender cada token a otros comparando consultas con claves.
| Símbolo | Dimensiones | Descripción |
|---|---|---|
| Embedding | d_model | Representación del token de entrada |
| Wq | d_model x d_k | Matriz de pesos de Query |
| Wk | d_model x d_k | Matriz de pesos de Key |
| Wv | d_model x d_v | Matriz de pesos de Value |
| Q | d_k | Vector Query para un token |
| K | d_k | Vector Key para un token |
| V | d_v | Vector Value para un token |
El mecanismo de autoatención
Una vez que tenemos Q, K y V para cada token en la secuencia, el mecanismo de autoatención calcula las puntuaciones de atención. Para un token dado, su query se multiplica (producto punto) con las keys de todos los tokens en la secuencia. Las puntuaciones resultantes indican la relevancia de cada token para el actual. Luego, estas puntuaciones se escalan dividiendo por la raíz cuadrada de la dimensión de las keys (d_k) para estabilizar los gradientes. A continuación, se aplica una función softmax para convertir las puntuaciones en probabilidades que suman 1. Finalmente, las probabilidades se utilizan para calcular una suma ponderada de los vectores value, produciendo un nuevo vector consciente del contexto para el token.
Este proceso se realiza en paralelo para todos los tokens en la secuencia, lo que lo hace altamente eficiente. Los nuevos vectores luego pasan a través de una red neuronal feed-forward y capas adicionales, construyendo gradualmente una representación rica de la entrada.
| Paso | Operación | Resultado |
|---|---|---|
| 1 | Calcular Q, K, V a partir de embeddings | Vectores para cada token |
| 2 | Producto punto de Q con todas las K | Puntuaciones de atención (crudas) |
| 3 | Escalar puntuaciones por sqrt(d_k) | Puntuaciones escaladas |
| 4 | Aplicar softmax | Pesos de atención (probabilidades) |
| 5 | Suma ponderada de vectores V | Nuevo vector de contexto |
Procesamiento de prompts y cálculo capa por capa
Durante el procesamiento de prompts (la codificación inicial de la entrada), toda la secuencia de tokens se procesa simultáneamente. Los embeddings se transforman en Q, K, V y la autoatención se calcula para cada token. Esto se repite a través de todas las capas (típicamente 12, 24 o más) del Transformer. Cada capa refina las representaciones, permitiendo al modelo capturar dependencias complejas como relaciones de largo alcance, sintaxis y semántica. La salida de la última capa proporciona un embedding contextualizado para cada token.
Inferencia: agregar un nuevo token
Al generar texto (inferencia), el modelo produce un token a la vez. Para el nuevo token, solo se calcula su embedding. Luego, se deriva su Query. Para calcular la atención, el modelo necesita las Keys y Values de todos los tokens anteriores. Estos se almacenan en una estructura llamada caché KV, que evita recalcularlos. La Query del nuevo token se multiplica por todas las Keys almacenadas, se aplica softmax, y se calcula la suma ponderada de los Values almacenados. Esto produce un nuevo vector de contexto para el nuevo token, que luego pasa a través de las capas restantes y finalmente una capa de clasificación (softmax sobre el vocabulario) para seleccionar la siguiente palabra.
Este enfoque incremental es eficiente porque los cálculos pesados para tokens anteriores se reutilizan. La caché KV se actualiza con la Key y Value del nuevo token después de cada paso de generación.
Atención de múltiples cabezas y All-Reduce
Para capturar diferentes tipos de relaciones (por ejemplo, sintácticas, semánticas, referenciales) simultáneamente, los Transformers utilizan atención de múltiples cabezas (multi-head attention). En lugar de realizar una sola operación de atención, el modelo divide los vectores Q, K y V en múltiples cabezas más pequeñas (comúnmente 8, 12 o 16). Cada cabeza aprende a enfocarse en diferentes aspectos de la entrada. Las cabezas trabajan en paralelo, cada una calculando su propio mecanismo de atención en un subespacio de los vectores.
Después de que cada cabeza produce su salida, las salidas se concatenan nuevamente en un solo vector de la dimensión original. Este vector concatenado luego se multiplica por una matriz de proyección de salida (a menudo llamada Wo) para combinar la información de todas las cabezas. Este paso final es equivalente a una operación de all-reduce: fusiona los cálculos paralelos en una representación unificada. El all-reduce asegura que el modelo se beneficie del aprendizaje distribuido a través de las cabezas mientras mantiene una sola salida coherente para la siguiente capa.
| Aspecto | Una sola cabeza | Múltiples cabezas |
|---|---|---|
| Número de cálculos de atención | 1 | H (número de cabezas) |
| Relaciones capturadas | Un tipo por capa | Múltiples tipos simultáneamente |
| Dimensión de salida | d_v | H * d_v (luego proyectado a d_model) |
| Costo computacional | Menor | Mayor pero paralelizable |
| Expresividad | Limitada | Representaciones más ricas |
Conclusión
Los vectores Query, Key y Value son fundamentales para el mecanismo de atención en los Transformers. Permiten al modelo ponderar dinámicamente la importancia de cada token en el contexto, habilitando una comprensión y generación de lenguaje poderosa. El proceso de derivar estos vectores, calcular la atención y utilizar la paralelización de múltiples cabezas con all-reduce es lo que hace que los modelos de IA modernos sean tan efectivos. Comprender estos conceptos es esencial para cualquiera que trabaje o estudie modelos de lenguaje grandes.
Trabajemos juntos
¿Necesitas más información, ayuda con tu proyecto o desarrollar una idea?
Ya sea una pregunta sencilla, una duda rápida o una charla de 5 minutos, envíame un mensaje—no cuesta nada y siempre estoy listo para ayudar. Me gusta escuchar para entender el problema, ser creativo en las soluciones y centrarme en ideas simples, confiables y fáciles de implementar rápidamente.
Contáctame →