Una arquitectura para transformar secuencias
En el artículo anterior seguimos la elección de un token. Quedaba por explicar de dónde salían sus puntuaciones. Un Transformer resuelve parte de ese problema convirtiendo una secuencia de entrada en otra secuencia de vectores. En cada bloque, la atención permite que una posición incorpore información de otras y una red pequeña transforma el resultado. El modelo acumula esas operaciones a lo largo de varias capas.
Vaswani y sus colaboradores presentaron la arquitectura en 2017 para traducción. Su modelo tenía un encoder que procesaba la frase de origen y un decoder que producía la traducción. La familia incluye configuraciones distintas. En esta guía seguiremos principalmente un decoder causal, la variante que conecta con la generación token a token.
| Configuración | Flujo de información | Ejemplo de tarea |
|---|---|---|
| Encoder | Cada posición puede consultar ambos lados del texto. | Clasificar un documento. |
| Encoder–decoder | El decoder consulta el texto fuente codificado y el prefijo de salida. | Traducir una frase. |
| Decoder causal | Cada posición consulta el prefijo hasta ella misma. | Continuar un texto. |
El significado de una pieza depende de dónde aparece
El tokenizador devuelve identificadores. Una tabla aprendida convierte cada identificador en un vector inicial, o embedding. Dos apariciones del mismo token pueden empezar con el mismo embedding. El orden y el contexto permiten que esas representaciones evolucionen de manera distinta.
El orden necesita una representación explícita. En el Transformer original, se sumaba al embedding un vector de senos y cosenos que dependía de la posición. Otra familia de métodos, como RoPE, gira pares de coordenadas de Q y K según su posición. Al calcular su producto escalar, parte de la puntuación queda ligada al desplazamiento relativo entre ambos tokens.
Prueba una rotación posicional
Los dos vectores parten de la misma dirección. Cada posición añade 30° en este ejemplo. Si se desplazan ambos tokens a la vez, las líneas giran juntas y el producto escalar se conserva. Al cambiar la distancia, cambia el ángulo entre ellas. Las líneas se dibujan con longitudes distintas para distinguirlas.
El ejercicio usa una sola frecuencia para que el giro se pueda inspeccionar. En RoPE se aplican distintas frecuencias a pares de coordenadas. El producto escalar también depende de los vectores iniciales. Así, el modelo puede combinar contenido y posición en la misma puntuación.
Enlaces de referencia
Cómo calcula la atención qué información mezclar
Supongamos que una capa recibe un vector por cada token. Para una cabeza de autoatención, tres proyecciones aprendidas producen Q, K y V. La consulta Q pertenece a la posición que se está actualizando. Las claves K sirven para puntuar las posiciones que puede consultar. Los valores V contienen los vectores que se mezclarán según esas puntuaciones.
Q = XW_Q · K = XW_K · V = XW_VAtención = softmax(QKᵀ / √dₖ + M) VEn esa fórmula, dₖ es la dimensión de cada clave y M es la máscara. El producto QKᵀ compara consultas y claves. Dividir por √dₖ modera la escala del producto cuando crece la dimensión. Softmax se aplica por fila para que los pesos de cada consulta sumen uno. Finalmente, cada peso multiplica el valor de su posición.
En el laboratorio, elige banco, activa el acceso bidireccional y selecciona la pista de lugar en la frase del parque. La consulta vale (1, 0) y la clave de parque, (2, 0). Su puntuación es 2/√2, aproximadamente 1,41. El peso final depende también de las puntuaciones de las otras posiciones. Al cerrar la máscara causal, esa misma posición recibe peso cero.
Una cabeza calcula una mezcla, aunque varias posiciones aporten información. El vector resultante tiene la dimensión de los valores. Las probabilidades que aquí suman uno distribuyen atención entre posiciones del contexto. Las probabilidades de generación se calculan más tarde y distribuyen opciones entre tokens del vocabulario.
Enlaces de referencia
Qué información está disponible y qué busca cada cabeza
Las frases del laboratorio empiezan por El · banco. Si se selecciona banco con máscara causal, ambas producen la misma mezcla dentro de una misma cabeza. Hasta esa posición tienen exactamente los mismos tokens. En modo bidireccional, parque o crédito pueden contribuir. En un modelo generativo, consultar una posición futura durante el entrenamiento filtraría información que luego no estaría disponible al generar.
La máscara se aplica antes de softmax. En las celdas bloqueadas se usa una puntuación efectiva de −∞, que se convierte en peso cero. La diagonal permanece abierta porque una posición conoce su propio token. En un modelo causal entrenado para predecir el siguiente token, la salida de esa posición se compara con el token posterior.
Un bloque puede ejecutar varias cabezas en paralelo. Cada una tiene sus propias proyecciones en la formulación clásica. Después se concatenan sus resultados y una proyección de salida vuelve a mezclarlos. En el laboratorio puedes inspeccionar las cabezas de una en una. Sus nombres describen los vectores didácticos que se han elegido. Una cabeza real puede participar en varios patrones y sus pesos por sí solos tienen un alcance explicativo limitado.
- Mismo estado de entradaUn vector por posición.
- Proyecciones por cabezaCada cabeza calcula su propia mezcla.
- ConcatenaciónSe reúnen los resultados de todas las cabezas.
- Proyección de salidaSe vuelve a la anchura del estado del bloque.
Atención, red feed-forward y conexiones residuales
La atención es la parte del bloque que permite mezclar información entre posiciones. Después, una red feed-forward o MLP transforma por separado el vector de cada posición. En la formulación original, la red expande el vector a una dimensión intermedia, aplica una no linealidad y vuelve a su anchura inicial. Las mismas operaciones se aplican a todas las posiciones.
Una conexión residual suma el resultado de una subcapa al estado que entró en ella. Para que esa suma sea posible, ambos vectores tienen la misma anchura. La normalización controla la escala de las activaciones y puede colocarse antes o después de cada subcapa. El esquema muestra una variante con normalización previa. El trabajo original utilizó normalización después de la suma.
- Entrada del bloque
x - Atención y primera suma
u = x + Atención(Norm(x)) - MLP y segunda suma
y = u + MLP(Norm(u)) - Salida del bloqueUn vector actualizado por posición.
Los bloques sucesivos operan sobre estados que ya contienen las mezclas anteriores. Al final, el modelo proyecta el estado de salida al vocabulario para obtener logits. Como vimos en el artículo de LoRA, las matrices de proyección dentro de estos bloques también son lugares donde se pueden insertar adaptadores.
Por qué se puede entrenar en paralelo y generar por pasos
Durante el entrenamiento causal se conocen los tokens de la secuencia. El modelo puede calcular en paralelo una predicción en cada posición. La máscara limita lo que ve cada una. Para El · banco · del · parque, la salida de banco se evalúa frente a del, mientras la salida de del se evalúa frente a parque. La pérdida reúne esos errores y la retropropagación ajusta los parámetros.
Durante la generación, el token siguiente todavía debe elegirse. La primera pasada procesa el prompt y las siguientes incorporan los tokens generados. Con una caché KV, cada capa conserva las claves y los valores del prefijo. El nuevo token puede consultarlos sin volver a proyectar todas las posiciones anteriores. Los estados previos de un decoder causal permanecen válidos al añadir texto al final.
La caché reduce trabajo repetido a cambio de memoria. En atención densa, al procesar una secuencia larga aumenta el número de pares de posiciones que pueden compararse. Al generar con caché, una nueva consulta todavía necesita atender al contexto permitido. El coste real depende de cómo se implementen el patrón de atención y la gestión de la ventana.
En el laboratorio puedes comprobar la idea que permite reutilizar el prefijo. Selecciona banco, mantén la máscara causal y alterna entre las dos frases. Luego consulta la última posición. Ahora las mezclas pueden diferir porque ya disponen de los tokens que distinguen las frases.