SVD

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.01
조회수
6
버전
v1

SVD (특이값 분해)

SVD(Singular Value Decomposition, 특이값 분해)는 선형대수학에서 행렬을 특정한 형태로 분해하는 기법으로, 수치해석, 데이터 과학, 기계학습, 신호 처리 등 다양한 분야에서 핵심적인 역할을 하는 수학적 도구입니다. SVD는 임의의 실수 또는 복소수 행렬을 세 개의 특수한 행렬의 곱으로 분해함으로써, 원래 행렬의 구조를 명확히 드러내고, 차원 축소, 노이즈 제거, 데이터 압축 등의 응용이 가능하게 합니다.


개요

SVD는 $ m \times n $ 크기의 행렬 $ A $를 다음과 같은 세 행렬의 곱으로 분해합니다:

$$ A = U \Sigma V^T $$

여기서:

  • $ U $: $ m \times m $ 크기의 직교행렬(orthogonal matrix), 열 벡터는 $ A $의 좌특이벡터(left singular vectors)를 나타냄
  • $ \Sigma $: $ m \times n $ 크기의 대각행렬(diagonal matrix), 대각 원소는 특이값(singular values)이며, 일반적으로 내림차순으로 정렬됨
  • $ V $: $ n \times n $ 크기의 직교행렬, 열 벡터는 $ A $의 우특이벡터(right singular vectors)를 나타냄
  • $ V^T $: $ V $의 전치행렬

특이값은 $ A $의 "크기" 또는 "에너지"를 나타내며, 가장 큰 특이값부터 순서대로 중요도가 높습니다.


SVD의 수학적 배경

1. 특이값과 특이벡터의 정의

행렬 $ A $에 대해 다음과 같은 관계가 성립합니다:

  • $ A v_i = \sigma_i u_i $
  • $ A^T u_i = \sigma_i v_i $

여기서 $ \sigma_i $는 $ i $번째 특이값이며, $ u_i $와 $ v_i $는 각각 좌·우 특이벡터입니다. 이는 행렬 $ A $가 $ V $의 기저에서 $ U $의 기저로 변환하는 선형 사상임을 의미합니다.

또한, $ A^T A $와 $ A A^T $의 고유값 분해와 밀접한 관련이 있습니다:

  • $ A^T A $의 고유값: $ \sigma_i^2 $, 고유벡터: $ v_i $
  • $ A A^T $의 고유값: $ \sigma_i^2 $, 고유벡터: $ u_i $

따라서 SVD는 고유값 분해(eigenvalue decomposition)의 일반화로 볼 수 있습니다.

2. 계산 과정 개요

  1. $ A^T A $를 계산하고, 그 고유값과 고유벡터를 구함 → $ V $와 $ \Sigma $를 얻음
  2. $ A A^T $를 계산하고, 고유벡터를 구함 → $ U $를 얻음
  3. 특이값은 $ A^T A $ 또는 $ A A^T $의 고유값의 제곱근으로 계산

수치적으로는 QR 알고리즘, 반복법(Jacobi, Lanczos 등)을 사용하여 효율적으로 계산합니다.


SVD의 주요 성질

  • 모든 행렬에 적용 가능: 정방행렬이 아니어도, 비정칙이어도 SVD는 항상 존재
  • 직교성: $ U $와 $ V $는 직교행렬 → $ U^T U = I $, $ V^T V = I $
  • 최적 근사성: Eckart–Young 정리에 따르면, SVD를 이용해 낮은 랭크로 행렬을 근사할 때, Frobenius 노름 기준으로 가장 오차가 작은 근사를 제공
  • 안정성: 수치적으로 안정적인 알고리즘으로 구현 가능

응용 분야

1. 차원 축소 (Low-rank Approximation)

SVD를 이용해 큰 특이값만을 선택함으로써, 원래 데이터의 주요 정보를 보존하면서 차원을 축소할 수 있습니다. 이를 ** truncated SVD **(축소형 SVD)라고 하며, 다음과 같이 표현됩니다:

$$ A_k = U_k \Sigma_k V_k^T $$

여기서 $ k $는 선택한 특이값의 개수. 이는 주성분 분석(PCA)과 밀접한 관계가 있으며, PCA는 공분산행렬의 고유값 분해를 사용하지만, 데이터 행렬의 SVD로도 동일하게 수행할 수 있습니다.

2. 데이터 압축 및 노이즈 제거

이미지나 신호 데이터에서 작은 특이값은 일반적으로 노이즈에 해당하므로, 이를 제거함으로써 데이터를 압축하거나 깨끗한 신호를 복원할 수 있습니다. 예를 들어, 흑백 이미지를 행렬로 표현하고 SVD를 적용하면, 몇 개의 특이값만으로도 이미지를 거의 원본 수준으로 재구성할 수 있습니다.

3. 추천 시스템

협업 필터링 기반 추천 시스템에서 사용자-아이템 평점 행렬을 SVD로 분해하여, 숨겨진 요인(latent factors)을 추출합니다. 이는 행렬 분해(Matrix Factorization) 기법의 핵심이며, Netflix Prize에서도 널리 사용되었습니다.

4. 의사역행렬 (Pseudo-inverse)

특이값 분해를 이용하면, 비정방행렬이나 비가역행렬에 대해서도 의사역행렬(Moore-Penrose inverse)을 쉽게 계산할 수 있습니다:

$$ A^+ = V \Sigma^+ U^T $$

여기서 $ \Sigma^+ $는 $ \Sigma $의 0이 아닌 특이값을 역수로 바꾸고 전치한 행렬입니다.


알고리즘 및 구현

SVD는 수치해석 라이브러리에서 널리 구현되어 있습니다. 대표적인 예:

  • LAPACK: [DGESVD](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%88%98%EC%B9%98%ED%95%B4%EC%84%9D%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC/DGESVD) (실수 행렬용)
  • NumPy(Python): [numpy.linalg.svd](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/numpy.linalg.svd)()
  • MATLAB: svd()
  • SciPy: [scipy.linalg.svd](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/scipy.linalg.svd)

예시 (Python):

import numpy as np

A = np.array([[1, 2], [3, 4 [5, 6]])
U, sigma, VT = np.linalg.svd(A)

print("U:\n", U)
print("Sigma:", sigma)
print("V^T:\n", VT)


참고 자료 및 관련 문서

  • Golub, G. H., & Van Loan, C. F. (2013). Matrix Computations (4th ed.). Johns Hopkins University Press.
  • Strang, G. (2016). Introduction to Linear Algebra (5th ed.). Wellesley-Cambridge Press.
  • Wikipedia - Singular Value Decomposition
  • 관련 개념: 고유값 분해(EVD), 주성분 분석(PCA), QR 분해, LU 분해

SVD는 현대 수치해석과 데이터 과학의 기초를 이루는 강력한 도구로, 이론적 깊이와 실용적 응용성을 동시에 갖추고 있습니다. 그 중요성은 계속해서 증가하고 있으며, 다양한 알고리즘의 핵심 구성 요소로 자리 잡고 있습니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?