Curso de Matemáticas para IA · Lección 41 de 180

Los productos internos miden la alineación en la atención

Calcula un producto escalar, interpreta geométricamente su signo y magnitud, y observa cómo las puntuaciones consulta-clave se convierten en pesos de atención.

Comparte este artículo

Cuando un Transformer compara la consulta de un token con la clave de otro, el cálculo es un producto escalar. Ese único número ayuda a decidir cuánta información se recoge del valor asociado a la clave. Para vectores reales, el signo puede indicar si, en términos generales, apuntan hacia el mismo lado o en direcciones opuestas, mientras que la magnitud también depende de sus longitudes. Separar esos dos efectos facilita la interpretación de las puntuaciones de atención.

Al terminar, podrás calcular un producto interno, interpretar su signo y magnitud en la geometría euclidiana habitual y seguir una puntuación consulta-clave a través del escalado y de softmax.

Objetivo de aprendizaje: Calcular un producto interno y relacionar su signo y magnitud con la alineación.

Esta lección se apoya en las sumas ponderadas de vectores de la Lección 017. La sección 3.2 de Mathematics for Machine Learning presenta los productos internos como una herramienta para razonar sobre longitud, ángulo y ortogonalidad. Los ejemplos numéricos, el recorrido por la atención, la visualización y las evaluaciones de este artículo son originales.

Multiplica las coordenadas correspondientes para medir la alineación

Para dos vectores reales con el mismo número de coordenadas, x=(x1,…,xn)x=(x_1,\ldots,x_n) e y=(y1,…,yn)y=(y_1,\ldots,y_n), su producto escalar se define como

Empareja las primeras coordenadas y multiplícalas; después suma los productos de cada par de coordenadas. El resultado es un escalar. El producto escalar es un tipo de producto interno; en términos más generales, un producto interno es una regla de valor real para pares de vectores, lineal en cada argumento, simétrica y positiva cuando un vector no nulo se combina consigo mismo. Aquí usamos el producto escalar estándar en Rn\mathbb{R}^n.

Para un cálculo concreto, toma q=(2,1)q=(2,1) y k=(1,2)k=(1,2). Entonces

La puntuación positiva concuerda con la imagen: los vectores apuntan hacia la misma mitad del plano. Sus longitudes euclidianas son ambas 5\sqrt5. Como los dos vectores son no nulos y estamos en la geometría euclidiana real ordinaria, el ángulo θ\theta entre ellos satisface

⟨q,k⟩=∥q∥2 ∥k∥2cos⁡θ,cos⁡θ=455=0.8.\langle q,k\rangle = \|q\|_2\,\|k\|_2\cos\theta, \qquad \cos\theta = \frac{4}{\sqrt5\sqrt5}=0.8.

Por tanto, el producto escalar no compara únicamente las direcciones. Combina la dirección con las longitudes de ambos vectores. El valor del coseno, 0.80.8, aísla la alineación direccional al eliminar esas longitudes; esa cantidad normalizada se llama similitud del coseno y se estudiará en una lección posterior.

La consulta se proyecta sobre la dirección de la claveEl producto escalar estándar es 4. La longitud con signo de q en la dirección de k es 4/√5 ≈ 1.79; el componente restante es perpendicular a k.
Proyección de q sobre kq=(2,1) y k=(1,2) parten de un mismo origen. Un rayo gris discontinuo muestra la dirección de k. Una flecha sólida q termina por encima y a la derecha del rayo. Una segunda flecha sólida termina sobre el rayo en la proyección (0.8,1.6), y un segmento discontinuo une ese punto con el extremo de q en ángulo recto.
  • Vector de consulta: q = (2, 1)
  • Dirección de la clave: k = (1, 2)
  • Vector proyectado: projₖ(q)
  • Componente perpendicular restante: q − projₖ(q)

q · k = 2(1) + 1(2) = 4

projₖ(q) = (4/5)k = (0.8, 1.6)

Proyección escalar con signo: 4/√5 ≈ 1.79

Una proyección muestra qué parte apunta a lo largo de otro vector

Proyectar qq sobre la dirección de un vector no nulo kk plantea esta pregunta: ¿cuánto de qq queda a lo largo de kk? Su longitud escalar con signo es

comp⁡k(q)=⟨q,k⟩∥k∥2.\operatorname{comp}_{k}(q)=\frac{\langle q,k\rangle}{\|k\|_2}.

Se conserva el signo: un resultado negativo indica que el componente apunta en sentido contrario a kk. En nuestro ejemplo, comp⁡k(q)=4/5≈1.79\operatorname{comp}_{k}(q)=4/\sqrt5\approx1.79. El vector proyectado es esa longitud escalar multiplicada por el vector unitario en la dirección de kk:

proj⁡k(q)=⟨q,k⟩∥k∥22k=45(1,2)=(0.8,1.6).\operatorname{proj}_{k}(q) =\frac{\langle q,k\rangle}{\|k\|_2^2}k =\frac45(1,2)=(0.8,1.6).

El vector restante es q−proj⁡k(q)=(1.2,−0.6)q-\operatorname{proj}_{k}(q)=(1.2,-0.6). Comprueba que es perpendicular a kk:

(1.2,−0.6)⋅(1,2)=1.2−1.2=0.(1.2,-0.6)\cdot(1,2)=1.2-1.2=0.

Esta descomposición explica la geometría: el producto escalar mide la cantidad con signo a lo largo de kk después de tener en cuenta la longitud del propio kk, mientras que el componente perpendicular no contribuye a ese producto.

Para vectores reales no nulos en coordenadas euclidianas estándar, un producto interno positivo indica un ángulo menor que 90∘90^\circ, uno nulo indica vectores perpendiculares y uno negativo indica un ángulo mayor que 90∘90^\circ. El vector cero es un caso límite: su producto escalar con cualquier vector es cero, pero no tiene dirección y, por tanto, no se puede interpretar un ángulo. En términos más generales, estas afirmaciones sobre los ángulos presuponen el producto interno euclidiano real habitual. Otro producto interno puede definir una geometría distinta.

La atención usa la puntuación antes de convertirla en un peso

En la atención, una consulta describe qué busca una posición y cada clave describe con qué puede coincidir otra posición. Una proyección aprendida produce estos vectores de consulta y clave a partir de las representaciones de los tokens. El artículo original sobre Transformers describe su compatibilidad mediante un producto escalar y después divide cada puntuación por dk\sqrt{d_k}, donde dkd_k es el número de coordenadas de cada consulta y clave. Una función softmax aplicada a las claves permitidas convierte las puntuaciones escaladas en pesos para los vectores valor correspondientes (Vaswani y otros, Attention Is All You Need).

Para una consulta qq y una matriz de claves KK, las puntuaciones escaladas son qKT/dkqK^\mathsf{T}/\sqrt{d_k}. Si hay una sola consulta, cada elemento es una puntuación consulta-clave. Con varias consultas, el producto matricial calcula muchas puntuaciones de este tipo a la vez. Después se aplica softmax sobre las posiciones de las claves para cada consulta, y esos pesos forman una suma ponderada de los valores.

Prueba un ejemplo pequeño con q=(1,2)q=(1,2), k1=(1,0)k_1=(1,0) y k2=(0,1)k_2=(0,1). Ambas claves tienen dimensión dk=2d_k=2:

Los productos escalares 11 y 22 son puntuaciones de compatibilidad sin escalar. Después del escalado, 0.7070.707 y 1.4141.414 son logits. Los valores 0.3300.330 y 0.6700.670 son pesos de softmax; sin dropout, suman uno sobre las dos claves no enmascaradas. Son tres cantidades relacionadas, pero distintas. Para esta consulta, los pesos forman una distribución normalizada, pero no son probabilidades calibradas de que cada clave sea relevante desde el punto de vista semántico. PyTorch scaled_dot_product_attention sigue esta secuencia: multiplica las consultas por las claves transpuestas, aplica la escala, añade cualquier máscara, aplica softmax y, por último, multiplica los pesos por los valores. La escala predeterminada es 1/dk1/\sqrt{d_k}.

La escala no es una normalización por coseno. Divide por un factor que depende de la dimensión, no por las longitudes individuales de la consulta y la clave. El artículo sobre Transformers justifica este escalado observando que, bajo el supuesto indicado de coordenadas de consulta y clave independientes, de media cero y varianza unitaria, el producto escalar sin escalar tiene varianza dkd_k. Dividir por dk\sqrt{d_k} evita que, bajo ese supuesto, la dispersión de las puntuaciones crezca con la dimensión. No obliga a que cada consulta y clave tenga longitud uno ni convierte las puntuaciones en similitudes del coseno.

Separa el tamaño de la puntuación de la alineación direccional

Un producto escalar positivo grande puede deberse a una alineación estrecha, a vectores largos o a ambas cosas. Por ejemplo, (4,0)⋅(1,0)=4(4,0)\cdot(1,0)=4 tiene una similitud del coseno de 11, mientras que (2,1)⋅(1,2)=4(2,1)\cdot(1,2)=4 tiene una similitud del coseno de 0.80.8. La misma puntuación bruta no implica el mismo ángulo. Del mismo modo, multiplicar un vector por un escalar positivo aumenta el producto escalar sin cambiar su dirección; multiplicarlo por −1-1 invierte el signo y su dirección.

En una cabeza de atención, las longitudes de la consulta y la clave se aprenden como parte de las representaciones del modelo. La puntuación se usa como logit de compatibilidad y softmax la compara con las demás puntuaciones disponibles para esa consulta. No es una probabilidad aislada ni una medida universal de similitud semántica. Si un sistema normaliza cada vector no nulo a longitud unitaria, la puntuación pasa a ser la similitud del coseno y se eliminan las magnitudes individuales de los vectores. Esto puede resultar útil para tareas como comparar embeddings de documentos, pero es una operación distinta de la atención estándar por producto escalar escalado descrita arriba.

Puedes verificar la aritmética con NumPy:

import numpy as np

q = np.array([2.0, 1.0])
k = np.array([1.0, 2.0])

dot = np.dot(q, k)
scalar_projection = dot / np.linalg.norm(k)
vector_projection = dot / np.dot(k, k) * k
cosine_similarity = dot / (np.linalg.norm(q) * np.linalg.norm(k))

print(dot)                 # 4.0
print(scalar_projection)  # 1.7888543819998317
print(vector_projection)  # [0.8 1.6]
print(cosine_similarity) # 0.8

Ahora podemos interpretar la misma multiplicación en dos contextos: como una medida geométrica de alineación con signo y como la puntuación de compatibilidad que compara una consulta con las claves. El siguiente paso consiste en interpretar un producto escalar como una puntuación ponderada por características, donde cada coordenada aporta su propia cantidad con signo.

Comprueba lo que has entendido

Question 1

Show the step-by-step solution

Calcula (2,−1,3)⋅(1,4,−2)(2,-1,3)\cdot(1,4,-2). ¿Qué indica su signo sobre el ángulo entre estos vectores no nulos en el espacio euclidiano real estándar?

Primero multiplica las coordenadas correspondientes y súmalas:

2⋅1+(−1)⋅4+3⋅(−2)=2−4−6=−8.2\cdot1 + (-1)\cdot4 + 3\cdot(-2)=2-4-6=-8.

El producto escalar es negativo. Para dos vectores reales no nulos con el producto interno euclidiano estándar, un producto negativo indica que el ángulo es mayor que 90∘90^\circ. No determina el ángulo exacto sin tener en cuenta también las longitudes.

Question 2

Show the step-by-step solution

Para u=(2,1)u=(2,1) y v=(1,2)v=(1,2), calcula u⋅vu\cdot v y el coseno del ángulo entre ellos.

El producto es

u⋅v=2⋅1+1⋅2=4.u\cdot v=2\cdot1+1\cdot2=4.

Ambas longitudes son 5\sqrt5, así que la fórmula euclidiana del ángulo da

cos⁡θ=u⋅v∥u∥2∥v∥2=455=45=0.8.\cos\theta=\frac{u\cdot v}{\|u\|_2\|v\|_2} =\frac{4}{\sqrt5\sqrt5}=\frac45=0.8.

El producto escalar es 44; la similitud del coseno es 0.80.8. No son la misma cantidad.

Question 3

Show the step-by-step solution

Proyecta q=(2,1)q=(2,1) sobre k=(1,2)k=(1,2). Halla tanto la longitud escalar con signo como el vector proyectado.

Primero, q⋅k=4q\cdot k=4 y ∥k∥2=5\|k\|_2=\sqrt5. La proyección escalar con signo es

comp⁡k(q)=45≈1.79.\operatorname{comp}_{k}(q)=\frac{4}{\sqrt5}\approx1.79.

Para el vector proyectado, divide el producto escalar por ∥k∥22=5\|k\|_2^2=5 y multiplícalo por kk:

proj⁡k(q)=45(1,2)=(0.8,1.6).\operatorname{proj}_{k}(q)=\frac45(1,2)=(0.8,1.6).

Question 4

Show the step-by-step solution

Dos vectores reales no nulos tienen producto escalar estándar igual a cero. ¿Qué puedes concluir y qué precaución adicional hace falta si uno de los vectores es cero?

Para vectores no nulos en el espacio euclidiano, x⋅y=∥x∥2∥y∥2cos⁡θx\cdot y=\|x\|_2\|y\|_2\cos\theta. Como ambas longitudes son positivas, un producto nulo obliga a que cos⁡θ=0\cos\theta=0, así que los vectores son perpendiculares. Si uno de los vectores es cero, el producto también es cero, pero el vector cero no tiene dirección ni forma un ángulo con el otro vector.

Question 5

Show the step-by-step solution

Tanto (4,0)⋅(1,0)(4,0)\cdot(1,0) como (2,1)⋅(1,2)(2,1)\cdot(1,2) valen 44. ¿Por qué esos productos iguales no implican la misma alineación direccional?

El primer par apunta exactamente en la misma dirección, por lo que su similitud del coseno es 11. En el segundo par, ambas longitudes son 5\sqrt5, así que la similitud del coseno es 4/(55)=0.84/(\sqrt5\sqrt5)=0.8. Los productos de ambos pares dan casualmente 44, pero las longitudes de los vectores difieren entre los pares. El producto escalar bruto combina longitud y dirección, por lo que no permite identificar el ángulo por sí solo.

Question 6

Show the step-by-step solution

Para q=(1,2)q=(1,2), k1=(1,0)k_1=(1,0) y k2=(0,1)k_2=(0,1), calcula las puntuaciones brutas, los logits escalados y los pesos de softmax cuando dk=2d_k=2. ¿Qué clave obtiene el peso mayor?

Los productos escalares son q⋅k1=1q\cdot k_1=1 y q⋅k2=2q\cdot k_2=2. Al dividirlos por dk=2\sqrt{d_k}=\sqrt2, obtenemos logits de aproximadamente 0.7070.707 y 1.4141.414. Softmax produce

(e0.707e0.707+e1.414,e1.414e0.707+e1.414)≈(0.330,0.670).\left(\frac{e^{0.707}}{e^{0.707}+e^{1.414}}, \frac{e^{1.414}}{e^{0.707}+e^{1.414}}\right) \approx(0.330,0.670).

La clave k2k_2 recibe el peso mayor. Los pesos de softmax suman uno sobre estas dos posiciones no enmascaradas, mientras que los productos escalares y los logits escalados son puntuaciones, no probabilidades.

Question 7

Show the step-by-step solution

Supón que una consulta de atención es el vector cero y que hay dos claves no enmascaradas. Con el cálculo habitual de softmax y el dropout desactivado, ¿qué pesos se obtienen? ¿Está definido el ángulo entre la consulta y cada clave?

La consulta cero tiene producto escalar cero con cada clave. El escalado mantiene ambos logits en cero, y

softmax⁡(0,0)=(12,12).\operatorname{softmax}(0,0)=\left(\frac12,\frac12\right).

Por tanto, ambas claves reciben el mismo peso. El ángulo no está definido porque la consulta cero no tiene dirección. Aquí, que las puntuaciones sean iguales no significa que la consulta esté geométricamente alineada con ninguna de las claves.

Question 8

Show the step-by-step solution

Una implementación sustituye cada producto escalar consulta-clave por la similitud del coseno antes de aplicar softmax. ¿Qué cambia para q=(2,1)q=(2,1) y k=(1,2)k=(1,2) y por qué no equivale al escalado estándar de atención?

El producto escalar bruto es 44. Ambas longitudes son 5\sqrt5, por lo que la similitud del coseno es 4/(55)=0.84/(\sqrt5\sqrt5)=0.8. La normalización por coseno divide por la longitud de cada vector y elimina su magnitud de la puntuación. En cambio, la atención estándar por producto escalar escalado divide por dk\sqrt{d_k}, un factor compartido por todos los vectores de esa dimensión de cabeza. Mantiene los efectos de la magnitud en los logits y no es una similitud del coseno.

Fuentes

  1. Mathematics for Machine Learning book PDF, Section 3.2
  2. Attention Is All You Need
  3. PyTorch documentation: scaled_dot_product_attention