01 · Àlgebra lineal
Idea central: una xarxa neuronal és una pila de transformacions lineals amb no-linealitats entremig. Si entens què fa una matriu a un vector, entens el 70% de l'aritmètica d'un LLM.
1. Vectors: punts, direccions i significats# sense fórmules
Un vector és una llista ordenada de números. En deep learning té tres lectures simultànies:
- Punt en un espai de dimensions.
- Direcció + magnitud (fletxa des de l'origen).
- Representació ("embedding"): la codificació numèrica d'un concepte, token, imatge o usuari.
En un LLM, cada token es converteix en un vector de dimensions (típicament ). Tot el que passa després són operacions sobre aquests vectors.
Operacions bàsiques
El producte escalar (dot product) és l'operació més important de tot el camp:
Per què importa: el mecanisme d'atenció d'un Transformer és, essencialment, milions de productes escalars entre vectors query i key per decidir "què s'assembla a què". La cerca semàntica en un sistema RAG també és producte escalar entre embeddings.
Normes
| Norma | Fórmula | Ús típic |
|---|---|---|
| (euclidiana) | distància, weight decay, gradient clipping | |
| esparsitat (Lasso, SAEs) | ||
| límits de pertorbació (robustesa adversària) | ||
| Frobenius (matrius) | mida d'una matriu de pesos |
Similitud cosinus = producte escalar de vectors normalitzats:
Producte escalar i similitud cosinus
Quan ordenen igual la distància euclidiana i el cosinus, i quan no?
Arrossega les puntes dels dos vectors, o selecciona-les i mou-les amb les fletxes del teclat.
És el que fa una base de dades vectorial quan diu que fa servir cosinus.
Rànquing de documents contra la consulta
| Per cosinus | Per distància |
|---|---|
| 1. Doc B (1,000) | 1. Doc B (0,45) |
| 2. Doc A (1,000) | 2. Doc A (1,38) |
| 3. Doc C (0,851) | 3. Doc C (1,63) |
| 4. Doc D (0,666) | 4. Doc D (1,90) |
- xᵀy
- 3,660
- ‖x‖
- 2,341
- ‖y‖
- 2,285
- cos θ
- 0,6843
- angle
- 46,8°
- ‖x − y‖
- 1,838
Sense normalitzar, la magnitud del vector entra al rànquing. Aquí el document que guanya per cosinus és Doc B i el que guanya per distància és Doc B (avui coincideixen, però mou la consulta i deixaran de fer-ho). La magnitud d'un embedding sol correlacionar amb la longitud del text, i llavors contamina el resultat.
2. Matrius: funcions, no taules# sense fórmules
Una matriu és una funció lineal :
Aquesta segona lectura és la clau del deep learning: una capa lineal és un banc de detectors de patrons.
Transformació lineal 2D
Què li fa exactament una matriu 2×2 a l'espai? Edita-la i mira la graella, el cercle unitat i els vectors base.
- W·e₁ = (1,00, 0,00), norma 1,00
- W·e₂ = (1,00, 1,00), norma 1,41
- el·lipse: semieixos σ₁ i σ₂
- direccions pròpies
- det
- 1,000
- rang
- 2
- σ₁ / σ₂
- 1,62 / 0,62
- condició κ
- 2,6
- valors propis
- 1,00, 1,00
Multiplicació de matrius
- Cost: per , . Això és literalment on van els FLOPs d'entrenar un LLM.
- No commutativa: (compondre transformacions en ordre diferent dona resultats diferents).
- Associativa: — i l'ordre canvia el cost enormement. Aquest fet és la base de LoRA i de moltes optimitzacions.
Cost d'associativitat
(AB)C i A(BC) donen el mateix resultat. Quant costen?
- (AB)C
- 131,07 k MAC
- A(BC)
- 285,21 M MAC
- factor
- 2.176×
- AB intermèdia
- 16,00 entrades
- BC intermèdia
- 16,78 M entrades
El cost d'un producte (a×b)·(b×c) és a·b·c multiplicacions-acumulacions. Aquí:
- (AB)C = 1·4096·16 + 1·16·4096 = 65,54 k + 65,54 k = 131,07 k
- A(BC) = 4096·16·4096 + 1·4096·4096 = 268,44 M + 16,78 M = 285,21 M
Guanya (AB)C per un factor de 2.176. I a més, la forma perdedora ha de materialitzar en memòria una matriu de 16,78 M entrades.
Regla del comptable de dimensions
En codi de deep learning, el 90% dels bugs són de forma (shape). Escriu sempre les dimensions:
# Batch de B seqüències de L tokens, model de dimensió d
x = torch.randn(B, L, d) # entrada
W = torch.randn(d, 4*d) # projecció
h = x @ W # (B, L, 4d) ← matmul aplicat a l'última dim
3. Matrius especials# sense fórmules
| Tipus | Definició | On apareix |
|---|---|---|
| Identitat | connexions residuals | |
| Diagonal | només | escalat per canal (RMSNorm) |
| Simètrica | matrius de covariància, hessians | |
| Ortogonal | rotacions (RoPE!), inicialització | |
| Definida positiva | mínims locals, covariàncies |
Les matrius ortogonals preserven longituds i angles: . Per això RoPE (rotary position embeddings) codifica la posició rotant els vectors: no en destrueix la magnitud ni la informació semàntica, només en canvia la fase.
Galeria de matrius especials
Què conserva cada família de matrius? Mira la norma i l'angle abans i després.
- vectors originals i cercle unitat
- imatge del cercle
Norma abans → després
- (1,0, 0,0)1,000 → 1,000
- (0,7, 0,7)0,990 → 0,990
- (0,0, 1,0)1,000 → 1,000
- (-0,6, 0,8)1,000 → 1,000
- det
- 1,0000
- canvi màxim de norma
- 1,11·10⁻¹⁶
- angle abans
- 90,00°
- angle després
- 90,00°
- ‖QᵀQ − I‖∞
- 0
- valors propis
- complexos
4. Rang, espai columna i per què funciona LoRA# sense fórmules
El rang de és el nombre de columnes linealment independents = dimensió de l'espai imatge. Una matriu de rang té molta redundància: es pot escriure com
amb paràmetres en comptes de . Amb i : 131k paràmetres en comptes de 16,7M — 128× menys.
Això és exactament LoRA: en lloc d'actualitzar sencera durant el fine-tuning, aprens una actualització de rang baix i calcules . La hipòtesi empírica és que l'adaptació a una tasca nova té rang intrínsec baix, encara que el model no el tingui.
Calculadora de LoRA
Quants paràmetres entrenes realment quan fas LoRA amb rang r?
Els valors habituals van de 8 a 64. Per sobre de 128 ja gairebé no compensa.
L'actualització és (α/r)·BA = 2,000·BA. Molta gent fixa α = 2r.
- W sencera
- 16,78 M
- B i A
- 131,07 k
- % del total
- 0,781 %
- estalvi
- 128×
- memòria AdamW (W)
- 268,44 MB
- memòria AdamW (LoRA)
- 2,10 MB
B·A té exactament la mateixa forma que W: 4096 × 4096, és a dir 16,78 M números. El que és petit és el seu rang, com a molt 16 de 4096 possibles — i per això n'hi ha prou amb 131,07 k paràmetres per descriure-la. Aquest és l'error comú de la secció 4.
Amb d = 4096 i r = 16, el text diu 131k paràmetres contra 16,7M. Amb els valors actuals: 131,07 k contra 16,78 M, un factor 128,0×.
5. Valors i vectors propis# sense fórmules
Un vector propi és una direcció que la transformació no gira, només estira (per un factor ).
Per a matrius simètriques hi ha descomposició espectral: amb ortogonal.
Explorador espectral
Quines direccions no gira una matriu? Arrossega el vector fins que Ax quedi alineat amb x.
La matriu es manté simètrica: els valors propis són sempre reals.
Arrossega el punt blau (o mou-lo amb les fletxes) i mira quan la fletxa taronja Ax es posa exactament sobre la blava.
- λ₁
- 3,521
- λ₂
- 1,079
- condició κ
- 3,26
- quocient de Rayleigh
- 3,423
- |cos(x, Ax)|
- 0,99034
- tipus
- definida positiva
On importa:
- L'hessià de la pèrdua (matriu de segones derivades) és simètric; els seus valors propis descriuen la curvatura. Valors propis molt dispars → el paisatge és una vall estreta → SGD zigzagueja → per això calen momentum i Adam.
- Els valors propis de la matriu jacobiana recurrent expliquen per què els gradients de les RNN exploten () o s'esvaeixen ().
6. SVD: la descomposició universal# sense fórmules
Tota matriu real admet
amb ortogonals i diagonal amb valors singulars .
Teorema d'Eckart–Young: la millor aproximació de rang (en norma Frobenius o espectral) s'obté quedant-te amb els valors singulars més grans. Base de:
- PCA (l'SVD de les dades centrades),
- compressió de matrius de pesos,
- inicialització i anàlisi de LoRA,
- latent semantic analysis, l'avi conceptual dels embeddings,
- diagnòstic d'entrenament: l'espectre de valors singulars dels pesos diu si el model està "col·lapsant" a poques direccions.
import numpy as np
A = np.random.randn(200, 100)
U, S, Vt = np.linalg.svd(A, full_matrices=False)
k = 10
A_k = U[:, :k] @ np.diag(S[:k]) @ Vt[:k] # millor aproximació de rang 10
err = np.linalg.norm(A - A_k) / np.linalg.norm(A)
Explorador d'SVD
Quanta informació hi ha als primers valors singulars? Puja el rang i mira on deixes de notar la diferència.
De 64 components possibles.
- error relatiu
- 2,11 %
- energia retinguda
- 99,96 %
- σ₁ / σₖ
- 31,5 / 1,391
- números desats
- 774 de 4.096
- compressió
- 5,29×
7. Producte tensorial i broadcasting# sense fórmules
Els "tensors" del deep learning són arrays multidimensionals: = batch × longitud × caps × dimensió per cap. Dues regles pràctiques:
- Broadcasting: dimensions de mida 1 s'expandeixen automàticament.
(B,L,1) * (B,L,d)funciona. - einsum és el teu amic per no perdre't:
# atenció: scores[b,h,i,j] = sum_k q[b,h,i,k] * k[b,h,j,k]
scores = torch.einsum('bhik,bhjk->bhij', q, k) / math.sqrt(d_head)
Camp de proves de formes
Aquesta operació quadra? I si quadra, quina forma en surt i quant costa?
Sortida
(2, 8, 128, 128)
262.144 elements
Exemples
Forma de sortida: (2, 8, 128, 128). Cost: 16.777.216 multiplicacions-acumulacions.
- · b = 2
- · h = 8
- · i = 128
- · k = 64
- · j = 128
- · Índexs sumats (no surten a la sortida): k.
Cost: 16,78 M multiplicacions-acumulacions, que és el producte de TOTES les mides d'índex — també les que se sumen. Aquest número és el que decideix si una capa cap dins del teu pressupost de còmput.
8. Geometria dels espais d'alta dimensió# sense fórmules
Aquí la intuïció 3D et traeix. Fets contraintuïtius però crucials:
- Concentració de la mesura: en amb gran, dos vectors aleatoris són gairebé ortogonals amb probabilitat altíssima ().
Quasi-ortogonalitat en alta dimensió
Quants conceptes hi caben en un espai de d dimensions? Molts més que d. Puja la dimensió i mira què li passa a l'histograma.
- histograma empíric (3 k parelles)
- N(0, 1/d) teòrica
- franja de 90° ± 5°
Escala logarítmica: de 2 fins a 2048.
La mateixa llavor dona sempre el mateix resultat.
- mitjana empírica
- -0,0016
- desviació empírica
- 0,1242
- teòrica 1/√d
- 0,1250
- |cos| màxim vist
- 0,446
- parells a 90° ± 5°
- 51,8 %
- Per això un espai de dimensió pot contenir exponencialment moltes direccions gairebé ortogonals (lema de Johnson–Lindenstrauss). Aquesta és la base de la superposició: un model amb pot representar molts més de 4096 conceptes, cadascun en una direcció quasi-ortogonal. Ho veuràs al fitxer 26 — Interpretabilitatpendent.
- El volum es concentra a l'escorça: gairebé tota la massa d'una hiperesfera és a prop de la superfície. Per això normalitzar vectors aleatoris gairebé no els mou: ja vivien a prop de l'escorça. En embeddings apresos és diferent, perquè la norma pot portar informació (vegeu la secció 1), i normalitzar-los la llença.
- La "maledicció de la dimensionalitat" fa que la cerca exacta del veí més proper sigui inviable → per això els índexs vectorials (HNSW, IVF-PQ) són aproximats.
9. Comprova que ho has entès#
0 de 5 resoltes
- Per què la similitud cosinus és insensible a la magnitud i quan és un problema?
- Si i fas LoRA amb , quants paràmetres entrenes?paràmetresMarge acceptat: 0,1 %
- Per què pot costar molt menys que ? Troba unes formes on la diferència sigui de més de 100×.
Objectiu:Configura el widget de cost d'associativitat amb unes formes on un dels dos ordres costi més de 100 vegades l'altre.
Vés al widget ↑dims = per defecte - Què li passa a un vector quan el multipliques per una matriu ortogonal? Per què això fa RoPE una bona idea?
- En un espai de 4096 dimensions, dos vectors aleatoris tenen un cosinus típic d'aproximadament quin ordre de magnitud?Marge acceptat: 15 %
10. Recursos#
3Blue1Brown, Essence of Linear Algebra — la millor intuïció visual que existeix.
Gilbert Strang, Introduction to Linear Algebra + les classes 18.06 del MIT (OCW).
Mathematics for Machine Learning (Deisenroth, Faisal, Ong) — gratuït, capítols 2–4.
The Matrix Cookbook — referència d'identitats i derivades matricials.
Johnson–Lindenstrauss lemma, i Toy Models of Superposition (Anthropic, 2022) per veure la geometria en acció.