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

Multiplicación escalar para IA: aumenta, reduce o invierte un vector

Escala vectores coordenada a coordenada, predice dirección y magnitud, y conecta la misma operación con embeddings, tasas de aprendizaje y NumPy.

Comparte este artículo

Un vector de dirección puede indicar hacia dónde debe ir una actualización del modelo sin indicar qué tan grande debe ser el movimiento. Un solo número aporta esa segunda decisión. Si la dirección es [4,−3]T[4,-3]^\mathsf{T}, multiplicarla por 0.250.25 produce el movimiento más corto [1,−0.75]T[1,-0.75]^\mathsf{T}. Multiplicarla por −1-1 conserva su longitud, pero apunta en la dirección contraria.

Ese número es un escalar: un valor que se aplica a cada coordenada. Al terminar esta lección podrás calcular productos escalar–vector, predecir su dirección y magnitud a partir del signo y el valor absoluto del escalar, implementarlos correctamente en NumPy y reconocer el mismo mecanismo dentro de una actualización escalada por la tasa de aprendizaje o de una contribución ponderada de un embedding.

Resultado de aprendizaje: Escalar un vector y predecir cambios en su dirección y magnitud.

La lección 15: Suma de vectores para la IA estableció que los vectores se combinan sumando las coordenadas correspondientes. La multiplicación escalar prepara uno de esos vectores antes de la suma: controla la intensidad con la que contribuye. El sitio web complementario oficial de Mathematics for Machine Learning introduce la multiplicación por un escalar en la sección 2.2 del libro. Los ejemplos, el código, el rayo interactivo, las aplicaciones de IA y las evaluaciones siguientes son originales.

Un número alcanza cada coordenada

Sea v∈Rn\boldsymbol{v}\in\mathbb{R}^{n} un vector real con coordenadas v1,v2,…,vnv_1,v_2,\ldots,v_n, y sea α∈R\alpha\in\mathbb{R} un escalar real. La letra griega α\alpha (alpha) solo es el nombre de un número; símbolos como cc, ss o λ\lambda podrían desempeñar el mismo papel.

La operación conserva la dimensión y el orden de las coordenadas del vector. Un escalar no añade una coordenada, no elige una coordenada ni mezcla coordenadas vecinas. Cambia los nn valores mediante la misma regla de multiplicación.

Una escala negativa invierte cada coordenada distinta de cero

Toma el vector de actualización

u=[4−32]\boldsymbol{u}= \begin{bmatrix}4\\-3\\2\end{bmatrix}

y elige α=−1.5\alpha=-1.5. El símbolo u\boldsymbol{u} nombra la actualización completa de tres coordenadas. Parte de la definición en lugar de intentar inferir la respuesta solo a partir del signo menos.

Este cálculo separa dos efectos. El valor absoluto —la distancia del escalar al cero— es ∣α∣=1.5|\alpha|=1.5, por lo que la magnitud del vector pasa a ser 1,5 veces su magnitud original. El signo negativo invierte su dirección. Ninguno de los dos efectos cambia qué característica o parámetro representa cada coordenada.

El signo elige el rayo; el valor absoluto el alcance

En dos dimensiones, dibuja v\boldsymbol{v} como una flecha desde el origen. Cada múltiplo escalar distinto de cero se encuentra en la misma recta infinita que pasa por esa flecha. Los escalares positivos ocupan el mismo rayo, los negativos el rayo opuesto y el cero colapsa la flecha en el origen.

En esta lección, magnitud significa la longitud euclidiana de la flecha. Para v=[v1,…,vn]T\boldsymbol{v}=[v_1,\ldots,v_n]^\mathsf{T}, define

∥v∥2=v12+⋯+vn2.\lVert\boldsymbol{v}\rVert_2 =\sqrt{v_1^2+\cdots+v_n^2}.

El subíndice 2 distingue esta regla de longitud de otras reglas de magnitud que se estudiarán en una lección posterior. La multiplicación escalar cambia esta magnitud por ∣α∣|\alpha|, no por α\alpha:

∥αv∥2=(αv1)2+⋯+(αvn)2=α2(v12+⋯+vn2)=∣α∣v12+⋯+vn2=∣α∣∥v∥2.\begin{aligned} \lVert\alpha\boldsymbol{v}\rVert_2 &=\sqrt{(\alpha v_1)^2+\cdots+(\alpha v_n)^2}\\ &=\sqrt{\alpha^2(v_1^2+\cdots+v_n^2)}\\ &=|\alpha|\sqrt{v_1^2+\cdots+v_n^2}\\ &=|\alpha|\lVert\boldsymbol{v}\rVert_2. \end{aligned}

El valor absoluto es esencial porque una magnitud no puede ser negativa. El signo pertenece a la dirección; el valor absoluto, al tamaño.

Escalar α\alphaDirección de αv\alpha\boldsymbol{v} para v≠0\boldsymbol{v}\ne\boldsymbol{0}Magnitud
α>1\alpha>1Misma direcciónMás largo por un factor α\alpha
α=1\alpha=1Misma direcciónSin cambios
0<α<10<\alpha<1Misma direcciónMás corto por un factor α\alpha
α=0\alpha=0Sin dirección: el resultado es 0\boldsymbol{0}Cero
−1<α<0-1<\alpha<0Dirección opuestaMás corto por un factor ∣α∣\lvert\alpha\rvert
α=−1\alpha=-1Dirección opuestaSin cambios
α<−1\alpha<-1Dirección opuestaMás largo por un factor ∣α∣\lvert\alpha\rvert

Arrastra el escalar de abajo por los siete casos. El vector fijo es v=[4,−3]T\boldsymbol{v}=[4,-3]^\mathsf{T}, cuya magnitud es 55. La flecha escalada, la frase de estado y la tabla comienzan con el estado renderizado en el servidor α=1.5\alpha=1.5 y se actualizan juntas cuando el componente se hace visible.

Multiplicación escalar interactiva: mueve un escalar y compara un vector fijo con su resultado escalado.
Elige el escalar que multiplica a v

El intervalo va de −2 a 2 en pasos de 0.25. Usa las teclas de flecha para un paso, o Page Up y Page Down para cambios mayores.

Resultado actual: α = +1,5, v = (+4, -3) y αv = (+6, -4,5). Su magnitud es 7,5; su dirección es la misma que v.

Vector base v — flecha sólidaVector escalado αv — flecha discontinua

El estilo de línea y el texto distinguen las flechas sin depender del color. Cuando α = 0, un anillo discontinuo en el origen sustituye a la flecha escalada porque el vector cero no tiene dirección.

Alternativa numérica para el escalar y las flechas actuales
VectorEscalaPrimera coordenadaSegunda coordenadaMagnitud euclidianaDirección relativa a v
Vector base v — flecha sólida+1+4-35dirección de referencia
Vector escalado αv — flecha discontinua+1,5+6-4,57,5la misma que v

La imagen solo tiene dos dimensiones, pero la regla no. En un embedding de 768 coordenadas, un escalar sigue multiplicando las 768 coordenadas, y la magnitud sigue cambiando por ∣α∣|\alpha| según la regla de longitud euclidiana.

Escalar antes de sumar controla una contribución

La multiplicación escalar resulta especialmente útil junto a la suma de vectores. Supón que un modelo tiene un estado de contexto

c=[1−12]\boldsymbol{c}=\begin{bmatrix}1\\-1\\2\end{bmatrix}

y una contribución candidata de embedding

e=[21−1].\boldsymbol{e}=\begin{bmatrix}2\\1\\-1\end{bmatrix}.

Con un peso α=0.5\alpha=0.5, escala primero y después suma:

αe=0.5[21−1]=[10.5−0.5],c+αe=[1−12]+[10.5−0.5]=[2−0.51.5].\begin{aligned} \alpha\boldsymbol{e} &=0.5\begin{bmatrix}2\\1\\-1\end{bmatrix} =\begin{bmatrix}1\\0.5\\-0.5\end{bmatrix},\\ \boldsymbol{c}+\alpha\boldsymbol{e} &=\begin{bmatrix}1\\-1\\2\end{bmatrix} +\begin{bmatrix}1\\0.5\\-0.5\end{bmatrix} =\begin{bmatrix}2\\-0.5\\1.5\end{bmatrix}. \end{aligned}

El peso cambia la intensidad con la que e\boldsymbol{e} contribuye a esta suma. Un peso 00 elimina esa contribución; un peso negativo contribuye en la dirección contraria. Este es el significado aritmético preciso de “intensidad del embedding”. No garantiza que la salida de una red neuronal completa cambie en proporción directa a α\alpha: las transformaciones posteriores, la normalización y las operaciones no lineales pueden alterar el efecto posterior.

La regla distributiva explica por qué el escalado de una señal combinada se puede calcular antes o después de sumar sus partes:

α(v+w)=αv+αw.\alpha(\boldsymbol{v}+\boldsymbol{w}) =\alpha\boldsymbol{v}+\alpha\boldsymbol{w}.

En la coordenada jj, ambos lados equivalen a α(vj+wj)=αvj+αwj\alpha(v_j+w_j)=\alpha v_j+\alpha w_j. Como todas las coordenadas coinciden, los vectores coinciden. La regla relacionada (α+β)v=αv+βv(\alpha+\beta)\boldsymbol{v}=\alpha\boldsymbol{v}+\beta\boldsymbol{v} permitirá combinar varios vectores ponderados de forma eficiente en la próxima lección.

Una tasa de aprendizaje escala la dirección propuesta por un optimizador

Considera el paso más sencillo de descenso de gradiente estocástico (SGD), sin momentum ni weight decay. Sea θ\boldsymbol{\theta} un vector de parámetros y g\boldsymbol{g} un vector gradiente que apunta hacia un aumento de la pérdida. Una tasa de aprendizaje positiva η\eta escala la dirección antes de restarla:

θnext=θ−ηg.\boldsymbol{\theta}_{\text{next}} =\boldsymbol{\theta}-\eta\boldsymbol{g}.

El cálculo diferencial necesario para obtener g\boldsymbol{g} aparece más adelante en el curso; por ahora, es un vector proporcionado cuya escala podemos inspeccionar directamente.

Esto es una multiplicación escalar seguida de la suma vectorial θ+(−ηg)\boldsymbol{\theta}+(-\eta\boldsymbol{g}). La documentación actual de PyTorch SGD expresa el paso final de los parámetros de esta forma, después de cualquier modificación configurada de la dirección de actualización por weight decay, momentum o Nesterov. La precisión de esta afirmación importa: con esas opciones activadas, la tasa de aprendizaje puede escalar una dirección modificada, no el gradiente bruto sin tocar.

Para un pequeño paso numérico, sea

θ=[21],g=[4−3],η=0.25.\boldsymbol{\theta}=\begin{bmatrix}2\\1\end{bmatrix},\qquad \boldsymbol{g}=\begin{bmatrix}4\\-3\end{bmatrix},\qquad \eta=0.25.

Entonces

ηg=0.25[4−3]=[1−0.75],−ηg=[−10.75],θnext=[21]+[−10.75]=[11.75].\begin{aligned} \eta\boldsymbol{g} &=0.25\begin{bmatrix}4\\-3\end{bmatrix} =\begin{bmatrix}1\\-0.75\end{bmatrix},\\ -\eta\boldsymbol{g} &=\begin{bmatrix}-1\\0.75\end{bmatrix},\\ \boldsymbol{\theta}_{\text{next}} &=\begin{bmatrix}2\\1\end{bmatrix} +\begin{bmatrix}-1\\0.75\end{bmatrix} =\begin{bmatrix}1\\1.75\end{bmatrix}. \end{aligned}

Sustituir η=0.25\eta=0.25 por η=0.5\eta=0.5 duplicaría la magnitud de esta actualización propuesta, manteniendo su dirección. Ese hecho aritmético por sí solo no indica si una tasa de aprendizaje mayor mejora el entrenamiento o permanece estable; esas preguntas dependen de la superficie de pérdida y del comportamiento del optimizador, y corresponden al módulo de optimización posterior.

NumPy multiplica arrays; las listas de Python repiten

multiply de NumPy multiplica los argumentos elemento a elemento, y * es su abreviatura de operador para arrays. Las reglas de broadcasting de NumPy permiten que un escalar actúe sobre el array sin construir un array completo con escalares repetidos.

import numpy as np

vector = np.array([4.0, -3.0, 2.0])
alpha = -1.5

scaled_with_operator = alpha * vector
scaled_with_function = np.multiply(alpha, vector)

print("vector shape:", vector.shape)
print("operator result:", scaled_with_operator)
print("function result:", scaled_with_function)
print("same values:", np.array_equal(
    scaled_with_operator, scaled_with_function
))

La salida verificada es

vector shape: (3,)
operator result: [-6.   4.5 -3. ]
function result: [-6.   4.5 -3. ]
same values: True

Una lista normal de Python cambia el significado de *. La documentación de secuencias de Python define la multiplicación por un entero como repetición:

coordinates = [4.0, -3.0, 2.0]

print(2 * coordinates)
print(2 * np.array(coordinates))
[4.0, -3.0, 2.0, 4.0, -3.0, 2.0]
[ 8. -6.  4.]

El primer resultado tiene seis elementos y no es 2v2\boldsymbol{v}. Convierte las coordenadas numéricas en un array de NumPy antes de usar aritmética de arrays. Un valor no entero como 0.5 * coordinates produce un TypeError en lugar de escalar los elementos.

El escalar ya tiene dos funciones: su signo elige si un vector distinto de cero conserva o invierte la dirección, y su valor absoluto controla la magnitud. Cuando se suman varios vectores escalados de este modo, la multiplicación escalar y la suma vectorial forman una combinación lineal: la construcción que impulsará la próxima lección.

Comprueba tu comprensión

Pregunta 1

Sea v = [−2, 5, 1]ᵀ y α = 3. Calcula αv coordenada a coordenada y después indica su dimensión y dirección relativa a v.

Mostrar la solución paso a paso

Aplica el mismo escalar a cada una de las tres coordenadas:

(3v)1=3(−2)=−6,(3v)2=3(5)=15,(3v)3=3(1)=3.\begin{aligned} (3\boldsymbol{v})_1&=3(-2)=-6,\\ (3\boldsymbol{v})_2&=3(5)=15,\\ (3\boldsymbol{v})_3&=3(1)=3. \end{aligned}

Por tanto,

3v=[−6153]∈R3.3\boldsymbol{v}=\begin{bmatrix}-6\\15\\3\end{bmatrix}\in\mathbb{R}^{3}.

La dimensión sigue siendo tres. Como 33 es positivo, el resultado apunta en la misma dirección que el vector original distinto de cero; su magnitud es tres veces la original.

Pregunta 2

Para v = [6, 8]ᵀ, calcula −0.5v y compara su magnitud euclidiana y dirección con las de v.

Mostrar la solución paso a paso

Primero escala las coordenadas:

−0.5v=[(−0.5)(6)(−0.5)(8)]=[−3−4].-0.5\boldsymbol{v} =\begin{bmatrix}(-0.5)(6)\\(-0.5)(8)\end{bmatrix} =\begin{bmatrix}-3\\-4\end{bmatrix}.

La magnitud original es ∥v∥2=62+82=100=10\lVert\boldsymbol{v}\rVert_2=\sqrt{6^2+8^2}=\sqrt{100}=10. El resultado tiene

∥−0.5v∥2=∣−0.5∣ 10=5.\lVert-0.5\boldsymbol{v}\rVert_2 =|-0.5|\,10=5.

Su magnitud es la mitad porque ∣−0.5∣=0.5|-0.5|=0.5. Su dirección es opuesta porque el escalar es negativo.

Pregunta 3

Un estudiante afirma que 0v apunta en la misma dirección que v porque cero no es negativo. Diagnostica la afirmación y calcula 0v para v = [7, −2]ᵀ.

Mostrar la solución paso a paso

La multiplicación coordenada a coordenada da

0v=[0(7)0(−2)]=[00]=0.0\boldsymbol{v} =\begin{bmatrix}0(7)\\0(-2)\end{bmatrix} =\begin{bmatrix}0\\0\end{bmatrix} =\boldsymbol{0}.

La regla del signo se divide en tres casos, no en dos: los escalares positivos conservan la dirección y los negativos la invierten. El cero colapsa cada coordenada en el vector cero, cuya flecha no tiene longitud y, por tanto, tampoco dirección. El razonamiento del estudiante trata erróneamente el cero como un escalar positivo.

Pregunta 4

Partiendo de la fórmula de magnitud euclidiana, muestra por qué ‖αv‖₂ usa |α| en lugar de α para v = [v₁, v₂]ᵀ.

Mostrar la solución paso a paso

Sustituye las dos coordenadas escaladas en la definición de magnitud:

∥αv∥2=(αv1)2+(αv2)2=α2v12+α2v22=α2(v12+v22)=α2v12+v22=∣α∣∥v∥2.\begin{aligned} \lVert\alpha\boldsymbol{v}\rVert_2 &=\sqrt{(\alpha v_1)^2+(\alpha v_2)^2}\\ &=\sqrt{\alpha^2v_1^2+\alpha^2v_2^2}\\ &=\sqrt{\alpha^2(v_1^2+v_2^2)}\\ &=\sqrt{\alpha^2}\sqrt{v_1^2+v_2^2}\\ &=|\alpha|\lVert\boldsymbol{v}\rVert_2. \end{aligned}

Para un escalar real, α2=∣α∣\sqrt{\alpha^2}=|\alpha|. Escribir α\alpha sin el valor absoluto daría incorrectamente una magnitud negativa cuando α<0\alpha<0.

Pregunta 5

Un contexto es c = [2, 0, −1]ᵀ y una contribución de embedding es e = [−2, 4, 2]ᵀ. Con α = 0.25, calcula c + αe y explica exactamente qué controla α.

Mostrar la solución paso a paso

Escala la contribución antes de sumarla:

αe=0.25[−242]=[−0.510.5].\alpha\boldsymbol{e} =0.25\begin{bmatrix}-2\\4\\2\end{bmatrix} =\begin{bmatrix}-0.5\\1\\0.5\end{bmatrix}.

Después suma las coordenadas correspondientes:

c+αe=[2−0.50+1−1+0.5]=[1.51−0.5].\boldsymbol{c}+\alpha\boldsymbol{e} =\begin{bmatrix}2-0.5\\0+1\\-1+0.5\end{bmatrix} =\begin{bmatrix}1.5\\1\\-0.5\end{bmatrix}.

El escalar 0.250.25 hace que la contribución de este vector de embedding sea un cuarto de su magnitud original, conservando su dirección. Controla el peso aritmético en esta suma; por sí solo no garantiza un cambio proporcional en la salida de cada capa posterior del modelo.

Pregunta 6

Para θ = [3, −1]ᵀ, gradiente g = [2, 4]ᵀ y tasa de aprendizaje η = 0.1, calcula la actualización SGD simple θnext = θ − ηg en tres pasos explícitos.

Mostrar la solución paso a paso

Primero escala el gradiente:

ηg=0.1[24]=[0.20.4].\eta\boldsymbol{g} =0.1\begin{bmatrix}2\\4\end{bmatrix} =\begin{bmatrix}0.2\\0.4\end{bmatrix}.

Segundo, invierte esa dirección escalada para un paso de descenso:

−ηg=[−0.2−0.4].-\eta\boldsymbol{g}=\begin{bmatrix}-0.2\\-0.4\end{bmatrix}.

Tercero, suma la actualización a los parámetros:

θnext=[3−1]+[−0.2−0.4]=[2.8−1.4].\boldsymbol{\theta}_{\text{next}} =\begin{bmatrix}3\\-1\end{bmatrix} +\begin{bmatrix}-0.2\\-0.4\end{bmatrix} =\begin{bmatrix}2.8\\-1.4\end{bmatrix}.

Este cálculo supone la actualización simple mostrada en el enunciado. Momentum, weight decay u otra regla del optimizador pueden modificar la dirección antes del paso de parámetros escalado por la tasa de aprendizaje.

Pregunta 7

¿Por qué 3 * [1, −2] no calcula el múltiplo escalar [3, −6] en Python, y qué expresión de NumPy realiza la operación prevista?

Mostrar la solución paso a paso

[1, -2] es una lista de Python, que es una secuencia. Multiplicarla por el entero 3 repite esa secuencia tres veces:

3 * [1, -2]
# [1, -2, 1, -2, 1, -2]

El resultado tiene seis elementos, así que no puede ser el vector de dos coordenadas [3,−6]T[3,-6]^\mathsf{T}. Crea un array numérico de NumPy y después multiplícalo:

import numpy as np

3 * np.array([1, -2])
# array([ 3, -6])

NumPy aplica 3 elemento a elemento mediante broadcasting escalar, tal como indica la definición matemática.

Pregunta 8

Sea v = [2, −1]ᵀ. Verifica (2 + (−0.5))v = 2v + (−0.5)v calculando ambos lados y después nombra la propiedad.

Mostrar la solución paso a paso

En el lado izquierdo, suma primero los escalares:

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

En el lado derecho, escala dos veces y después suma:

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

Ambos caminos producen el mismo vector. Es la distributividad de la suma de escalares sobre la multiplicación escalar: (α+β)v=αv+βv(\alpha+\beta)\boldsymbol{v}=\alpha\boldsymbol{v}+\beta\boldsymbol{v}.

Fuentes

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.multiply
  4. NumPy documentation: broadcasting
  5. Python documentation: common sequence operations
  6. PyTorch documentation: stochastic gradient descent