Lección · Módulo 2 · Álgebra para IA

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.

Mate MathPlay · Lección 2.4 · Álgebra para modelos · cierre del Módulo 2

11 minutosInteractivoVisualCon Python

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.

T(x) = A · x — la matriz actúa sobre el 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:

1) T(u + v) = T(u) + T(v)
2) T(α · v) = α · T(v)

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.

El truco que cambia todo

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.

Las columnas de la matriz son donde "aterriza" cada vector de la base ESPACIO DE ENTRADA base canónica e₁ (1,0) e₂ (0,1) T aplicar A ESPACIO DE SALIDA las columnas de A A·e₁ = (a,c) columna 1 A·e₂ = (b,d) columna 2 A = [[a, b], [c, d]]: la primera columna es a donde va e₁, la segunda donde va e₂.

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:

T(x) = x1·T(e1) + x2·T(e2) = (a·x1+b·x2, c·x1+d·x2)

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).

Cuadrado gris: región original Paralelogramo: región transformada A·e1: imagen de (1,0) A·e2: imagen de (0,1)

Sandbox interactivo

Mové los 4 sliders. El paralelogramo es la imagen del cuadrado unitario.

[
1.500.50 0.301.20
]
a1.50
b0.50
c0.30
d1.20
Determinante
factor de área
+1.65
Preserva la orientación y agranda el área por 1.65×.
Rango
dimensiones de salida
2
El plano entero se mapea al plano entero.
Tipo de transformación
Sesgo + escalamiento
Combina estiramiento de los ejes con inclinación.
Determinante = factor de área (con signo)

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:

(B ∘ A)(x) = B(A(x)) = (B · A) · x

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".

Aplicar una transformación tras otra: cada matriz es un paso x entrada A A·x primer paso B B·(A·x) resultado final = (B·A)·x una sola matriz

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:

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.

dim(kernel) + dim(imagen) = dim(entrada)

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.

Dónde aparece en IA

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:

Lo que pasa adentro de UNA capa de una red neuronal x vector de entrada (x₁, x₂, …, xₙ) píxeles, embeddings, features… 1) Wx multiplicar por matriz de pesos W transformación LINEAL (rota + estira) 2) +b sumar bias vector b desplazamiento AFÍN (traslada) 3) σ(Wx + b) función de activación (ReLU, sigmoid, tanh) NO LINEAL = salida y (le da expresividad)
y = σ(W · x + b)

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).

Una red de 10 capas =

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

Caso aplicado · predicción de ley metálurgica

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 matriz W1 es 32×12: toma los 12 features y los mezcla en 32 combinaciones lineales, después aplica ReLU. Las columnas de W1 son las "preguntas" que la red le hace a las features.
  • Capa 2: h2 = ReLU(W2 · h1 + b2). La matriz W2 es 16×32: combina las 32 features anteriores en 16 nuevas.
  • Salida: y = W3 · h2 + b3 con W3 de 1×16: combina las 16 features finales en un solo número, la ley de Cu predicha.
3 matrices encadenadas = una red simple para predicción de leyes

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.

Diagnóstico de red: mirar el rango y los valores singulares de cada matriz

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).

Capas lineales en cadena + no-linealidad = poder expresivo de las redes profundas

+ 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:

01_transformaciones_basicas.pyPYTHON
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:

02_composicion.pyPYTHON
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:

03_det_rango_kernel.pyPYTHON
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:

04_capa_neural.pyPYTHON
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:

05_sin_no_linealidad.pyPYTHON
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?

Cierre del Módulo 2

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.

LinkedIn WhatsApp

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.

M
Mate MathPlay
Matemática visual abierta

MathPlay conecta matemática, programación y visualización para que los conceptos se entiendan jugando, no memorizando. Cada lección se sostiene por sí sola y trae código Python para que pruebes en tu máquina.

Más de MathPlay
← Lección anterior: espacios y normasVolver al móduloVolver a Mate