English · Español
00 — Por qué una fase de álgebra lineal antes de cualquier autograd¶
🇪🇸 La intuición central: el 80% de los bugs en código de IA son errores de shape. Una buena fase de álgebra lineal te enseña a predecir y razonar sobre shapes igual que sobre tipos. Sin esa habilidad, cada forward pass es una lotería.
La mentira que cuentan los libros de texto¶
Un libro de álgebra lineal te dice que una matriz es "un array de números" y que matmul es Σ A[i,k] B[k,j]. Esa es la mecánica. No es lo que necesitas.
Lo que necesitas es la perspectiva que convierte el álgebra lineal en una herramienta de depuración:
- Un vector es un objeto tipado cuya dimensionalidad es parte de su identidad.
- Una matriz es un mapa lineal de un espacio vectorial a otro. La multiplicación matriz-vector es la aplicación del mapa. La multiplicación matriz-matriz es la composición de dos mapas.
- Un tensor es la misma idea generalizada a mapas multilineales con múltiples ejes de entrada y salida.
- Un shape es la firma dimensional de un tensor, como una firma de tipos en una función.
(B, T, V)se lee como "B batches de secuencias de T pasos sobre un vocabulario de V elementos".
Cuando adoptas esta visión, ocurren dos cosas. Primero, cada mismatch de shape se convierte en un error de tipo — visible por inspección, no por ejecución. Segundo, cada operación de una red neuronal (proyección lineal, attention, normalización, búsqueda de embedding) se convierte en una transformación pequeña y con nombre sobre shapes. El código se lee más como análisis dimensional que como álgebra.
La tesis de la Fase 3¶
La Fase 3 entrena un solo hábito:
Antes de escribir cualquier expresión de tensores, escribe el shape de cada operando como comentario. Antes de pulsar ejecutar, predice el shape de salida en papel. Si tu predicción es incorrecta, el código está mal — investiga el error de tipo, no lo ejecutes.
Al final de la Fase 3 deberías ser capaz de leer una expresión einsum como 'btv,vd->btd' y saber al instante:
- Contrae un tensor
(B, T, V)con un tensor(V, D)a lo largo del eje compartidov. - El resultado tiene shape
(B, T, D). - El total de FLOPs es
B × T × V × D × 2. - Es la operación de búsqueda de embedding: para cada uno de los
B × Ttokens (representados como vectores one-hot de longitudV), busca el embeddingD-dimensional correspondiente en la matriz de embedding(V, D).
Escribirás exactamente ese einsum en la Fase 13 y de nuevo en la Fase 17. La Fase 3 lo vuelve aburrido.
Por qué "primeros principios" — el lente del §A13¶
El alcance microscópico de este proyecto (§A13) es la gramática verbal del inglés: 20 verbos × 5 tiempos × 3 personas + pares en español ≈ 600 formas. Cada operación de álgebra lineal que Borja escribirá en las próximas 30 fases actúa sobre uno de tres tipos de datos:
- Codificaciones dispersas de formas verbales — típicamente vectores one-hot de longitud 600. Un one-hot en el índice 47 significa "la forma verbal
walked". - Embeddings densos — matriz aprendida
(600, D)que mapea cada forma verbal a un vectorD-dim. La búsqueda de embedding esE[i](indexación Python) que equivale aE @ one_hot(i)(producto matriz-vector) que equivale aeinsum('vd,v->d', E, one_hot(i)). - Matrices pequeñas de clasificación — por ejemplo una matriz
(5, D)que proyecta un estado oculto a logits de 5 clases de tiempos verbales.
Los ejemplos de la Fase 3 están todos construidos con estos tres primitivos. Ninguno requiere conocimiento de IA (AI); todos son exactamente las operaciones que Borja usará después.
Vista previa concreta — la cadena de búsqueda de embedding¶
Supón que el MiniGPT de Borja (Fase 17) tiene:
- Un vocabulario de
V = 600formas verbales (el universo §A13). - Una matriz de embedding
Ede shape(V, D)dondeD = 64. - Un batch de
B = 32secuencias, cada una deT = 16tokens. Cada token es un índice entero enV.
Un forward pass empieza buscando el embedding para cada token:
La forma ingenua de calcular embedded es:
La forma "álgebra lineal" es:
# Convertir tokens a one-hot: shape (B, T, V)
one_hot = np.eye(V)[tokens] # shape (B, T, V)
# Multiplicación matricial con E: shape (B, T, V) @ (V, D) = (B, T, D)
embedded = np.einsum('btv,vd->btd', one_hot, E)
Ambas producen resultados idénticos. La primera es rápida (indexación directa); la segunda es la interpretación algebraica. La Fase 3 te hace escribir ambas y demostrar que coinciden. La Fase 13 usa la rápida; sabrás exactamente lo que está haciendo gracias a la Fase 3.
Por qué esto importa específicamente para el resto del currículo¶
Cinco afirmaciones que deberían tener sentido después de la Fase 3, pero probablemente suenen a jerga ahora:
- La búsqueda de embedding es una multiplicación matriz-vector con un vector one-hot. La Fase 13 la implementará literalmente de ambas formas y mostrará la equivalencia. La Fase 3 deriva por qué.
- Attention son tres productos matriz-vector y un softmax (Fase 15). Las proyecciones Q, K, V son mapas lineales
(D, D_k); los scores de attention sonQ @ K^T; la salida esattention @ V. Cada una es una matmul con shapes nombrados. La Fase 15 será un ejercicio de la Fase 3 disfrazado. - LayerNorm y RMSNorm son reescalados invariantes a la escala (Fase 10). La matemática es una matmul por diagonal y un reescalado. Trivial en einsum.
- LoRA (Fase 28) reemplaza una matriz de pesos
D × Dpor el producto de dos matrices de bajo rango(D × r) @ (r × D). Es una matmul restringida — exactamente la truncación de rango-k que Borja hará enlab/02-svd-compression.md. - La cuantización (Fase 26) es un escalado por canal de una matmul. La matemática es
(s · q) @ (s · q)dondeses fp32 yqes int8. La aritmética de shapes es idéntica a la matmul estándar; el argumento de precisión es Fase 2.
Cada una de esas afirmaciones es un argumento de shape + matmul. No serás capaz de leer el código de ninguna fase posterior hasta que la Fase 3 aterrice.
El recorrido por la Fase 3¶
- Teoría 01 introduce los tensores como objetos tipados, con aritmética de shapes y la gramática einsum. La exposición plana a la que volverás para siempre.
- Teoría 02 hace matmul de tres formas — como composición de mapas lineales, como suma de productos externos, como einsum. La misma operación, tres ángulos, para que Borja nunca tenga un momento de "no reconozco esta notación" en una fase posterior.
- Teoría 03 hace SVD: descomposición rotar-escalar-rotar, rango, aproximación de bajo rango, teorema de Eckart-Young. Aplicado a una matriz de conteos de conjugaciones
(20, 15). - Teoría 04 hace normas: normas vectoriales, normas matriciales, norma de operador, número de condición. La submultiplicatividad se deriva de la SVD.
- Laboratorios 00–03 te hacen hacer predicción de shapes, medición de rendimiento de matmul en tu i5-8250U, compresión SVD de una matriz de formas verbales y verificación de identidades de normas.
Lo que esta fase NO es¶
La Fase 3 no es un curso de álgebra lineal numérica. No derivamos el algoritmo QR. No implementamos SVD desde cero (queda fuera del valor educativo a esta escala). No estudiamos solvers iterativos (CG, GMRES). No tratamos formalmente problemas de autovalores de matrices no simétricas.
La Fase 3 es una fase de alfabetización e intuición: al final, puedes leer código de tensores, predecir shapes, anticipar coste y usar SVD como herramienta de pensamiento.
Detente aquí si¶
Estás tentado de saltarte la Fase 3 porque "estudié álgebra lineal en la universidad". No lo hagas. La versión universitaria se centró en calcular a mano inversas 2×2. La versión de IA (AI) se centra en aritmética de shapes (B, T, D) y el piso de precisión 1e-7 heredado de la Fase 2. Son habilidades distintas. La prueba es: ¿puedes leer einsum('bhqk,bhkd->bhqd', attn, v) y decir inmediatamente qué hace, qué shape sale y cuántos FLOPs cuesta? Si no, la Fase 3 es para ti.
Recapitulación en un párrafo¶
El álgebra lineal es el lenguaje de la mecánica de la IA (AI): los tensores son objetos tipados por shape, las operaciones matriciales son transformaciones tipadas, y los bugs son en su mayoría errores de tipo (shape). La Fase 3 te entrena a predecir shapes a partir de strings einsum, a derivar el rendimiento de matmul desde el roofline de la Fase 1, y a usar la SVD como herramienta de compresión de bajo rango y análisis — anclada al vocabulario de formas verbales del §A13 (codificaciones one-hot de 600 conjugaciones) y a las matrices de conteos de conjugaciones que el corpus posterior de Borja producirá.
Lo que esta fase NO cubre¶
- Gradientes / autograd (Fase 4, 7).
- Un módulo reutilizable
src/minigrad/linalg.py(Fase ⅞). - Algoritmos numéricos para la propia SVD (fuera de alcance).
- Matmul en GPU / cuBLAS / Triton (Fase 23+).
Siguiente: theory/01-tensors-and-shapes.md.