Skip to content

English · Español

05 — LoRA sobre el Mini-GPT real: ΔW = BA, conteo exacto de parámetros, compromiso de rank

🇪🇸 La theory 02-parameter-count.md usa h=768 como ejemplo genérico (escala GPT-2). Este archivo aplica la misma derivación al Mini-GPT real (d_model=64, d_ff=256, n_layers=2) y calcula el conteo exacto de parámetros LoRA para los ranks que vamos a entrenar. También deriva el régimen rank-vs-accuracy con cifras.

Anclas: Fase 17 lab/02-parameter-inventory.md (Mini-GPT total = 103 680), esta fase theory/02-parameter-count.md (la derivación genérica).


ΔW = BA, escrito en detalle

LoRA reparametriza la actualización de pesos para una capa Linear W ∈ ℝ^(out × in):

\[ W_{\text{eff}} = W + \frac{\alpha}{r} \, B A, \qquad B \in \mathbb{R}^{\text{out} \times r}, \quad A \in \mathbb{R}^{r \times \text{in}} \]

con B inicializado a cero y A inicializado a valores aleatorios pequeños. Tres invariantes son innegociables:

  1. Restricción de rank. rank(BA) ≤ r. La actualización vive en un subespacio r-dimensional del espacio completo de pesos out × in.
  2. Invariancia en el paso 0. B = 0 en init significa que BA = 0 y el modelo con LoRA produce salidas idénticas a la base en el primer forward pass.
  3. Desacoplo del escalado. α/r mantiene la magnitud efectiva de la actualización aproximadamente constante a medida que varía r, de modo que ajustar α no necesita seguir a r.

El camino sin LoRA mantiene los out × in parámetros completos; el camino LoRA añade r × (in + out) parámetros entrenables y congela todo lo demás (frozen weights).

Inventario real de Linears de Mini-GPT

A partir del inventario de parámetros de la Fase 17:

Capa Forma (out, in) Params Notas
block_0.attn.W_q (64, 64) 4 096 sin bias
block_0.attn.W_k (64, 64) 4 096 sin bias
block_0.attn.W_v (64, 64) 4 096 sin bias
block_0.attn.W_o (64, 64) 4 096 sin bias
block_0.ffn.W_1 (256, 64) 16 384 + 256 bias
block_0.ffn.W_2 (64, 256) 16 384 + 64 bias
block_1.attn.{Q,K,V,O} (64, 64) ×4 16 384
block_1.ffn.W_1 (256, 64) 16 384 + 256 bias
block_1.ffn.W_2 (64, 256) 16 384 + 64 bias
Total Linear 98 304 + 640 bias = 98 944
Embedding (tied) (64, 64) 4 096 no se le aplica LoRA
LayerNorms varias 640 no se les aplica LoRA
Total del modelo 103 680 coincide con la Fase 17

Apuntamos a las 12 capas Linear para LoRA — la convención de QLoRA. Embeddings y LayerNorms se quedan congelados (frozen weights, práctica estándar).

Conteo exacto de parámetros LoRA por rank

Para un Linear de forma (out, in), LoRA añade r × (in + out) parámetros entrenables.

Linears de atención (out = in = 64)

Por Linear con rank r: r × (64 + 64) = 128 r. Ocho Linears de atención en total (4 por bloque × 2 bloques). Suma: 8 × 128 r = 1024 r.

Linears FFN W_1 (out = 256, in = 64)

Por Linear con rank r: r × (64 + 256) = 320 r. Dos en total (uno por bloque). Suma: 2 × 320 r = 640 r.

Linears FFN W_2 (out = 64, in = 256)

Por Linear con rank r: r × (256 + 64) = 320 r. Dos en total. Suma: 640 r.

Total de parámetros LoRA entrenables

\[ N_{\text{LoRA}}(r) = 1024 r + 640 r + 640 r = 2304 \, r \]

Sustituyendo:

Rank r Params LoRA Fracción de 103 680 Fracción de 98 944 (sólo Linears)
1 2 304 2.22% 2.33%
2 4 608 4.44% 4.66%
4 9 216 8.89% 9.31%
8 18 432 17.78% 18.63%
16 36 864 35.56% 37.26%
32 73 728 71.11% 74.51%
64 147 456 142.22% (¡lo excede!) 149.02%

Con r = 64, LoRA tiene más parámetros que full FT — porque para r ≥ min(in, out) de una capa cuadrada, la descomposición LoRA tiene la misma capacidad que full FT pero la escribe como dos matrices. Por tanto, la afirmación de "LoRA es eficiente en parámetros" se sostiene sólo hasta aproximadamente r ≤ min(in, out) / 2.

Para la tarea del tutor de gramática §A13, las elecciones canónicas son r = 4 o r = 8 — pequeñas suficientes para ser eficientes, grandes suficientes para expresar las actualizaciones específicas de verbos irregulares.

Por qué los modelos más grandes se benefician más (Mini-GPT es inusualmente desfavorable para LoRA)

Recordando la fórmula del archivo de theory 02-parameter-count.md: ratio por capa = 1.5 r / h. Para:

  • Mini-GPT (h = 64): ratio = 1.5 × 8 / 64 = 0.19 → 19% por Linear cuadrado con r = 8. Enorme para los estándares de LoRA.
  • LLaMA-7B (h = 4096): ratio = 1.5 × 8 / 4096 = 0.003 → 0.3%.
  • LLaMA-70B (h = 8192): ratio = 0.0015 → 0.15%.

Mini-GPT es lo bastante pequeño como para que la eficiencia relativa de LoRA sea mediocre. Lo usamos de todos modos porque:

  1. Pedagogía: el compromiso de rank es medible en un modelo diminuto.
  2. Viabilidad en CPU: incluso LoRA con rank-8 sobre Mini-GPT entrena en segundos en el i5-8250U de Borja; rank-8 sobre LLaMA-7B no.
  3. Claridad conceptual: la fórmula 2304 r está en forma cerrada y se puede verificar a mano.

Para la práctica de la Fase 28 usamos r = 8 por defecto. El tutor de gramática de la Fase 32 usará el mismo rank.

El régimen rank-vs-accuracy (predicciones, no mediciones)

Accuracy de LoRA en el ajuste fino sobre verbos irregulares §A13, esperada:

Rank r Params LoRA Accuracy esperada en eval (verbos irreg.) Notas
0 0 0 accuracy base degenerado — sin actualización posible (ver ejercicio /break)
1 2 304 60-70% actualización unidimensional; no basta para 8 irregulares
2 4 608 75-85% empieza a ajustarse
4 9 216 88-93% sweet spot
8 18 432 92-95% sweet spot; por defecto
16 36 864 93-95% rendimientos decrecientes
32 73 728 93-95% sobreajusta (overfitting) el pequeño conjunto irreg.

Patrón empírico del paper de LoRA (Hu et al., 2021): la curva de accuracy se satura rápido alrededor de r = 8. El DoD de la Fase 28 te pide reproducir esta forma de saturación en Mini-GPT — los números absolutos cambiarán, pero la forma no.

El "sweet spot en r = 8" es específico de la tarea. Para actualizaciones más complejas (p. ej., un cambio de dominio de inglés a español, no sólo corrección de verbos irregulares), un r mayor ayuda hasta que efectivamente estás haciendo full FT.

Cuán grande es el checkpoint

Un checkpoint LoRA con rank r en fp16 ocupa 2 × N_LoRA(r) bytes:

Rank r Params LoRA Bytes fp16 vs base Mini-GPT (103 680 × 4 = 414 720)
4 9 216 18 432 (≈ 18 KiB) 4.4%
8 18 432 36 864 (≈ 36 KiB) 8.9%
16 36 864 73 728 (≈ 72 KiB) 17.8%

Incluso rank-16 cabe cómodamente en el mismo orden de magnitud que la base; podrías distribuir 30 cabezales de adapter distintos por el mismo coste en disco que una sola copia de Mini-GPT.

Citas

  • Hu, Shen, Wallis, Allen-Zhu, Li, Wang, Wang, Chen. LoRA: Low-Rank Adaptation of Large Language Models. ICLR 2022. arXiv:2106.09685.
  • Dettmers, Pagnoni, Holtzman, Zettlemoyer. QLoRA: Efficient Finetuning of Quantized LLMs. NeurIPS 2023. arXiv:2305.14314.

Recapitulación en un párrafo

Para Mini-GPT, el conteo en forma cerrada de parámetros LoRA sobre las 12 capas Linear es exactamente 2304 × r parámetros entrenables; con el rank por defecto r = 8 son 18 432 params, ≈ 18% del modelo. La eficiencia relativa es desfavorable porque la dimensión oculta de Mini-GPT es pequeña — los transformers de producción ven fracciones entrenables del 0.1-0.3% para el mismo rank. La curva rank-vs-accuracy se satura alrededor de r = 8 en el ajuste fino sobre verbos irregulares §A13; esa forma de saturación es la firma empírica que deberías reproducir. La inicialización B = 0 asegura que el modelo arranca igual que la base; el escalado α/r desacopla la magnitud de la actualización de la elección de rank. El resultado: un parámetro robusto y predecible cuyas matemáticas puedes verificar a mano.

Siguiente: lab/00-lora-by-hand.md para implementar LoRALinear y verificar el conteo.