1. 개요
| 특이값 분해 Singular Value Decomposition | |
|---|---|
| 약칭 | SVD |
| 분해 형태 | A = UΣVT |
| 적용 대상 | 임의의 m×n 실/복소 행렬 (항상 존재) |
| 특이값 | σ1 ≥ σ2 ≥ … ≥ 0 |
| 조건수 | κ2(A) = σmax / σmin |
| 표준 알고리즘 | 골룹-케이헌 이중대각화 → 골룹-라인시 SVD |
| 비용 (m×n, m≥n) | O(mn2) — QR 보다 수 배 비싸다 |
| 대표 응용 | PCA, 저랭크 근사, 모델차수축소 |
세상의 모든 행렬은 결국 “돌리고, 늘리고, 다시 돌리는” 것뿐이다.
특이값 분해(Singular Value Decomposition, SVD)는 임의의 행렬 를 형태로 분해하는 방법으로, 와 는 직교(정규직교)행렬이고 는 음이 아닌 특이값을 대각선에 내림차순으로 담은 대각행렬이다. LU 분해나 QR 분해가 정사각·특정 조건의 행렬을 노리는 반면, SVD는 정사각이든 직사각이든, 특이하든 정칙이든 가리지 않고 항상 존재한다는 점에서 선형대수의 스위스 아미 나이프로 불린다.1
수학적으로는 와 의 고유값 문제와 직결되어 있지만, 실무자 입장에서 SVD의 매력은 다른 데 있다. “이 행렬에서 진짜 중요한 방향이 뭐냐”를 특이값 크기순으로 줄 세워 주기 때문이다. 데이터 압축, 차원 축소, 잡음 제거, 유사역행렬 — 죄다 이 한 줄 세우기에서 파생된다.
2. 기하학적 의미
를 벡터에 곱하는 연산을 세 단계로 쪼갠 것이 SVD다.
- : 입력 공간에서 정규직교축을 골라 **회전(반사 포함)**시킨다.
- : 각 축 방향으로 특이값 만큼 늘리거나 줄인다.
- : 출력 공간에서 다시 회전시킨다.
즉 임의의 선형변환은 “회전 → 축 스케일링 → 회전”의 합성으로 분해된다. 단위 구(unit sphere)를 로 변환하면 항상 타원체(hyperellipsoid)가 나오는데, 그 반축(semi-axis)의 길이가 바로 특이값 이고, 반축의 방향이 의 열벡터다. 이 그림 하나만 머릿속에 있으면 SVD 관련 절반은 이해한 셈이다.
2.1. 검산: 단위원의 상은 정말 특이값을 반축으로 갖는가
행렬 의 특이값은 , 이다. 단위원 를 20만 등분해 의 최대·최소를 재면 각각 3.6410079778과 2.0598691477 — 열 자리까지 일치한다. 가 곧 스펙트럴 노름의 정의이고, 마지막 특이값이 최소 늘림률이라는 사실이 그림 그대로 확인된다.
3. 축약 · 완전 · 절단
같은 이름으로 세 가지 크기가 유통되니 구분해 둔다(, 랭크 ).
- 완전(full) SVD: 는 , 는 , 는 .
- 축약(thin) SVD: 는 , 는 . 실무에서
full_matrices=False로 부르는 그것. - 절단(truncated) SVD: 앞의 개만 남긴다. 더 이상 와 같지 않고 근사가 된다 — 다음 절의 주제이며 절단 특이값 분해가 따로 다룬다.
4. 저랭크 근사와 에카르트-영 정리
SVD를 실전 병기로 만드는 핵심은 저랭크 근사(low-rank approximation)다. 를 특이값 순으로 랭크-1 조각들의 합으로 펼치면
이고, 여기서 앞의 큰 개만 남긴 가 “랭크 짜리 최선의 근사”가 된다. 에카르트-영-미르스키(Eckart–Young–Mirsky) 정리는 이 가 프로베니우스 노름과 스펙트럴 노름 모두에서 오차를 최소화하는 최적해임을 보장한다.2 버려진 오차의 크기는 정확히 잘라낸 특이값들로 결정된다.
특이값이 급격히 작아지는(스펙트럼이 빠르게 감쇠하는) 행렬일수록 적은 로 큰 정보를 담을 수 있다. 데이터가 “본질적으로 저차원”이라는 말은 곧 이 특이값 스펙트럼이 뚝 떨어진다는 뜻이다.
4.1. 검산: 두 노름 등식과 최적성
행렬을 만들어 특이값을 구하면 이다. 부터 7까지 를 실제로 조립해 잔차 노름을 재면 두 등식이 상대차 이내로 성립한다.
| 스펙트럴 잔차 실측 | 프로베니우스 잔차 실측 | 뒤쪽 특이값 제곱합의 제곱근 | ||
|---|---|---|---|---|
| 1 | 4.0996333809 | 4.0996333809 | 4.7041469579 | 4.7041469579 |
| 3 | 1.0153719679 | 1.0153719679 | 1.8268030158 | 1.8268030158 |
| 5 | 0.8973453713 | 0.8973453713 | 1.1405364555 | 1.1405364555 |
| 7 | 0.3636150652 | 0.3636150652 | 0.3636150652 | 0.3636150652 |
에서 두 노름이 같아지는 건 남은 특이값이 하나()뿐이라 당연하다. 최적성도 실험으로 확인된다: 무작위 랭크-3 부분공간에 를 정사영해 본 200회 시행 중 를 이긴 경우는 0회였다.
5. 조건수와 유사역행렬
SVD는 수치해석적 건강 진단서이기도 하다. 행렬의 조건수(2-노름 기준)는 최대·최소 특이값의 비로 정의된다.
이 값이 크면 선형계가 병적(ill-conditioned)이라 작은 입력 오차가 해에서 폭발한다. 가우스 소거법으로는 잘 안 보이던 이 위험을 SVD는 특이값 목록만 보면 바로 알려준다.
정칙이 아니거나 직사각인 행렬의 “역행렬 대용”인 무어-펜로즈 유사역행렬(pseudoinverse)도 SVD로 깔끔하게 정의된다.
여기서 는 0이 아닌 특이값을 역수로 바꾼 것이다. 이것이 최소자승법의 최소노름 해를 안정적으로 주며, 랭크 결핍(rank-deficient) 문제에서 작은 특이값을 잘라내는 절단 특이값 분해는 역문제 정규화의 표준 도구다(티호노프 정규화와 자매 관계다).
5.1. 검산: 유사역행렬의 네 조건
일부러 두 번째 행을 첫 행의 2배로 만든 랭크 결핍 행렬의 특이값은 로, 세 번째가 반올림 잡음이라 수치 랭크는 2다. 이 잡음을 0으로 잘라내고 를 조립하면 무어-펜로즈 정의의 네 조건이 모두 만족된다.
| 조건 | 잔차(프로베니우스) |
|---|---|
| 1.65e-15 | |
| 2.06e-16 | |
| 가 대칭 | 1.00e-15 |
| 가 대칭 | 7.69e-16 |
여기서 “작은 특이값을 자른다”는 판단이 결정적이다. 을 그대로 역수 취하면 이 곱해져 답이 전부 쓰레기가 된다. 유사역행렬은 공식이 아니라 절단 임계값을 고르는 일이라는 말이 여기서 나온다.
6. 응용
- 주성분 분석(PCA): 데이터를 중심화한 뒤 SVD하면 의 열이 곧 주성분 방향이고, 이 그 방향의 표본분산이 된다. 통계와 머신러닝의 차원 축소는 사실상 SVD의 다른 이름이다. 상관을 심어 만든 , 데이터로 확인하면 세 성분의 이 각각 1.7276942618 · 1.1075813399 · 0.1386050038이고, 그 방향으로 정사영한 값의 표본분산이 열 자리까지 같다.
- 이미지 압축: 이미지 행렬을 저랭크 근사하면 상위 특이값 몇십 개만으로 원본과 구분하기 힘든 그림을 복원한다. 교과서 예제 단골 손님.3
- 모델차수축소(MOR)와 POD: 전산유체역학의 대규모 스냅샷 데이터에 SVD를 적용하는 적합직교분해(Proper Orthogonal Decomposition, POD)는 수백만 자유도의 유동장을 지배하는 소수의 모드를 뽑아낸다. 시간 방향 정보까지 함께 뽑는 동적 모드 분해도 내부에서 SVD를 돌린다. 이는 축소차수모델(ROM), 디지털 트윈, 유동 제어의 뼈대가 된다.
- 추천 시스템과 행렬 완성: 넷플릭스 프라이즈로 유명해진 잠재 요인 모델이 SVD 계열의 행렬 분해다. 다만 결측치가 대부분인 행렬에 SVD를 곧바로 적용할 수는 없어, 실제로는 관측된 항만 맞추는 최적화로 푼다.
7. 계산과 현실
이론상 의 고유값을 구하면 되지만, 실무에서 그렇게 하면 조건수가 제곱으로 나빠져 정밀도를 날려 먹는다. 그래서 실제 표준 경로는 두 단계다. 먼저 골룹-케이헌(Golub–Kahan) 이중대각화로 직교변환만 써서 를 이중대각행렬로 줄이고, 그 이중대각행렬의 특이값을 골룹-라인시(Golub–Reinsch) 방식의 암시적 QR 알고리즘으로 잡는다.4 1965년 논문이 축약을, 1970년 논문이 실용 알고리즘을 맡은 셈이고, LAPACK의 dgesvd가 이 계보다. 요즘 기본값인 dgesdd는 뒷단을 분할정복으로 바꿔 더 빠르다.
초대형 희소·저랭크 문제에는 랜덤화 SVD가 사실상 국룰이 됐고, 커널 행렬 쪽에서는 나이스트룀 근사가 비슷한 일을 한다. 어느 쪽이든 “그냥 numpy.linalg.svd 부르면 되는 거 아냐?”라는 말이 통하는 건, 뒤에서 수십 년치 수치해석 노하우가 갈려 들어갔기 때문이다.5
8. 관련 문서
- QR 분해 · LU 분해 · 촐레스키 분해
- 절단 특이값 분해 · 저랭크 근사 · 랜덤화 SVD
- 고유값 문제 · QR 알고리즘 · 조건수
- 주성분 분석 · 적합직교분해 · 동적 모드 분해
- 최소자승법 · 역문제 · 티호노프 정규화
- 행렬 완성 · 나이스트룀 근사
- 가우스 소거법 · 통계 · 수치해석
9. Footnotes
-
SVD의 존재 증명은 컴팩트 집합 위 연속 함수의 최댓값 존재라는, 놀랍도록 소박한 도구만으로 끝난다. 정작 그렇게 겸손하게 태어난 정리가 현대 데이터 과학의 절반을 먹여 살린다. ↩
-
에카르트(Carl Eckart)와 영(Gale Young)이 1936년 Psychometrika 에 프로베니우스 노름 버전을 실었고, 미르스키(Leon Mirsky)가 1960년에 임의의 유니터리 불변 노름으로 일반화했다. 그래서 요즘은 세 사람 이름을 다 붙여 부르는 게 예의다. 참고로 인 퇴화 상황에서는 최적해가 유일하지 않다 — 최적값은 유일하지만 최적 행렬은 여러 개일 수 있다. ↩
-
다만 JPEG가 SVD를 쓰는 건 아니다. JPEG는 이산 코사인 변환 기반이다. “이미지 압축 = SVD”라고 시험지에 쓰면 반은 맞고 반은 틀린다. ↩
-
이름을 헷갈리기 쉬운데 둘은 다른 논문이다. 골룹-케이헌(1965)이 이중대각 축약과 유사역행렬 계산을, 골룹-라인시(1970)가 그 위에 얹는 SVD·최소자승 실용 알고리즘을 담았다. “골룹-라인시 이중대각화”라고 쓰면 두 논문을 한 그릇에 섞은 셈이 된다. ↩
-
특이값이 서로 매우 가까울 때 대응하는 특이벡터를 안정적으로 뽑는 문제는 지금도 수치선형대수의 골칫거리다. 값은 쉽게 나와도 방향은 예민하다 — 섭동에 대한 특이벡터의 민감도가 이웃 특이값과의 간격 의 역수로 커지기 때문이다. ↩
이 문서의 주요 출처
- G. Golub & W. Kahan, "Calculating the Singular Values and Pseudo-Inverse of a Matrix", SIAM J. Numer. Anal. Ser. B 2 (1965) 205–224
- G. H. Golub & C. Reinsch, "Singular value decomposition and least squares solutions", Numer. Math. 14 (1970) 403–420
- C. Eckart & G. Young, "The approximation of one matrix by another of lower rank", Psychometrika 1 (1936) 211–218
- L. Mirsky, "Symmetric gauge functions and unitarily invariant norms", Quart. J. Math. 11 (1960) 50–59
- N. Halko, P. G. Martinsson & J. A. Tropp, "Finding Structure with Randomness", SIAM Review 53 (2011) 217–288
- LAPACK Users' Guide — Singular Value Decomposition (dgesvd / dgesdd)
의견을 반영할게요. 감사합니다.