원을 타원으로 보내는 그림, SVD의 구성 A = UΣVᵀ, SVD와 4대 부분공간, 랭크 1 조각들의 합과 가장 좋은 근사, 특잇값의 의미와 조건수, 유사역행렬
모든 행렬은 '회전 → 축 방향 늘이기 → 회전'의 세 단계로 쪼갤 수 있습니다. 이것이 특잇값 분해(SVD)이고, 선형대수에서 가장 쓸모 있는 정리 가운데 하나입니다. 이 장에서는 SVD를 대칭행렬의 고윳값으로 구하고, 이미지 압축, 유사역행렬, 데이터의 주성분 분석(PCA)에 적용합니다.
18.1 모든 행렬을 위한 대각화
질문. 대칭행렬은 QΛQT로 아름답게 분해되었습니다. 하지만 대부분의 행렬은 대칭이 아니고, 직사각형이기도 합니다. m×n 행렬 A에 대해서도 “서로 수직인 축들을 서로 수직인 축들로 보내는” 좌표계를 찾을 수 있을까요?
대각화 A=XΛX−1에는 세 가지 한계가 있었습니다. 정사각행렬이어야 하고, 고유벡터가 충분해야 하고, 고유벡터가 보통 수직이 아닙니다. 특잇값 분해(SVD)는 세 한계를 한꺼번에 넘습니다. 대가는 입력 공간과 출력 공간에 서로 다른 기저를 쓰는 것입니다. 그 대가를 치르면 모든 행렬이 대각행렬이 됩니다.
Avi=σiui: 정규직교인 입력 기저 vi가, 정규직교인 출력 기저 ui의 σi배로 갑니다.
18.2 원을 타원으로
그림 18.1. A=[3405]. 단위원은 타원이 됩니다. 수직인 v1,v2는 타원의 두 축 방향 u1,u2로 가고, 반축의 길이가 특잇값 σ1=35, σ2=5입니다.
어떤 행렬이든 단위원(구)을 타원(타원체)으로 보냅니다. 타원에는 서로 수직인 축이 있습니다. 원 위에서 그 축의 끝으로 가는 점들이 v1,v2입니다. 그런데 이 점들도 원 위에서 서로 수직입니다. 이것이 SVD의 그림입니다.
A=[3405]를 예로 듭시다. 대칭이 아니고, 고유벡터 (0,1)과 (1,−2)는 수직이 아닙니다. 그래도 수직인 v1=21(1,1), v2=21(−1,1)을 넣으면
Av1=21[39],Av2=21[−31].
두 출력의 내적은 21(−9+9)=0으로 수직입니다. 길이는 σ1=45=35, σ2=5입니다. 정규화하면 u1=101(1,3), u2=101(−3,1).
이 vi는 어떻게 찾았을까요? 다음 절의 답: ATA의 고유벡터입니다.
v₁의 각도를 돌리면 수직인 v₁, v₂와 그 출력 Av₁, Av₂가 함께 돕니다. 두 출력이 수직이 되는 각을 찾습니다
이 위젯은 JavaScript가 필요합니다
18.3 SVD의 구성
정리 18.1 (특잇값 분해). 랭크가 r인 m×n 실수 행렬 A는
A=UΣVT
로 쓸 수 있습니다. U는 m×m 직교행렬, V는 n×n 직교행렬, Σ는 m×n 행렬로 대각에 σ1≥σ2≥⋯≥σr>0이 있고 나머지는 0입니다. σi를 A의 특잇값(singular values), U와 V의 열을 왼쪽·오른쪽 특이벡터(singular vectors)라 합니다.
증명.1단계.ATA는 n×n 대칭이고 양반정치입니다(문제 17.9). 스펙트럴 정리에 의해 정규직교 고유벡터 v1,…,vn과 고윳값 λ1≥⋯≥λn≥0이 있습니다. N(ATA)=N(A) (정리 13.9의 증명)이고 차원이 n−r이므로, 양수인 고윳값은 정확히 r개입니다. σi=λi로 둡니다.
3단계.u1,…,ur을 Rm의 정규직교 기저 u1,…,um으로 확장합니다. i>r이면 Avi=0입니다(∥Avi∥2=λi=0). 따라서 모든 i에 대해 Avi=σiui (i>r이면 σi=0)이고, 행렬로 AV=UΣ. V가 직교이므로 A=UΣVT. ■
예제 18.2.A=[3405]: ATA=[25202025], 고윳값 45, 5, 고유벡터 21(1,1), 21(−1,1). 앞 절의 계산과 함께
[3405]=101[13−31][35005]21[1−111].
검산: σ1σ2=15=∣detA∣.
직관.A=UΣVT를 오른쪽부터 읽으면 세 단계의 변환입니다.
VT: 입력을 회전(또는 반사)해서 vi들을 좌표축에 맞춥니다.
Σ: 각 축 방향으로 σi배 늘입니다(차원이 다르면 축을 추가하거나 버립니다).
U: 출력을 회전해서 좌표축을 ui들에 맞춥니다.
모든 선형변환은 “회전 → 늘이기 → 회전”입니다.
AAT=UΣΣTUT이므로 ui는 AAT의 고유벡터이고 고윳값은 같은 σi2입니다. 계산할 때는 vi를 먼저 구하고 ui=Avi/σi로 구하는 것이 부호를 맞추기 쉽습니다. ui를 따로 AAT에서 구하면 ±부호가 어긋날 수 있습니다.
▶ 문제 18.1–18.4
18.4 SVD와 4대 부분공간
SVD는 4대 부분공간의 정규직교 기저를 한꺼번에 줍니다.
부분공간
기저
차원
행공간 C(AT)
v1,…,vr
r
영공간 N(A)
vr+1,…,vn
n−r
열공간 C(A)
u1,…,ur
r
왼쪽 영공간 N(AT)
ur+1,…,um
m−r
vi (i≤r)는 ui의 σi배로 갑니다. 12장의 그림 12.2에서 “행공간이 열공간으로 갑니다”를 정확히 그린 것입니다. SVD는 행공간과 열공간에 기저를 짝지어 깔아서, 그 사이의 변환을 대각으로 만듭니다.
▶ 문제 18.5
18.5 랭크 1 조각들의 합과 근사
A=UΣVT를 열×행의 합으로 쓰면
A=σ1u1v1T+σ2u2v2T+⋯+σrurvrT.
각 조각은 랭크 1이고, 크기 순서로 정렬되어 있습니다. 첫 k개만 남긴
Ak=σ1u1v1T+⋯+σkukvkT
는 랭크 k입니다.
정리 18.3 (에카르트–영). 랭크가 k 이하인 모든 행렬 B 중에서, A와의 거리 ∥A−B∥가 가장 작은 것은 Ak입니다. 이때 오차는 σk+1입니다.
(행렬의 거리 ∥A−B∥는 “∥(A−B)x∥의 최댓값, 단 ∥x∥=1”로 정의하며 30장에서 자세히 다룹니다. 증명도 그때 합니다.)
예제 18.4 (이미지 압축). 흑백 사진은 각 픽셀의 밝기를 성분으로 하는 큰 행렬입니다. 1000×1000 사진을 저장하려면 수 100만 개가 필요합니다. 그런데 실제 사진은 특잇값이 빠르게 작아지는 경우가 많아서, 처음 50개 조각만 남긴 A50도 원본과 거의 구별되지 않습니다. A50을 저장하는 데는 ui,vi,σi 50세트, 약 50×2001≈10만 개면 됩니다. 10분의 1입니다.
같은 아이디어가 자료 분석의 주성분 분석(PCA, 31장)입니다. 자료 행렬의 첫 몇 개 특이벡터가 자료가 가장 많이 퍼져 있는 방향들입니다.
▶ 문제 18.6–18.7
18.6 특잇값의 의미
σ1=max∥x∥=1∥Ax∥: A가 벡터를 가장 크게 늘이는 배율(문제 18.8).
정사각 가역 A에서 σn=min∥x∥=1∥Ax∥: 가장 작게 줄이는 배율.
∣detA∣=σ1σ2⋯σn (정사각): 직교행렬은 부피를 바꾸지 않으므로.
σ1/σn을 조건수(condition number)라 합니다. 이 값이 크면 Ax=b의 해가 b의 작은 오차에 민감합니다(30장).
∥x∥=1일 때 ∥Ax∥의 최댓값은 σ1임을 보입니다. (문제 17.11을 ATA에 적용합니다.)
풀이
∥Ax∥2=xT(ATA)x≤λmax(ATA)∥x∥2=σ12. 등호는 x=v1.
18.9 [계산] · 확인 문제
A=[2121]의 유사역행렬을 구합니다. x+=A+(1,0)을 구하고, 이것이 최소제곱 해 중 가장 짧은 것임을 직접 확인합니다.
x1+
x2+
[?]
[?]
정답
0.2
0.2
풀이
A+=σ11v1u1T=101⋅21[11]⋅51[21]=101[2211]. x+=(0.2,0.2). 확인: Ax=s(2,1) (s=x1+x2). (2s−1)2+s2을 최소로 하는 s는 s=52. x1+x2=0.4인 해 중 가장 짧은 것은 (0.2,0.2).