Attention Mechanism
Un mecanismo de atención pondera las características de entrada según su relevancia mediante consultas, claves y valores. Incluye las matemáticas, los tipos de atención y la comparación entre atención y convolución.
Un mecanismo de atención es una operación de red neuronal que genera cada resultado como una media ponderada de las características de entrada; los pesos se calculan según la relevancia de cada entrada para el elemento que se está procesando. La relevancia se puntúa comparando un vector de consulta con vectores clave, y las puntuaciones resultantes ponderan los vectores de valor correspondientes. La atención se introdujo en 2014 para la traducción automática, donde permitió que un decodificador de red neuronal recurrente (RNN) consultara cada palabra de origen, en lugar de comprimir toda la frase en un único vector de longitud fija. El Transformer de 2017 construyó toda una arquitectura a partir de la atención, que ahora es la operación central de los modelos de lenguaje de gran tamaño, los transformadores de visión y muchos modelos de detección de objetos.
Cómo funciona la atención#
La atención utiliza tres proyecciones lineales aprendidas de su entrada. La consulta (Q) describe qué busca el token actual, cada clave (K) describe lo que ofrece un token y cada valor (V) contiene el contenido que se transmite. El modelo compara la consulta con todas las claves, convierte las puntuaciones de comparación en pesos y devuelve la suma ponderada de los valores. Cuando un modelo de traducción genera «noir» para «The black cat», la consulta de ese paso obtiene la puntuación más alta frente a la clave de «black», aunque en francés el adjetivo va después del sustantivo.
La atención multicabezal ejecuta varias de estas operaciones en paralelo, cada una con sus propias proyecciones de menor dimensión, y concatena los resultados. Así, distintos cabezales pueden especializarse en relaciones diferentes dentro de una misma capa.
Atención de producto escalar escalado#
La atención del Transformer se expresa como Attention(Q, K, V) = softmax(QKᵀ / √d_k) V. Cada consulta se compara con todas las claves mediante un producto escalar, y las puntuaciones se dividen por la raíz cuadrada de la dimensión de la clave d_k para que no aumenten con el tamaño del vector ni saturen la función softmax. Softmax convierte las puntuaciones de cada consulta en pesos que suman 1, y el resultado es la suma ponderada de los vectores de valor.
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Consultas, claves y valores para una secuencia de 4 tokens, cada uno de 8 dimensiones
q, k, v = torch.randn(3, 4, 8).unbind(0)
# Puntuar cada consulta frente a cada clave, escalar por sqrt(d_k) y normalizar cada fila con softmax
weights = (q @ k.T / k.shape[-1] ** 0.5).softmax(dim=-1)
# Cada token de salida es una media ponderada de los vectores de valor
output = weights @ v
print("Attention weights of token 0:", [round(w, 3) for w in weights[0].tolist()])
print("Matches PyTorch SDPA:", torch.allclose(output, F.scaled_dot_product_attention(q, k, v), atol=1e-6))Imprime [0.121, 0.741, 0.106, 0.032] y True: el token 0 obtiene el 74 % de su salida del vector de valor del token 1; sus cuatro pesos suman 1; y el resultado manual coincide con la operación fusionada de PyTorch scaled_dot_product_attention, que utiliza kernels eficientes en memoria, como FlashAttention, en las GPU compatibles.
Tipos de atención#
- Autoatención: Las consultas, las claves y los valores proceden de la misma secuencia, así que cada token obtiene contexto de todos los demás. Es la atención que se utiliza en los codificadores Transformer y los ViT.
- Atención cruzada: Las consultas proceden de una secuencia y las claves y los valores, de otra. Un decodificador de traducción presta atención a la frase de origen; un modelo de difusión de texto a imagen, a la indicación; y las consultas de objeto de un decodificador DETR, a las características de imagen.
- Atención causal: Una máscara impide que cada token preste atención a tokens posteriores, por lo que un modelo de lenguaje genera texto de izquierda a derecha y las claves y los valores de los tokens anteriores se pueden guardar en una caché KV.
- Atención eficiente: La atención dispersa, la atención de ventana deslizante y la atención lineal reducen el coste cuadrático de comparar cada token con todos los demás; la atención deformable solo muestrea unos pocos puntos aprendidos alrededor de cada posición de referencia.
- Atención de canal en las CNN: Las redes Squeeze-and-Excitation reajustan el peso de los canales de un mapa de características mediante su promedio global; es una forma de atención de bajo coste que sirvió de base para la propuesta ganadora de la clasificación ILSVRC 2017.
Atención frente a convolución#
Una convolución aplica el mismo filtro pequeño en cada posición, por lo que cada salida ve una ventana local fija y sus pesos no dependen de la imagen. La atención calcula sus pesos a partir del contenido y puede conectar dos posiciones cualesquiera dentro de una capa. El coste es que crece con el cuadrado del número de tokens. Una imagen de 640×640 con stride 32 produce una cuadrícula de 20×20, es decir, 400 tokens y 160.000 pares de consulta y clave; la cuadrícula con stride 8 de la misma imagen tiene 6.400 tokens y casi 41 millones de pares. YOLO26 sitúa sus bloques de atención en consecuencia: el bloque C2PSA que cierra el backbone y un bloque C3k2 con atención en el neck ejecutan atención propia multicabezal sobre el mapa de características de 20×20 con stride 32, mientras que todas las capas de mayor resolución siguen siendo convolucionales.










