Featured image of post Сингулярное разложение (SVD): разложение любой матрицы на вращения и масштабирование для сжатия данных и ИИ

Сингулярное разложение (SVD): разложение любой матрицы на вращения и масштабирование для сжатия данных и ИИ

Полное руководство по математическим основам, геометрической интуиции и применению сингулярного разложения (SVD) в сжатии изображений и NLP.

Одним из важнейших и мощнейших инструментов линейной алгебры является Сингулярное разложение (SVD). Этот метод, позволяющий разложить любую матрицу на базовые операции, лежит в основе таких современных технологий, как наука о данных, машинное обучение и обработка изображений.

В этой статье мы подробно объясним SVD, начиная с его математического определения, геометрического смысла и, наконец, заканчивая практическим применением в сжатии данных и ИИ.

1. Математическое определение SVD

Любую вещественную матрицу $m \times n$, обозначаемую как $A$, можно разложить в произведение трех матриц следующим образом:

$$A = U \Sigma V^T \quad (\text{Сингулярное разложение матрицы})$$

Здесь каждая матрица обладает следующими свойствами:

  • $U$ — ортогональная матрица $m \times m$. Ее векторы-столбцы называются левыми сингулярными векторами .
  • $\Sigma$ — диагональная матрица $m \times n$. Диагональные элементы $\sigma_i$ называются сингулярными значениями , которые обычно отсортированы по убыванию $\sigma_1 \ge \sigma_2 \ge \dots \ge 0$.
  • $V^T$ — транспонированная ортогональная матрица $V$ размера $n \times n$. Векторы-столбцы матрицы $V$ называются правыми сингулярными векторами .

Как свойство ортогональных матриц выполняется $U^T U = I$ и $V^T V = I$. В этом заключается главная сила SVD: метод позволяет разложить сложную матрицу $A$ на математически управляемые ортогональные и диагональные матрицы.

2. Отличие от спектрального разложения

Для квадратных матриц хорошо известно разложение по собственным значениям $A = P \[Lambda](https://kenji.blog/ru/p/serverless-architecture-aws-lambda-cold-start/) P^{-1}$. Однако это разложение имеет следующие ограничения:

  • Его можно применять только к квадратным матрицам ($n \times n$).
  • Даже если это квадратная матрица, она не всегда диагонализируема.

С другой стороны, Сингулярное разложение всегда существует для любой произвольной матрицы $m \times n$, даже если она не является квадратной. Это одна из причин, почему SVD чрезвычайно полезно в анализе данных.

3. Геометрическая интуиция: вращение и масштабирование

Один из самых красивых аспектов SVD — его геометрическая интерпретация. Она означает, что любое линейное преобразование $A$ можно разложить на следующие три простых шага.

  graph LR
    X["Входной вектор x"] -->|"Вращение через V^T"| V_vec["Повернутый вектор"]
    V_vec -->|"Масштабирование через Sigma"| S_vec["Масштабированный вектор"]
    S_vec -->|"Вращение через U"| Y["Выходной вектор Ax"]
  1. Вращение через $V^T$ : Поворачивает вектор с использованием ортогонального преобразования.
  2. Масштабирование через $\Sigma$ : Растягивает или сжимает вектор вдоль каждой координатной оси на коэффициент сингулярного значения $\sigma_i$.
  3. Вращение через $U$ : Наконец, вектор снова поворачивается в преобразованном пространстве.

Другими словами, каким бы сложным ни казалось преобразование, в основе его можно свести к процессу «повернуть, масштабировать и снова повернуть».

4. Низкоранговая аппроксимация (Теорема Эккарта-Янга-Мирского)

Главное применение SVD — низкоранговая аппроксимация . Поскольку сингулярные значения матрицы $A$ отсортированы по убыванию, малые сингулярные значения можно рассматривать как шум или неважную информацию.

Извлекая только первые $k$ сингулярных значений и соответствующие им сингулярные векторы, мы можем создать матрицу ранга $k$, $A_k$, которая аппроксимирует исходную матрицу $A$.

$$A \approx A_k = U_k \Sigma_k V_k^T \quad (\text{Оптимальная аппроксимация ранга } k)$$

Согласно теореме Эккарта-Янга-Мирского, эта матрица $A_k$ является оптимальной матрицей аппроксимации, которая минимизирует ошибку с исходной матрицей $A$.

5. Пример применения 1 на Python: сжатие изображений

Изображение можно представить в виде матрицы значений пикселей. Выполняя низкоранговую аппроксимацию с помощью SVD, мы можем значительно уменьшить размер данных при сохранении визуального качества.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import matplotlib.pyplot as plt
from skimage import data
from skimage.color import rgb2gray

# Загрузить изображение и перевести в градации серого
image = rgb2gray(data.astronaut())

# Выполнить сингулярное разложение
U, S, VT = np.linalg.svd(image, full_matrices=False)

# Сжать изображение, используя первые k сингулярных значений
k = 50
compressed_image = np.dot(U[:, :k], np.dot(np.diag(S[:k]), VT[:k, :]))

# Показать исходное и сжатое изображения
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("Original Image")
plt.imshow(image, cmap='gray')

plt.subplot(1, 2, 2)
plt.title(f"Compressed Image (k={k})")
plt.imshow(compressed_image, cmap='gray')
plt.show()

В этом коде мы используем только 50 из тысяч исходных сингулярных значений, но основные особенности изображения надежно сохраняются.

6. Пример применения 2: Латентно-семантический анализ (LSA)

SVD также используется в области обработки естественного языка (NLP) как Латентно-семантический анализ (LSA).

  graph TD
    Doc["Матрица документ-термин A"] -->|"Применить SVD"| Decomp["Разложенные матрицы"]
    Decomp -->|"Выбрать первые k"| LowRank["Низкоразмерное семантическое пространство"]
    LowRank -->|"Вычислить сходство"| Sim["Обнаружить связи слово-документ"]

Здесь SVD применяется к матрице, в которой строки представляют слова, а столбцы — документы. Это позволяет нам уловить «скрытые темы» за словами, а не только поверхностные совпадения.

7. Псевдообратная матрица Мура-Пенроуза

SVD также полезен при поиске решения системы линейных уравнений. Даже если матрица $A$ не является квадратной, мы можем получить решение методом наименьших квадратов, вычислив псевдообратную матрицу Мура-Пенроуза $A^+$.

$$A^+ = V \Sigma^+ U^T \quad (\text{Вычисление псевдообратной матрицы})$$

Это позволяет стабильно находить решения для линейной регрессии в машинном обучении.

8. Заключение

Сингулярное разложение (SVD) — это мощный метод, который раскладывает любую матрицу на три простых элемента: «вращение», «масштабирование» и «вращение». Понимание математических основ SVD станет первым шагом к глубокому пониманию алгоритмов машинного обучения.

comments powered by Disqus