ИнтВиз

Линейная алгебра · модуль 6 из 14

SVD: сжатие изображения матрицей низкого ранга

Чёрно-белая картинка 96×96 — это матрица яркостей. Сингулярное разложение A = UΣVᵀ раскладывает её на слои по убыванию важности. Оставьте k первых слоёв и сравните результат с оригиналом.

Оригинал
Сжатое
  • сохранённые σᵢ
  • отброшенные σᵢ (лог. шкала)

Теория

Чёрно-белое изображение размером $m \times n$ — это матрица яркостей $A$. Любая вещественная матрица имеет сингулярное разложение:

$$ A = U \Sigma V^{\mathsf T} = \sum_{i=1}^{r} \sigma_i \, u_i v_i^{\mathsf T}, $$

где $U$ и $V$ — ортогональные матрицы, $\Sigma$ — диагональная матрица сингулярных чисел $\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0$, а $r$ — ранг матрицы. Каждое слагаемое $\sigma_i u_i v_i^{\mathsf T}$ — матрица ранга 1, «слой» изображения.

Приближение низкого ранга. Сумма первых $k$ слоёв

$$ A_k = \sum_{i=1}^{k} \sigma_i \, u_i v_i^{\mathsf T} $$

по теореме Эккарта — Янга является наилучшим приближением $A$ среди матриц ранга $k$ по норме Фробениуса. Относительная ошибка выражается через отброшенные сингулярные числа:

$$ \frac{\lVert A - A_k \rVert_F}{\lVert A \rVert_F} = \sqrt{\frac{\sum_{i > k} \sigma_i^2}{\sum_{i} \sigma_i^2}} . $$

Для хранения $A_k$ нужно $k\,(m + n + 1)$ чисел вместо $m\,n$. У реальных изображений сингулярные числа быстро убывают, поэтому несколько десятков слоёв передают основную структуру картинки.

Где это применяется в IT

Тот же приём работает в рекомендательных системах (матрица «пользователи × фильмы»), в низкоранговом дообучении нейросетей (LoRA) и в шумоподавлении. Идея одна: оставить главное и отбросить мелкие детали.

  • Экономия памяти. Матрица ранга $k$ хранит $k\,(m + n + 1)$ чисел вместо $m\,n$.
  • Убывание сингулярных чисел. Первые слои несут основную энергию изображения, последние — шум и мелкие детали.
  • Оптимальность. По теореме Эккарта — Янга $A_k$ — лучшее приближение ранга $k$, а ошибка равна корню из суммы квадратов отброшенных $\sigma_i$.

Код на Python

Загружаю пример…