Chapter 14

특이값 분해

고유값 분해는 강력하지만 조건이 까다롭습니다. 정사각 행렬이어야 하고, 대각화가 가능해야 하고, 고유벡터가 서로 수직이려면 대칭이어야 합니다. 그런데 공학의 행렬 대부분은 정사각조차 아닙니다. 사진은 1080×1920, 측정 자료는 관측 수천 개 × 변수 몇십 개, 추천 시스템은 사용자 수백만 × 상품 수십만입니다. 특이값 분해(Singular Value Decomposition, SVD)는 이 모든 행렬에 예외 없이 존재합니다. 어떤 행렬이든 회전 → 축 방향으로 늘이기 → 회전으로 나뉘고, 늘이는 배율(특이값)의 크기 순서가 그 행렬에서 무엇이 중요하고 무엇이 잡음인지를 알려 줍니다. 이 장은 그 그림에서 출발해 이미지 압축, 유사역행렬, 조건수, 흐린 신호 복원까지 갑니다.

이 수식이 없었다면"당신이 좋아할 만한 영화"

스트리밍 서비스에는 사용자 수백만 명과 작품 수만 편이 있고, 한 사람이 평점을 남긴 작품은 그중 극히 일부입니다. 비어 있는 칸이 대부분인 거대한 사용자 × 작품 표에서, 아직 보지 않은 작품의 평점을 어떻게 짐작할까요? 사용자마다, 작품마다 규칙을 따로 만들 수는 없습니다.

관찰은 이것입니다. 사람의 취향은 생각보다 몇 가지 축으로 요약됩니다. "액션을 얼마나 좋아하나", "잔잔한 드라마를 얼마나 좋아하나" 같은 몇 개의 숨은 요인이 평점의 대부분을 설명한다면, 평점 표는 낮은 계수의 행렬에 가깝습니다. SVD는 행렬을 중요도 순서의 랭크 1 조각으로 나누어 그 숨은 축을 찾아 줍니다. 2006–2009년 넷플릭스가 상금 100만 달러를 걸고 연 추천 정확도 대회(Netflix Prize)에서 상위 팀들이 공통으로 쓴 핵심 도구가 바로 이런 저랭크 행렬 분해였습니다.

빈칸투성이 평점 표→규칙을 일일이? 불가능→저랭크 근사(SVD)→숨은 취향 축 몇 개

회전 → 늘이기 → 회전

대칭이 아닌 행렬은 어느 축을 따라 늘이나

13장에서 대칭 행렬 S=QΛQTS = Q\Lambda Q^{\mathsf T}는 서로 수직인 축(고유벡터)을 따라 늘이기만 한다는 것을 보았습니다. 그런데 전단 [1101]\begin{bmatrix}1 & 1\\ 0 & 1\end{bmatrix}처럼 대칭이 아닌 행렬은 고유벡터가 하나뿐이거나 서로 비스듬합니다. 그래도 이 행렬이 단위원을 보내는 모양은 분명히 타원입니다. 타원에는 언제나 서로 수직인 두 축(장축과 단축)이 있습니다. 그 축은 어디서 왔을까요?

답은 입력 쪽과 출력 쪽에 서로 다른 수직 축을 허락하는 것입니다. 입력 공간에서 서로 수직인 단위 벡터 v1,v2\mathbf v_1, \mathbf v_2를 잘 고르면, 그 상 Av1,Av2A\mathbf v_1, A\mathbf v_2도 서로 수직이 되고 각각 타원의 장축·단축이 됩니다. 그 길이를 σ1≥σ2≥0\sigma_1 \ge \sigma_2 \ge 0, 방향을 단위 벡터 u1,u2\mathbf u_1, \mathbf u_2라 쓰면

Av1=σ1u1,Av2=σ2u2⟺AV=UΣ⟺A=UΣVTA\mathbf v_1 = \sigma_1\mathbf u_1,\quad A\mathbf v_2 = \sigma_2\mathbf u_2 \quad\Longleftrightarrow\quad AV = U\Sigma \quad\Longleftrightarrow\quad A = U\Sigma V^{\mathsf T}
V=[v1 v2]V = [\mathbf v_1\ \mathbf v_2], U=[u1 u2]U = [\mathbf u_1\ \mathbf u_2]는 직교 행렬, Σ=diag⁡(σ1,σ2)\Sigma = \operatorname{diag}(\sigma_1, \sigma_2). VV가 직교라서 V−1=VTV^{-1} = V^{\mathsf T}이고, 그래서 양변 오른쪽에 VTV^{\mathsf T}를 곱하면 분해가 나온다.

오른쪽에서 왼쪽으로 읽으면 그림이 됩니다. VTV^{\mathsf T}가 입력을 돌려 v1,v2\mathbf v_1, \mathbf v_2를 좌표축에 맞추고, Σ\Sigma가 축 방향으로 σ1\sigma_1배, σ2\sigma_2배 늘이고, UU가 그 결과를 u1,u2\mathbf u_1, \mathbf u_2 방향으로 돌려놓습니다.

v₁v₂① 입력: 단위원 Vᵀ e₁e₂② 회전: v를 축에 맞춤 Σ σ₁e₁σ₂e₂③ 축 방향 늘이기 U σ₁u₁ = Av₁σ₂u₂④ 회전: 출력 = A·원 A = (1/3)·[3 0; 4 5] = UΣVᵀ, σ₁ = √5 ≈ 2.24, σ₂ = √5/3 ≈ 0.75
그림 14-1. 예제 14.1의 행렬(1/3배)을 네 단계로 본 그림. 입력 쪽 수직 축 v₁, v₂(①)를 먼저 좌표축에 맞추고(②), 축 방향으로 σ₁, σ₂배 늘인 뒤(③), 출력 쪽 수직 축 u₁, u₂로 돌린다(④). ④의 타원은 A가 단위원을 보낸 모양 그대로이며, 그 장축·단축이 σ₁u₁, σ₂u₂다.
정리 14.1 (특이값 분해) 모든 실수 m×n 행렬 AA는 A=UΣVTA = U\Sigma V^{\mathsf T} 로 쓸 수 있다. UU(m×m)와 VV(n×n)는 직교 행렬이고, Σ\Sigma(m×n)는 대각선에 σ1≥σ2≥⋯≥σr>0\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0과 나머지 0을 가진 "대각" 행렬이다. rr은 AA의 계수다. σi\sigma_i를 특이값(singular value), UU의 열 ui\mathbf u_i를 왼쪽 특이벡터, VV의 열 vi\mathbf v_i를 오른쪽 특이벡터라 한다. 특이값은 AA가 정하면 유일하다.
SIMULATOR

단위원을 세 단계로 타원으로

① 입력
행렬 A
σ₁, σ₂—
v₁ 방향 / u₁ 방향—
|det A| = σ₁σ₂—
U는—
해볼 것: ① '전단'을 고르고 t를 천천히 밀어 보세요. 고유벡터는 x축 하나뿐이지만, 특이벡터는 입력과 출력 쪽에 수직인 쌍이 하나씩 있습니다. ② '대칭'에서는 v와 u가 같은 방향입니다(대칭 양의 정부호면 SVD = 고유분해). ③ '반사가 섞인' 행렬은 det < 0이라 마지막 단계에서 원이 뒤집힙니다. ④ '계수 1'에서는 σ₂ = 0, 타원이 선분으로 납작해집니다. 모델: V는 항상 회전으로 고르고, det A < 0이면 U가 반사를 맡도록 했습니다. 단계 0→1은 Vᵀ, 1→2는 Σ, 2→3은 U를 서서히 적용합니다.

특이값은 어디서 오나: ATAA^{\mathsf T}A

장축 방향을 어떻게 찾나

타원의 장축은 단위원 위의 x\mathbf x 가운데 ∥Ax∥\|A\mathbf x\|를 가장 크게 만드는 방향입니다. 모든 방향을 하나씩 시험하지 않고 이 방향을 계산으로 얻을 수 있을까요?

길이 대신 길이의 제곱을 보면 길이 열립니다. ∥Ax∥2=(Ax)T(Ax)=xT(ATA)x\|A\mathbf x\|^2 = (A\mathbf x)^{\mathsf T}(A\mathbf x) = \mathbf x^{\mathsf T}(A^{\mathsf T}A)\mathbf x. 그런데 ATAA^{\mathsf T}A는 언제나 대칭이고 양의 준정부호입니다. 13장의 레일리 몫에 따르면 ∥x∥=1\|\mathbf x\| = 1에서 이 이차 형식의 최댓값은 ATAA^{\mathsf T}A의 가장 큰 고유값이고, 그때의 x\mathbf x가 그 고유벡터입니다. 그러니

ATA vi=σi2 vi,σi=λi(ATA),ui=Aviσi (σi>0)A^{\mathsf T}A\,\mathbf v_i = \sigma_i^2\,\mathbf v_i, \qquad \sigma_i = \sqrt{\lambda_i(A^{\mathsf T}A)}, \qquad \mathbf u_i = \frac{A\mathbf v_i}{\sigma_i}\ (\sigma_i > 0)
오른쪽 특이벡터 = ATAA^{\mathsf T}A의 고유벡터, 특이값² = 그 고유값. 같은 논리로 AATui=σi2uiAA^{\mathsf T}\mathbf u_i = \sigma_i^2\mathbf u_i이므로 왼쪽 특이벡터 = AATAA^{\mathsf T}의 고유벡터다.
정리 14.2의 증명 (존재) ATAA^{\mathsf T}A는 대칭이므로 스펙트럼 정리(13장)에 의해 정규직교 고유벡터 v1,…,vn\mathbf v_1, \dots, \mathbf v_n과 고유값 λ1≥⋯≥λn\lambda_1 \ge \dots \ge \lambda_n을 가진다. λi=viTATAvi=∥Avi∥2≥0\lambda_i = \mathbf v_i^{\mathsf T}A^{\mathsf T}A\mathbf v_i = \|A\mathbf v_i\|^2 \ge 0이므로 σi=λi\sigma_i = \sqrt{\lambda_i}로 둘 수 있다. σi>0\sigma_i > 0인 i≤ri \le r에 대해 ui=Avi/σi\mathbf u_i = A\mathbf v_i/\sigma_i로 두면 uiTuj=viTATAvj/(σiσj)=λjviTvj/(σiσj)=δij\mathbf u_i^{\mathsf T}\mathbf u_j = \mathbf v_i^{\mathsf T}A^{\mathsf T}A\mathbf v_j/(\sigma_i\sigma_j) = \lambda_j\mathbf v_i^{\mathsf T}\mathbf v_j/(\sigma_i\sigma_j) = \delta_{ij}. 즉 ui\mathbf u_i도 저절로 정규직교다. 모자란 u\mathbf u는 그람–슈미트로 채워 Rm\mathbb R^m의 정규직교 기저를 완성하면 AV=UΣAV = U\Sigma가 된다. ∎
예제 14.1 (손으로 구하는 SVD) A=[3045]A = \begin{bmatrix}3 & 0\\ 4 & 5\end{bmatrix}.
  1. ATA=[3405][3045]=[25202025]A^{\mathsf T}A = \begin{bmatrix}3 & 4\\ 0 & 5\end{bmatrix}\begin{bmatrix}3 & 0\\ 4 & 5\end{bmatrix} = \begin{bmatrix}25 & 20\\ 20 & 25\end{bmatrix}. 대각합 50, 행렬식 225이므로 고유값은 λ2−50λ+225=0\lambda^2 - 50\lambda + 225 = 0의 근 45와 5.
  2. σ1=45=35\sigma_1 = \sqrt{45} = 3\sqrt5, σ2=5\sigma_2 = \sqrt5. 고유벡터는 v1=12(1,1)\mathbf v_1 = \tfrac{1}{\sqrt2}(1, 1), v2=12(−1,1)\mathbf v_2 = \tfrac{1}{\sqrt2}(-1, 1).
  3. u1=Av1/σ1=12(3,9)/(35)=110(1,3)\mathbf u_1 = A\mathbf v_1/\sigma_1 = \tfrac{1}{\sqrt2}(3, 9)/(3\sqrt5) = \tfrac{1}{\sqrt{10}}(1, 3), u2=Av2/σ2=12(−3,1)/5=110(−3,1)\mathbf u_2 = A\mathbf v_2/\sigma_2 = \tfrac{1}{\sqrt2}(-3, 1)/\sqrt5 = \tfrac{1}{\sqrt{10}}(-3, 1). 두 벡터의 내적은 −3+3=0-3 + 3 = 0, 정말 수직이다.
  4. 검산: σ1σ2=35⋅5=15=∣det⁡A∣\sigma_1\sigma_2 = 3\sqrt5\cdot\sqrt5 = 15 = |\det A|. 넓이 배율은 두 늘이기 배율의 곱이다.
SIMULATOR

방향마다 얼마나 늘어나나: ‖Ax‖의 최대와 최소

x를 단위원 위에서 끌어 보세요
‖Ax‖ — 입력 각도 θ
θ—
‖Ax‖—
σ₁ (최대)—
σ₂ (최소)—
해볼 것: ① x를 돌려 ‖Ax‖가 가장 커지는 각도를 찾으세요. 오른쪽 그래프의 봉우리가 σ₁이고 그 θ가 v₁의 방향입니다. ② 봉우리와 골짜기는 정확히 90° 떨어져 있습니다. v₁ ⟂ v₂. ③ '거의 특이'에서는 골짜기가 0에 가깝습니다. 그 방향의 입력은 거의 지워집니다. 모델: 그래프는 θ ∈ [0°, 180°)에서 ‖A(cos θ, sin θ)‖를 그린 것입니다(θ + 180°는 같은 값).

네 부분공간의 정규직교 기저를 한 번에

6장에서 그린 "큰 그림"을 떠올려 봅시다. 입력 공간 Rn\mathbb R^n은 행공간 C(AT)C(A^{\mathsf T})(차원 rr)과 영공간 N(A)N(A)(차원 n−rn-r)로 수직으로 나뉘고, 출력 공간 Rm\mathbb R^m은 열공간 C(A)C(A)(차원 rr)와 왼쪽 영공간 N(AT)N(A^{\mathsf T})(차원 m−rm-r)로 나뉩니다. SVD는 이 네 공간 모두에 정규직교 기저를, 그것도 서로 짝이 맞는 기저를 줍니다.

입력 ℝⁿ출력 ℝᵐ 행공간 C(Aᵀ) · 차원 rv₁, …, vᵣσ > 0인 오른쪽 특이벡터 영공간 N(A) · 차원 n − rvᵣ₊₁, …, vₙA가 0으로 보낸다 열공간 C(A) · 차원 ru₁, …, uᵣσ > 0인 왼쪽 특이벡터 왼쪽 영공간 N(Aᵀ) · 차원 m − ruᵣ₊₁, …, uₘA의 출력이 닿지 않는다 A vᵢ = σᵢ uᵢ Aᵀ uᵢ = σᵢ vᵢ 0
그림 14-2. SVD가 그리는 큰 그림. 행공간의 vᵢ는 열공간의 uᵢ와 일대일로 짝지어져 σᵢ배가 되고, 영공간의 v는 0으로 간다. 거꾸로 Aᵀ는 uᵢ를 σᵢvᵢ로 돌려보낸다. 계수 r = 0이 아닌 특이값의 개수.

이 짝짓기가 SVD의 진짜 의미입니다. A는 행공간의 정규직교 기저를 열공간의 정규직교 기저로, 축마다 σ배씩 보내는 사상이고, 영공간은 버립니다. 행공간과 열공간 사이에서만 보면 A는 언제나 가역입니다(rr×rr 대각 σi>0\sigma_i > 0). 이 관찰이 6절의 유사역행렬로 이어집니다.

정의 14.3 (완전형과 축소형) 정리 14.1의 UU(m×m), Σ\Sigma(m×n), VV(n×n)를 완전형 SVD라 한다. 0인 특이값에 해당하는 열을 버리면 A=UrΣrVrTA = U_r\Sigma_rV_r^{\mathsf T}(UrU_r: m×r, Σr\Sigma_r: r×r, VrV_r: n×r)가 되는데 이를 축소형 SVD(reduced/thin SVD)라 한다. 계산과 저장에는 축소형을, 네 부분공간을 모두 말할 때는 완전형을 쓴다.
대칭 행렬과의 관계 AA가 대칭 양의 준정부호면 SVD와 스펙트럼 분해는 같습니다(U=V=QU = V = Q, Σ=Λ\Sigma = \Lambda). 대칭이지만 음의 고유값이 있으면 σi=∣λi∣\sigma_i = |\lambda_i|이고, 부호는 ui=−vi\mathbf u_i = -\mathbf v_i로 넘어갑니다. 일반 정사각 행렬에서는 특이값과 고유값이 다릅니다. 전단 [1101]\begin{bmatrix}1 & 1\\ 0 & 1\end{bmatrix}의 고유값은 1, 1이지만 특이값은 1+52≈1.618\tfrac{1+\sqrt5}{2} \approx 1.618과 5−12≈0.618\tfrac{\sqrt5-1}{2} \approx 0.618입니다.

랭크 1 조각의 합

A=UΣVTA = U\Sigma V^{\mathsf T}를 2장의 "외적의 합" 곱셈으로 풀어 쓰면 SVD의 또 다른 얼굴이 나옵니다.

A=σ1u1v1T+σ2u2v2T+⋯+σrurvrTA = \sigma_1\mathbf u_1\mathbf v_1^{\mathsf T} + \sigma_2\mathbf u_2\mathbf v_2^{\mathsf T} + \dots + \sigma_r\mathbf u_r\mathbf v_r^{\mathsf T}
각 항 uiviT\mathbf u_i\mathbf v_i^{\mathsf T}는 계수 1인 m×n 행렬이고 프로베니우스 노름이 1이다. 조각들은 서로 직교한다(대각합 내적 tr⁡((uiviT)TujvjT)=0\operatorname{tr}((\mathbf u_i\mathbf v_i^{\mathsf T})^{\mathsf T}\mathbf u_j\mathbf v_j^{\mathsf T}) = 0, i≠ji \ne j). 그래서 σᵢ가 곧 i번째 조각의 "무게"다.

이미지로 생각하면 쉽습니다. uvT\mathbf u\mathbf v^{\mathsf T}는 세로 무늬 u\mathbf u와 가로 무늬 v\mathbf v를 곱한 체크무늬 한 장입니다. SVD는 행렬을 무게 순서로 정렬된 체크무늬 레이어의 합으로 분해하고, 앞쪽 레이어 몇 장이 전체 모양의 대부분을 이룹니다. 6장의 랭크 1 행렬이 여기서 부품이 됩니다.

SIMULATOR

체크무늬 레이어를 한 장씩 쌓기

σ₁ … σ₁₀—
‖A − A_k‖_F / ‖A‖_F—
‖A − A_k‖₂ = σ_{k+1}—
해볼 것: ① '격자무늬'에서 k = 3이면 오차가 잡음 수준으로 뚝 떨어집니다. 특이값 목록에서도 σ₃과 σ₄ 사이에 큰 틈이 보입니다. ② 잡음을 키우면 σ₄ 이후가 커지고 틈이 흐려집니다. 계수를 "숫자로" 판정하기 어려워지는 순간입니다(16장). ③ '삼각형'(위삼각이 모두 1)은 계수 10이지만 특이값이 빠르게 줄어 k = 3만으로도 모양이 보입니다. 모델: 10×10 행렬, 패널은 왼쪽부터 A, k번째 레이어 σ_k u_k v_kᵀ, 합 A_k, 나머지 A − A_k(파랑 음수, 빨강 양수).

최선의 저랭크 근사: 에커트–영 정리

숫자를 4분의 1만 남긴다면 무엇을 남길까

64×64 흑백 사진 한 장은 숫자 4,096개입니다. 저장 공간이 4분의 1밖에 없다면, 어떤 숫자 1,000여 개를 남겨야 원래 사진과 가장 비슷할까요? 픽셀을 4개 중 하나씩만 남기면 해상도가 반으로 떨어집니다. 더 영리한 방법이 있을까요?

앞쪽 k개 레이어만 남긴 Ak=∑i≤kσiuiviTA_k = \sum_{i \le k}\sigma_i\mathbf u_i\mathbf v_i^{\mathsf T}는 숫자 k(m+n+1)k(m + n + 1)개로 저장됩니다(ui\mathbf u_i m개, vi\mathbf v_i n개, σi\sigma_i 1개). 64×64에서 k = 8이면 8×129=10328 \times 129 = 1032개, 원본의 약 25%입니다. 놀라운 것은 이것이 단지 좋은 방법이 아니라 최선이라는 사실입니다.

정리 14.4 (에커트–영–미르스키) 계수가 k 이하인 모든 m×n 행렬 BB 가운데 ∥A−Ak∥2=σk+1≤∥A−B∥2,∥A−Ak∥F=σk+12+⋯+σr2≤∥A−B∥F\|A - A_k\|_2 = \sigma_{k+1} \le \|A - B\|_2, \qquad \|A - A_k\|_F = \sqrt{\sigma_{k+1}^2 + \dots + \sigma_r^2} \le \|A - B\|_F 이다. 즉 특이값이 큰 k개 조각을 남긴 것이 스펙트럼 노름으로도, 프로베니우스 노름으로도 가장 가까운 랭크 k 행렬이다.
증명 아이디어(스펙트럼 노름). 계수 k인 BB의 영공간은 n − k차원이고 v1,…,vk+1\mathbf v_1, \dots, \mathbf v_{k+1}이 생성하는 k+1차원 공간과 0이 아닌 단위 벡터 w\mathbf w를 공유한다(차원의 합이 n을 넘으므로). 그러면 ∥(A−B)w∥=∥Aw∥≥σk+1\|(A - B)\mathbf w\| = \|A\mathbf w\| \ge \sigma_{k+1}이다. ∎

이 정리는 1936년 에커트(Carl Eckart)와 영(Gale Young)이 심리측정학의 요인 분석 문제를 풀며 발표했습니다. 오늘날 PCA(15장), 이미지·영상 압축의 이론적 기준, 추천 시스템, 대형 언어 모델의 가중치 행렬을 저랭크로 줄이는 기법까지 모두 이 정리 위에 있습니다.

SIMULATOR

SVD로 사진 압축하기

저장할 숫자—
상대 오차 ‖A − A_k‖_F / ‖A‖_F—
남긴 에너지 Σσ²—
해볼 것: ① '풍경'에서 k를 1부터 올려 보세요. k = 1은 줄무늬 한 장, k = 8쯤이면 집과 해가 알아볼 만하고 저장량은 25%입니다. ② '막대'는 k = 2에서 완벽히 복원됩니다. 행이 두 종류뿐인 계수 2 행렬이기 때문입니다. ③ '동심원'은 가로세로로 분리되지 않는 무늬라 특이값이 천천히 줄고 압축이 잘 안 됩니다. 모델: 64×64 흑백(0~1), 특이값 그래프는 로그 눈금, 세로선이 k. 실제 JPEG는 SVD가 아니라 고정된 기저(이산 코사인 변환)를 쓰는데, 영상마다 기저를 저장할 필요가 없어서입니다.

행렬의 크기는 특이값이 정한다

벡터에는 길이가 있습니다(1장). 행렬의 "크기"는 무엇일까요? 가장 자연스러운 답은 "가장 많이 늘이는 배율"이고, 그것이 정확히 σ1\sigma_1입니다.

노름정의특이값으로쓰임
스펙트럼(2-)노름∥A∥2=max⁡∥x∥=1∥Ax∥\|A\|_2 = \max_{\|\mathbf x\|=1}\|A\mathbf x\|σ1\sigma_1최악의 증폭, 안정성, 오차 한계
프로베니우스 노름∥A∥F=∑i,jaij2\|A\|_F = \sqrt{\sum_{i,j} a_{ij}^2}σ12+⋯+σr2\sqrt{\sigma_1^2 + \dots + \sigma_r^2}전체 에너지, 근사 오차, 최소제곱 맞춤
핵 노름∥A∥∗\|A\|_* σ1+⋯+σr\sigma_1 + \dots + \sigma_r계수 최소화의 볼록 대용(행렬 완성)
정리 14.5 (직교 불변성) 직교 행렬 Q1,Q2Q_1, Q_2에 대해 ∥Q1AQ2∥2=∥A∥2\|Q_1AQ_2\|_2 = \|A\|_2, ∥Q1AQ2∥F=∥A∥F\|Q_1AQ_2\|_F = \|A\|_F이다. 직교 변환은 길이를 바꾸지 않기 때문이다. 그래서 ∥A∥=∥UΣVT∥=∥Σ∥\|A\| = \|U\Sigma V^{\mathsf T}\| = \|\Sigma\|이고, 대각 행렬의 노름은 대각 원소로 바로 계산된다. 위 표의 세 번째 열은 이렇게 나온다. 또 ∥A∥F2=tr⁡(ATA)=∑λi(ATA)=∑σi2\|A\|_F^2 = \operatorname{tr}(A^{\mathsf T}A) = \sum\lambda_i(A^{\mathsf T}A) = \sum\sigma_i^2로도 확인된다.
예제 14.2 A=[3045]A = \begin{bmatrix}3 & 0\\ 4 & 5\end{bmatrix}의 프로베니우스 노름은 9+0+16+25=50\sqrt{9 + 0 + 16 + 25} = \sqrt{50}이고, 특이값으로는 45+5=50\sqrt{45 + 5} = \sqrt{50}. 같다. 스펙트럼 노름은 σ1=35≈6.71\sigma_1 = 3\sqrt5 \approx 6.71로, 가장 큰 성분 5나 열의 길이 5, 41≈6.40\sqrt{41}\approx 6.40보다 크다. 행렬은 열 하나보다 비스듬한 방향을 더 많이 늘일 수 있다.

유사역행렬: 역행렬이 없을 때의 "최선의 되돌리기"

해가 없거나 너무 많을 때

미지수가 식보다 많으면 Ax=bA\mathbf x = \mathbf b의 해는 무수히 많고(5장), 식이 미지수보다 많으면 보통 해가 없어 최소제곱을 씁니다(8장). 그런데 AA의 열이 종속이면 최소제곱 해마저 무수히 많아 ATAA^{\mathsf T}A가 가역이 아닙니다. 이 모든 경우에 "단 하나의 답"을 정하는 규칙이 있을까요?

3절의 그림에서 답이 보입니다. AA는 행공간을 열공간으로 σi\sigma_i배씩 보내고 영공간은 버립니다. 그렇다면 되돌리는 쪽은 열공간의 ui\mathbf u_i를 행공간의 vi\mathbf v_i로 1/σi1/\sigma_i배씩 돌려보내고, 왼쪽 영공간은 버리면 됩니다.

A+=VΣ+UT=∑i=1r1σiviuiT,x+=A+bA^+ = V\Sigma^+U^{\mathsf T} = \sum_{i=1}^{r}\frac{1}{\sigma_i}\mathbf v_i\mathbf u_i^{\mathsf T}, \qquad \mathbf x^+ = A^+\mathbf b
Σ+\Sigma^+는 Σ\Sigma를 전치하고 0이 아닌 σi\sigma_i를 1/σi1/\sigma_i로 바꾼 n×m 행렬. 0인 특이값은 0으로 둔다(나누지 않는다). AA가 가역이면 A+=A−1A^+ = A^{-1}.
정리 14.6 (최소 노름 최소제곱 해) x+=A+b\mathbf x^+ = A^+\mathbf b는 ∥Ax−b∥\|A\mathbf x - \mathbf b\|를 최소로 하는 모든 x\mathbf x 가운데 길이가 가장 짧은 유일한 해다.
증명. x=Vy\mathbf x = V\mathbf y, c=UTb\mathbf c = U^{\mathsf T}\mathbf b로 좌표를 바꾸면 직교 불변성에 의해 ∥Ax−b∥2=∥Σy−c∥2=∑i≤r(σiyi−ci)2+∑i>rci2\|A\mathbf x - \mathbf b\|^2 = \|\Sigma\mathbf y - \mathbf c\|^2 = \sum_{i\le r}(\sigma_iy_i - c_i)^2 + \sum_{i>r}c_i^2. 최소가 되려면 yi=ci/σiy_i = c_i/\sigma_i (i≤ri \le r)이고 yr+1,…y_{r+1}, \dots는 자유다. ∥x∥=∥y∥\|\mathbf x\| = \|\mathbf y\|를 최소로 하려면 자유인 성분을 0으로 두면 된다. 그것이 y=Σ+c\mathbf y = \Sigma^+\mathbf c, 즉 x=A+b\mathbf x = A^+\mathbf b. ∎
예제 14.3 식 하나 x1+2x2=5x_1 + 2x_2 = 5, 즉 A=[1  2]A = [1\ \ 2]. 해는 직선 전체입니다. AA의 SVD는 σ1=5\sigma_1 = \sqrt5, v1=(1,2)/5\mathbf v_1 = (1, 2)/\sqrt5, u1=1\mathbf u_1 = 1이므로 A+=v1⋅15⋅1=15(1,2)TA^+ = \mathbf v_1\cdot\tfrac{1}{\sqrt5}\cdot 1 = \tfrac15(1, 2)^{\mathsf T}, x+=(1,2)\mathbf x^+ = (1, 2). 확인: 1+4=51 + 4 = 5이고, (1,2)(1, 2)는 행 (1,2)(1, 2)와 평행하므로 원점에서 해 직선에 내린 수선의 발입니다. 다른 해 (5,0)(5, 0)의 길이 5보다 ∥x+∥=5\|\mathbf x^+\| = \sqrt5가 짧습니다.
SIMULATOR

해 직선 위에서 가장 짧은 해

초록 점을 해 직선 위에서 끌어 보세요
문제
x⁺ = A⁺b—
‖x⁺‖ / ‖끈 점‖—
잔차 ‖Ax − b‖—
—
해볼 것: ① 초록 점을 해 직선 위에서 끌어 보세요. 잔차는 그대로인데 길이는 보라 점 x⁺에서 가장 짧습니다. ② 보라 점은 언제나 행공간(점선, 방향 a) 위에 있고, 해 직선은 영공간 방향(회색)과 평행합니다. ③ '계수 1인 2×2'에서 A = [a₁ a₂; 2a₁ 2a₂]의 출력은 늘 (t, 2t) 꼴이라 b가 그 위에 없으면 해가 없습니다. 이때도 최소제곱 해들은 직선을 이루고, x⁺는 그중 가장 짧은 것입니다. 모델: 입력 공간 ℝ²만 그렸습니다.

조건수: 오차가 몇 배로 커지나

측정값 0.01%의 오차가 답을 얼마나 흔드나

계측 장비로 b\mathbf b를 재서 Ax=bA\mathbf x = \mathbf b를 풀어 x\mathbf x를 얻습니다. b\mathbf b에 아주 작은 오차 δb\delta\mathbf b가 섞이면 답은 얼마나 틀릴까요? 같은 0.01% 오차라도 어떤 행렬에서는 답이 0.01% 틀리고, 어떤 행렬에서는 100% 틀립니다.

A−1=VΣ−1UTA^{-1} = V\Sigma^{-1}U^{\mathsf T}는 ui\mathbf u_i 방향 성분을 1/σi1/\sigma_i배 합니다. 최악의 경우는 b\mathbf b가 크게 늘어나는 u1\mathbf u_1 방향(답이 작게 나옴)이고 오차 δb\delta\mathbf b가 가장 적게 늘어나는 un\mathbf u_n 방향(답의 오차가 크게 나옴)일 때입니다.

∥δx∥∥x∥≤κ(A) ∥δb∥∥b∥,κ(A)=∥A∥2∥A−1∥2=σ1σn\frac{\|\delta\mathbf x\|}{\|\mathbf x\|} \le \kappa(A)\,\frac{\|\delta\mathbf b\|}{\|\mathbf b\|}, \qquad \kappa(A) = \|A\|_2\|A^{-1}\|_2 = \frac{\sigma_1}{\sigma_n}
등호는 위에서 말한 최악의 방향 조합에서 성립한다. κ = 1은 직교 행렬(최상), κ = ∞는 특이 행렬. 부동소수점에서는 대략 log⁡10κ\log_{10}\kappa자리의 유효숫자를 잃는다(16장).
행렬식은 조건수가 아니다 det⁡A\det A가 작다고 나쁜 행렬이 아닙니다. 0.01I0.01I(100×100)의 행렬식은 10−20010^{-200}이지만 κ = 1인 완벽한 행렬입니다. 거꾸로 [110401]\begin{bmatrix}1 & 10^4\\ 0 & 1\end{bmatrix}의 행렬식은 1이지만 κ ≈ 10⁸입니다. "거의 특이한가"를 묻는 올바른 질문은 "가장 작은 특이값이 가장 큰 것에 비해 얼마나 작은가"입니다.
SIMULATOR

측정 오차의 원이 해의 타원이 된다

측정 b와 오차 원 ‖δb‖ ≤ ε
해 x = A⁻¹b와 오차 타원
σ₁, σ₂—
상대 오차 증폭(최악)—
이론 상한 κ—
해볼 것: ① κ를 1(10⁰)에서 100(10²)으로 올리면 오른쪽 오차 타원이 한 방향(v₂)으로 길게 늘어납니다. ② b가 u₁ 방향(각 0°)일 때 증폭이 κ에 딱 닿습니다. b를 u₂ 쪽(90°)으로 돌리면 해 자체도 커져 상대 증폭은 1로 줄어듭니다. 조건수는 "최악의 경우"의 보증입니다. 모델: A = R(30°)·diag(1, 1/κ)·R(−20°), ‖b‖ = 1. 오차 원 위 120점을 A⁻¹로 보낸 뒤 최대 상대 증폭을 셉니다.

절단 SVD: 흐린 신호를 되살리기

흐려진 측정을 되돌리면 왜 잡음만 남나

망원경 사진, 초음파 신호, 센서 응답처럼 측정 장치는 신호를 조금씩 흐리게 합니다. 흐림이 선형이면 b=Ax+잡음\mathbf b = A\mathbf x + \text{잡음}이고, 흐림 행렬 AA를 알면 x=A−1b\mathbf x = A^{-1}\mathbf b로 되돌리면 될 것 같습니다. 그런데 실제로 해 보면 원래 신호 대신 거대한 지그재그가 나옵니다. 무엇이 잘못됐을까요?

흐림 행렬은 매끈한 무늬(작은 i의 vi\mathbf v_i)는 거의 그대로 통과시키고 빠르게 출렁이는 무늬(큰 i)는 거의 지웁니다. 그래서 특이값이 지수적으로 작아지고 κ가 천문학적으로 커집니다. 역행렬 해를 SVD로 쓰면 원인이 보입니다.

A−1b=∑i=1nuiTbσivi=x+∑i=1nuiTεσiviA^{-1}\mathbf b = \sum_{i=1}^{n}\frac{\mathbf u_i^{\mathsf T}\mathbf b}{\sigma_i}\mathbf v_i = \mathbf x + \sum_{i=1}^{n}\frac{\mathbf u_i^{\mathsf T}\boldsymbol\varepsilon}{\sigma_i}\mathbf v_i
잡음 ε\boldsymbol\varepsilon은 모든 ui\mathbf u_i 방향에 고르게 섞여 있다. σi\sigma_i가 작은 항에서 잡음이 1/σi1/\sigma_i배로 폭발한다.

해법은 단순합니다. 잡음에 묻힌 작은 특이값의 항을 버리는 것입니다. 앞쪽 k개만 남긴 xk=∑i≤k(uiTb/σi)vi=Ak+b\mathbf x_k = \sum_{i\le k}(\mathbf u_i^{\mathsf T}\mathbf b/\sigma_i)\mathbf v_i = A_k^+\mathbf b를 절단 SVD(truncated SVD) 해라 합니다. k가 작으면 신호의 세부를 잃고(편향), k가 크면 잡음이 폭발합니다(분산). 그 사이의 좋은 k를 고르는 것이 정칙화(regularization)의 핵심이고, 머신러닝의 릿지 회귀(티호노프 정칙화)는 항을 자르는 대신 σi2/(σi2+λ)\sigma_i^2/(\sigma_i^2 + \lambda)로 부드럽게 줄이는 같은 아이디어입니다.

SIMULATOR

몇 개의 특이값까지 믿을 것인가

신호: 참값 · 측정 b · 복원 x_k
σᵢ와 |uᵢᵀb| (로그 눈금)
복원 오차 ‖x_k − x‖/‖x‖—
가장 좋은 k—
κ(A) = σ₁/σ₄₈—
해볼 것: ① k를 48까지 올려 보세요(그냥 A⁻¹b). 복원이 지그재그로 폭발합니다. ② 오른쪽 그래프에서 |uᵢᵀb|(주황)가 잡음 바닥에 닿아 평평해지는 지점이 σᵢ(보라)가 그 바닥 아래로 내려가는 지점입니다. 그 근처 k가 가장 좋습니다(피카르 조건). ③ 잡음을 0으로 하면 큰 k도 괜찮아집니다. 부동소수점 반올림이라는 작은 잡음이 남아 있을 뿐입니다. 모델: 신호 48점, 가우스 흐림(행 합 1로 정규화), 잡음은 시드 고정 정규 난수입니다.

이 도구가 쓰이는 곳

"중요한 순서로 나누고, 덜 중요한 것을 버린다"는 SVD의 문장은 데이터, 신호, 제어, 계산 곳곳에 다른 이름으로 나타납니다.

분야행렬SVD가 하는 일
추천 시스템사용자 × 상품 평점저랭크 근사로 숨은 취향 요인을 찾고 빈칸을 예측(실제로는 결측값 때문에 변형된 분해를 쓴다)
정보 검색단어 × 문서 빈도잠재 의미 분석(LSA): 앞쪽 특이벡터 공간에서 비슷한 뜻의 단어·문서가 가까워진다
신호 처리배열 안테나 표본 행렬신호 부분공간과 잡음 부분공간 분리(MUSIC 같은 도래각 추정)
로봇·비전대응점 상관 행렬두 점군을 가장 잘 겹치는 회전(카브시 알고리즘), 카메라 행렬 추정
제어·모델 축소그람 행렬, 한켈 행렬균형 절단: 작은 특이값 상태를 버려 고차 모델을 저차로
딥러닝가중치 행렬저랭크 분해로 파라미터 수를 줄이는 압축·미세 조정 기법

핵심 정리

  1. 모든 m×n 행렬은 A=UΣVTA = U\Sigma V^{\mathsf T}: 회전(또는 반사) → 축 방향 늘이기 → 회전. 단위원(구)은 반지름 σ₁, σ₂, …의 타원(체)이 된다. Avi=σiuiA\mathbf v_i = \sigma_i\mathbf u_i.
  2. 특이값은 σi=λi(ATA)\sigma_i = \sqrt{\lambda_i(A^{\mathsf T}A)}, 오른쪽 특이벡터는 ATAA^{\mathsf T}A의 고유벡터, 왼쪽 특이벡터는 AATAA^{\mathsf T}의 고유벡터이며 ui=Avi/σi\mathbf u_i = A\mathbf v_i/\sigma_i로 구한다.
  3. SVD는 네 부분공간의 정규직교 기저를 짝지어 준다. v₁…v_r은 행공간, 나머지 v는 영공간, u₁…u_r은 열공간, 나머지 u는 왼쪽 영공간. 계수 = 0이 아닌 특이값의 개수.
  4. A=∑σiuiviTA = \sum\sigma_i\mathbf u_i\mathbf v_i^{\mathsf T}: 무게 순서의 랭크 1 조각. 에커트–영: 앞쪽 k개가 최선의 랭크 k 근사이고 오차는 ∥A−Ak∥2=σk+1\|A - A_k\|_2 = \sigma_{k+1}, ∥A−Ak∥F=∑i>kσi2\|A - A_k\|_F = \sqrt{\sum_{i>k}\sigma_i^2}.
  5. ∥A∥2=σ1\|A\|_2 = \sigma_1, ∥A∥F=∑σi2\|A\|_F = \sqrt{\sum\sigma_i^2}. 직교 변환은 두 노름을 바꾸지 않는다.
  6. 유사역행렬 A+=VΣ+UTA^+ = V\Sigma^+U^{\mathsf T}은 열공간을 행공간으로 1/σ배씩 되돌린다. A+bA^+\mathbf b는 최소제곱 해 가운데 가장 짧은 해다.
  7. 조건수 κ=σ1/σn\kappa = \sigma_1/\sigma_n은 상대 오차의 최악 증폭률이다. 행렬식은 조건을 재지 못한다. 작은 특이값 항을 버리는 절단 SVD는 잡음 증폭을 막는 정칙화다.

확인 퀴즈

Q1. 다음 중 SVD에 대한 설명으로 옳은 것은?

ATAA^{\mathsf T}A는 어떤 행렬이든 대칭 양의 준정부호이므로 스펙트럼 정리를 쓸 수 있고, 그 고유값의 제곱근이 특이값입니다. 특이값과 고유값은 대칭 양의 준정부호일 때만 같습니다.

Q2. A=[200−3]A = \begin{bmatrix}2 & 0\\ 0 & -3\end{bmatrix}의 특이값은?

ATA=diag⁡(4,9)A^{\mathsf T}A = \operatorname{diag}(4, 9)이므로 특이값은 3, 2(큰 순서). 음의 부호는 u2=−v2\mathbf u_2 = -\mathbf v_2로 넘어갑니다. 고유값은 2, −3입니다.

Q3. 3×5 행렬의 특이값이 4, 1, 0일 때 영공간 N(A)N(A)의 차원은?

0이 아닌 특이값이 2개이므로 계수 r = 2. 영공간의 차원은 n − r = 5 − 2 = 3이고, 그 기저는 v3,v4,v5\mathbf v_3, \mathbf v_4, \mathbf v_5입니다.

Q4. 특이값이 10, 5, 1, 0.1인 행렬의 최선의 계수 2 근사 A2A_2에 대해 ∥A−A2∥2\|A - A_2\|_2는?

에커트–영: 스펙트럼 노름 오차는 버린 것 중 가장 큰 특이값 σ₃ = 1입니다. 프로베니우스 노름 오차라면 12+0.12=1.01\sqrt{1^2 + 0.1^2} = \sqrt{1.01}입니다.

Q5. 100×100 사진을 랭크 10으로 근사해 저장하면 필요한 숫자는 대략?

조각 하나에 u(100개) + v(100개) + σ(1개) = 201개. 10개면 2,010개로 원본 10,000개의 약 20%입니다.

Q6. 유사역행렬 A+bA^+\mathbf b에 대한 설명으로 옳은 것은?

A+=VΣ+UTA^+ = V\Sigma^+U^{\mathsf T}는 모든 행렬에 정의되고, 결과는 v1,…,vr\mathbf v_1, \dots, \mathbf v_r의 결합이라 행공간에 있습니다. (ATA)−1AT(A^{\mathsf T}A)^{-1}A^{\mathsf T}와 같은 것은 열이 독립일 때뿐입니다.

Q7. 특이값이 10310^3과 10−310^{-3}인 2×2 행렬로 Ax=bA\mathbf x = \mathbf b를 풀 때, b\mathbf b의 상대 오차 10−810^{-8}이 해에 만들 수 있는 최악의 상대 오차는?

κ = σ₁/σ₂ = 10⁶이므로 최악의 증폭은 10⁶배, 10−8×106=10−210^{-8} \times 10^6 = 10^{-2}입니다. 유효숫자 6자리를 잃는 셈입니다.

Q8. 흐려진 신호를 A−1bA^{-1}\mathbf b로 되돌리면 잡음이 폭발하는 이유와 해법으로 옳은 것은?

A−1b=∑(uiTb/σi)viA^{-1}\mathbf b = \sum(\mathbf u_i^{\mathsf T}\mathbf b/\sigma_i)\mathbf v_i에서 잡음 성분 uiTε\mathbf u_i^{\mathsf T}\boldsymbol\varepsilon은 σᵢ가 작아도 줄지 않습니다. 잡음 바닥 아래의 항을 버리거나(절단 SVD) 부드럽게 줄이면(티호노프) 안정된 복원을 얻습니다.