Transformaciones lineales: una matriz es una capa de red neuronal
Cambiar el chip: una matriz no es una "tabla de números" — es una función que toma vectores y devuelve vectores. Esa idea es exactamente lo que hace una capa de red neuronal: y = Wx + b. Saber leer una matriz como una transformación es ver una red neuronal por dentro.
Idea central: una matriz es la representación concreta de una transformación lineal — una función que respeta sumas y escalamientos. Toda capa de red neuronal moderna empieza haciendo exactamente eso: Wx + b. Si entendés cómo una matriz deforma el plano, ya entendés lo que está pasando dentro de cada capa de un modelo. Lo único que falta para una red completa es lo no-lineal que viene después.
1 Cambio de mirada: la matriz como función
Hasta la lección anterior, una matriz era una "tabla rectangular" con la que hacías cuentas: multiplicarla por un vector, multiplicarla por otra matriz, sacar valores propios. Era un objeto.
Ahora cambia el chip: pensá una matriz A como una máquina que recibe un vector x y devuelve otro vector A·x. Es una función. Entra un vector, sale otro vector.
El mismo objeto, pero visto distinto. En lugar de "tabla", pasá a leerla como "función que estira, rota, sesga o proyecta vectores". Ese cambio de perspectiva es lo que hace todo el cálculo posterior posible.
2 Definición: qué significa "lineal"
Una función T que toma vectores y devuelve vectores es lineal si cumple dos propiedades que se ven en la vida real cada vez que dos cosas suman sin "darse cuenta" de la otra:
Traducido: si dos vectores entran sumados, salen sumados. Si un vector entra multiplicado por un número, sale multiplicado por ese mismo número. La transformación respeta las operaciones del espacio vectorial.
Esto suena abstracto, pero la consecuencia práctica es enorme: si sabés qué le hace T a unos pocos vectores especiales (los de la base), ya sabés qué le hace a todos los demás. Porque cualquier otro vector es combinación lineal de los básicos.
Para saber qué hace T en R2, alcanza con saber adonde manda e1 = (1,0) y e2 = (0,1). Esos dos resultados son las dos columnas de la matriz. La matriz es la transformación escrita en la base canónica.
3 Toda matriz es una transformación (y al revés)
El teorema fundamental: hay una correspondencia uno-a-uno entre matrices m×n y transformaciones lineales de Rn a Rm.
El razonamiento es directo: si e1 va a parar al vector (a, c) y e2 al vector (b, d), entonces para cualquier x = (x1, x2) tenemos:
Justo la multiplicación matriz por vector que vimos en la lección 2.1. La matriz es la transformación escrita en columnas.
4 Tu turno: mové la matriz y mirá cómo deforma el plano
El cuadrado gris es la región unitaria original (la "cuadrí>cula básica"). El paralelogramo naranja es lo que queda después de aplicar la matriz A. Los dos lados del paralelogramo son las columnas de A — o sea, las imágenes de e1 (rojo) y e2 (verde).
Sandbox interactivo
Mové los 4 sliders. El paralelogramo es la imagen del cuadrado unitario.
- Identidad: nada cambia. El cuadrado queda igual, área = 1, rango = 2.
- Escalamiento ×2: el cuadrado se vuelve 2×2, área = 4 (factor de área = determinante).
- Rotación 90°: el cuadrado rota pero conserva su tamaño. Determinante = +1.
- Sesgo: el cuadrado se vuelve un paralelogramo inclinado. Área conservada.
- Singular: el cuadrado se aplasta a una línea. Rango = 1, determinante = 0. La transformación pierde una dimensión — no se puede deshacer.
- Proyección al eje X: todo se aplasta al eje X. Rango = 1.
El determinante es exactamente cuánto se agranda (o achica) el área del cuadrado bajo la transformación. Si es negativo, hay un reflejo (la orientación se invierte). Si es cero, todo se aplastó a una línea o un punto y la información se perdió para siempre.
5 Composición: aplicar transformaciones en cadena
Si A es una transformación y B es otra, aplicar primero A y luego B es otra transformación. ¿Cómo se ve su matriz? Exactamente el producto:
La multiplicación de matrices que vimos en la lección 2.1 no era arbitraria: está diseñada exactamente para que coincida con la composición de transformaciones. Y importa el orden: B·A no es lo mismo que A·B porque "rotar y después estirar" no es lo mismo que "estirar y después rotar".
Por qué importa en redes neuronales: las redes profundas son capas en cadena. Cada capa es una matriz. Si solo hubiera capas lineales, la red entera serí>a equivalente a una sola matriz (el producto de todas). Pero entre cada capa hay una función no lineal (ReLU, sigmoide) que rompe la composición lineal y le da poder expresivo a la red.
6 Kernel, imagen y rango: qué pierde y qué conserva
Cuando aplicás una transformación a un espacio entero, dos preguntas naturales:
- ¿Qué vectores quedan en cero? Eso es el kernel (o núcleo) de
A: losxtales queA·x = 0. - ¿Qué sale del otro lado? Eso es la imagen (o rango) de
A: el conjunto de todos losA·xposibles.
El rango es la dimensión de la imagen — cuántas direcciones independientes salen. En una matriz 2×2, el rango es 0, 1 o 2.
Esta es la "ley de conservación" del álgebra lineal (teorema del rango y la nulidad). Si una transformación aplasta una dirección al cero, esa dirección se pierde para siempre — no se puede invertir.
Cuando una capa de red neuronal tiene rango menor al máximo posible, está perdiendo información. Esto puede ser positivo (compresión, denoising) o problemático (gradientes que se desvanecen). La técnica de low-rank approximation usa esto a propósito para reducir parámetros sin perder mucha capacidad — es la base de métodos como LoRA en modelos grandes.
7 La gran conexión: una capa de red neuronal es Wx + b
Una capa de red neuronal clásica hace exactamente tres operaciones, en este orden:
Los pasos 1 y 2 son la transformación lineal con desplazamiento — lo que se llama una transformación afín. El paso 3 es lo no-lineal (ReLU, sigmoide, etc.), y es lo que permite que apilando varias capas la red pueda aprender funciones cada vez más complejas.
Toda la teorí>a de matrices que viste en el módulo aparece adentro de cada capa: la multiplicación matriz-vector (lección 2.1), los valores propios que determinan si los gradientes explotan o se desvanecen (lección 2.2), las normas que regularizan los pesos (lección 2.3), y la transformación lineal que es la operación central (esta lección).
10 matrices W₁, W₂, …, W₀ con sus bias, intercaladas con funciones no lineales. Entrenar la red es ajustar las 10 matrices para que la composición total mapee inputs a outputs correctos. Cada matriz es una "vista parcial" de la transformación completa. La próxima ruta de MathPlay (Cálculo y optimización) cuenta cómo se ajustan esas matrices.
8 Caso minero: una red neuronal predice ley de mineral
Datos de entrada
Por cada testigo de perforación se miden 12 variables geológicas: tipo de roca codificado, leyes de elementos químicos (Cu, Au, Mo, Fe, As, S), densidad, dureza, alteración, profundidad, índice RQD, coordenadas. Cada testigo es un vector x en R12.
La red predice la ley de Cu recuperable
Una red sencilla con dos capas ocultas:
- Capa 1:
h1 = ReLU(W1 · x + b1). La matrizW1es32×12: toma los 12 features y los mezcla en 32 combinaciones lineales, después aplica ReLU. Las columnas deW1son las "preguntas" que la red le hace a las features. - Capa 2:
h2 = ReLU(W2 · h1 + b2). La matrizW2es16×32: combina las 32 features anteriores en 16 nuevas. - Salida:
y = W3 · h2 + b3conW3de1×16: combina las 16 features finales en un solo número, la ley de Cu predicha.
Por qué el rango importa
Si la matriz W1 tiene rango bajo (por ejemplo 5 en lugar de 12), la red está "ignorando" algunas combinaciones de features. A veces eso es bueno (descarta ruido) y a veces es malo (pierde señal). Cuando se entrena con datos minerales reales, las herramientas que ya conocés — valores propios, SVD, regularización L1/L2 — sirven para diagnosticar y arreglar esos problemas.
Composición y interpretabilidad
Sin las no-linealidades intermedias, las tres matrices se colapsarían en una sola: W3 · W2 · W1 · x + cte, o sea regresión lineal de toda la vida. La ReLU intercalada es lo que le da a la red la posibilidad de capturar comportamiento no lineal (umbrales de ley económica, efectos de saturación geológica, interacciones complejas entre elementos químicos).
+ Más parientes del concepto
Las transformaciones lineales son el caso más estudiado, pero hay generalizaciones que aparecen seguido:
Transformaciones afines (Wx + b)Ver▾
Una transformación afín es una lineal más una traslación: T(x) = Wx + b. No es estrictamente lineal (no manda el cero al cero), pero conserva líneas paralelas y proporciones. Cada capa de red neuronal antes de la activación es afín. El truco para tratarla como lineal: agregar una coordenada constante 1 al vector y absorber el bias dentro de una matriz más grande.
Funciones no lineales y kernelsVer▾
Muchos algoritmos clásicos de ML (SVM, kernel PCA, ridge regression con kernels) usan un truco: mapear los datos a un espacio de dimensión mayor con una función no lineal φ, y después aplicar transformaciones lineales ahí arriba. La identidad k(x, y) = <φ(x), φ(y)> permite trabajar con datos no lineales sin calcular φ explícitamente. Es el "kernel trick", uno de los inventos más elegantes de la teoría del aprendizaje.
Convoluciones como transformaciones linealesVer▾
Una capa convolucional (CNN) es una transformación lineal con un patrón especial: pesos compartidos sobre regiones locales de la entrada. Se puede escribir como una matriz gigante pero muy sparse, donde la mayoría de las entradas son cero y solo aparecen pocos valores que se repiten. Esto le da a las CNNs su eficiencia y su capacidad de detectar patrones traslacionalmente invariantes.
Operadores lineales en dimensión infinitaVer▾
Las transformaciones lineales se extienden a espacios de funciones: la derivada, la integral, la transformada de Fourier son operadores lineales sobre espacios infinito-dimensionales. La misma intuición geométrica de "rotar y estirar" sigue valiendo, solo que ahora el espacio donde actúan no tiene una dimensión finita. Es la base matemática del análisis funcional y la física matemática.
Ver el código en Python: de transformaciones básicas a una red neuronal completa Click para abrir
Empezamos viendo qué hacen las transformaciones básicas, después las componemos, y terminamos con una capa de red neuronal real.
1. Las cuatro transformaciones básicas:
import numpy as np # Vector de prueba v = np.array([1.0, 0.0]) # Identidad: no hace nada I = np.array([[1, 0], [0, 1]]) # Escalamiento por 2 S = np.array([[2, 0], [0, 2]]) # Rotación 90 grados antihoraria R = np.array([[0, -1], [1, 0]]) # Sesgo horizontal (shear) Sh = np.array([[1, 1], [0, 1]]) print(f"v = {v}") print(f"I @ v (id) = {I @ v}") print(f"S @ v (x2) = {S @ v}") print(f"R @ v (rot 90) = {R @ v}") print(f"Sh @ v (sesgo) = {Sh @ v}")
2. Composición: el orden importa:
import numpy as np R = np.array([[0, -1], [1, 0]]) # rotar 90 S = np.array([[2, 0], [0, 1]]) # estirar x2 en X # Primero rotar, después estirar T1 = S @ R # Primero estirar, después rotar T2 = R @ S print("S @ R (rotar y luego estirar):") print(T1) print("R @ S (estirar y luego rotar):") print(T2) print(f"¿Son iguales? {np.allclose(T1, T2)}") # Esperado: NO. El orden de las matrices importa.
3. Determinante, rango y kernel:
import numpy as np A = np.array([[1.0, 2.0], [2.0, 4.0]]) # filas proporcionales: singular print(f"det(A) = {np.linalg.det(A):.3f}") print(f"rango = {np.linalg.matrix_rank(A)}") # Encontrar el kernel: vectores x tales que A x = 0 from scipy.linalg import null_space ker = null_space(A) print("Kernel (vectores que A aplasta a cero):") print(ker.round(3)) # Verificar: A @ ker ~ 0 print(f"A @ ker = {(A @ ker).round(8).flatten()}")
4. Una capa de red neuronal a mano:
import numpy as np np.random.seed(42) def capa(x, W, b, activacion="relu"): """Una capa de red neuronal: y = activacion(W x + b).""" z = W @ x + b # transformación afín if activacion == "relu": return np.maximum(0, z) elif activacion == "sigmoid": return 1 / (1 + np.exp(-z)) elif activacion == "linear": return z # Entrada: vector de 12 features (testigo geológico) x = np.random.randn(12) # Capa oculta: 12 -> 32, con ReLU W1 = np.random.randn(32, 12) * 0.1 b1 = np.zeros(32) h1 = capa(x, W1, b1, "relu") # Capa oculta: 32 -> 16, con ReLU W2 = np.random.randn(16, 32) * 0.1 b2 = np.zeros(16) h2 = capa(h1, W2, b2, "relu") # Capa de salida: 16 -> 1, lineal (predice ley) W3 = np.random.randn(1, 16) * 0.1 b3 = np.zeros(1) y = capa(h2, W3, b3, "linear") print(f"Predicción de ley: {y[0]:.4f}") print(f"Total de parámetros: {W1.size + W2.size + W3.size + b1.size + b2.size + b3.size}")
5. Sin no-linealidad, todo se colapsa:
import numpy as np np.random.seed(42) x = np.random.randn(5) W1 = np.random.randn(8, 5) W2 = np.random.randn(8, 8) W3 = np.random.randn(3, 8) # Red SIN no linealidades: 3 capas lineales encadenadas y_red = W3 @ (W2 @ (W1 @ x)) # Equivalente a una sola matriz W_equivalente = W3 @ W2 @ W1 y_directo = W_equivalente @ x print(f"Salida red: {y_red.round(4)}") print(f"Salida directa: {y_directo.round(4)}") print(f"¿Iguales? {np.allclose(y_red, y_directo)}") # Sin no linealidad, 3 capas = 1 capa equivalente. # Las activaciones (ReLU, sigmoid…) son las que dan poder real.
9 Pregunta de chequeo
Una red neuronal tiene 5 capas, todas con la forma y = Wx + b sin ninguna función de activación no lineal entre ellas. ¿Qué tipo de funciones puede aprender esa red?
Llegaste al final del Módulo de Álgebra. Sabés cómo opera una matriz, qué son sus valores y vectores propios, cómo viven los vectores en muchas dimensiones, y cómo todo eso se traduce en una capa de red neuronal. Lo que sigue es el Módulo 3 · Cálculo y optimización: cómo se ajustan los millones de pesos de esas matrices para que la red aprenda. Es la matemática del descenso por gradiente.
Regístrate al boletín MathPlay
De la idea al laboratorio que funciona: datos, simulación, visualización e IA explicadas con imágenes que se mueven. Te escribo cuando hay algo nuevo que vale la pena compartir.
Sin calendario fijo. Sin spam.
Listo. Te escribo cuando haya algo nuevo.
