Summary
특이값 분해(SVD)는 어떤 행렬이든 로 쪼개는 방법이다. 모든 선형변환을 “직교 회전 → 축마다 늘이기 → 직교 회전”의 3단계로 보는 셈이고, 늘이는 배율이 바로 특이값(singular value)이다. 정사각이 아니어도, 대각화가 안 되는 행렬이어도 항상 존재한다는 게 핵심.
용어 설명
- singular value (특이값): 각 주축으로 얼마나 늘이는지 나타내는 배율 . 음수가 안 됨.
- orthogonal matrix (직교행렬): 열들이 서로 수직이고 길이가 1인 행렬. , 즉 “길이·각도를 보존하는 회전(+뒤집기)”.
- low-rank approximation (저랭크 근사): 큰 특이값 몇 개만 남겨서 행렬을 가볍게 근사하기.
- pseudoinverse (유사역행렬): 역행렬이 없는(정사각이 아니거나 특이한) 행렬에도 쓰는 “역행렬 비슷한 것” .
- rank (랭크): 0이 아닌 특이값의 개수. 행렬이 실제로 가진 “독립된 방향” 수.
Singular Value Decomposition (SVD)
1. 직관 (어떤 행렬이든 “회전 → 축별 스케일 → 회전”으로 분해)
행렬 를 곱한다는 건 곧 벡터 공간을 변형시키는 일이다. SVD는 이 변형이 아무리 복잡해 보여도 사실은 딱 세 동작의 조합이라고 말해준다.
- 회전(돌리기) — : 입력 공간을 빙 돌려서 “좋은 방향(주축)“이 좌표축에 맞도록 정렬.
- 축별 스케일(늘이기/줄이기) — : 축은 배, 축은 배… 이렇게 축마다 다른 배율로 늘인다.
- 다시 회전 — : 늘인 결과를 출력 공간에서 적절한 방향으로 다시 돌림.
그림으로 외우기
동그란 원(공)을 행렬로 변형하면 항상 타원이 된다. SVD는 그 타원을 정확히 묘사한다. 타원의 가장 긴 반지름 길이 = , 그다음 = , … 그리고 그 반지름들이 가리키는 방향이 의 열들이다. “원 → 타원, 타원의 반지름이 특이값” 이 한 문장만 기억해도 절반은 끝.
2. 정의 (A=UΣVᵀ, 각 인자 의미)
임의의 실수 행렬 는 다음처럼 분해된다.
- : 직교행렬. 열 = 왼쪽 특이벡터(left singular vector), 출력 공간의 주축.
- : 대각행렬. 대각 성분이 특이값 (큰 순서로 정렬).
- : 직교행렬. 열 = 오른쪽 특이벡터(right singular vector), 입력 공간의 주축. (식에는 로 들어감)
예를 들어 라면 모양은 이렇다.
직교행렬은 “회전”, 는 “축별 늘이기”라는 1절의 직관과 정확히 대응한다. 또 를 특이값별 조각의 합으로도 쓸 수 있다(이게 4절 압축의 핵심).
3. 고윳값과의 관계 (AᵀA, AAᵀ의 고유분해)
자체는 정사각이 아닐 수 있어 고윳값을 직접 못 구한다. 그런데 와 는 항상 정사각 대칭행렬이라 고유분해가 깔끔하게 된다. 여기서 SVD가 튀어나온다.
정리하면,
- 의 열 = 의 고유벡터
- 의 열 = 의 고유벡터
- — 특이값은 고윳값의 제곱근
Important
는 **대칭이고 양의 준정부호(positive semi-definite)**라서 고윳값이 항상 실수 . 그래서 제곱근을 씌운 특이값 도 항상 음수가 아니다. (고윳값은 음수·복소수도 되지만, 특이값은 절대 안 됨 — 이 차이가 시험 단골)
4. 쓰임 (저랭크 근사/PCA/pseudoinverse) + 예시 개념
- 저랭크 근사 (low-rank approximation): 2절의 합 에서 큰 특이값 개만 남기면 원본을 거의 보존하면서 데이터가 확 줄어든다. 이게 Eckart–Young 정리: 랭크 로 줄일 때 그 근사가 (Frobenius 노름 기준) 최적이다.
- 예: 1000×1000 흑백 이미지에서 특이값 상위 50개만 남기면, 눈에는 거의 같은데 저장량은 1/10 이하. 작은 특이값은 보통 “노이즈”라 버리면 노이즈 제거 효과도 난다.
- PCA (주성분분석): 데이터를 평균 0으로 맞춘 뒤 SVD 하면, 의 열이 곧 주성분 방향, 특이값이 그 방향의 분산 크기. “데이터가 가장 많이 퍼진 방향 찾기” = 가장 큰 특이값 방향.
- 추천 시스템: 사용자×영화 평점 행렬을 저랭크로 근사 → 빈칸(안 본 영화) 평점을 채워 추천. (Netflix류)
- pseudoinverse (유사역행렬): ( 는 0 아닌 특이값을 역수로 바꾼 것). 해가 없거나 무수히 많은 에서 최소제곱(least squares) 해를 준다.
- 랭크·조건수 진단: 0에 가까운 특이값 개수로 실제 랭크를 판단하고, (조건수)로 계산이 얼마나 불안정한지 본다.
5. 대각화와의 차이 (모든 m×n 가능 vs 정사각·고유벡터 필요)
| 고유분해 / 대각화 () | SVD () | |
|---|---|---|
| 대상 행렬 | 정사각 만 | 모든 |
| 존재 조건 | 고유벡터가 개 충분(대각화 가능)일 때만 | 항상 존재 |
| 좌·우 기저 | 같은 기저 하나 | (입력)와 (출력) 서로 다른 직교기저 |
| 기저 성질 | 직교 보장 안 됨 (대칭행렬일 때만 직교) | 항상 직교 |
| 대각 성분 | 고윳값 (음수·복소수 가능) | 특이값 (실수, 음수 아님) |
핵심: 대각화는 “운이 좋아야” 되지만, SVD는 언제나 된다. 대칭이면서 양의 정부호인 행렬에서는 둘이 사실상 일치한다().
함정 모음
- 는 유일하지 않다 — 특이값이 같거나 부호를 뒤집어도 되니 답이 여러 개. (특이값 자체는 유일)
- 특이값은 큰 순서로 정렬되고 음수가 아님. 고윳값과 헷갈리지 말 것.
- 인지 인지 식에서 전치 위치 주의.
6. 30초 요약 (bullets)
- 한국어: 특이값 분해(SVD). 식: .
- (), ()는 직교행렬(회전), ()는 특이값 을 가진 대각행렬(축별 스케일).
- 직관: “회전 → 늘이기 → 회전 “. 원이 타원 되고, 타원 반지름 = 특이값.
- 고윳값 연결: = 고유벡터, = 고유벡터, .
- 쓰임: 저랭크 근사(압축·노이즈 제거, Eckart–Young), PCA, 추천, pseudoinverse (최소제곱), 랭크·조건수.
- 대각화와 차이: 대각화는 정사각+고유벡터 충분일 때만, SVD는 항상 존재.
- 함정: 특이값 (고윳값 아님), 부호·순서 자유.
- 교과서: Strang, Ch 7.