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

Combinaciones lineales para IA: cómo los vectores ponderados construyen una nueva representación

Escala y combina vectores, inspecciona cada coordenada con NumPy y descubre por qué las salidas de atención son un tipo especial de representación ponderada.

Comparte este artículo

Un sistema de IA suele tener varios vectores candidatos y necesitar un solo resultado. Elegir únicamente uno descartaría los demás. Sumarlos sin cambios daría a cada candidato la misma intensidad. Una combinación lineal ofrece una operación más flexible: escala cada vector con su propio coeficiente y después suma las contribuciones escaladas.

Por ejemplo, dos vectores pueden codificar partes diferentes del contexto. Los coeficientes 0.750.75 y 0.250.25 permiten que el primero contribuya tres veces más que el segundo. El resultado sigue siendo un vector en el mismo sistema de coordenadas, listo para el cálculo siguiente.

Al terminar esta lección podrás construir una combinación lineal coordenada a coordenada, interpretar qué cambia cada coeficiente, implementar la operación con comprobaciones de forma en NumPy e identificar las condiciones adicionales que convierten una combinación lineal general en una salida de atención parecida a un promedio ponderado.

Resultado de aprendizaje: Construir e interpretar una suma ponderada de vectores.

La lección 16: Multiplicación escalar para IA mostró cómo un escalar controla la intensidad y la dirección de un vector. La lección 15 presentó la suma de vectores. Esta lección une esas operaciones. El sitio web complementario de Mathematics for Machine Learning sitúa las operaciones escalares y matriciales en la sección 2.2 y define las combinaciones lineales en la sección 2.5 del libro. El reportaje, los cálculos, el código, la visualización y las evaluaciones siguientes son originales.

Da a cada candidato su propio coeficiente

Sean v1,v2,…,vk∈Rn\boldsymbol{v}_1,\boldsymbol{v}_2,\ldots,\boldsymbol{v}_k\in\mathbb{R}^n kk vectores. La notación Rn\mathbb{R}^n significa que cada vector tiene nn coordenadas reales. Sean a1,a2,…,ak∈Ra_1,a_2,\ldots,a_k\in\mathbb{R} coeficientes reales. Un coeficiente es el escalar asignado a un vector.

Llamarlo “suma ponderada” describe la misma aritmética: los coeficientes son los pesos. Pero “peso” aquí no significa necesariamente un parámetro aprendido del modelo ni una probabilidad. Su función es simplemente escalar una contribución.

Todos los vectores de entrada deben pertenecer al mismo espacio vectorial para que su suma tenga sentido. En un cálculo con arrays, eso normalmente significa que tienen la misma forma y el mismo significado de coordenadas. Un vector de dos coordenadas para [temperature, humidity] no se puede sumar con sentido a un vector de dos coordenadas para [height, age] solo porque ambos tienen forma (2,).

Sigue dos contribuciones hasta el resultado

Supón que una representación pequeña usa las coordenadas [topic, urgency]. Dos vectores candidatos son

u=[31],v=[−13].\boldsymbol{u}=\begin{bmatrix}3\\1\end{bmatrix}, \qquad \boldsymbol{v}=\begin{bmatrix}-1\\3\end{bmatrix}.

Elige los coeficientes a=0.75a=0.75 y b=0.25b=0.25. La combinación lineal solicitada es r=au+bv\boldsymbol{r}=a\boldsymbol{u}+b\boldsymbol{v}.

Este ejemplo también muestra por qué “coeficiente mayor” no equivale a “coordenada final mayor”. Un coeficiente escala todo un vector. El signo y el tamaño de cada coordenada del vector siguen determinando si esa contribución eleva o reduce la coordenada correspondiente del resultado.

La regla por componentes explica la operación

Escribe los vectores de entrada por coordenadas:

vi=[vi1vi2⋮vin].\boldsymbol{v}_i= \begin{bmatrix} v_{i1}\\v_{i2}\\\vdots\\v_{in} \end{bmatrix}.

El símbolo vijv_{ij} significa la coordenada jj del vector ii. La escala y la suma actúan coordenada a coordenada, por lo que la coordenada jj del resultado es

rj=∑i=1kaivij.r_j=\sum_{i=1}^{k}a_i v_{ij}.

Esta identidad explica por qué funciona la receta en dos pasos. La multiplicación escalar hace que la contribución ii sea [aivi1,…,aivin]T[a_i v_{i1},\ldots,a_i v_{in}]^\mathsf{T}. La suma de vectores agrega entonces todas las primeras coordenadas para obtener r1r_1, todas las segundas para obtener r2r_2, y así sucesivamente. Como cada cálculo de coordenadas es un cálculo con números reales, el resultado vuelve a tener nn coordenadas reales.

La misma regla proporciona comprobaciones algebraicas útiles. Reagrupar las contribuciones no cambia el resultado porque la suma de números reales es asociativa. Reordenarlas tampoco lo cambia porque la suma es conmutativa:

au+bv=bv+au.a\boldsymbol{u}+b\boldsymbol{v} =b\boldsymbol{v}+a\boldsymbol{u}.

Eso no significa que se puedan intercambiar los coeficientes entre vectores. Normalmente au+bv≠bu+ava\boldsymbol{u}+b\boldsymbol{v}\ne b\boldsymbol{u}+a\boldsymbol{v} porque cada escala se aplica a un vector distinto.

Mueve los coeficientes, no el significado de las coordenadas

El explorador fija u=[3,1]T\boldsymbol{u}=[3,1]^\mathsf{T} y v=[−1,3]T\boldsymbol{v}=[-1,3]^\mathsf{T} y permite modificar aa y bb. Las flechas continua y discontinua muestran las dos contribuciones escaladas desde el origen. Una copia trasladada de bvb\boldsymbol{v} empieza en la punta de aua\boldsymbol{u}, mostrando el camino de la suma. La flecha punteada del resultado conecta directamente el origen con su suma.

Combinación lineal interactiva: cambia dos coeficientes y sigue ambas contribuciones escaladas hasta su suma.
Elige los dos coeficientes

Cada intervalo va de −1.5 a 2 en pasos de 0.25. Usa las teclas de dirección para un paso, o Page Up y Page Down para cambios mayores.

Cálculo actual: a = +0,75, b = +0,25, au = (+2,25, +0,75), bv = (-0,25, +0,75) y r = au + bv = (+2, +1,5).

aubvr = au + bv

Los patrones de línea y las etiquetas distinguen todas las flechas sin depender del color. La flecha discontinua trasladada tiene la misma longitud y dirección que bv; mover su punto inicial muestra la suma sin cambiar la contribución. Si el resultado es cero, un anillo punteado marca el origen.

Alternativa numérica para los coeficientes, vectores, contribuciones y resultado actuales
CantidadCoeficienteVector originalContribución escalada
Primer candidato u+0,75(+3, +1)(+2,25, +0,75)
Segundo candidato v+0,25(-1, +3)(-0,25, +0,75)
Resultado rNo correspondeNo corresponde(+2, +1,5)

En el estado inicial renderizado en el servidor, a=0.75a=0.75 y b=0.25b=0.25, así que la flecha punteada termina en (2,1.5)(2,1.5), como en el ejemplo resuelto. Pon un coeficiente a cero y su contribución desaparece. Mueve un coeficiente por debajo de cero y su flecha se invierte. Pon ambos coeficientes a cero y todas las contribuciones colapsan en el vector cero. Ninguno de esos cambios renombra ni reordena las coordenadas.

Una combinación lineal es más amplia que un promedio

Varios términos relacionados usan la misma operación de escalar y sumar, pero imponen reglas distintas a los coeficientes.

Tipo de combinaciónCondiciones de los coeficientesConsecuencia geométrica para dos puntos de entrada
Combinación linealai∈Ra_i\in\mathbb{R}Puede recorrer toda la recta o el plano generado por los vectores
Combinación afín∑iai=1\sum_i a_i=1Permanece en la recta o el plano afín que pasa por los puntos de entrada, pero puede extenderse más allá
Combinación convexaai≥0a_i\ge 0 y ∑iai=1\sum_i a_i=1Permanece entre las entradas o dentro de su envolvente convexa

En esta lección, promedio ponderado significa la forma habitual con pesos no negativos normalizados, por lo que es una combinación convexa. Algunos campos usan el término “media ponderada” con convenciones diferentes, que deben indicarse explícitamente. El ejemplo inicial cumple esta convención porque 0.75+0.25=10.75+0.25=1 y ambos coeficientes son no negativos. En cambio, 1.5u−0.5v1.5\boldsymbol{u}-0.5\boldsymbol{v} es una combinación lineal y afín válida, pero no convexa: su coeficiente negativo puede llevar el resultado más allá del segmento entre los dos vectores.

El vector cero siempre se puede alcanzar como combinación lineal si se ponen todos los coeficientes a cero. Eso no significa que las entradas sean cero; solo significa que la operación permite la combinación trivial sin contribuciones activas.

La atención usa una suma ponderada restringida de valores

El artículo original de Transformer define una salida de atención como una suma ponderada de vectores de valores. Cada vector de valores es una representación candidata con la misma dimensión de características. El mecanismo de atención calcula cuánto contribuye cada valor para la posición actual y después realiza la combinación lineal. La ecuación de atención de producto punto escalado del artículo escribe muchas de estas sumas de forma compacta como una operación matricial.

Para una salida ilustrativa, supón que los pesos de atención ya calculados son 0.60.6, 0.30.3 y 0.10.1, y que los vectores de valores son

x1=[20],x2=[04],x3=[−12].\boldsymbol{x}_1=\begin{bmatrix}2\\0\end{bmatrix},\quad \boldsymbol{x}_2=\begin{bmatrix}0\\4\end{bmatrix},\quad \boldsymbol{x}_3=\begin{bmatrix}-1\\2\end{bmatrix}.

Entonces la representación de estilo atención es

z=0.6x1+0.3x2+0.1x3=[1.20]+[01.2]+[−0.10.2]=[1.11.4].\begin{aligned} \boldsymbol{z} &=0.6\boldsymbol{x}_1+0.3\boldsymbol{x}_2+0.1\boldsymbol{x}_3\\ &=\begin{bmatrix}1.2\\0\end{bmatrix} +\begin{bmatrix}0\\1.2\end{bmatrix} +\begin{bmatrix}-0.1\\0.2\end{bmatrix}\\ &=\begin{bmatrix}1.1\\1.4\end{bmatrix}. \end{aligned}

En la operación de atención del artículo, la normalización que produce estos pesos los hace no negativos y hace que cada conjunto sume uno. Por tanto, la suma final es una combinación convexa de los vectores de valores para esa salida de atención. Esas restricciones pertenecen a este mecanismo de atención, no a la definición de combinación lineal.

Esta lección empieza deliberadamente después de producir los pesos. Todavía no enseña consultas, claves, puntuaciones de compatibilidad, normalización, múltiples cabezales ni la proyección de salida posterior. El punto matemático duradero es más concreto: una vez disponibles los coeficientes y los vectores de valores compatibles, la atención construye una representación escalando cada valor y sumando sus contribuciones.

NumPy debe revelar el eje de los vectores

Guarda los dos vectores candidatos como filas de un array. El array vectors tiene entonces forma (2, 2): dos vectores, cada uno con dos coordenadas. El array de coeficientes tiene forma (2,), un coeficiente por vector.

import numpy as np

vectors = np.array([
    [3.0, 1.0],   # u
    [-1.0, 3.0],  # v
])
coefficients = np.array([0.75, 0.25])

if vectors.ndim != 2:
    raise ValueError("vectors must have shape (number_of_vectors, coordinates)")
if coefficients.shape != (vectors.shape[0],):
    raise ValueError("need exactly one coefficient per vector")

scaled = coefficients[:, np.newaxis] * vectors
result = scaled.sum(axis=0)

print(scaled)
print(result)

La salida verificada es

[[ 2.25  0.75]
 [-0.25  0.75]]
[2.  1.5]

coefficients[:, np.newaxis] cambia la forma de los coeficientes de (2,) a (2, 1). NumPy puede así transmitir un coeficiente por cada fila de vector. Las reglas oficiales de broadcasting comparan las dimensiones de los arrays desde la derecha y permiten dimensiones que coinciden o tienen tamaño uno. Después de la multiplicación, sum(axis=0) suma a lo largo del eje de filas de vectores y conserva las dos columnas de coordenadas.

Escribir solo coefficients * vectors también funciona en este ejemplo: las formas finales (2,) y (2, 2) casualmente alinean los dos coeficientes con las columnas de coordenadas, así que NumPy devuelve un array de aspecto razonable pero con el significado equivocado. La primera fila se convierte en [2.25, 0.25] en lugar de [2.25, 0.75]. Un broadcasting exitoso no demuestra que el eje de coeficientes sea correcto.

La compatibilidad de formas es necesaria, pero no suficiente. Si un candidato tiene tres coordenadas y otro tiene dos, no hay un array rectangular vectors de valores numéricos ordinarios que se pueda reducir así. Si ambos tienen dos coordenadas pero usan definiciones de características diferentes, el código funciona aunque el resultado siga siendo semánticamente inválido. Comprueba tanto la forma del array como el significado de las coordenadas.

Los coeficientes responden “cuánto”, no “qué significa”

Tres hábitos previenen la mayoría de los errores:

  1. Empareja cada coeficiente con un vector concreto antes de calcular.
  2. Escala los vectores completos y después suma las coordenadas correspondientes.
  3. Indica cualquier regla adicional de los coeficientes —como no negatividad o suma igual a uno— en vez de suponer que la expresión “suma ponderada” ya la incluye.

Los coeficientes negativos no son errores en una combinación lineal general: invierten una contribución. Los coeficientes mayores que uno también son válidos; pueden extender el resultado más allá de las flechas de entrada. Puede haber cancelación cuando las contribuciones apuntan en sentidos opuestos, y un coeficiente cero elimina un candidato sin cambiar la forma del vector.

El siguiente paso del curso que respeta los prerrequisitos, la lección 18, organiza números en matrices. La lección 19 mostrará después un producto matriz–vector como varias sumas ponderadas. Conserva la receta actual —emparejar, escalar, sumar—; la notación matricial la comprimirá, no la reemplazará. La página del curso Math for AI mantiene la ruta ordenada y los prerrequisitos publicados.

Comprueba lo que has entendido

Pregunta 1

Sean u = [2, −1]ᵀ y v = [4, 3]ᵀ. Calcula 1.5u − 0.5v e interpreta el signo de la segunda contribución.

Mostrar la solución paso a paso

Empareja los coeficientes con sus vectores y escala antes de sumar:

1.5u=1.5[2−1]=[3−1.5],1.5\boldsymbol{u} =1.5\begin{bmatrix}2\\-1\end{bmatrix} =\begin{bmatrix}3\\-1.5\end{bmatrix},−0.5v=−0.5[43]=[−2−1.5].-0.5\boldsymbol{v} =-0.5\begin{bmatrix}4\\3\end{bmatrix} =\begin{bmatrix}-2\\-1.5\end{bmatrix}.

Ahora suma las coordenadas correspondientes:

1.5u−0.5v=[3+(−2)−1.5+(−1.5)]=[1−3].1.5\boldsymbol{u}-0.5\boldsymbol{v} =\begin{bmatrix}3+(-2)\\-1.5+(-1.5)\end{bmatrix} =\begin{bmatrix}1\\-3\end{bmatrix}.

El coeficiente negativo invierte v\boldsymbol{v} antes de la suma. No significa “restar solo las coordenadas negativas”: cada coordenada de v\boldsymbol{v} se multiplica por −0.5-0.5.

Pregunta 2

Clasifica cada par de coeficientes para au + bv: (0.4, 0.6), (1.2, −0.2) y (2, 1). ¿Cuáles son combinaciones lineales, afines o convexas?

Mostrar la solución paso a paso

Cada par contiene coeficientes reales, por lo que los tres producen combinaciones lineales.

  • Para (0.4,0.6)(0.4,0.6), los coeficientes suman 11 y son no negativos. Es una combinación afín y convexa.
  • Para (1.2,−0.2)(1.2,-0.2), también suman 11, así que es afín. El coeficiente negativo impide que sea convexa.
  • Para (2,1)(2,1), suman 33, no 11. No es ni afín ni convexa, aunque sigue siendo una combinación lineal válida.

La clasificación depende de las restricciones sobre los coeficientes, no de las coordenadas concretas de u\boldsymbol{u} y v\boldsymbol{v}.

Pregunta 3

En el explorador, ¿qué debe ocurrirle a au cuando a cambia de 0.75 a 0 y después a −0.75 mientras u permanece fijo?

Mostrar la solución paso a paso

Con a=0.75a=0.75, la contribución es 0.75u=[2.25,0.75]T0.75\boldsymbol{u}=[2.25,0.75]^\mathsf{T}. Con a=0a=0,

0u=[00],0\boldsymbol{u}=\begin{bmatrix}0\\0\end{bmatrix},

por lo que la primera contribución colapsa en el origen y no tiene dirección. Con a=−0.75a=-0.75,

−0.75u=[−2.25−0.75].-0.75\boldsymbol{u}=\begin{bmatrix}-2.25\\-0.75\end{bmatrix}.

La flecha final tiene la misma longitud que la contribución de a=0.75a=0.75, pero apunta en dirección opuesta. El vector u\boldsymbol{u} y el significado de sus coordenadas no cambiaron; solo cambió su coeficiente.

Pregunta 4

Una operación de estilo atención usa los pesos (0.2, 0.5, 0.3) con los valores x₁ = [1, 2]ᵀ, x₂ = [3, 0]ᵀ y x₃ = [−1, 4]ᵀ. Calcula la salida y explica por qué es una combinación convexa.

Mostrar la solución paso a paso

Calcula las tres contribuciones:

0.2x1=[0.20.4],0.5x2=[1.50],0.3x3=[−0.31.2].0.2\boldsymbol{x}_1=\begin{bmatrix}0.2\\0.4\end{bmatrix},\quad 0.5\boldsymbol{x}_2=\begin{bmatrix}1.5\\0\end{bmatrix},\quad 0.3\boldsymbol{x}_3=\begin{bmatrix}-0.3\\1.2\end{bmatrix}.

Súmalas coordenada a coordenada:

z=[0.2+1.5−0.30.4+0+1.2]=[1.41.6].\boldsymbol{z} =\begin{bmatrix}0.2+1.5-0.3\\0.4+0+1.2\end{bmatrix} =\begin{bmatrix}1.4\\1.6\end{bmatrix}.

Los tres pesos son no negativos y 0.2+0.5+0.3=10.2+0.5+0.3=1. Esos dos hechos hacen que esta suma ponderada sea una combinación convexa de los vectores de valores. Son condiciones adicionales de la configuración de estilo atención indicada, no requisitos de toda combinación lineal.

Pregunta 5

Un desarrollador intenta combinar vectores con formas (3,) y (2,). ¿Por qué la expresión no es válida y por qué rellenar el vector más corto con ceros no arregla automáticamente el significado?

Mostrar la solución paso a paso

La suma de vectores requiere coordenadas correspondientes. Un vector de forma (3,) tiene tres posiciones de coordenadas, mientras que uno de forma (2,) solo tiene dos; por tanto, al segundo le falta una tercera coordenada que sumar. La expresión au+bva\boldsymbol{u}+b\boldsymbol{v} no está definida en un mismo Rn\mathbb{R}^n tal como está escrita.

Rellenar con ceros crea formas de array compatibles, pero inventa silenciosamente una afirmación sobre una coordenada: dice que el valor de la tercera característica que falta en el vector corto es exactamente cero. Solo puede ser válido si la especificación de codificación define la misma tercera característica y define su ausencia como cero. Arreglar la forma no sustituye un significado de coordenadas compatible.

Pregunta 6

¿Por qué coefficients * vectors puede ponderar silenciosamente las coordenadas en lugar de las filas de vectores en NumPy, y qué remodelado explícito arregla el cálculo?

Mostrar la solución paso a paso

Con vectors.shape == (2, 2) y coefficients.shape == (2,), NumPy compara las dimensiones desde la derecha. La longitud 2 de los coeficientes coincide con la última dimensión de coordenadas 2, así que el broadcasting aplica los dos números a las columnas. La operación funciona, pero el coeficiente 1 pondera la coordenada 1 y el coeficiente 2 pondera la coordenada 2.

Inserta una dimensión de coordenadas de tamaño uno:

scaled = coefficients[:, np.newaxis] * vectors
result = scaled.sum(axis=0)

Ahora coefficients[:, np.newaxis].shape == (2, 1). La primera dimensión empareja un coeficiente con cada fila de vectores y la dimensión de tamaño uno transmite ese coeficiente a todas las coordenadas de su fila. Después, sumar en el eje 0 agrega las filas escaladas coordenada a coordenada.

Pregunta 7

Demuestra coordenada a coordenada que a(u + v) = au + av para dos vectores u, v ∈ ℝ².

Mostrar la solución paso a paso

Escribe u=[u1,u2]T\boldsymbol{u}=[u_1,u_2]^\mathsf{T} y v=[v1,v2]T\boldsymbol{v}=[v_1,v_2]^\mathsf{T}. El lado izquierdo es

a(u+v)=a[u1+v1u2+v2]=[a(u1+v1)a(u2+v2)].a(\boldsymbol{u}+\boldsymbol{v}) =a\begin{bmatrix}u_1+v_1\\u_2+v_2\end{bmatrix} =\begin{bmatrix}a(u_1+v_1)\\a(u_2+v_2)\end{bmatrix}.

La distributividad de los números reales da

[au1+av1au2+av2]=[au1au2]+[av1av2]=au+av.\begin{bmatrix}au_1+av_1\\au_2+av_2\end{bmatrix} =\begin{bmatrix}au_1\\au_2\end{bmatrix} +\begin{bmatrix}av_1\\av_2\end{bmatrix} =a\boldsymbol{u}+a\boldsymbol{v}.

La primera coordenada coincide y la segunda también, así que los dos vectores son iguales. El mismo argumento funciona para cualquier número finito de coordenadas.

Pregunta 8

Un modelo tiene vectores compatibles u y v. Compara r = 2u + 0v con concatenar u y v. ¿Qué información y forma produce cada operación?

Mostrar la solución paso a paso

La combinación lineal escala primero y suma después:

r=2u+0v=2u.\boldsymbol{r}=2\boldsymbol{u}+0\boldsymbol{v}=2\boldsymbol{u}.

Si u,v∈Rn\boldsymbol{u},\boldsymbol{v}\in\mathbb{R}^n, el resultado sigue estando en Rn\mathbb{R}^n. El vector v\boldsymbol{v} no aporta nada porque su coeficiente es cero, mientras que cada coordenada de u\boldsymbol{u} se duplica.

La concatenación no suma coordenadas correspondientes. Coloca las nn coordenadas de u\boldsymbol{u} junto a las nn coordenadas de v\boldsymbol{v} y produce un objeto de 2n2n coordenadas. La concatenación conserva ambos bloques de entrada y cambia la forma; la combinación lineal fusiona sus contribuciones escaladas en el espacio de coordenadas original. Responden a preguntas distintas sobre la representación.

Fuentes

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. Attention Is All You Need
  4. NumPy documentation: numpy.sum
  5. NumPy documentation: broadcasting