SVD
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. 계산 과정 개요
- $ A^T A $를 계산하고, 그 고유값과 고유벡터를 구함 → $ V $와 $ \Sigma $를 얻음
- $ A A^T $를 계산하고, 고유벡터를 구함 → $ U $를 얻음
- 특이값은 $ 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 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.