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

Suma de vectores para la IA: cómo las actualizaciones residuales combinan señales

Aprende a sumar vectores componente a componente, explora su geometría de paralelogramo y detecta errores de forma, broadcasting y alineación de características en NumPy.

Comparte este artículo

Una capa de red neuronal recibe un estado con tres coordenadas

x=[2−10.5]\boldsymbol{x}=\begin{bmatrix}2\\-1\\0.5\end{bmatrix}

y calcula una actualización

u=[−0.51.51].\boldsymbol{u}=\begin{bmatrix}-0.5\\1.5\\1\end{bmatrix}.

Una conexión residual no elige entre el estado anterior y la actualización. Suma las coordenadas correspondientes y produce y=x+u=[1.5,0.5,1.5]T\boldsymbol{y}=\boldsymbol{x}+\boldsymbol{u}=[1.5,0.5,1.5]^\mathsf{T}. La primera coordenada baja, la segunda sube y la tercera sube; una sola regla gestiona los tres cambios.

Al terminar esta lección podrás sumar vectores componente a componente, interpretar la misma operación como un desplazamiento o una actualización de características, verificarla en NumPy y rechazar sumas cuyas formas resulten compatibles por casualidad aunque sus significados de coordenadas no estén alineados.

Resultado de aprendizaje: Sumar vectores componente a componente e interpretar el desplazamiento o la mezcla de características resultante.

La lección 14: Vectores como datos de IA estableció que un vector es una representación ordenada: la coordenada jj lleva una característica o señal aprendida concreta. La suma de vectores depende de ese orden. El Mathematics for Machine Learning companion oficial desarrolla los vectores fila y columna y la suma elemento a elemento de matrices en la sección 2.2. Esta lección especializa la regla para vectores; su ejemplo de estado del modelo, derivación, código, geometría interactiva y evaluaciones son originales.

Una regla de coordenadas combina todo el vector

Sean a,b∈Rn\boldsymbol{a},\boldsymbol{b}\in\mathbb{R}^{n} dos vectores reales con la misma dimensión positiva nn. Escribe sus coordenadas como aja_j y bjb_j, donde jj va de 1 a nn.

La expresión coordenadas correspondientes implica dos requisitos. Primero, los vectores deben tener la misma dimensión. Segundo, cada par aj,bja_j,b_j debe referirse al mismo sistema de coordenadas: el mismo orden de características, unidades y convención de representación. Las matemáticas establecen el requisito dimensional. Una canalización de datos también debe hacer cumplir el requisito semántico.

La suma no concatena dos vectores. Concatenar [a1,a2]T[a_1,a_2]^\mathsf{T} y [b1,b2]T[b_1,b_2]^\mathsf{T} produciría un vector de cuatro coordenadas. Sumarlos conserva dos coordenadas:

[a1a2]+[b1b2]=[a1+b1a2+b2].\begin{bmatrix}a_1\\a_2\end{bmatrix}+\begin{bmatrix}b_1\\b_2\end{bmatrix}=\begin{bmatrix}a_1+b_1\\a_2+b_2\end{bmatrix}.

Sigue una actualización residual sin saltarte ninguna coordenada

Volvamos a los vectores iniciales. Supón que las tres posiciones pertenecen al mismo espacio de representación aprendido. Calcula la suma fila a fila:

CoordenadaEstado existente xjx_jActualización uju_jSalida yj=xj+ujy_j=x_j+u_j
12.0−0.51.5
2−1.01.50.5
30.51.01.5

Una actualización positiva eleva una coordenada, una negativa la reduce y una actualización cero la deja sin cambios. Estas descripciones son aritméticas, no interpretaciones semánticas de lo que “significa” una coordenada neuronal interna. Las representaciones aprendidas pueden distribuir la información entre muchas coordenadas, de modo que la suma por sí sola no revela un concepto legible para una persona.

La diagonal y la ruta en dos pasos llegan al mismo punto

En dos dimensiones, un vector puede dibujarse como una flecha desde el origen. Para sumar geométricamente a\boldsymbol{a} y b\boldsymbol{b}, recorre a\boldsymbol{a} y después coloca una copia de b\boldsymbol{b} en su extremo. El punto final es a+b\boldsymbol{a}+\boldsymbol{b} porque el desplazamiento horizontal es a1+b1a_1+b_1 y el vertical es a2+b2a_2+b_2.

El orden puede invertirse. Recorrer b\boldsymbol{b} y después una copia trasladada de a\boldsymbol{a} lleva al mismo punto final. Las dos rutas forman lados adyacentes de un paralelogramo; su diagonal desde el origen es la suma. Mueve las cuatro coordenadas siguientes para probar direcciones positivas, negativas, paralelas y que se cancelan.

Paralelogramo vectorial interactivo: cambia ambos vectores y compara las rutas en dos pasos con la suma diagonal.
Elige las coordenadas horizontal y vertical

Cada control deslizante va de −4 a 4 en pasos de 1 y funciona con las teclas de flecha.

+3
+1
-1
+2

Cálculo actual: a = (+3, +1), b = (-1, +2), así que a + b = (+2, +3).

Vector a — flecha continuaVector b — flecha discontinuaSuma a + b — diagonal gruesa

Las dos rutas de extremo a extremo terminan en las coordenadas de la fila de la suma. La flecha b trasladada y discontinua comienza en a; la flecha a trasladada y punteada comienza en b.

Alternativa numérica para el paralelogramo actual
VectorCoordenada horizontalCoordenada verticalPapel geométrico
Vector a — flecha continua+3+1Primer desplazamiento y un lado
Vector b — flecha discontinua-1+2Segundo desplazamiento y un lado
Suma a + b — diagonal gruesa+2+3Punto final y diagonal

El diagrama usa dos coordenadas porque una página plana puede mostrarlas. La regla por componentes no depende de una imagen: para un vector en Rn\mathbb{R}^{n}, suma cada una de las nn coordenadas correspondientes, aunque nn sea demasiado grande para dibujarlo.

Tres hechos algebraicos se siguen coordenada a coordenada

La suma de vectores hereda propiedades conocidas de la suma de números reales. La razón es local: cada identidad vectorial puede comprobarse en la coordenada jj.

El orden no cambia la suma. Como aj+bj=bj+aja_j+b_j=b_j+a_j para números reales,

(a+b)j=aj+bj=bj+aj=(b+a)j.(\boldsymbol{a}+\boldsymbol{b})_j=a_j+b_j=b_j+a_j=(\boldsymbol{b}+\boldsymbol{a})_j.

Todas las coordenadas coinciden, así que a+b=b+a\boldsymbol{a}+\boldsymbol{b}=\boldsymbol{b}+\boldsymbol{a}. Esto es la conmutatividad, y el paralelogramo muestra el mismo hecho como dos rutas hacia un punto final.

La agrupación no cambia la suma de tres vectores. Para otro vector c∈Rn\boldsymbol{c}\in\mathbb{R}^{n},

((a+b)+c)j=(aj+bj)+cj=aj+(bj+cj)=(a+(b+c))j.\begin{aligned} ((\boldsymbol{a}+\boldsymbol{b})+\boldsymbol{c})_j&=(a_j+b_j)+c_j\\ &=a_j+(b_j+c_j)\\ &=(\boldsymbol{a}+(\boldsymbol{b}+\boldsymbol{c}))_j. \end{aligned}

Esta asociatividad produce exactamente el mismo vector matemático con cualquiera de las dos agrupaciones. El código de precisión finita puede acumular errores de redondeo ligeramente distintos cuando cambia el orden de muchas sumas. Ni la asociatividad matemática ni la cercanía numérica autorizan a mezclar sistemas de coordenadas.

El vector cero no cambia nada. Sea 0=[0,…,0]T∈Rn\boldsymbol{0}=[0,\ldots,0]^\mathsf{T}\in\mathbb{R}^{n}. Entonces

(a+0)j=aj+0=aj,(\boldsymbol{a}+\boldsymbol{0})_j=a_j+0=a_j,

por lo que a+0=a\boldsymbol{a}+\boldsymbol{0}=\boldsymbol{a}. Una rama residual que devuelve el vector cero no produce ningún cambio numérico en ese punto de suma.

Las conexiones residuales usan exactamente este mecanismo de suma

El artículo original de ResNet escribe un bloque residual como y=F(x)+x\boldsymbol{y}=\mathcal{F}(\boldsymbol{x})+\boldsymbol{x}: una rama aprendida calcula F(x)\mathcal{F}(\boldsymbol{x}), mientras que un atajo lleva x\boldsymbol{x} hasta la suma. Los autores especifican que es una suma elemento a elemento y que los dos términos necesitan dimensiones iguales. Cuando las dimensiones no coinciden, su arquitectura puede usar una proyección aprendida en el atajo antes de sumar.

El Transformer original ofrece otro ejemplo concreto. Su codificador aplica una conexión residual alrededor de cada subcapa:

LayerNorm⁡(x+Sublayer⁡(x)).\operatorname{LayerNorm}\left(\boldsymbol{x}+\operatorname{Sublayer}(\boldsymbol{x})\right).

En esa arquitectura, las salidas de la incrustación y de la subcapa usan la misma dimensión dmodel=512d_{\text{model}}=512, por lo que la suma coordenada a coordenada está definida. La normalización posterior a la suma es otra operación; la suma de vectores termina en x+Sublayer⁡(x)\boldsymbol{x}+\operatorname{Sublayer}(\boldsymbol{x}).

Estos ejemplos justifican una afirmación de implementación acotada: las conexiones residuales combinan una entrada y una actualización compatibles mediante suma elemento a elemento. La ecuación por sí sola no demuestra que todas las características de entrada sobrevivan sin cambios, que cada coordenada tenga un significado aislado ni que dos arrays cualesquiera de la misma longitud sean un par residual válido.

NumPy suma valores y difunde formas

La operación add de NumPy suma sus argumentos elemento a elemento. Para dos arrays unidimensionales con la misma forma, np.add(state, update) y state + update implementan directamente la regla por componentes:

import numpy as np

state = np.array([2.0, -1.0, 0.5])
update = np.array([-0.5, 1.5, 1.0])

if state.shape != update.shape:
    raise ValueError("A residual update must match the state shape")

combined = np.add(state, update)
print("state shape:", state.shape)
print("update shape:", update.shape)
print("combined:", combined)

La salida verificada es

state shape: (3,)
update shape: (3,)
combined: [1.5 0.5 1.5]

Un lote conserva un estado por fila. Dos arrays compatibles de forma (2, 3) suman cada actualización a su estado correspondiente:

batch = np.array([
    [2.0, -1.0, 0.5],
    [0.0,  3.0, -2.0],
])
updates = np.array([
    [-0.5,  1.5, 1.0],
    [ 1.0, -1.0, 0.5],
])

print("batch shape:", batch.shape)
print("batch sums:\n", batch + updates)

La salida verificada es

batch shape: (2, 3)
batch sums:
 [[ 1.5  0.5  1.5]
 [ 1.   2.  -1.5]]

La primera fila de salida es el ejemplo desarrollado. La segunda procede de [0,3,−2]T+[1,−1,0.5]T=[1,2,−1.5]T[0,3,-2]^\mathsf{T}+[1,-1,0.5]^\mathsf{T}=[1,2,-1.5]^\mathsf{T}.

Una operación de arrays correcta aún puede ser una suma incorrecta

NumPy admite intencionadamente el broadcasting: si las formas difieren pero cumplen sus reglas de compatibilidad, un array más pequeño puede actuar sobre uno mayor. Sumar una actualización de forma (3,) a un lote de forma (2, 3) funciona y aplica los mismos tres valores a ambas filas:

broadcast_update = np.array([0.5, 0.0, -0.5])
result = batch + broadcast_update

print("broadcast shape:", result.shape)
print("broadcast sums:\n", result)
broadcast shape: (2, 3)
broadcast sums:
 [[ 2.5 -1.   0. ]
 [ 0.5  3.  -2.5]]

Puede ser la operación prevista: por ejemplo, una actualización compartida para cada fila del lote. No es una suma entre dos vectores individuales de la misma forma y resulta peligrosa cuando la expansión adicional fue accidental. Valida el contrato que pretende tu modelo, no solo las formas que NumPy acepta.

Las formas coincidentes tampoco bastan. Considera estos arrays:

p=[4,1,0]Tcon el orden (clicks,purchases,returns),q=[2,3,5]Tcon el orden (returns,clicks,purchases).\begin{aligned} \boldsymbol{p}&=[4,1,0]^\mathsf{T} &&\text{con el orden }(\texttt{clicks},\texttt{purchases},\texttt{returns}),\\ \boldsymbol{q}&=[2,3,5]^\mathsf{T} &&\text{con el orden }(\texttt{returns},\texttt{clicks},\texttt{purchases}). \end{aligned}

NumPy devuelve [6,4,5]T[6,4,5]^\mathsf{T}, pero su primer cálculo suma clicks con returns. Ninguna comprobación numérica de formas puede recuperar las etiquetas que faltan. Reordena un vector según la convención de coordenadas del otro —o rechaza la operación— antes de sumar.

La suma de vectores es ahora más que una fórmula: es un contrato de coordenadas, una ruta geométrica y la operación que combina señales dentro de un bloque residual. La próxima lección controlará la intensidad de un vector mediante la multiplicación por un escalar; la suma de hoy proporciona la operación a la que acabarán uniéndose esas señales escaladas.

Comprueba tu comprensión

Pregunta 1

Suma a = [3, −2, 1]ᵀ y b = [−5, 4, 0.5]ᵀ. Muestra cada cálculo de coordenadas e indica la dimensión del resultado.

Mostrar la solución paso a paso

Ambas entradas tienen tres coordenadas, así que su suma —si se calcula coordenada a coordenada— también estará en R3\mathbb{R}^{3}.

(a+b)1=3+(−5)=−2,(a+b)2=−2+4=2,(a+b)3=1+0.5=1.5.\begin{aligned} (\boldsymbol{a}+\boldsymbol{b})_1&=3+(-5)=-2,\\ (\boldsymbol{a}+\boldsymbol{b})_2&=-2+4=2,\\ (\boldsymbol{a}+\boldsymbol{b})_3&=1+0.5=1.5. \end{aligned}

Reúne los resultados en su orden original:

a+b=[−221.5]∈R3.\boldsymbol{a}+\boldsymbol{b}=\begin{bmatrix}-2\\2\\1.5\end{bmatrix}\in\mathbb{R}^{3}.

La suma cambió los valores, pero no insertó ni eliminó ninguna coordenada.

Pregunta 2

Para a = (2, 1) y b = (−1, 3), sigue la ruta de extremo a extremo a y después b. ¿Dónde termina y por qué ese punto es la diagonal del paralelogramo?

Mostrar la solución paso a paso

Empieza en el origen (0,0)(0,0). Seguir a=(2,1)\boldsymbol{a}=(2,1) lleva a (2,1)(2,1). Una copia trasladada de b=(−1,3)\boldsymbol{b}=(-1,3) cambia después la coordenada horizontal en −1-1 y la vertical en 33:

(2,1)+(−1,3)=(2−1,1+3)=(1,4).(2,1)+(-1,3)=(2-1,1+3)=(1,4).

Invertir el orden produce

(−1,3)+(2,1)=(−1+2,3+1)=(1,4).(-1,3)+(2,1)=(-1+2,3+1)=(1,4).

Las dos rutas son los dos pares de lados paralelos de un paralelogramo. Como ambas llegan a (1,4)(1,4), la flecha desde el origen hasta (1,4)(1,4) es su diagonal y representa a+b\boldsymbol{a}+\boldsymbol{b}.

Pregunta 3

Explica coordenada a coordenada por qué a + b = b + a para cualesquiera a, b ∈ ℝⁿ. No te bases únicamente en una imagen bidimensional.

Mostrar la solución paso a paso

Elige una coordenada arbitraria j∈{1,…,n}j\in\{1,\ldots,n\}. Por la definición de suma de vectores,

(a+b)j=aj+bj.(\boldsymbol{a}+\boldsymbol{b})_j=a_j+b_j.

La suma de números reales es conmutativa, así que aj+bj=bj+aja_j+b_j=b_j+a_j. Aplica la definición vectorial en sentido inverso para obtener

bj+aj=(b+a)j.b_j+a_j=(\boldsymbol{b}+\boldsymbol{a})_j.

Por tanto, las dos sumas coinciden en la coordenada arbitraria jj. El argumento vale para todas las coordenadas, así que los vectores son iguales: a+b=b+a\boldsymbol{a}+\boldsymbol{b}=\boldsymbol{b}+\boldsymbol{a}. Este razonamiento funciona en cualquier dimensión finita, incluidas las dimensiones que no se pueden dibujar.

Pregunta 4

Una rama residual devuelve [0, 0, 0, 0]ᵀ para un estado x ∈ ℝ⁴. Calcula la salida x + 0 y nombra el supuesto necesario antes de decir que la rama no produjo ningún cambio significativo.

Mostrar la solución paso a paso

Escribe x=[x1,x2,x3,x4]T\boldsymbol{x}=[x_1,x_2,x_3,x_4]^\mathsf{T}. La suma coordenada a coordenada da

x+0=[x1+0x2+0x3+0x4+0]=[x1x2x3x4]=x.\boldsymbol{x}+\boldsymbol{0}=\begin{bmatrix}x_1+0\\x_2+0\\x_3+0\\x_4+0\end{bmatrix}=\begin{bmatrix}x_1\\x_2\\x_3\\x_4\end{bmatrix}=\boldsymbol{x}.

Así, el punto de suma no produce ningún cambio numérico. Decir que no hubo “ningún cambio significativo” supone además que el estado y la actualización cero usan la misma representación de cuatro coordenadas y que ninguna otra operación —como la normalización— cambia el valor después.

Pregunta 5

¿Puede [1, 2]ᵀ + [3, 4, 5]ᵀ ser una suma de vectores? Diagnostica el problema y después indica una solución a nivel de arquitectura para un bloque residual con dimensiones incompatibles.

Mostrar la solución paso a paso

El primer vector pertenece a R2\mathbb{R}^{2} y el segundo a R3\mathbb{R}^{3}. La suma componente a componente necesitaría una entrada correspondiente para cada coordenada de salida, pero al primer vector le falta una tercera coordenada. Por tanto, la suma vectorial no está definida tal como se ha escrito.

Una arquitectura residual puede mapear primero una rama a la dimensión de la otra. Por ejemplo, una proyección PP podría producir Px∈R3P\boldsymbol{x}\in\mathbb{R}^{3} a partir de x∈R2\boldsymbol{x}\in\mathbb{R}^{2}. Entonces la suma definida sería Px+uP\boldsymbol{x}+\boldsymbol{u}, siempre que la proyección establezca también la semántica de coordenadas prevista. El relleno es otra opción específica de la arquitectura, pero descartar o inventar silenciosamente una coordenada no es suma de vectores.

Pregunta 6

Dos arrays de forma (3,) usan los órdenes de características (clicks, purchases, returns) y (returns, clicks, purchases). ¿Por qué es inválido sumarlos posición a posición y cómo debe prepararse el segundo array?

Mostrar la solución paso a paso

La igualdad de formas empareja la posición 1 con la posición 1, pero las etiquetas muestran que eso sumaría clicks con returns. Las posiciones 2 y 3 también están desalineadas. La operación produciría números sin una interpretación coherente de características.

Primero asocia cada valor del segundo array con su etiqueta. Después reordena esos valores etiquetados según

(clicks,purchases,returns),(\texttt{clicks},\texttt{purchases},\texttt{returns}),

la convención del primer array. Solo cuando ambos arrays coincidan en dimensión, orden y unidades debe ejecutarse la suma posición a posición. NumPy no puede hacer esta comprobación semántica a partir de arrays numéricos sin etiquetas de características.

Pregunta 7

Un lote tiene forma (4, 3) y la actualización tiene forma (3,). NumPy acepta batch + update. ¿Qué forma tiene la salida, qué cálculo se realiza y qué pregunta debe responder el programador antes de confiar en ella?

Mostrar la solución paso a paso

NumPy compara las dimensiones finales. Las dimensiones finales son ambas 3, mientras que la dimensión inicial que falta en update actúa como 1 y puede expandirse por las cuatro filas del lote. Por tanto, la salida tiene forma (4, 3).

Para cada índice de fila i∈{0,1,2,3}i\in\{0,1,2,3\} y coordenada j∈{0,1,2}j\in\{0,1,2\}, NumPy calcula

result[i,j]=batch[i,j]+update[j].\texttt{result}[i,j]=\texttt{batch}[i,j]+\texttt{update}[j].

El programa aplica la misma actualización de tres coordenadas a las cuatro filas. El programador debe decidir si se pretendía una actualización compartida. Un broadcasting correcto demuestra compatibilidad de formas según las reglas de NumPy; no demuestra que el contrato del modelo pretendiera reutilizar una actualización para cada elemento del lote.

Pregunta 8

Una subcapa recibe x = [1, −2, 3]ᵀ y devuelve F(x) = [0.5, 2, −1]ᵀ. Calcula la suma residual y explica con precisión qué establece y qué no establece la aritmética.

Mostrar la solución paso a paso

Suma las coordenadas correspondientes:

y=x+F(x)=[1+0.5−2+23+(−1)]=[1.502].\begin{aligned} \boldsymbol{y}&=\boldsymbol{x}+\mathcal{F}(\boldsymbol{x})\\ &=\begin{bmatrix}1+0.5\\-2+2\\3+(-1)\end{bmatrix}\\ &=\begin{bmatrix}1.5\\0\\2\end{bmatrix}. \end{aligned}

La aritmética establece que la entrada compatible y la salida de la subcapa se combinaron componente a componente en un resultado de tres coordenadas. No identifica el significado humano de ninguna coordenada, no demuestra que la información original pueda recuperarse por completo ni muestra qué hará una normalización o capa posterior. Esas son propiedades de la representación aprendida y de la arquitectura circundante, no consecuencias del signo más por sí solo.

Fuentes

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.add
  4. NumPy documentation: broadcasting
  5. Deep Residual Learning for Image Recognition
  6. Attention Is All You Need