Salta al contingut
Entendre els LLMs
Bloc 1fonaments3-4 h
IntuïtiuMatemàtic

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 x∈Rd\mathbf{x} \in \mathbb{R}^d és una llista ordenada de dd números. En deep learning té tres lectures simultànies:

  1. Punt en un espai de dd dimensions.
  2. Direcció + magnitud (fletxa des de l'origen).
  3. Representació ("embedding"): la codificació numèrica d'un concepte, token, imatge o usuari.

En un LLM, cada token es converteix en un vector de dd dimensions (típicament d∈[2048,16384]d \in [2048, 16384]). Tot el que passa després són operacions sobre aquests vectors.

Operacions bàsiques

x+y,αx,x⊤y=∑i=1dxiyi\mathbf{x} + \mathbf{y}, \quad \alpha\mathbf{x}, \quad \mathbf{x}^\top \mathbf{y} = \sum_{i=1}^{d} x_i y_i

El producte escalar (dot product) és l'operació més important de tot el camp:

x⊤y=∥x∥ ∥y∥cos⁡θ\mathbf{x}^\top \mathbf{y} = \|\mathbf{x}\| \, \|\mathbf{y}\| \cos\theta

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

NormaFórmulaÚs típic
ℓ2\ell_2 (euclidiana)∥x∥2=∑xi2\lVert\mathbf{x}\rVert_2 = \sqrt{\sum x_i^2}distància, weight decay, gradient clipping
ℓ1\ell_1∥x∥1=∑∣xi∣\lVert\mathbf{x}\rVert_1 = \sum \lvert x_i \rvertesparsitat (Lasso, SAEs)
ℓ∞\ell_\inftymax⁡i∣xi∣\max_i \lvert x_i \rvertlímits de pertorbació (robustesa adversària)
Frobenius (matrius)∥W∥F=∑ijWij2\lVert\mathbf{W}\rVert_F = \sqrt{\sum_{ij} W_{ij}^2}mida d'una matriu de pesos

Similitud cosinus = producte escalar de vectors normalitzats:

cos(x,y)=x⊤y∥x∥∥y∥∈[−1,1]\text{cos}(\mathbf{x}, \mathbf{y}) = \frac{\mathbf{x}^\top\mathbf{y}}{\|\mathbf{x}\|\|\mathbf{y}\|} \in [-1, 1]

Producte escalar i similitud cosinus

Quan ordenen igual la distància euclidiana i el cosinus, i quan no?

Doc ADoc BDoc CDoc Dxy

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 cosinusPer 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
Els dos criteris ordenen igual

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.

Aquest és l'error comú de la secció 1: triar la mètrica de la base de dades vectorial sense mirar si els embeddings estan normalitzats. Activa i desactiva la casella amb els documents a la vista.

2. Matrius: funcions, no taules# sense fórmules

Una matriu W∈Rm×n\mathbf{W} \in \mathbb{R}^{m \times n} és una funció lineal Rn→Rm\mathbb{R}^n \to \mathbb{R}^m:

y=Wx,yi=∑j=1nWijxj\mathbf{y} = \mathbf{W}\mathbf{x}, \qquad y_i = \sum_{j=1}^{n} W_{ij} x_j

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₁W·e₂
  • 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
Matriu W
Casos típics
det
1,000
rang
2
σ₁ / σ₂
1,62 / 0,62
condició κ
2,6
valors propis
1,00, 1,00
El determinant és, literalment, l'àrea
L'àrea del quadrat unitat transformat, mesurada amb la fórmula del polígon sobre els seus quatre vèrtexs, val 1,0000. El determinant calculat com ad − bc val 1,0000. Són dues maneres independents d'arribar al mateix número.
Un sol vector propi (l’eix x), repetit: la matriu no és diagonalitzable.

Multiplicació de matrius

(AB)ij=∑kAikBkj(\mathbf{AB})_{ij} = \sum_k A_{ik}B_{kj}
  • Cost: O(mnp)O(mnp) per A∈Rm×n\mathbf{A}\in\mathbb{R}^{m\times n}, B∈Rn×p\mathbf{B}\in\mathbb{R}^{n\times p}. Això és literalment on van els FLOPs d'entrenar un LLM.
  • No commutativa: AB≠BA\mathbf{AB} \neq \mathbf{BA} (compondre transformacions en ordre diferent dona resultats diferents).
  • Associativa: (AB)C=A(BC)(\mathbf{AB})\mathbf{C} = \mathbf{A}(\mathbf{BC}) — 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?

A 1×4096
B 4096×16
C 16×4096
(AB)C
131,07 k
A(BC)
285,21 M
Casos reals
(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
Les dues formes donen el mateix resultat; el compilador no ho decideix per tu

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.

x·(B·A) amb x un vector de 4096 i rang 16. Fer primer B·A materialitza una matriu de 16,7M entrades; fer primer x·B no en materialitza cap.

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

TipusDefinicióOn apareix
IdentitatIx=x\mathbf{I}\mathbf{x} = \mathbf{x}connexions residuals
Diagonalnomés dii≠0d_{ii} \neq 0escalat per canal (RMSNorm)
SimètricaA=A⊤\mathbf{A} = \mathbf{A}^\topmatrius de covariància, hessians
OrtogonalQ⊤Q=I\mathbf{Q}^\top\mathbf{Q} = \mathbf{I}rotacions (RoPE!), inicialització
Definida positivax⊤Ax>0  ∀x≠0\mathbf{x}^\top\mathbf{A}\mathbf{x} > 0 \;\forall \mathbf{x}\neq 0mínims locals, covariàncies

Les matrius ortogonals preserven longituds i angles: ∥Qx∥=∥x∥\|\mathbf{Q}\mathbf{x}\| = \|\mathbf{x}\|. 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
Família
52°

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
Isometria verificada numèricament
QᵀQ − I té totes les entrades per sota de 0, i cap dels quatre vectors de prova canvia de norma més enllà de 1,11·10⁻¹⁶. L'angle entre dos d'ells es conserva fins a 0 radians. Això és el que fa que RoPE sigui una bona idea: pots codificar la posició girant el vector sense tocar-ne ni la magnitud ni els productes escalars relatius.
QᵀQ = I: preserva longituds i angles. Per això RoPE codifica la posició rotant els vectors — no destrueix ni la magnitud ni la informació semàntica, només la fase.

4. Rang, espai columna i per què funciona LoRA# sense fórmules

El rang de W\mathbf{W} és el nombre de columnes linealment independents = dimensió de l'espai imatge. Una matriu d×dd \times d de rang r≪dr \ll d té molta redundància: es pot escriure com

W=BA,B∈Rd×r,  A∈Rr×d\mathbf{W} = \mathbf{B}\mathbf{A}, \qquad \mathbf{B}\in\mathbb{R}^{d\times r},\; \mathbf{A}\in\mathbb{R}^{r\times d}

amb 2dr2dr paràmetres en comptes de d2d^2. Amb d=4096d=4096 i r=16r=16: 131k paràmetres en comptes de 16,7M — 128× menys.

Això és exactament LoRA: en lloc d'actualitzar W\mathbf{W} sencera durant el fine-tuning, aprens una actualització de rang baix ΔW=BA\Delta\mathbf{W} = \mathbf{B}\mathbf{A} i calcules W′=W+αrBA\mathbf{W}' = \mathbf{W} + \frac{\alpha}{r}\mathbf{B}\mathbf{A}. 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?

W (4096 × 4096)16.8 Mcongelada durant el fine-tuning+B4096 × 16A16 × 4096ΔW = B·A4096 × 4096rang ≤ 16
Les dues bandes B i A són el que entrenes. El seu producte torna a tenir la forma de W, però només pot moure's dins d'un subespai de dimensió 16.
16

Els valors habituals van de 8 a 64. Per sobre de 128 ja gairebé no compensa.

32

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
La matriu petita no és petita: ho és el nombre de graus de llibertat

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

La hipòtesi empírica de LoRA és que adaptar-se a una tasca nova té rang intrínsec baix, encara que el model no el tingui. Si r és massa petit per a la teva tasca, la pèrdua d'entrenament es quedarà en un terrat.

5. Valors i vectors propis# sense fórmules

Av=λv\mathbf{A}\mathbf{v} = \lambda \mathbf{v}

Un vector propi és una direcció que la transformació no gira, només estira (per un factor λ\lambda).

Per a matrius simètriques hi ha descomposició espectral: A=QΛQ⊤\mathbf{A} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top amb Q\mathbf{Q} ortogonal.

Explorador espectral

Quines direccions no gira una matriu? Arrossega el vector fins que Ax quedi alineat amb x.

λ=3,52λ=1,08Axx
3,00
1,00

La matriu es manté simètrica: els valors propis són sempre reals.

1,60

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
El quocient de Rayleigh queda atrapat entre els dos valors propis
El quocient de Rayleigh val 3,4226 i viu entre 1,0793 i 3,5207, com garanteix la teoria. Només arriba als extrems quan x és exactament un vector propi — prova-ho posant el punt sobre una de les línies puntejades.
Els valors propis de l'hessià descriuen la curvatura. Amb κ = 3,3, la vall és prou rodona i el descens pur hi anirà bé. Ho recuperaràs al widget de condicionament del fitxer 02.

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 (∣λ∣>1|\lambda|>1) o s'esvaeixen (∣λ∣<1|\lambda|<1).

6. SVD: la descomposició universal# sense fórmules

Tota matriu real A∈Rm×n\mathbf{A}\in\mathbb{R}^{m\times n} admet

A=UΣV⊤\mathbf{A} = \mathbf{U}\mathbf{\Sigma}\mathbf{V}^\top

amb U,V\mathbf{U}, \mathbf{V} ortogonals i Σ\mathbf{\Sigma} diagonal amb valors singulars σ1≥σ2≥⋯≥0\sigma_1 \geq \sigma_2 \geq \dots \geq 0.

Teorema d'Eckart–Young: la millor aproximació de rang kk (en norma Frobenius o espectral) s'obté quedant-te amb els kk 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.

Original
Rang 6
k = 6
L'escala és logarítmica: una caiguda recta vol dir decaïment exponencial, i un espectre pla vol dir que no hi ha res a comprimir.
Imatge
6

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×
Eckart–Young: cap aproximació de rang k ho fa millor
Error mesurat sobre la reconstrucció: 2.1127477842e-2. Fita teòrica √(Σ_(i>k) σᵢ² / Σ σᵢ²): 2.1127477842e-2. Coincideixen fins a l'última xifra, que és el que diu el teorema: quedar-se els k valors singulars més grans no és una bona heurística, és l'òptim en norma de Frobenius.
Les corbes no s’alineen amb els eixos, i per això calen bastants més components.

7. Producte tensorial i broadcasting# sense fórmules

Els "tensors" del deep learning són arrays multidimensionals: (B,L,H,dh)(B, L, H, d_h) = batch × longitud × caps × dimensió per cap. Dues regles pràctiques:

  1. Broadcasting: dimensions de mida 1 s'expandeixen automàticament. (B,L,1) * (B,L,d) funciona.
  2. 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

Operació

Exemples

L’operació quadra

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.

El 90% dels bugs de deep learning són de forma. Aquí pots equivocar-te sense esperar deu minuts que peti l’entrenament.

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 Rd\mathbb{R}^d amb dd gran, dos vectors aleatoris són gairebé ortogonals amb probabilitat altíssima (cos⁡θ≈0±1/d\cos\theta \approx 0 \pm 1/\sqrt{d}).

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°
64

Escala logarítmica: de 2 fins a 2048.

3 k

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 %
La corba teòrica no és decoració
La desviació mesurada sobre 3 k parelles val 0,12419; la teoria diu 1/√d = 0,12500. Diferència relativa: 0,65 %, consistent amb l'error de mostreig esperat de 1,29 % amb aquesta mida de mostra.
Amb d = 64 l'histograma encara és ample: dos vectors aleatoris tenen força probabilitat d'assemblar-se. Puja la dimensió i mira com es prem al voltant de zero — la caiguda va com 1/√d, de manera que cal multiplicar d per 4 per estrènyer-lo a la meitat.
  • Per això un espai de dimensió dd pot contenir exponencialment moltes direccions gairebé ortogonals (lema de Johnson–Lindenstrauss). Aquesta és la base de la superposició: un model amb d=4096d=4096 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

  1. Per què la similitud cosinus és insensible a la magnitud i quan és un problema?
  2. Si W∈R4096×4096\mathbf{W}\in\mathbb{R}^{4096\times 4096} i fas LoRA amb r=8r=8, quants paràmetres entrenes?
    paràmetresMarge acceptat: 0,1 %
  3. Per què (AB)C(\mathbf{AB})\mathbf{C} pot costar molt menys que A(BC)\mathbf{A}(\mathbf{BC})? 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
  4. Què li passa a un vector quan el multipliques per una matriu ortogonal? Per què això fa RoPE una bona idea?
  5. 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#

Marca els que hagis llegit
  • 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ó.