SVD는 회전·늘이기·회전이다
아무리 뒤죽박죽인 행렬도 알고 보면 깔끔한 세 동작일 뿐이다. 먼저 한 번 돌리고(Vᵀ), 두 축 방향으로 따로따로 늘이고(Σ), 다시 한 번 돌린다(U). 이 행렬에 단위원을 통째로 집어넣으면 반듯한 타원 하나가 나와요. 그 타원의 반축 길이가 바로 특이값이다. 그리고 가장 큰 특이값 하나가 그 타원의 형태를 거의 다 책임진다. 이미지 압축과 PCA가 바로 이 한 가지 사실 위에 서 있어요. 첫 위젯에서 단계를 하나씩 밟으며 원이 어떻게 타원이 되는지 따라간다.
버튼으로 단계를 하나씩 밟아 나간다. 0단계는 그냥 단위원이고, 그 위에 오른쪽 특이벡터 v1, v2가 표시돼요. 1단계 Vᵀ는 원을 돌리지만 원은 원이라 모양이 안 변한다. 대신 v1, v2가 정확히 x, y축 위에 가서 앉는다. 2단계 Σ는 그 두 축 방향으로만 따로 늘여, x축으로 σ1, y축으로 σ2짜리 반듯한 타원을 만든다. 3단계 U는 그 타원을 다시 한 번 돌려 기울인 최종 타원, 곧 A의 상이 돼요. 그 타원의 두 반축이 σ1·u1, σ2·u2다. 회전·늘이기·회전, 이 세 동작이 어떤 행렬이든 만들어내는 것이다.
이번에는 회전을 다 빼고 늘이기만 남긴다(U = V = I). 슬라이더 σ1은 x축 방향으로, σ2는 y축 방향으로 단위원을 얼마나 잡아당길지 정하고, 두 값이 곧 타원의 반축 길이가 돼요. 특이값이란 결국 그 축이 몇 배로 늘어나느냐다. σ1을 키우면 타원이 가로로 길어지고, σ2를 줄이면 세로로 납작해진다. 한 슬라이더를 0에 가깝게 내리면 타원이 그 축으로 완전히 짜부라져 선분 하나가 돼요. 그 순간 행렬의 랭크가 2에서 1로 떨어지고 경고가 뜬다.
이제 세 조각을 직접 손에 쥔다. 슬라이더로 첫 회전각(V), 두 늘이기 배율(σ1, σ2), 마지막 회전각(U)을 정하면 그게 곧 A = U Σ Vᵀ가 돼요. 화면은 격자가 어떻게 변형되는지와 단위원이 어떤 타원으로 가는지를 같이 보여주고, 아래 숫자판에는 그 A의 네 성분이 뜬다. 각도와 배율을 이리저리 돌려 보면, 아무리 제멋대로 보이는 행렬값이라도 결국 깔끔한 회전 두 번과 축 늘이기 하나에서 나온다는 걸 알 수 있어요. 어떤 2×2 행렬이든 회전 → 축 늘이기 → 회전, 이 분해를 피해 갈 수 없다.
이 분해에는 방향이 두 세트 있다. 들어가는 쪽의 v1, v2(오른쪽 특이벡터)와 나오는 쪽의 u1, u2(왼쪽 특이벡터)예요. 토글로 짝을 고를 수 있다. v1을 A에 넣으면 정확히 σ1·u1이 나오고, v2를 넣으면 σ2·u2가 나온다. 곧 입력 방향 v는 출력 방향 u로 바뀌되 그 길이가 특이값만큼 곱해지는 것이다. 왼쪽 단위원 위 파란 화살표가 입력 v, 오른쪽 타원 위 화살표가 그 출력이에요. V 방향이 들어가서 U 방향이 나오고, 특이값이 그 크기를 정한다. 이게 SVD의 한 줄 요약이다.
마지막으로 타원의 형태가 정말 큰 특이값 하나에 거의 다 담기는지 본다. 토글의 랭크2는 완전한 A, 곧 기울어진 타원 전체다. 랭크1로 바꾸면 σ1·u1·v1ᵀ 한 조각만 남겨 타원이 가장 긴 장축 위로 완전히 내려앉아 길이 σ1짜리 선분이 돼요. 작은 σ2 조각을 버린 것이다. 화면에는 그 큰 조각이 담은 에너지 비율 σ1²/(σ1²+σ2²)이 퍼센트로 뜬다. 보통 이 한 조각만으로 형태의 대부분이 살아남는다. 가장 큰 특이값만 남겨도 형태가 거의 유지된다는 것, 이게 압축과 PCA의 핵심 발상이에요.