import matplotlib.pyplot as plt
x, y = -3, 5
plt.figure(figsize=(4, 4), dpi=50)
plt.quiver(0, 0, x, y, angles='xy', scale_units='xy', scale=1, color='red', zorder=3)
plt.axhline(0, color='black', linewidth=0.8, zorder=2)
plt.axvline(0, color='black', linewidth=0.8, zorder=2)
plt.xlim(-4, 4)
plt.ylim(-2, 6)
plt.xticks(range(-4, 5, 1))
plt.yticks(range(-2, 7, 1))
plt.grid(True, color='gainsboro', linewidth=0.4, zorder=1)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()Transformaciones lineales
1 Concepto de vector
Un vector es un objeto matemático que tiene magnitud y dirección. Se representa como un listado ordenado de componentes, por ejemplo:
- (3,1)
- (2,5,7)
- (1,0,4,2)
Dependiendo del contexto, un vector puede representarse:
- como una flecha (con origen y dirección)
- como un punto en el espacio (cuando se toma el origen como referencia)
y
^
| (3,2)
| *
| /
| /
| /
| /
| /
| /
+------------------> x
(0,0)
<-- v = (3,2)1.1 Magnitud de un vector
Cuando tienes el vector \((3, 2)\), este representa un listado de componentes en cada eje de coordenadas. Si desde un origen damos tres pasos hacia la derecha y dos pasos hacia arriba, obtenemos un punto que funciona como el extremo (o destino) del vector. Al unir el origen con este destino, obtenemos la flecha que representa geométricamente al vector, la cual posee una dirección, un sentido y una magnitud (longitud).
En álgebra lineal, la magnitud de un vector se puede medir a través de diferentes funciones llamadas normas, siendo las más utilizadas la norma \(L_1\) y la norma \(L_2\).
La norma \(L_1\) hace referencia al número de pasos que hay que realizar a través de la cuadrícula de coordenadas para llegar al punto destino del vector (también conocida como distancia de Manhattan). En el caso del vector \((3, 2)\), su norma \(L_1\) es \(3 + 2 = 5\).
Para el vector \((-3, 5)\), avanzaríamos tres pasos hacia la izquierda en el eje \(X\) y cinco pasos hacia arriba en el eje \(Y\). Por lo tanto, su norma \(L_1\) será de \(8\).
De esta forma, el cálculo de la norma \(L_1\) de cualquier vector consiste en la suma de los valores absolutos de sus componentes en cada uno de los ejes:
\[\|v\|_1 = |v_1| + |v_2| + |v_3| + \dots + |v_n|\]
Si tenemos un vector en cuatro dimensiones como \((2, -3, 5, 4)\), este representa un desplazamiento en un espacio de cuatro ejes coordenados. Avanzaríamos dos pasos en el primer eje en dirección positiva, tres pasos en el segundo eje en dirección negativa, cinco pasos en el tercer eje en dirección positiva y, por último, cuatro pasos en el cuarto eje en dirección positiva. Su norma \(L_1\) sería la suma de todos estos pasos en valor absoluto, dando un total de 14.
La norma \(L_2\) (o norma euclidiana) mide la distancia en línea recta que hay entre el origen del vector y su destino; es decir, representa la longitud real de la flecha. Matemáticamente, esto se consigue calculando la raíz cuadrada de la suma de todas sus componentes al cuadrado.
\[\|v\|_2 = \sqrt{v_1^2 + v_2^2 + v_3^2 + \dots + v_n^2}\]
El vector \((-3, 5)\) tiene como norma \(L_1\) 8.Su norma \(L_2\) sería:\[\|v\|_2 = \sqrt{(-3)^2 + 5^2} = \sqrt{9 + 25} = \sqrt{34} \approx 5.83\]
La norma L2 es siempre más pequeña que la norma L1, porque es el camino directo desde el origen del vector hasta el destino.
1.2 Dirección de un vector
Un vector posee una dirección geométrica que puede determinarse mediante ángulos.
Por ejemplo, si tenemos el vector \((3, 4)\), su dirección respecto al eje \(X\) es de \(53.13^\circ\), lo cual se obtiene mediante la arcotangente:
\[\arctan\left(\frac{y}{x}\right) = \arctan\left(\frac{4}{3}\right) = 53.13^\circ\]
También podemos calcular la dirección de la flecha respecto al eje \(Y\) invirtiendo los componentes:
\[\arctan\left(\frac{x}{y}\right) = \arctan\left(\frac{3}{4}\right) = 36.87^\circ\]
Como se observa, los ángulos que representan la inclinación de la flecha dependen del eje que tomemos como referencia. Es siempre la posición de la flecha respecto a ese eje.
1.2.1 El Vector Unitario y la dirección de un vector
La norma \(L_2\) (módulo) de este vector es igual a 5.
Si dividimos cada componente del vector entre su módulo, obtenemos su vector unitario:
\[u = \left(\frac{3}{5}, \frac{4}{5}\right) = (0.6, 0.8)\]
Un vector unitario es aquel cuya magnitud calculada con la norma \(L_2\) es exactamente 1. Podemos entenderlo como un vector al que le hemos “eliminado” su tamaño para quedarnos únicamente con su dirección pura.
Una propiedad fundamental es que si aplicamos el arccoseno (\(\arccos\)) a los componentes del vector unitario, obtenemos directamente el ángulo del vector respecto a cada eje (estos componentes se conocen en álgebra lineal como cosenos directores):
- Ángulo respecto a \(X\): \(\arccos(0.6) = 53.13^\circ\)
- Ángulo respecto a \(Y\): \(\arccos(0.8) = 36.87^\circ\)
Cuando trabajamos con vectores de muchas dimensiones, no resulta práctico hablar de “la dirección” como un único ángulo, sino que es más sencillo trabajar directamente con el vector unitario.
Supongamos que tenemos el vector en cuatro dimensiones:
\[v = (1, 2, 2, 4)\]
Su módulo es \(\|v\|_2 = \sqrt{1^2 + 2^2 + 2^2 + 4^2} = \sqrt{25} = 5\).
Al normalizarlo, obtenemos su vector unitario:
\[u = (0.2, 0.4, 0.4, 0.8)\]
A partir de este vector, podemos conocer la inclinación exacta que tiene la flecha respecto a cada uno de los cuatro ejes coordenados utilizando el arccoseno de cada componente:
- Ángulo respecto al eje \(X_1\): \(\arccos(0.2) = 78.46^\circ\)
- Ángulo respecto al eje \(X_2\): \(\arccos(0.4) = 66.42^\circ\)
- Ángulo respecto al eje \(X_3\): \(\arccos(0.4) = 66.42^\circ\)
- Ángulo respecto al eje \(X_4\): \(\arccos(0.8) = 36.87^\circ\)
En lugar de cargar con una lista de 4 ángulos, el propio vector \(u = (0.2, 0.4, 0.4, 0.8)\) contiene toda la información direccional.
2 Matrices
2.1 Concepto de matriz
Una matriz es, una tabla organizada en filas y columnas que sirve para almacenar información.
Si una tabla tiene \(m\) filas y \(n\) columnas, es una matriz de tamaño \(m \times n\), eso es la dimensión de la matriz.
Cada número dentro de una celda de la tabla se llama elemento, y se localiza usando su dirección de fila y columna (por ejemplo, el elemento \(a_{23}\) es el que está en la fila 2, columna 3).
\[\begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \end{pmatrix}\]Una de las aplicaciones es para representar un conjunto de datos. Si tengo un set de datos por ejemplo el famoso set de datos de supervivencia del titanic se puede representar la información en forma tabular dónde cada fila representa a uan entidad y cada columna a una caracteristica.
\[\begin{pmatrix} 1 & 0 & 3 & \text{Name}_1 & \text{male} & 22.0 & 1 & 0 & \text{A/5 21171} & 7.25 & \text{NaN} & \text{S} \\ 2 & 1 & 1 & \text{Name}_2 & \text{female} & 38.0 & 1 & 0 & \text{PC 17599} & 71.2833 & \text{C85} & \text{C} \\ 3 & 1 & 3 & \text{Name}_3 & \text{female} & 26.0 & 0 & 0 & \text{STON/O2.3101282} & 7.925 & \text{NaN} & \text{S} \\ 4 & 1 & 1 & \text{Name}_4 & \text{female} & 35.0 & 1 & 0 & \text{113803} & 53.10 & \text{C123} & \text{S} \\ 5 & 0 & 3 & \text{Name}_5 & \text{male} & 35.0 & 0 & 0 & \text{373450} & 8.05 & \text{NaN} & \text{S} \end{pmatrix}\]2.2 Operaciones con matrices
Las principales operaciones con matrices son:
- Suma y resta de matrices
- Multiplicación escalar de matrices
- Multiplicación de matrices
2.2.1 Suma y resta de matrices
La suma y resta de matrices es una de las operaciones más simples. Para realizarlas, simplemente sumamos o restamos los elementos correspondientes de dos matrices que tengan la misma dimensión.
Antes de realizar la operación, debemos asegurarnos de que ambas matrices compartan exactamente el mismo tamaño, y el resultado será una nueva matriz de esa misma dimensión.
Por ejemplo, si tenemos dos matrices de dimensión \(3 \times 3\), el resultado de su suma será otra matriz de \(3 \times 3\), operando celda por celda: \[\begin{pmatrix} 1 & 2 & 3 \\ 0 & -1 & 4 \\ 2 & 1 & 5 \end{pmatrix} + \begin{pmatrix} 4 & 0 & 1 \\ 2 & 3 & -2 \\ 1 & -1 & 0 \end{pmatrix} = \begin{pmatrix} (1+4) & (2+0) & (3+1) \\ (0+2) & (-1+3) & (4-2) \\ (2+1) & (1-1) & (5+0) \end{pmatrix} = \begin{pmatrix} 5 & 2 & 4 \\ 2 & 2 & 2 \\ 3 & 0 & 5 \end{pmatrix}\]
2.2.2 Multiplicación escalar
La multiplicación escalar consiste en multiplicar cada uno de los elementos de una matriz por un único número, llamado escalar. Esta operación mantiene las dimensiones originales de la matriz.
Por ejemplo, supongamos que tenemos una matriz que almacena los precios de tres productos en dos tiendas distintas (una matriz de \(3 \times 2\)) expresados en dólares. Si queremos ajustar todos estos precios simultáneamente debido a un factor de inflación del 5%, nuestro escalar será \(1.05\) (el 100% del precio original más el 5% de aumento).
La operación se realizaría de la siguiente manera:
\[1.05 \cdot \begin{pmatrix} 10 & 20 \\ 5 & 15 \\ 30 & 40 \end{pmatrix} = \begin{pmatrix} (1.05 \cdot 10) & (1.05 \cdot 20) \\ (1.05 \cdot 5) & (1.05 \cdot 15) \\ (1.05 \cdot 30) & (1.05 \cdot 40) \end{pmatrix} = \begin{pmatrix} 10.50 & 21.00 \\ 5.25 & 15.75 \\ 31.50 & 42.00 \end{pmatrix}\]
Como se observa, todos los precios de la tabla se han actualizado de forma proporcional en un solo paso, y la matriz resultante sigue siendo de tamaño \(3 \times 2\).
2.2.3 Multiplicación de matrices
Multiplicación de MatricesLa multiplicación de matrices es una operación clave en el desarrollo de algoritmos de aprendizaje automático y redes neuronales.Para poder multiplicar dos matrices \(A\) y \(B\), el número de columnas de la primera matriz debe ser igual al número de filas de la segunda.
Si multiplicamos una matriz \(A\) de dimensión \(m \times n\) por una matriz \(B\) de dimensión \(n \times p\), la matriz resultante \(C\) tendrá un tamaño de \(m \times p\).
El proceso consiste en calcular el producto escalar de cada fila de la primera matriz por cada columna de la segunda matriz.
Supongamos que multiplicamos una matriz \(A\) (\(2 \times \mathbf{3}\)) por una matriz \(B\) (\(\mathbf{3} \times 2\)). Como los números internos coinciden (\(\mathbf{3}\)), la operación es posible y nos dará una matriz de \(2 \times 2\):
\[A = \begin{pmatrix} 1 & 2 & 3 \\ 0 & 1 & 4 \end{pmatrix}, \quad B = \begin{pmatrix} 5 & 6 \\ 1 & 0 \\ 2 & 3 \end{pmatrix}\]
Para calcular cada posición de la matriz resultante \(C\):
Posición \(C_{11}\) (Fila 1 de \(A\) \(\cdot\) Columna 1 de \(B\)):\[(1 \cdot 5) + (2 \cdot 1) + (3 \cdot 2) = 5 + 2 + 6 = 13\]
Posición \(C_{12}\) (Fila 1 de \(A\) \(\cdot\) Columna 2 de \(B\)):\[(1 \cdot 6) + (2 \cdot 0) + (3 \cdot 3) = 6 + 0 + 9 = 15\]
Posición \(C_{21}\) (Fila 2 de \(A\) \(\cdot\) Columna 1 de \(B\)):\[(0 \cdot 5) + (1 \cdot 1) + (4 \cdot 2) = 0 + 1 + 8 = 9\]
Posición \(C_{22}\) (Fila 2 de \(A\) \(\cdot\) Columna 2 de \(B\)):\[(0 \cdot 6) + (1 \cdot 0) + (4 \cdot 3) = 0 + 0 + 12 = 12\]
El resultado final es:\[C = \begin{pmatrix} 13 & 15 \\ 9 & 12 \end{pmatrix}\]
3 Operaciones con Vectores
3.1 Suma
Para que dos vectores se puedan sumar, deben pertenecer al mismo espacio vectorial, esto significa que deben tener exactamente el mismo tamaño o dimensión.
\[x + y = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_d \end{bmatrix} + \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_d \end{bmatrix} = \begin{bmatrix} x_1 + y_1 \\ x_2 + y_2 \\ \vdots \\ x_d + y_d \end{bmatrix}\]
Geométricamente, sumar dos vectores significa colocar el “inicio” del segundo vector justo donde termina la “punta” del primero. El vector resultante es la flecha directa que va desde el origen original hasta el destino final. Esto se conoce como la Regla del Paralelogramo.
3.1.1 Broadcasting
El Broadcasting no existe a nivel de Álgebra Lineal porque es una invención computacional introducida por librerías como NumPy, PyTorch y TensorFlow.
Su objetivo es resolver un problema muy común: ¿cómo realizamos operaciones matemáticas entre tensores (vectores, matrices) que tienen diferentes formas (shapes) sin consumir toda la memoria del ordenador?
Imagina que estás entrenando una red neuronal y tienes una matriz que contiene las características de un lote (batch) de 10.000 imágenes. Cada imagen está representada por un vector de 300 características.
Tu matriz de datos tiene una forma de (10000, 300).
Ahora, quieres sumarle el vector de sesgo (bias) a cada una de estas imágenes. Tu vector de sesgo tiene una forma de (300,).
La forma ingenua e ineficiente de hacer esto en programación tradicional sería duplicar ese vector de sesgo 10.000 veces para crear una nueva matriz de (10000, 300) y luego sumar componente a componente.
¿El problema? Duplicar esos datos en la memoria RAM o en la VRAM de la GPU es un desperdicio masivo de recursos y ralentiza el entrenamiento del modelo.
Aquí es donde entra el Broadcasting: le permite a la computadora realizar la operación como si el vector se hubiera duplicado, pero sin copiar los datos en memoria reales. Todo ocurre de forma virtual a bajo nivel (en C o CUDA).
Matriz (4, 3) Vector (3,) Resultado (4, 3)
[[ 1, 2, 3],
[ 4, 5, 6], + [10, 20, 30] = [[11, 22, 33],
[ 7, 8, 9], [14, 25, 36],
[10, 11, 12]] [17, 28, 39],
[20, 31, 42]]3.2 Resta de vector
La resta es una operación element-wise (componente a componente).
Si \(x, y \in \mathbb{R}^d\), entonces \(z = x - y\) generará un vector \(z\) que también pertenece a \(\mathbb{R}^d\).
\[x - y = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_d \end{bmatrix} - \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_d \end{bmatrix} = \begin{bmatrix} x_1 - y_1 \\ x_2 - y_2 \\ \vdots \\ x_d - y_d \end{bmatrix}\]
Computacionalmente, el procesador lo que hace realmente es multiplicar el segundo vector por el escalar \(-1\) y luego realizar una suma tradicional, por lo tanto, todas las reglas de Broadcasting se aplican exactamente igual para la resta.
Mientras que la suma busca la diagonal de un paralelogramo, la resta busca la distancia y dirección entre las puntas.Si tienes el vector \(A\) y el vector \(B\) saliendo ambos desde el origen:El vector resultante \(A - B\) es la flecha que nace en la cabeza de \(B\) y termina en la cabeza de \(A\). (Apunta hacia el vector que va primero en la resta, el minuendo).
En Machine Learning, la resta para medir errores y marcar direcciones. De hecho, es la operación que permite a la Inteligencia Artificial aprender. Cuando una red neuronal intenta predecir, por ejemplo, el precio de una casa, genera un vector de predicciones (\(\hat{y}\)). Luego, el algoritmo lo compara con el vector de precios reales (\(y\)). Esta resta genera el “vector de error”, que le dice a la IA exactamente por cuántos euros se ha equivocado en cada casa del lote de entrenamiento.
\[\text{Error} = y - \hat{y}\]
3.3 Producto Escalar
Tenemos dos vectores:
\[A = \begin{bmatrix} 5 \\ 0 \end{bmatrix}, \quad B = \begin{bmatrix} 2 \\ 2 \end{bmatrix}\]
Para calcular el producto escalar, se multiplican las componentes horizontales, las componentes verticales y las sumamos:
\[A \cdot B = (A_1 \cdot B_1) + (A_2 \cdot B_2)\] \[A \cdot B = (5 \cdot 2) + (0 \cdot 2) = 10 + 0 = \mathbf{10}\]
El resultado es 10. Un único número real, por eso se llama producto escalar, porque el resultado es un valor escalar.
Existe otra fórmula para calcular el producto escalar usando la geometría y el ángulo \(\phi\) (fi) que forman las dos flechas:
\[A \cdot B = \|A\| \cdot \|B\| \cdot \cos(\phi)\]
Donde:
- \(\|A\| = 5\) (La longitud o módulo del vector A).
- \(\|B\| = \sqrt{2^2+2^2} = \sqrt{8} \approx 2.8284\) (La longitud o módulo del vector B).
\[A \cdot B = 5 \cdot 2.8284 \cdot \cos(45^\circ)\] \[A \cdot B = 14.142 \cdot 0.7071 = \mathbf{10}\]
Partimos de la definición geométrica del producto escalar entre dos vectores, \(A\) y \(B\), el cual viene dado por la ecuación:
\[A \cdot B = \|A\|_2 \cdot \|B\|_2 \cdot \cos(\phi)\]
Donde \(\|A\|_2\) y \(\|B\|_2\) representan las normas L2 (o longitudes euclidianas) de ambos vectores, y \(\phi\) es el ángulo comprendido entre ellos.
Si asumimos que estamos trabajando con vectores reales en nuestro espacio de datos que no son el vector nulo (\(A \neq \vec{0}\) y \(B \neq \vec{0}\)), tenemos la certeza absoluta de que sus longitudes son mayores que cero: \[\|A\|_2 > 0 \quad \text{y} \quad \|B\|_2 > 0\]
Por lo tanto, la multiplicación de sus normas nunca podrá ser cero: \((\|A\|_2 \cdot \|B\|_2) \neq 0\).
Si al calcular el producto escalar el resultado es exactamente cero (\(A \cdot B = 0\)), la única posibilidad matemática es que el tercer factor de la ecuación sea el responsable:
\[\cos(\phi) = 0\]
Dado que el coseno se anula única y exclusivamente cuando el ángulo formado es de \(90^\circ\)), se demuestra geométricamente que los vectores \(A\) y \(B\) son perpendiculares ( ortogonales).
Si el vector de la característica “Edad” y el vector de la característica “Nivel de Ingresos” son ortogonales (su producto escalar es 0), significa que son variables 100% independientes. No comparten información redundante.
Si tenemos el vector \(A\) y el vector \(B\), podemos imaginar que colocamos una linterna justo encima de \(B\), apuntando de forma perpendicular hacia la línea que dibuja el vector \(A\).
La “sombra” que el vector \(B\) proyecta sobre el vector \(A\) es un nuevo vector al que llamaremos \(\mathbf{B_{proy}}\) basicamente este nuevo vector es la proyección de \(B\) sobre \(A\). La longitud de esa sombra (su magnitud) es lo que llamamos la proyección escalar.
\[\text{Longitud de la proyección} = \|B\|_2 \cdot \cos(\phi)\]
\[A \cdot B = \|A\|_2 \cdot \underbrace{\|B\|_2 \cdot \cos(\phi)}_{\text{Longitud de la proyección de B sobre A}}\]
El producto escalar es la longitud del vector que recibe la sombra (\(A\)) multiplicada por la longitud de la sombra que proyecta el otro vector (\(B\)).
El algoritmo PCA utiliza estos conceptos, por ejemplo si tenemos un sistema en 3D con puntos, PCA busca un vector que capture la esencia de los datos y proyecta todos los puntos en 3D sobre esa línea. Al quedarnos solo con la longitud de esas proyecciones, hemos convertido datos de 3 dimensiones a 1 sola dimensión de forma óptima.
3.4 Producto de Hadamard
Matemáticamente, para distinguirlo del producto escalar (que usa un punto \(\cdot\)), el producto de Hadamard se denota con un círculo con un punto dentro (\(\odot\)) o un asterisco (\(\circ\)):
\[A \odot B = \begin{bmatrix} A_1 \\ A_2 \\ \vdots \\ A_d \end{bmatrix} \odot \begin{bmatrix} B_1 \\ B_2 \\ \vdots \\ B_d \end{bmatrix} = \begin{bmatrix} A_1 \cdot B_1 \\ A_2 \cdot B_2 \\ \vdots \\ A_d \cdot B_d \end{bmatrix}\]
3.5 Multiplicar vector por escalar
Es una operación componente a componente (element-wise). Si tienes un escalar \(\alpha \in \mathbb{R}\) y un vector \(v \in \mathbb{R}^d\), el resultado es un nuevo vector del mismo espacio:
\[\alpha \cdot v = \alpha \cdot \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_d \end{bmatrix} = \begin{bmatrix} \alpha \cdot v_1 \\ \alpha \cdot v_2 \\ \vdots \\ \alpha \cdot v_d \end{bmatrix}\]
Multiplicar por un escalar cambia la longitud (magnitud) del vector, pero mantiene su dirección . Solo hay tres escenarios posibles:
- Si \(\alpha > 1\): El vector se estira (se amplifica).
- Si \(0 < \alpha < 1\): El vector se encoge (se atenúa).
- Si \(\alpha\) es negativo (\(\alpha < 0\)): El vector gira exactamente \(180^\circ\), cambiando su sentido hacia el lado opuesto, además de estirarse o encogerse según el valor absoluto del número.
3.6 Multiplicar una matriz por un vector
En Machine Learning, multiplicar una matriz por un vector es la operación que ocurre trillones de veces por segundo dentro de las tarjetas gráficas (GPUs) cuando un modelo procesa información.
Para que una matriz \(A\) pueda multiplicarse por un vector \(x\), sus dimensiones deben encajar.Si la matriz \(A\) tiene un tamaño de \(m \times n\) (\(m\) filas y \(n\) columnas).El vector \(x\) debe tener obligatoriamente \(n\) componentes (su dimensión debe ser \(n \times 1\)).
\[\text{Matriz } [m \times \mathbf{n}] \quad \times \quad \text{Vector } [\mathbf{n} \times 1] \quad = \quad \text{Resultado } [m \times 1]\]
El resultado será un nuevo vector, pero su tamaño habrá cambiado a \(m\) (el número de filas de la matriz). En ML, esto significa que las matrices tienen la capacidad de cambiar la dimensión de nuestros datos (por ejemplo, reducir 100 características de entrada a solo 10 neuronas de salida).
Imagina que tenemos una matriz \(A\) de \(2 \times 3\) y la multiplicamos por un vector \(x\) de \(3 \times 1\):
\[A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}, \quad x = \begin{bmatrix} 7 \\ 8 \\ 9 \end{bmatrix}\]
El cálculo se realiza haciendo el producto escalar de cada fila de la matriz contra el vector \(x\):
\[\text{Resultado} = \begin{bmatrix} \text{Fila 1} \cdot x \\ \text{Fila 2} \cdot x \end{bmatrix} = \begin{bmatrix} (1\cdot7) + (2\cdot8) + (3\cdot9) \\ (4\cdot7) + (5\cdot8) + (6\cdot9) \end{bmatrix} = \begin{bmatrix} 7 + 16 + 27 \\ 28 + 40 + 54 \end{bmatrix} = \begin{bmatrix} \mathbf{50} \\ \mathbf{122} \end{bmatrix}\]
Multiplicar una matriz por un vector es, en realidad, sumar las columnas de la matriz ponderadas por los números del vector
\[\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \begin{bmatrix} \mathbf{7} \\ \mathbf{8} \\ \mathbf{9} \end{bmatrix} = \mathbf{7} \cdot \begin{bmatrix} 1 \\ 4 \end{bmatrix} + \mathbf{8} \cdot \begin{bmatrix} 2 \\ 5 \end{bmatrix} + \mathbf{9} \cdot \begin{bmatrix} 3 \\ 6 \end{bmatrix}\]\[\ = \begin{bmatrix} 7 \\ 28 \end{bmatrix} + \begin{bmatrix} 16 \\ 40 \end{bmatrix} + \begin{bmatrix} 27 \\ 54 \end{bmatrix} = \begin{bmatrix} \mathbf{50} \\ \mathbf{122} \end{bmatrix}\]
Las columnas de una matriz representan un nuevo espacio geométrico (las direcciones hacia donde se pueden mover los datos). El vector \(x\) simplemente nos dice “cuánto” caminar en cada una de esas direcciones. Multiplicar la matriz por el vector deforma el espacio, estirando, rotando o proyectando nuestro vector original.
4 Transformaciones vectoriales
Una función tradicional coge un número real y genera otro (\(f: \mathbb{R} \to \mathbb{R}\)). En álgebra lineal, una transformación vectorial (o mapeo) es exactamente lo mismo, pero operando sobre estructuras completas.En lugar de mover números individuales, tomamos un vector de un espacio dimensional (Dominio) y lo transformamos en otro vector en un espacio diferente (Codominio). Se denota formalmente como:
\[T: \mathbb{R}^n \to \mathbb{R}^m\]
Donde \(n\) es la dimensión de entrada y \(m\) es la dimensión de salida.
Tienes un vector en 3D que representa las coordenadas de un punto en el espacio real: \(x = [x_1, x_2, x_3]^T\). Queremos proyectar ese punto en 2D, reduciendo su dimensionalidad. Podemos definir la función de transformación \(T(x)\):
\[T\left( \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} \right) = \begin{bmatrix} x_1 + x_2 \\ x_3 - x_1 \end{bmatrix}\]
Supongamos que nuestro vector de entrada en el espacio tridimensional es \(v = [2, 4, 5]^T\). Aplicamos la regla componente a componente:
\[T\left( \begin{bmatrix} 2 \\ 4 \\ 5 \end{bmatrix} \right) = \begin{bmatrix} 2 + 4 \\ 5 - 2 \end{bmatrix} = \begin{bmatrix} \mathbf{6} \\ \mathbf{3} \end{bmatrix}\]
El vector \([2, 4, 5]^T\) del dominio \(\mathbb{R}^3\) ha sido transformado (mapeado) al vector \([6, 3]^T\) en el codominio \(\mathbb{R}^2\)
A. Escalado (Scaling)
Multiplica los componentes por factores de escala. Si escala por 2 en el eje X y por 0.5 en el eje Y. Estira o encoge el vector en sus diferentes ejes.B.
\[T\left( \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \right) = \begin{bmatrix} 2x_1 \\ 0.5x_2 \end{bmatrix}\]
Rotación (Rotation)
Gira el vector un ángulo \(\theta\) alrededor del origen. Requiere de la trigonometría. El vector mantiene su longitud intacta, pero cambia su orientación en el espacio.
\[T\left( \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \right) = \begin{bmatrix} x_1\cos(\theta) - x_2\sin(\theta) \\ x_1\sin(\theta) + x_2\cos(\theta) \end{bmatrix}\]
C. Reflexión (Reflection)
Invierte el sentido respecto a un eje. Por ejemplo, reflejar respecto al eje Y (volteo horizontal). Crea un efecto espejo de los datos. \[T\left( \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \right) = \begin{bmatrix} -x_1 \\ x_2 \end{bmatrix}\]
5 Transformación lineal
Una matriz suele entenderse como un conjunto de números organizados en filas y columnas que representa un sistema de ecuaciones. Sin embargo, en el contexto del aprendizaje automático, las matrices adquieren un rol dinámico: se convierten en operadores capaces de realizar transformaciones lineales.
Una transformación lineal es una regla matemática que mapea cada punto o vector de un espacio vectorial de entrada (dominio) a un punto correspondiente en un espacio vectorial de salida (codominio). Su característica fundamental es que preserva la estructura algebraica del espacio; es decir, respeta las operaciones esenciales de la suma de vectores y la multiplicación por escalares.
Visualmente, podemos imaginar que una transformación lineal desplaza, rota o estira los puntos de un espacio de manera específica y predecible.
Para que una transformación \(T\) que va de un espacio vectorial \(V\) a otro espacio \(W\) (\(T: V \to W\)) sea considerada estrictamente lineal, debe cumplir de forma simultánea dos propiedades matemáticas:
- Aditividad: La transformación de la suma de dos vectores es igual a la suma de sus transformaciones individuales. \[T(u + v) = T(u) + T(v)\]
- Homogeneidad: La transformación de un vector multiplicado por un escalar es igual a multiplicar el escalar por la transformación de dicho vector. \[T(c \cdot u) = c \cdot T(u)\]
Un ejemplo clásico de esto es la reflexión (efecto espejo), la cual altera la orientación de los vectores respecto a un eje pero mantiene la linealidad del espacio.
Tenemos un vector \(u\) que representa la posición de una característica de nuestro modelo: \[u = \begin{bmatrix} 3 \\ 4 \end{bmatrix}\]
Geométricamente, esta flecha avanza 3 unidades a la derecha en el eje \(X\) y 4 unidades hacia arriba en el eje \(Y\).
El álgebra lineal nos dice que la matriz encargada de hacer este reflejo exacto es:
\[A = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix}\]
Multiplicamos nuestra matriz espejo por nuestro vector original siguiendo la regla de fila por columna:
\[T(u) = A \cdot u = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 3 \\ 4 \end{bmatrix}\]
El vector resultante transformado (llamémoslo \(u'\)) es:
\[u' = \begin{bmatrix} -3 \\ 4 \end{bmatrix}\]
REGLA 1: Aditividad (\(T(u + v) = T(u) + T(v)\))
Esta regla dice que da igual si primero sumas los vectores y luego los pasas por el espejo (Camino 1), o si primero los pasas por el espejo por separado y luego sumas sus reflejos (Camino 2). El resultado tiene que ser el mismo.
Camino 1: Sumar primero, transformar después
Sumamos los vectores originales:
\[u + v = \begin{bmatrix} 3 \\ 4 \end{bmatrix} + \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} 3 + 1 \\ 4 + 2 \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \end{bmatrix}\]
Transformamos (multiplicamos por la matriz \(A\)) el vector suma:
\[T(u + v) = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 4 \\ 6 \end{bmatrix} = \begin{bmatrix} (-1 \cdot 4) + (0 \cdot 6) \\ (0 \cdot 4) + (1 \cdot 6) \end{bmatrix} = \begin{bmatrix} \mathbf{-4} \\ \mathbf{6} \end{bmatrix}\]
Camino 2: Transformar primero, sumar después
Transformamos el vector \(u\):
\[T(u) = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 3 \\ 4 \end{bmatrix} = \begin{bmatrix} \mathbf{-3} \\ \mathbf{4} \end{bmatrix}\]
Transformamos el vector \(v\):
\[T(v) = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} \mathbf{-1} \\ \mathbf{2} \end{bmatrix}\]
Sumamos los dos vectores ya transformados:
\[T(u) + T(v) = \begin{bmatrix} -3 \\ 4 \end{bmatrix} + \begin{bmatrix} -1 \\ 2 \end{bmatrix} = \begin{bmatrix} -3 + (-1) \\ 4 + 2 \end{bmatrix} = \begin{bmatrix} \mathbf{-4} \\ \mathbf{6} \end{bmatrix}\]
REGLA 2: Homogeneidad (\(T(c \cdot u) = c \cdot T(u)\))
Esta regla dice que da igual si primero estiras el vector multiplicándolo por el escalar y luego lo reflejas (Camino 1), o si primero reflejas el vector y luego estiras el reflejo (Camino 2).
Camino 1: Escalar primero, transformar después
Multiplicamos el vector original por el escalar (\(c = 2\)):
\[c \cdot u = 2 \cdot \begin{bmatrix} 3 \\ 4 \end{bmatrix} = \begin{bmatrix} 2 \cdot 3 \\ 2 \cdot 4 \end{bmatrix} = \begin{bmatrix} 6 \\ 8 \end{bmatrix}\]
Transformamos (multiplicamos por la matriz \(A\)) este vector estirado:
\[T(c \cdot u) = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 6 \\ 8 \end{bmatrix} = \begin{bmatrix} (-1 \cdot 6) + (0 \cdot 8) \\ (0 \cdot 6) + (1 \cdot 8) \end{bmatrix} = \begin{bmatrix} \mathbf{-6} \\ \mathbf{8} \end{bmatrix}\]
Camino 2: Transformar primero, escalar después
Transformamos el vector \(u\) original (ya sabíamos este resultado):
\[T(u) = \begin{bmatrix} -3 \\ 4 \end{bmatrix}\]
Multiplicamos este resultado por el escalar (\(c = 2\)):
\[c \cdot T(u) = 2 \cdot \begin{bmatrix} -3 \\ 4 \end{bmatrix} = \begin{bmatrix} 2 \cdot (-3) \\ 2 \cdot 4 \end{bmatrix} = \begin{bmatrix} \mathbf{-6} \\ \mathbf{8} \end{bmatrix}\]
Si dos vectores se sumaban formando un paralelogramo antes de entrar al espejo, sus reflejos seguirán formando exactamente el mismo paralelogramo dentro del espejo. Si un vector medía el doble que otro antes de transformarse, su reflejo seguirá midiendo el doble.
Cuando trabajamos con un vector cualquiera en álgebra lineal, podemos transformarlo multiplicándolo por una matriz. Para entender esto visualmente, imaginemos un espacio vectorial bidimensional (\(\mathbb{R}^2\)).
En este espacio existen dos vectores especiales: el \(\begin{bmatrix} 1 \\ 0 \end{bmatrix}\) (que apunta una unidad a la derecha en el eje X) y el \(\begin{bmatrix} 0 \\ 1 \end{bmatrix}\) (que apunta una unidad hacia arriba en el eje Y). A este par se le conoce como la base canónica o base fundamental. Son la piedra angular del espacio porque, mediante su combinación, podemos construir y alcanzar cualquier otro vector existente en dos dimensiones.
Si colocamos estos dos vectores como columnas de una matriz, obtenemos:\[I = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}\]A esta estructura se le conoce como la matriz identidad. Cualquier vector que sea multiplicado por ella permanecerá inalterado.
Sin embargo, esto esconde una interpretación geométrica mucho más profunda. Cuando tenemos un vector cualquiera \(\begin{bmatrix} x \\ y \end{bmatrix}\) y lo multiplicamos por la matriz identidad, lo que estamos haciendo en realidad es expresar ese vector como una combinación lineal de la base. El componente \(x\) nos indica cuántas veces debemos estirar la primera columna, y el componente \(y\) nos indica cuántas veces debemos estirar la segunda columna:
\[\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} \mathbf{x} \\ \mathbf{y} \end{bmatrix} = \mathbf{x} \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix} + \mathbf{y} \cdot \begin{bmatrix} 0 \\ 1 \end{bmatrix} = \begin{bmatrix} x \\ y \end{bmatrix}\]
El vector \(\begin{bmatrix} x \\ y \end{bmatrix}\) no es más que unas “instrucciones” o ponderaciones: “Dame \(x\) veces la primera columna y \(y\) veces la segunda columna”.
¿Qué pasa si cambiamos la matriz identidad por cualquier otra matriz? Por ejemplo, una matriz \(A\):
\[A = \begin{bmatrix} 2 & -1 \\ 3 & 5 \end{bmatrix}\]
Cuando multiplicamos \(A \cdot \begin{bmatrix} x \\ y \end{bmatrix}\), las instrucciones del vector siguen siendo exactamente las mismas, pero ahora se aplican a las nuevas columnas de la matriz:
\[A \cdot \begin{bmatrix} x \\ y \end{bmatrix} = x \cdot \begin{bmatrix} 2 \\ 3 \end{bmatrix} + y \cdot \begin{bmatrix} -1 \\ 5 \end{bmatrix}\]
Al cambiar la matriz, hemos “transformado el espacio”. Los vectores de la base fundamental (\(\begin{bmatrix} 1 \\ 0 \end{bmatrix}\) y \(\begin{bmatrix} 0 \\ 1 \end{bmatrix}\)) han aterrizado en nuevas posiciones (\(\begin{bmatrix} 2 \\ 3 \end{bmatrix}\) y \(\begin{bmatrix} -1 \\ 5 \end{bmatrix}\)), arrastrando con ellos a todo el plano cartesiano.
Imagina que el espacio vectorial (sea de 2D, 3D o 100D) es una cuadrícula infinita de líneas rectas y paralelas.Aplicar una transformación lineal es el equivalente a tomar esa cuadrícula y estirarla, rotarla, sesgarla o aplastarla. Sin embargo, para que esa deformación sea legal (es decir, sea estrictamente lineal), la cuadrícula debe cumplir dos condiciones visuales obligatorias:
- Las líneas deben seguir siendo perfectamente rectas. No se permiten curvas, parábolas ni dobleces. Si una línea era recta antes de la transformación, debe ser recta después.
- El origen \((0,0)\) no se puede mover. El centro del universo permanece clavado en el mismo sitio. Las líneas se mueven alrededor del origen.
Para saber exactamente cómo se va a transformar un espacio infinito con millones de vectores, no necesitas calcular qué le pasa a cada vector. Solo necesitas saber qué le pasa a los vectores que miden 1 en cada eje. Si sabes a dónde van a parar esos pocos vectores tras la transformación, sabrás a dónde va a parar absolutamente todo el espacio.
Imagina esta matriz:
\[A = \begin{bmatrix} 1 & 2 \\ 0 & 1 \end{bmatrix}\]
Si metemos un vector cualquiera \(\begin{bmatrix} x \\ y \end{bmatrix}\):
\[A \cdot \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 1 & 2 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 1x + 2y \\ 0x + 1y \end{bmatrix} = \begin{bmatrix} x + 2y \\ y \end{bmatrix}\]
Ahora el vector \(\begin{bmatrix} 1 \\ 3 \end{bmatrix}\) tendrá una nueva posición \(\begin{bmatrix} 1 + 2(3) \\ 3 \end{bmatrix} = \begin{bmatrix} \mathbf{7} \\ \mathbf{3} \end{bmatrix}\).Toda la cuadrícula se ha inclinado hacia la derecha de manera perfectamente proporcional y predecible. Las líneas siguen siendo rectas y el origen no se ha movido.
Aplicar una transformación tras otra de manera secuencial se puede simplificar en una única matriz equivalente.
Cuando aplicamos de manera secuencial dos transformaciones lineales sobre un vector, estamos realizando una composición de transformaciones.
maginemos un vector inicial \(x\). Primero, aplicamos una transformación lineal representada por la matriz \(B\). El resultado de esta primera operación es un nuevo vector intermedio, al que podemos llamar \(x'\):
\[x' = B \cdot x\]
Inmediatamente después, tomamos este vector resultante \(x'\) y le aplicamos una segunda transformación lineal, representada por una matriz \(A\). Esto nos genera el vector final transformado, \(x''\):
\[x'' = A \cdot x'\]
Si sustituimos la primera ecuación en la segunda, vemos que el proceso completo se puede escribir de la siguiente manera:
\[x'' = A \cdot (B \cdot x)\]
Gracias a la propiedad asociativa del álgebra lineal, este proceso de dos pasos se puede simplificar drásticamente. Podemos multiplicar primero ambas matrices (\(A \cdot B\)) para fusionarlas en una única matriz nueva, a la que llamaremos \(C\):
\[C = A \cdot B\]
De este modo, podemos realizar exactamente la misma transformación profunda sobre el espacio en un solo paso matemático, multiplicando el vector original directamente por la matriz combinada:
\[x'' = C \cdot x\]
Para entenderlo de forma sencilla, imagina que la matriz \(B\) es una transformación que rota el espacio \(90^\circ\), y la matriz \(A\) es una transformación que estira el espacio al doble.Si tienes tu vector y primero lo rotas (\(B\)) y luego lo estiras (\(A\)), has hecho dos operaciones. Al multiplicar las matrices \(A \cdot B\), obtienes una matriz única \(C\) cuya orden geométrica directa es: “Rota \(90^\circ\) y estira al doble a la vez”. La cuadrícula elástica llega exactamente al mismo destino final, pero ahorrándole a la computadora la mitad del trabajo.
Esto explica la razón por la cual las redes neuronales necesitan obligatoriamente funciones de activación no lineales (como ReLU o Sigmoide) entre capa y capa, porque sino se podría simplificar todas las capas en una sola capa y no tendría sentido tener varias capas y no podría extraer patrones complejos de los datos.
Tenemos un vector al cual le vamos a aplicar dos transformaciones lineales.
\[x = \begin{bmatrix} 1 \\ 2 \end{bmatrix}\]
Matriz \(B\) (La primera transformación): Un escalado que duplica el eje X y triplica el eje Y.
\[B = \begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix}\]
Matriz \(A\) (La segunda transformación): Una rotación/reflexión que cruza los ejes (intercambia X por Y).
\[A = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}\]
Aplicamos la primera transformación.
\[x' = \begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} (2 \cdot 1) + (0 \cdot 2) \\ (0 \cdot 1) + (3 \cdot 2) \end{bmatrix} = \begin{bmatrix} \mathbf{2} \\ \mathbf{6} \end{bmatrix}\]
Aplicamos al resultado la segunda transformación
\[x'' = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 2 \\ 6 \end{bmatrix} = \begin{bmatrix} (0 \cdot 2) + (1 \cdot 6) \\ (1 \cdot 2) + (0 \cdot 6) \end{bmatrix} = \begin{bmatrix} \mathbf{6} \\ \mathbf{2} \end{bmatrix}\]
Ahora podemos realizar exactamente lo mismo
\[C = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix}\] \[C = \begin{bmatrix} 0 & 3 \\ 2 & 0 \end{bmatrix}\]
\[x'' = \begin{bmatrix} 0 & 3 \\ 2 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} (0 \cdot 1) + (3 \cdot 2) \\ (2 \cdot 1) + (0 \cdot 2) \end{bmatrix} = \begin{bmatrix} \mathbf{6} \\ \mathbf{2} \end{bmatrix}\]s