Skip to content

English · Español

03 — La SVD como rotar-escalar-rotar

🇪🇸 Cualquier matriz se factoriza como A = UΣV^T: rotar, escalar, rotar. Esa descomposición unifica PCA, LoRA, compresión, condicionamiento y normas. La intuición geométrica vale más que el algoritmo. Aplicación concreta: comprimir la matriz (20 verbos × 15 formas) de cuentas de conjugación del §A13 usando los k valores singulares más grandes.


El teorema

Para cualquier matriz real A de shape (M, N), existen:

  • Una matriz ortogonal U (M, M) (las columnas son una base ortonormal de R^M).
  • Una matriz "diagonal" Σ (M, N) (cero fuera de la diagonal principal, con valores singulares no negativos σ_1 ≥ σ_2 ≥ ... ≥ 0 en la diagonal).
  • Una matriz ortogonal V (N, N) (las columnas son una base ortonormal de R^N).

Tales que:

\[ A = U \Sigma V^T \]

Esta es la Descomposición en Valores Singulares (Singular Value Decomposition). Existe para toda matriz (incluidas no cuadradas, incluidas con rango deficiente, incluida la matriz cero).

La imagen geométrica

U, Σ y V^T cada una tiene una interpretación geométrica limpia:

  1. V^T rota el espacio de entrada. Las matrices ortogonales preservan longitudes y ángulos; son rotaciones rígidas (más reflexiones). V^T rota R^N a una base donde la acción de A está alineada con los ejes.
  2. Σ escala a lo largo de los nuevos ejes. Cada eje se estira por un factor σ_i ≥ 0. Los ejes con σ_i = 0 se colapsan — los vectores a lo largo de ellos se envían a cero.
  3. U rota el espacio de salida. Tras escalar, rota de nuevo para aterrizar en R^M.

Así que A es siempre una rotación, luego un escalado, luego otra rotación. Tres pasos. Ese es todo el contenido geométrico de los mapas lineales.

entrada R^N    ──V^T──>    espacio escalado    ──Σ──>    R^M rotado    ──U──>    salida R^M
   x                       V^T x                          Σ V^T x                 U Σ V^T x = A x

Valores singulares y el espectro

Los σ_i son no negativos, ordenados σ_1 ≥ σ_2 ≥ ... ≥ 0. El número de valores singulares no nulos es el rango de A. Geométricamente: el rango es la dimensionalidad del subespacio de salida.

Una matriz 5×5 con los 5 σ > 0 es de rango completo (su imagen es todo R^5). Una matriz 5×5 con σ_5 = 0 es de rango 4 (su imagen es un subespacio 4-D).

En la práctica, "rango" es un entero quisquilloso; "rango efectivo" — el número de σ por encima de un umbral de ruido — es el concepto útil. La SVD te permite calcular ambos.

Aproximación de bajo rango — el teorema de Eckart-Young

Trunca la SVD en los k valores singulares principales:

\[ A_k = U_{:, :k} \Sigma_{:k, :k} V_{:, :k}^T \]

Donde U_{:, :k} son las primeras k columnas de U, Σ_{:k, :k} es el bloque superior-izquierdo k × k, y V_{:, :k} son las primeras k columnas de V.

Eckart-Young: A_k es la mejor aproximación de rango-k a A tanto en la norma de Frobenius como en la norma de operador. Ninguna otra matriz de rango-k tiene menor error.

El error tiene forma cerrada:

\[ \|A - A_k\|_F = \sqrt{\sum_{i=k+1}^{\min(M, N)} \sigma_i^2} \]
\[ \|A - A_k\|_2 = \sigma_{k+1} \]

Por esto la SVD es el fundamento teórico de:

  • PCA — quedarse con los top-k componentes principales (autovectores de la matriz de covarianza; equivalentemente, los top-k vectores singulares izquierdos de la matriz de datos centrada).
  • LoRA (Fase 28) — representar una actualización de pesos ΔW como producto de dos matrices delgadas B @ A donde B.shape = (D, r), A.shape = (r, D). Esto es exactamente la factorización de rango-r.
  • Compresión de imagen / datos — almacenar U_{:k}, Σ_{:k}, V_{:k} en lugar de la matriz completa; reconstruir con A_k.
  • Análisis espectral — los σ grandes corresponden a patrones dominantes; los σ pequeños corresponden a ruido.

La aplicación §A13 — comprimir una matriz de conteos de conjugaciones

Construye una matriz C (20 verbos, 15 formas):

  • Filas: los 20 verbos del §A13 (12 regulares + 8 irregulares).
  • Columnas: las 15 conjugaciones = 5 tiempos × 3 personas.
  • Entrada C[i, j]: conteo de cuántas veces el verbo i aparece en la forma j en un corpus (sintético, para la Fase 3) de 10,000 frases.

¿Qué revela la SVD de C?

  • σ_1 será grande — captura el eje general de "los verbos más comunes aparecen en todas las formas más a menudo".
  • σ_2 y σ_3 capturarán patrones estructurales: por ejemplo, "los verbos irregulares se agrupan distinto que los regulares", o "las formas en pasado son más frecuentes que las futuras".
  • Los σ_i restantes decaen rápido — la mayor parte de C se captura con ~3-5 triples singulares.

Esta es cualitativamente la misma observación que motivó word embeddings (Word2Vec, GloVe): las matrices de co-ocurrencia del lenguaje natural tienen rango efectivo bajo, así que un embedding compacto captura la mayor parte de la estructura. La Fase 13 se construye directamente sobre esto.

El Lab 02 te hace hacer esta compresión y visualizar el decaimiento de valores singulares.

Ratio de compresión

Almacenar la matriz completa (M, N): M × N números. Almacenar la SVD de rango-k: M × k + k + k × N ≈ k × (M + N) números.

Para nuestra matriz (20, 15) con k = 3:

  • Completa: 300 números.
  • SVD de rango-3: 3 × (20 + 15) = 105 números.
  • Ratio de compresión: ~2.9×.

Para matrices más grandes, la ganancia es mayor. LoRA de la Fase 28: una matriz de pesos (D, D) con r = 8, D = 64 — completa es 4096, LoRA es 8 × 128 = 1024. 4× de compresión para el adaptador. Para D = 4096 mayor, completa es 16.8M, LoRA con r = 8 es 65K260× de compresión.

SVD vs descomposición en autovalores

Para matrices simétricas, la SVD y la descomposición en autovalores coinciden (salvo signos): A = QΛQ^T donde Q es ortogonal y Λ es la diagonal de autovalores. Los valores singulares son |λ_i|, ordenados en orden decreciente.

Para matrices no simétricas (o no cuadradas), la descomposición en autovalores o no existe o implica números complejos, mientras que la SVD siempre existe y es real. Para ML, la SVD es la herramienta correcta el 95% del tiempo.

La excepción: PCA vía descomposición en autovalores de la matriz de covarianza a veces es más rápido que SVD de la matriz de datos cuando N >> D (muchas muestras, pocas features). Para todo lo demás, SVD gana por generalidad.

Estabilidad numérica

np.linalg.svd es numéricamente estable para cualquier matriz — no forma la matriz de Gram (potencialmente mal condicionada) A^T A. Internamente, usa reflexiones de Householder + rotaciones de Givens para bidiagonalizar, luego una SVD bidiagonal divide-y-vencerás o basada en QR.

Para los propósitos de Borja:

  • Llama siempre a np.linalg.svd(A, full_matrices=False) para obtener la SVD "delgada": U de shape (M, K), S de longitud K, V^T de shape (K, N), donde K = min(M, N). Ahorra memoria y cómputo.
  • Los valores singulares se devuelven en orden decreciente, así que S[0] es el mayor. No los ordenes tú mismo.
  • Ambigüedad de signo: (U_i, V_i) y (-U_i, -V_i) dan la misma A. np.linalg.svd hace una elección canónica (la entrada de mayor valor absoluto de U es positiva), pero distintas librerías pueden diferir. No compares vectores singulares individuales entre implementaciones sin tener en cuenta el signo.

Submultiplicatividad y ||Ax|| ≤ ||A|| · ||x||

Usando la SVD, deriva la desigualdad de la norma de operador:

\[ \|Ax\|_2 = \|U\Sigma V^T x\|_2 \]

Como U es ortogonal (preserva normas): ||U y||_2 = ||y||_2 para cualquier y. Por tanto:

\[ \|Ax\|_2 = \|\Sigma V^T x\|_2 \]

Sea z = V^T x. Como V también es ortogonal, ||z||_2 = ||x||_2.

\[ \|Ax\|_2 = \|\Sigma z\|_2 = \sqrt{\sum_i \sigma_i^2 z_i^2} \leq \sqrt{\sigma_1^2 \sum_i z_i^2} = \sigma_1 \|z\|_2 = \sigma_1 \|x\|_2 \]

La igualdad se alcanza cuando z = e_1 (es decir, x = V e_1, el primer vector singular derecho). Así que la norma de operador ||A||_2 es exactamente σ_1, el mayor valor singular.

Esta es la desigualdad canónica de "submultiplicatividad". La teoría 04-norms-and-conditioning.md la extiende a productos matriz-matriz.

Problemas de práctica

Soluciones en solutions/03-svd-and-rank-ref.md (apertura de fase).

  1. Calcula a mano la SVD de A = [[1, 0], [0, 2]]. (Trivial — ya es diagonal.)
  2. La matriz de conteos de conjugaciones §A13 C es (20, 15). ¿Cuál es el rango máximo posible? ¿Qué significa que C sea de rango completo? ¿Qué significaría que C tuviera rango 1?
  3. Muestra que si A = UΣV^T es la SVD de A, entonces A^T A = V Σ^2 V^T (que es la descomposición en autovalores de la matriz de Gram). ¿Cuáles son los autovalores de A^T A?
  4. La norma de Frobenius de A es √(Σ σ_i²). Muéstralo a partir de la SVD.
  5. Dada una aproximación SVD de rango-3 A_3 a una matriz (20, 15), ¿qué fracción de ||A||_F² captura A_3? Exprésalo como fórmula en términos de σ.
  6. LoRA representa una actualización de pesos ΔW.shape = (D, D) como ΔW = B @ A con B.shape = (D, r), A.shape = (r, D). ¿A qué corresponde r en términos de SVD? ¿Qué rango puede tener ΔW?

Recapitulación en un párrafo

La SVD factoriza cualquier matriz A como U Σ V^T: rota la entrada, escala a lo largo de ejes principales, rota la salida. Los valores singulares son los factores de escalado; su número por encima de cero es el rango; los top-k dan la aproximación óptima de rango-k (Eckart-Young). La SVD unifica PCA, LoRA, compresión de bajo rango, análisis del número de condición y la demostración de submultiplicatividad. Para la matriz de conteos de conjugaciones §A13, el espectro revela que la co-ocurrencia en lenguaje natural es de rango efectivo bajo — el fundamento del aprendizaje de embeddings (Fase 13).

Lo que esta página NO cubre

  • El algoritmo para calcular SVD (Householder + QR). Usamos np.linalg.svd.
  • SVD truncada/randomizada para matrices enormes. Fuera de alcance.
  • Métodos iterativos (Lanczos, ARPACK). Fuera de alcance.
  • Conexión entre SVD y la descomposición de Schmidt en información cuántica. Fuera de alcance.

Siguiente: theory/04-norms-and-conditioning.md.