Este artículo es la primera de tres partes. Cada parte es independiente, por lo que no es necesario leer las demás para comprenderla.
El producto escalar es una de las operaciones más importantes del aprendizaje automático, pero es difícil de entender sin los fundamentos geométricos adecuados. En esta primera parte, construimos esas bases:
· Vectores unitarios
· Proyección escalar
· Proyección vectorial
Tanto si eres un estudiante que aprende Álgebra Lineal por primera vez, como si quieres refrescar estos conceptos, te recomiendo leer este artículo.
De hecho, presentaremos y explicaremos el producto escalar en este artículo y, en el próximo, lo exploraremos con mayor profundidad.
La sección de proyección vectorial se incluye como un bono opcional: útil, pero no necesario para comprender el producto escalar.
La siguiente parte explora el producto escalar con mayor profundidad: su significado geométrico, su relación con la similitud del coseno y por qué es importante la diferencia.
La parte final conecta estas ideas con dos aplicaciones principales: los sistemas de recomendación y la PNL.
Un vector 𝐯→large mathbf{vec{v}} se llama vector unitario si su magnitud es 1:
|𝐯→|=1LARGE mathbf{|vec{v}|} = 1
Para eliminar la magnitud de un vector distinto de cero manteniendo su dirección, podemos normalizarlo. La normalización escala el vector por el factor:
1|𝐯→|LARGE frac{1}{|mathbf{vec{v}}|}
El vector normalizado 𝐯^large mathbf{hat{v}} es el vector unitario en la dirección de 𝐯→large mathbf{vec{v}}:
𝐯^=𝐯→|𝐯→|LARGE begin{array}{|c|} hline mathbf{hat{v}} = frac{mathbf{vec{v}}}{|mathbf{vec{v}}|} \ hline end{array}
Notación 1. De ahora en adelante, siempre que normalicemos un vector 𝐯→large mathbf{vec{v}}, o escribamos 𝐯^large mathbf{hat{v}}, asumimos que 𝐯→≠0large mathbf{vec{v}} neq 0. Esta notación, junto con las que siguen, también es relevante para los siguientes artículos.
Esta operación separa naturalmente un vector en su magnitud y dirección:
𝐯→=|𝐯→|⏟magnitud⋅𝐯^⏟direcciónLARGE begin{array}{|c|} hline rule{0pt}{2.5em} mathbf{vec{v}} = underbrace{|mathbf{vec{v}}|}_{text{magnitud}} cdot underbrace{mathbf{hat{v}}}_{text{dirección}} \[4.5em] hline end{array}
La figura 1 ilustra esta idea: 𝐯{mathbf{v}} y 𝐯^large mathbf{hat{v}} apuntan en la misma dirección, pero tienen diferentes magnitudes.
Similitud de vectores unitarios
En dos dimensiones, todos los vectores unitarios se encuentran en el círculo unitario (radio 1, centrado en el origen). Un vector unitario que forma un ángulo θ con el eje x tiene coordenadas (cos θ, sen θ).
Esto significa que el ángulo entre dos vectores unitarios codifica una puntuación de similitud natural; como mostraremos en breve, esta puntuación es exactamente cos θ: igual a 1 cuando apuntan en la misma dirección, 0 cuando son perpendiculares y −1 cuando son opuestos.
Notación 2. A lo largo de este artículo, θ denota el ángulo más pequeño entre los dos vectores, por lo que 0°≤θ≤180°0° leq theta leq 180° .
En la práctica, no conocemos θ directamente: conocemos las coordenadas de los vectores.
Podemos mostrar por qué el producto escalar de dos vectores unitarios: a^largehat{a} y b^largehat{b} es igual a cos θ usando un argumento geométrico en tres pasos:
1. Gire el sistema de coordenadas hasta que b^largehat{b} se encuentre a lo largo del eje x. La rotación no cambia ángulos ni magnitudes.
2. Lea las nuevas coordenadas. Después de la rotación, b^largehat{b} tiene coordenadas (1, 0). Dado que a^largehat{a} es un vector unitario en el ángulo θ del eje x, la definición del círculo unitario da sus coordenadas como (cos θ, sin θ).
3. Multiplica los componentes correspondientes y suma:
a^⋅b^=ax⋅bx+ay⋅by=cosθ⋅1+sinθ⋅0=cosθLarge begin{aligned} hat{a} cdot hat{b} = a_x cdot b_x + a_y cdot b_y = \ costheta cdot 1 + sintheta cdot 0 = costheta end{alineado}
Esta suma de productos de componentes se llama producto escalar:
a→⋅b→=a1⋅b1+a2⋅b2+⋯+an⋅bnLarge boxed{ begin{aligned} vec{a} cdot vec{b} = a_1 cdot b_1 + a_2 cdot b_2 \ + cdots + a_n cdot b_n end{aligned} }
Vea la ilustración de estos tres pasos en la Figura 2 a continuación:
Todo lo anterior se mostró en 2D, pero el mismo resultado es válido en cualquier número de dimensiones. Dos vectores cualesquiera, sin importar en cuántas dimensiones vivan, siempre se encuentran en un solo plano. Podemos rotar ese plano para alinearlo con el plano xy y, a partir de ahí, la prueba 2D se aplica exactamente.
Notación 3. En los diagramas que siguen, a menudo dibujamos uno de los vectores (normalmente b→largevec{b}) a lo largo del eje horizontal. Cuando b→largevec{b} aún no está alineado con el eje x, siempre podemos rotar nuestro sistema de coordenadas como lo hicimos anteriormente (el "truco de rotación"). Dado que la rotación preserva todas las longitudes, ángulos y productos escalares, cada fórmula derivada en esta orientación es válida para cualquier dirección de b→largevec{b}.
Un vector puede contribuir en muchas direcciones a la vez, pero a menudo sólo nos preocupamos por una dirección.
La proyección escalar responde a la pregunta: ¿Cuánto 𝒂→large boldsymbol{vec{a}} de se encuentra a lo largo de la dirección de 𝒃→large boldsymbol{vec{b}}?
Este valor es negativo si la proyección apunta en la dirección opuesta a b→largevec{b}.
La analogía de la sombra
La forma más intuitiva de pensar en la proyección escalar es como la longitud de una sombra. Imagina que sostienes un palo (vector a→large vec{a}) en un ángulo sobre el suelo (la dirección de b→largevec{b}), y una fuente de luz brilla directamente hacia abajo desde arriba.
La sombra que proyecta el palo sobre el suelo es la proyección escalar.
La siguiente figura animada ilustra esta idea:
La proyección escalar mide cuánto del vector a se encuentra en la dirección de b.
Equivale a la longitud de la sombra que a proyecta sobre b (Woo, 2023). El GIF fue creado por Claude.
Cálculo
Imagine una fuente de luz que brilla directamente sobre la línea PS (la dirección de b→largevec{b}). La “sombra” que a→largevec{a} (la flecha de P a Q ) proyecta sobre esa recta es exactamente el segmento PR. Puedes ver esto en la Figura 4.
Derivando la fórmula
Ahora mira el triángulo PQRlarge PQR: la caída perpendicular desde Qlarge Q crea un triángulo rectángulo y sus lados son:
PQ=|a→|grande PQ = |vec{a}| (la hipotenusa). PRlarge PR (el lado adyacente – la sombra). QRlarge QR (el lado opuesto – el componente perpendicular).
De este triángulo:
El ángulo entre a→largevec{a} y b→largevec{b} es θ. cos(θ)=PR|a→|large cos(theta) = frac{PR}{|vec{a}|} (la definición más básica de coseno). Multiplica ambos lados por |a→|large|vec{a}| :
PR=|a→|cos(θ)LARGE begin{array}{|c|} hline PR = |vec{a}| cos(theta) \ hline end{matriz}
El segmento 𝑷𝑹boldsymbol{PR} es la longitud de la sombra, la proyección escalar de 𝒂→large boldsymbol{vec{a}} en 𝒃→large boldsymbol{vec{b}}.
Cuando θ > 90°, la proyección escalar también se vuelve negativa. Piense en la sombra como si se volteara hacia el lado opuesto.
¿Cómo se relaciona el vector unitario?
La longitud de la sombra (PR) no depende de qué tan largo sea b→largevec{b}. Depende de |a→|large|vec{a}| y en θ.
Cuando calculas a→⋅b^largevec{a} cdot hat{b}, te preguntas: ¿cuánto de a→largevec{a} se encuentra a lo largo de la dirección b→largevec{b}? Esta es la longitud de la sombra.
El vector unitario actúa como un filtro de dirección: multiplicar a→largevec{a} por extrae el componente de a→largevec{a} a lo largo de esa dirección.
Veámoslo usando el truco de rotación. Colocamos b̂ a lo largo del eje x:
a→=(|a→|cosθ, |a→|sin(θ))Large vec{a} = (|vec{a}|costheta, |vec{a}|sin(theta))
y:
b^=(1,0)Grande hat{b} = (1, 0)
Entonces:
a→⋅b^=|a→|cosθ⋅1+|a→|sin(θ)⋅0=|a→|cosθLarge begin{aligned} vec{a} cdot hat{b} = |vec{a}|costheta cdot 1 \ + |vec{a}|sin(theta) cdot 0 = |vec{a}|costheta end{alineado}
La proyección escalar de 𝒂→large boldsymbol{vec{a}} en la dirección de 𝒃→large boldsymbol{vec{b}} es:
|a→|cosθ=a→⋅b^=a→⋅b→|b→|LARGE renewcommand{arraystretch}{2} begin{array}{|c|} hline begin{aligned} |vec{a}|costheta &= vec{a} cdot hat{b} \ &= frac{vec{a} cdot vec{b}}{|vec{b}|} end{aligned} \ hline end{array}
Aplicamos el mismo truco de rotación una vez más, ahora con dos vectores generales: a→largevec{a} y b→largevec{b}.
Después de la rotación:
a→=(|a→|cosθ, |a→|sinθ)Large vec{a} = (|vec{a}|costheta, |vec{a}|sintheta) ,
b→=(|b→|, 0)Grande vec{b} = (|vec{b}|, 0)
entonces:
a→⋅b→=|a→|cosθ⋅|b→|+|a→|sinθ⋅0=|a→||b→|cosθLarge begin{aligned} vec{a} cdot vec{b} = |vec{a}|costheta cdot |vec{b}| \ + |vec{a}|sintheta cdot 0 = |vec{a}||vec{b}|costheta end{aligned}
El producto escalar de 𝒂→large boldsymbol{vec{a}} y 𝒃→large boldsymbol{vec{b}} es:
a→⋅b→=a1b1+⋯+anbn=∑i=1naibi=|a→||b→|cosθLarge renewcommand{arraystretch}{2} begin{array}{|l|} hline vec{a} cdot vec{b} = a_1 b_1+ dots + a_n b_n \ = sum_{i=1}^{n} a_i b_i = |vec{a}||vec{b}|costheta \ hline end{array}
La proyección vectorial extrae la porción del vector 𝒂→large boldsymbol{vec{a}} que apunta a lo largo de la dirección del vector 𝒃→large boldsymbol{vec{b}}.
La analogía del sendero
Imaginemos dos senderos que parten del mismo punto (el origen):
El sendero A conduce a un lugar de avistamiento de ballenas. El sendero B recorre la costa en otra dirección.
Aquí están las respuestas de la proyección de preguntas:
Solo puedes caminar por el sendero B. ¿Qué distancia debes caminar para terminar lo más cerca posible del punto final del sendero A?
Caminas por B y en algún momento te detienes. Desde donde te detuviste, miras hacia el final del sendero A, y la línea que te conecta forma un ángulo perfecto de 90° con el sendero B. Ese es el hecho geométrico clave: el punto más cercano es siempre donde harías un giro en ángulo recto.
El lugar donde te detienes en el sendero B es la proyección de A sobre B. Representa “la parte de A que va en dirección a B.
El espacio restante, desde el punto de parada hasta el final real del sendero A, es todo lo relacionado con A que no tiene nada que ver con la dirección de B. Este ejemplo se ilustra en la Figura 5 a continuación: El vector que comienza en el origen, apunta a lo largo del Camino B y termina en el punto más cercano es la proyección vectorial de a→largevec{a} sobre b→largevec{b}.
Caminando por el sendero B, el punto más cercano al punto final de A ocurre donde el segmento de conexión forma un ángulo recto con B. Este punto es la proyección de A sobre B. Imagen del autor (creada con Claude).
La proyección escalar responde: “¿Cuánto caminaste?”
Eso es sólo una distancia, un solo número.
La proyección vectorial responde: "¿Dónde estás exactamente?"
Más precisamente: "¿Cuál es el movimiento real a lo largo del sendero B que te lleva al punto más cercano?"
Ahora “1,5 kilómetros” no es suficiente, hay que decir “1,5 kilómetros al este a lo largo de la costa”. Esa es una distancia más una dirección: una flecha, no sólo un número. La flecha comienza en el origen, apunta a lo largo del sendero B y termina en el punto más cercano.
La distancia que recorriste es el valor de proyección escalar. La magnitud de la proyección vectorial es igual al valor absoluto de la proyección escalar.
El vector unitario responde: “¿En qué dirección va el sendero B?”
Es exactamente lo que representa b^largehat{b}. Es el sendero B, despojado de toda información sobre su longitud, sólo la dirección pura de la costa.
proyección vectorial=(qué distancia caminas)⏟proyección escalar×(dirección B)⏟b^begin{aligned} &text{proyección vectorial} = \ &underbrace{(text{qué distancia caminas})}_{text{proyección escalar}} times underbrace{(text{dirección B})}_{hat{b}} end{aligned}
Sé que el análogo de la ballena es muy específico; se inspiró en esta buena explicación (Michael.P, 2014)
La Figura 6 a continuación muestra el mismo diagrama de sombras que en la Figura 4, con PR dibujado como una flecha, porque la proyección del vector es un vector (con longitud y dirección), no solo un número.
A diferencia de la proyección escalar (una longitud), la proyección vectorial es una flecha a lo largo del vector b. Imagen del autor (creada con Claude).
Dado que la proyección debe estar a lo largo de b→largevec{b} , necesitamos dos cosas para PR→largevec{PR} :
Su magnitud es la proyección escalar: |a→|cosθlarge|vec{a}|costheta Su dirección es: b^largehat{b} (la dirección de b→largevec{b})
Cualquier vector es igual a su magnitud multiplicada por su dirección (como vimos en la sección Vector unitario), entonces:
PR→=|a→|cosθ⏟proyección escalar⋅b^⏟dirección de b→large begin{array}{|c|} hline hspace{10pt} vec{PR} = underbrace{|vec{a}| cos theta}_{text{proyección escalar}} cdot underbrace{hat{b}}_{text{dirección de } vec{b}} hspace{20pt} \ hline end{array}
Esta ya es la fórmula de proyección vectorial. Podemos reescribirlo sustituyendo b^=b→|b→|largehat{b} = frac{vec{b}}{|vec{b}|} , y reconociendo que |a→||b→|cosθ=a→⋅b→large|vec{a}||vec{b}|costheta = vec{a} cdot vec{b}
La proyección vectorial de 𝒂→large boldsymbol{vec{a}} en la dirección de 𝒃→large boldsymbol{vec{b}} es:
projb→(a→)=(|a→|cosθ)b^=(a→⋅b→|b→|2)b→=(a→⋅b^)b^Large renewcommand{arraystretch}{1.5} begin{array}{|c|} hline begin{aligned} text{proj}_{vec{b}}(vec{a}) &= (|vec{a}|costheta)hat{b} \ &= left(frac{vec{a} cdot vec{b}}{|vec{b}|^2}right)vec{b} \ &= (vec{a} cdot hat{b})hat{b} end{aligned} \ hline end{array}
Un vector unitario aísla la dirección de un vector eliminando su magnitud.
𝐯^=𝐯→|𝐯→|LARGE begin{array}{|c|} hline mathbf{hat{v}} = frac{mathbf{vec{v}}}{|mathbf{vec{v}}|} \ hline end{array}
El producto escalar multiplica los componentes correspondientes y los suma. También es igual al producto de las magnitudes de los dos vectores multiplicado por el coseno del ángulo entre ellos.
a→⋅b→=a1b1+⋯+anbn=∑i=1naibi=|a→||b→|cosθ renewcommand{arraystretch}{2} begin{array}{|l|} hline vec{a} cdot vec{b} = a_1 b_1+ dots + a_n b_n \ = sum_{i=1}^{n} a_i b_i = |vec{a}||vec{b}|costheta \ hline end{array}
La proyección escalar utiliza el producto escalar para medir qué tan lejos llega un vector en la dirección de otro: un solo número, como la longitud de una sombra.
|a→|cosθ=a→⋅b^=a→⋅b→|b→|Large begin{array}{|c|} hline |vec{a}|costheta = vec{a} cdot hat{b} = frac{vec{a} cdot vec{b}}{|vec{b}|} \ hline end{array}
La proyección vectorial va un paso más allá y devuelve una flecha real en esa dirección: la proyección escalar multiplicada por el vector unitario.
(|a→|cosθ)b^=(a→⋅b^)b^Large renewcommand{arraystretch}{2} begin{array}{|l|} hline (|vec{a}|costheta)hat{b} = (vec{a} cdot hat{b})hat{b} \ hline end{array}
En la siguiente parte, utilizaremos las herramientas que aprendimos en este artículo para comprender verdaderamente el producto escalar.