Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Lecture 29. 특이값 분해 (SVD)

The Singular Value Decomposition — 서술

지금까지 배운 모든 분해에는 조건이 붙어 있었다.

A=LUA = LU 는 소거가 막히지 않아야 하고, A=QRA = QR 은 열이 독립이어야 하고, S=QΛQTS = Q\Lambda Q^{\mathsf T} 는 대칭이어야 하고, A=SΛS1A = S\Lambda S^{-1} 은 고유벡터가 nn 개 있어야 한다. 지난 강의에서는 마지막 조건이 깨졌을 때 얼마나 지저분해지는지도 보았다. 조르당 형은 존재하지만 손에 쥘 수 없었다.

특이값 분해에는 조건이 없다. 정사각행렬일 필요도 없고, 대칭일 필요도 없고, 가역일 필요도 없고, 랭크가 꽉 찰 필요도 없다. 3×73 \times 7 행렬이든 랭크 1짜리든 심지어 영행렬이든 전부 된다.

이런 일이 어떻게 가능한가. 대가가 하나 있다. 지금까지는 기저를 한 벌만 썼지만, 이제 두 벌을 쓴다. 들어가는 쪽에 한 벌, 나오는 쪽에 한 벌. 그것이 전부이다.


1. 원하는 것을 먼저 적는다

대각화가 안 되는 이유가 무엇이었나. 곰곰이 생각하면 이렇다. 기저 한 벌로 들어가는 쪽과 나오는 쪽을 동시에 감당하려 했기 때문이다.

Ax=λxA\vv{x} = \lambda\vv{x} 는 들어간 방향과 나온 방향이 같기를 요구한다. 그것이 안 되는 행렬이 있고, 애초에 mnm \neq n 이면 같을 수가 없다. R3\R^3 에서 들어가 R5\R^5 로 나오는데 어떻게 같은 방향이겠는가.

그러니 욕심을 하나 줄이자. 들어가는 쪽 기저와 나오는 쪽 기저를 따로 두는 것이다.

Av1=σ1u1,Av2=σ2u2,A\vv{v}_1 = \sigma_1\vv{u}_1, \qquad A\vv{v}_2 = \sigma_2\vv{u}_2, \qquad \dots

대신 나머지는 다 챙긴다. v\vv{v} 들은 서로 정규직교, u\vv{u} 들도 서로 정규직교, σ\sigma 들은 음이 아니게. 방향이 뒤집혀야 하면 u\vv{u} 가 뒤집으면 되니 σ\sigma 에 부호를 줄 이유가 없다.

행렬로 묶어 보자. v\vv{v} 들을 열에 세운 것을 VV, u\vv{u} 들을 열에 세운 것을 UU, σ\sigma 들을 대각에 놓은 것을 Σ\Sigma 라 하면 (1)의 식들이 한 줄이 된다.

AV=UΣAV = U\Sigma

VV 의 열이 정규직교이므로 V1=VTV^{-1} = V^{\mathsf T} 이다(L17). 오른쪽에서 곱하면 끝이다.

A=UΣVTA = U\Sigma V^{\mathsf T}
왼쪽이 들어가는 쪽의 기저이고 오른쪽이 나오는 쪽의 기저이다.
\vv{v} 는 길이 1인데 A\vv{v} 는 \sigma 만큼 늘어나 있다.

Figure 1:왼쪽이 들어가는 쪽의 기저이고 오른쪽이 나오는 쪽의 기저이다. v\vv{v} 는 길이 1인데 AvA\vv{v}σ\sigma 만큼 늘어나 있다.


2. 존재 증명 — ATAA^{\mathsf T}AUU 를 지운다

미지수 둘을 동시에 못 풀겠으면 어떻게 하는가. 하나를 소거한다. 연립방정식에서 늘 하던 일이다.

(3)의 식이 성립한다고 가정하고 ATAA^{\mathsf T}A 를 계산해 보자.

ATA=(UΣVT)T(UΣVT)=VΣTUTU=IΣVT=V(ΣTΣ)VTA^{\mathsf T}A = \left(U\Sigma V^{\mathsf T}\right)^{\mathsf T}\left(U\Sigma V^{\mathsf T}\right) = V\Sigma^{\mathsf T}\underbrace{U^{\mathsf T}U}_{=\,I}\Sigma V^{\mathsf T} = V\left(\Sigma^{\mathsf T}\Sigma\right)V^{\mathsf T}

UU 가 사라졌다. UU 의 열이 정규직교라는 조건이 가운데에서 II 를 만들어 낸 덕이다. 그리고 ΣTΣ\Sigma^{\mathsf T}\Sigma 는 대각에 σi2\sigma_i^2 이 놓인 대각행렬이다.

(4)의 오른쪽을 다시 보자. 직교행렬 · 대각행렬 · 그 전치. L25의 스펙트럼 정리와 글자 그대로 같은 모양이다.

ATA=VΛVT,Λ=ΣTΣ=diag(σ12,,σn2)A^{\mathsf T}A = V\Lambda V^{\mathsf T}, \qquad \Lambda = \Sigma^{\mathsf T}\Sigma = \operatorname{diag}\left(\sigma_1^2, \dots, \sigma_n^2\right)

그러므로 VVATAA^{\mathsf T}A 의 고유벡터이고 σi2\sigma_i^2 은 그 고윳값이다. 거꾸로 읽으면 이것이 곧 만드는 방법이다.

왜 언제나 되는가

여기가 이 강의의 심장이다. 위 논증이 통하려면 두 가지가 필요하다.

첫째, ATAA^{\mathsf T}A 에 직교 고유벡터가 있어야 한다. 있다. L14에서 확인한 대로 ATAA^{\mathsf T}A언제나 대칭이기 때문이다. 전치해 보면 바로 나온다.

(ATA)T=AT(AT)T=ATA\left(A^{\mathsf T}A\right)^{\mathsf T} = A^{\mathsf T}\left(A^{\mathsf T}\right)^{\mathsf T} = A^{\mathsf T}A

대칭이면 L25의 스펙트럼 정리가 직교 고유벡터를 보장한다.

둘째, 고윳값이 음이 아니어야 한다. σi=λi\sigma_i = \sqrt{\lambda_i} 로 실수를 얻어야 하기 때문이다. 음이 아니다. L27에서 확인한 대로 ATAA^{\mathsf T}A언제나 양의 준정부호이다.

xT(ATA)x=Ax20\vv{x}^{\mathsf T}\left(A^{\mathsf T}A\right)\vv{x} = \lVert A\vv{x}\rVert^2 \ge 0

3. UU 를 구하는 올바른 방법

VVσ\sigma 는 얻었다. UU 는 어떻게 하는가.

AATAA^{\mathsf T} 에서 따로 구하고 싶어진다. 실제로 AAT=UΣΣTUTAA^{\mathsf T} = U\Sigma\Sigma^{\mathsf T}U^{\mathsf T} 이라 UUAATAA^{\mathsf T} 의 고유벡터가 맞다. 그런데 그렇게 하면 안 된다.

올바른 방법은 (1)의 소망을 그대로 정의로 삼는 것이다.

ui=Aviσi(σi>0 인 i 에 대해)\vv{u}_i = \frac{A\vv{v}_i}{\sigma_i} \qquad (\sigma_i > 0 \text{ 인 } i \text{ 에 대해})

이렇게 정의하면 Avi=σiuiA\vv{v}_i = \sigma_i\vv{u}_i정의에 의해 성립한다. 남는 것은 이 u\vv{u} 들이 정말 정규직교인지 확인하는 일뿐이다. 두 줄이면 된다.

uiTuj=(Avi)T(Avj)σiσj=viT(ATA)vjσiσj\vv{u}_i^{\mathsf T}\vv{u}_j = \frac{\left(A\vv{v}_i\right)^{\mathsf T}\left(A\vv{v}_j\right)}{\sigma_i\sigma_j} = \frac{\vv{v}_i^{\mathsf T}\left(A^{\mathsf T}A\right)\vv{v}_j}{\sigma_i\sigma_j}

가운데에서 괄호를 옮긴 것이 전부이다. 이제 ATAvj=σj2vjA^{\mathsf T}A\vv{v}_j = \sigma_j^2\vv{v}_j 를 쓴다.

=σj2viTvjσiσj=σjσi(viTvj)= \frac{\sigma_j^2\,\vv{v}_i^{\mathsf T}\vv{v}_j}{\sigma_i\sigma_j} = \frac{\sigma_j}{\sigma_i}\left(\vv{v}_i^{\mathsf T}\vv{v}_j\right)

v\vv{v} 들이 정규직교이므로 iji \neq j 이면 0이고 i=ji = j 이면 σiσi1=1\tfrac{\sigma_i}{\sigma_i} \cdot 1 = 1 이다. 정규직교가 공짜로 따라 나왔다.

uiTuj={1(i=j)0(ij)\vv{u}_i^{\mathsf T}\vv{u}_j = \begin{cases} 1 & (i = j) \\ 0 & (i \neq j)\end{cases}

σi=0\sigma_i = 0 인 자리는 (8)의 식으로는 정의할 수 없다. 그때는 이미 얻은 u\vv{u} 들에 직교하도록 아무렇게나 채우면 된다(그람-슈미트, L17). 어차피 Σ\Sigma 에서 0이 곱해지므로 무엇을 넣든 AA 는 복원된다.


4. 앵커로 끝까지

3×23 \times 2 행렬을 하나 잡자. 정사각이 아니므로 고윳값은 아예 정의되지 않는다. 그런데도 SVD는 된다.

C=[111001]C = \begin{bmatrix} 1 & 1 \\ 1 & 0 \\ 0 & 1 \end{bmatrix}

첫째, CTCC^{\mathsf T}C 를 만든다.

CTC=[2112]C^{\mathsf T}C = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}

L21과 L25에서 계속 나온 그 행렬이다. 고윳값이 3과 1이고 고유벡터가 (1,1)(1,1)(1,1)(1,-1) 이다.

둘째, σ\sigmaVV 를 읽는다. 큰 것부터 세운다.

σ1=3,σ2=1=1,v1=12[11],v2=12[11]\sigma_1 = \sqrt3, \quad \sigma_2 = \sqrt1 = 1, \qquad \vv{v}_1 = \frac{1}{\sqrt2}\begin{bmatrix} 1 \\ 1 \end{bmatrix}, \quad \vv{v}_2 = \frac{1}{\sqrt2}\begin{bmatrix} 1 \\ -1 \end{bmatrix}

셋째, u\vv{u}(8)의 식으로 만든다.

u1=Cv13=1312[211]=16[211]\vv{u}_1 = \frac{C\vv{v}_1}{\sqrt3} = \frac{1}{\sqrt3}\cdot\frac{1}{\sqrt2}\begin{bmatrix} 2 \\ 1 \\ 1 \end{bmatrix} = \frac{1}{\sqrt6}\begin{bmatrix} 2 \\ 1 \\ 1 \end{bmatrix}
u2=Cv21=12[011]\vv{u}_2 = \frac{C\vv{v}_2}{1} = \frac{1}{\sqrt2}\begin{bmatrix} 0 \\ 1 \\ -1 \end{bmatrix}

길이를 재 보면 (2,1,1)=6\lVert(2,1,1)\rVert = \sqrt6 이고 (0,1,1)=2\lVert(0,1,-1)\rVert = \sqrt2 라 둘 다 길이 1이다. 내적은 0+1112=0\tfrac{0 + 1 - 1}{\sqrt{12}} = 0 이다. 3절의 계산이 맞았다.

넷째, 남은 자리를 채운다. CC3×23 \times 2 인데 u\vv{u} 가 둘뿐이다. R3\R^3 을 채우려면 하나가 더 필요하다. 앞의 둘에 직교하는 것을 고르면 된다.

u3=13[111]\vv{u}_3 = \frac{1}{\sqrt3}\begin{bmatrix} -1 \\ 1 \\ 1 \end{bmatrix}

CTu3=0C^{\mathsf T}\vv{u}_3 = \vv{0} 임을 확인해 보자. 이 벡터가 좌영공간에 있다는 뜻이고, 다음 절에서 그 자리를 찾는다.


5. 네 부분공간이 완성된다

L10에서 네 개의 기본 부분공간을 그렸다. 그때는 각 칸의 기저를 아무렇게나 골랐다. 소거해서 나온 것을 그냥 썼고, 직교하지도 길이가 1이지도 않았다.

SVD는 그 네 칸에 가장 좋은 기저를 채워 넣는다.

랭크를 rr 이라 하자. 곧 0이 아닌 특이값의 개수이다. 그러면 이렇게 갈린다.

부분공간기저차원
행공간 C(AT)\Col(A^{\mathsf T})v1,,vr\vv{v}_1, \dots, \vv{v}_rrr
영공간 N(A)\Nul(A)vr+1,,vn\vv{v}_{r+1}, \dots, \vv{v}_nnrn - r
열공간 C(A)\Col(A)u1,,ur\vv{u}_1, \dots, \vv{u}_rrr
좌영공간 N(AT)\Nul(A^{\mathsf T})ur+1,,um\vv{u}_{r+1}, \dots, \vv{u}_mmrm - r

왜 그런지 하나만 확인해 보자. i>ri > r 이면 σi=0\sigma_i = 0 이므로

Avi2=viT(ATA)vi=σi2=0Avi=0\lVert A\vv{v}_i\rVert^2 = \vv{v}_i^{\mathsf T}\left(A^{\mathsf T}A\right)\vv{v}_i = \sigma_i^2 = 0 \qquad\Longrightarrow\qquad A\vv{v}_i = \vv{0}

뒤쪽 v\vv{v} 들이 영공간에 있다. 그리고 v\vv{v} 들이 서로 직교하므로 앞쪽 v\vv{v} 들은 영공간에 직교하고, L14에서 배운 대로 영공간의 직교여공간이 행공간이다.

앵커 C 의 경우이다. 랭크가 2이므로 영공간이 비어 있고 좌영공간이 1차원이다.
\vv{u}_3 이 그 자리를 채운다.

Figure 2:앵커 CC 의 경우이다. 랭크가 2이므로 영공간이 비어 있고 좌영공간이 1차원이다. u3\vv{u}_3 이 그 자리를 채운다.

고유분해와 견주면

고유분해특이값 분해
대상정사각행렬만모든 행렬
기저한 벌 (SS)두 벌 (UU, VV)
직교성대칭일 때만언제나
값의 부호음수도 복소수도 가능언제나 0\ge 0
존재조건부무조건

6. 모든 선형변환은 회전, 늘이기, 회전이다

(3)의 식을 오른쪽부터 읽어 보자.

VTV^{\mathsf T} 는 직교행렬이니 회전이다. 길이도 각도도 바꾸지 않는다. Σ\Sigma 는 대각행렬이니 축 방향으로 늘이거나 줄이기이다. UU 는 다시 회전이다.

A = \begin{bmatrix} 3 & 0 \\ 4 & 5\end{bmatrix} 이다. 두 번째 판에서 도형이 여전히
원이라는 점을 보자. 회전은 원을 원으로 보낸다. 세 번째 판의 타원은 축이 좌표축에
나란하고, 반지름이 정확히 \sigma_1 과 \sigma_2 이다.

Figure 3:A=[3045]A = \begin{bmatrix} 3 & 0 \\ 4 & 5\end{bmatrix} 이다. 두 번째 판에서 도형이 여전히 이라는 점을 보자. 회전은 원을 원으로 보낸다. 세 번째 판의 타원은 축이 좌표축에 나란하고, 반지름이 정확히 σ1\sigma_1σ2\sigma_2 이다.

L27에서 xTSx=1\vv{x}^{\mathsf T}S\vv{x} = 1 이 타원이고 축이 고유벡터 방향임을 보았다. 그 타원이 여기서 다시 나타난다. 다만 이번에는 대칭이라는 조건이 필요 없다.

σ1\sigma_1 은 최대 증폭률이다

길이 1인 x\vv{x} 를 넣었을 때 나오는 것이 가장 긴 경우는 언제인가. x\vv{x}v\vv{v} 기저로 펼쳐 x=civi\vv{x} = \sum c_i\vv{v}_i 라 하면 ci2=1\sum c_i^2 = 1 이고

Ax=iciσiuiAx2=ici2σi2A\vv{x} = \sum_i c_i\sigma_i\vv{u}_i \qquad\Longrightarrow\qquad \lVert A\vv{x}\rVert^2 = \sum_i c_i^2\sigma_i^2

가운데 등호에서 u\vv{u} 들이 정규직교라는 것을 썼다. 오른쪽은 σi2\sigma_i^2 들의 가중평균이므로 가장 큰 것을 넘지 못한다.

Axσ1,등호는 x=v1 일 때\lVert A\vv{x}\rVert \le \sigma_1, \qquad \text{등호는 } \vv{x} = \vv{v}_1 \text{ 일 때}

이 최대 증폭률을 행렬의 2-노름이라 하고 A2\lVert A\rVert_2 로 쓴다. σ1\sigma_1 이다.

특이값의 곱이 부피 배율이다

정사각행렬이면 (3)의 양변에 행렬식을 취할 수 있다. L18의 곱셈 규칙과 L20에서 본 detQ=±1\det Q = \pm1 을 쓴다.

detA=detU=1detΣdetVT=1=σ1σ2σn|\det A| = \underbrace{|\det U|}_{=\,1}\cdot\det\Sigma\cdot\underbrace{|\det V^{\mathsf T}|}_{=\,1} = \sigma_1\sigma_2\cdots\sigma_n

회전은 부피를 바꾸지 않으므로 늘인 만큼만 남는다. L20에서 평행육면체를 그리며 "부피 배율은 방향별 배율을 전부 곱해 놓은 값"이라고 했는데, 그 방향별 배율이 바로 특이값이었다.

앵커 [3045]\begin{bmatrix} 3 & 0 \\ 4 & 5\end{bmatrix} 에서 σ1σ2=355=15\sigma_1\sigma_2 = 3\sqrt5 \cdot \sqrt5 = 15 이고 detA=15\det A = 15 이다.


7. 랭크 1 조각의 합

L25에서 QΛQTQ\Lambda Q^{\mathsf T} 를 열 곱하기 행으로 펼쳤다. 똑같이 한다. UΣU\Sigmaii 열이 σiui\sigma_i\vv{u}_i 이고 VTV^{\mathsf T}ii 행이 viT\vv{v}_i^{\mathsf T} 이므로

A=σ1u1v1T+σ2u2v2T++σrurvrTA = \sigma_1\vv{u}_1\vv{v}_1^{\mathsf T} + \sigma_2\vv{u}_2\vv{v}_2^{\mathsf T} + \cdots + \sigma_r\vv{u}_r\vv{v}_r^{\mathsf T}

L3의 “열 × 행” 관점과 L11의 랭크 1 행렬이 여기서 만난다. 각 조각은 랭크가 1이고, 그 크기가 σi\sigma_i 이다.

왼쪽이 앵커 C 를 두 조각으로 쪼갠 것이고, 오른쪽이 L25와의 대조이다.

Figure 4:왼쪽이 앵커 CC 를 두 조각으로 쪼갠 것이고, 오른쪽이 L25와의 대조이다.

대칭행렬 (L25)아무 행렬 (L29)
랭크 1 합S=λiqiqiTS = \sum\lambda_i\,\vv{q}_i\vv{q}_i^{\mathsf T}A=σiuiviTA = \sum\sigma_i\,\vv{u}_i\vv{v}_i^{\mathsf T}
기저한 벌두 벌
계수λi\lambda_i, 부호 있음σi0\sigma_i \ge 0, 내림차순

8. 앞의 몇 개만 남기면 최선이다

kk 개만 남긴 것을 AkA_k 라 하자.

Ak=i=1kσiuiviTA_k = \sum_{i=1}^{k}\sigma_i\vv{u}_i\vv{v}_i^{\mathsf T}

랭크가 kk 인 행렬이다. 그런데 랭크 kk 인 행렬은 무수히 많다. 그중에서 AkA_kAA 에 가장 가깝다는 것이 다음 정리이다.

증명은 하지 않는다. 다만 이것이 전혀 자명하지 않은 사실이라는 점은 짚어 두자. "큰 것부터 남기고 잘라 낸다"는 소박한 발상이 무한히 많은 후보 중에서 최선이라는 보장은 어디에도 없었다.

오차의 크기도 읽어 두자. 버린 것이 i>kσiuiviT\sum_{i>k}\sigma_i\vv{u}_i\vv{v}_i^{\mathsf T} 이고 그것의 2-노름이 σk+1\sigma_{k+1} 이다.

AAk2=σk+1\lVert A - A_k\rVert_2 = \sigma_{k+1}

버린 것 중 가장 큰 것이 곧 오차이다.


9. 그래서 무엇을 할 수 있는가

압축

m×nm \times n 행렬을 통째로 저장하면 수가 mnmn 개 필요하다. AkA_k 를 저장하려면 u\vv{u}kk 개(mkmk), v\vv{v}kk 개(nknk), σ\sigmakk 개이다.

k(m+n+1)vsmnk(m + n + 1) \quad\text{vs}\quad mn
위쪽이 랭크를 올려 가며 복원한 것이고 아래쪽이 특이값 스펙트럼이다.

Figure 5:위쪽이 랭크를 올려 가며 복원한 것이고 아래쪽이 특이값 스펙트럼이다.

왜 압축이 되는가

여기가 중요하다. 아무 행렬이나 압축되는 것이 아니다.

Figure 5의 아래 오른쪽을 보자. 그림은 특이값 여덟 개만으로 에너지의 99%를 담는데, 무작위 잡음은 123개가 필요하다. 저장량으로 따지면 그림은 8%, 잡음은 128% 이다. 잡음은 SVD로 압축하면 오히려 손해이다.

자연의 데이터는 무작위가 아니다\text{자연의 데이터는 무작위가 아니다}

사진에서 이웃한 화소는 서로 비슷하고, 큰 구조가 반복되고, 조명은 매끄럽게 변한다. 그 규칙성이 곧 낮은 랭크이고, 그래서 앞쪽 몇 개에 정보가 몰린다.

잡음 제거

같은 이야기를 거꾸로 쓰면 잡음 제거가 된다. 신호에는 구조가 있어 큰 특이값에 모이고, 잡음은 구조가 없어 작은 특이값에 골고루 퍼진다. 작은 것을 잘라 내면 잡음만 사라진다.

조건수

가장 큰 특이값과 가장 작은 특이값의 비를 조건수라 한다.

κ(A)=σ1σn\kappa(A) = \frac{\sigma_1}{\sigma_n}

L27에서 대칭행렬의 조건수를 고윳값의 비로 정의했는데, 그것의 일반판이다. 가장 크게 늘이는 방향과 가장 적게 늘이는 방향의 차이이고, 이 값이 크면 수치적으로 위험하다. L33에서 정면으로 다룬다.

차원 축소

데이터를 행렬로 늘어놓고 SVD를 취한 뒤 앞 kk 개만 남기는 것이 주성분분석의 본체이다. 고차원 데이터가 사실은 낮은 차원의 구조를 갖고 있다는 가정 위에 서 있고, SVD는 그 구조를 찾아내는 가장 기본적인 도구이다.


10. 자주 하는 오해

특이값이 고윳값의 절댓값이라는 오해

대칭행렬일 때만 맞다. 대칭이면 A=QΛQTA = Q\Lambda Q^{\mathsf T} 이고 이것이 곧 SVD이므로 σi=λi\sigma_i = |\lambda_i| 이다. 그러나 일반적으로는 전혀 다르다.

L28의 결함 행렬 [3103]\begin{bmatrix} 3 & 1 \\ 0 & 3\end{bmatrix} 을 보자. 고윳값은 3이 두 번인데 특이값은 3.5412.541 이다. 곱이 3.541×2.541=9=det3.541 \times 2.541 = 9 = \det 로 맞기는 하지만 하나하나는 다르다.

UUAATAA^{\mathsf T} 에서 따로 구하는 실수

3절에서 경고했다. 부호가 어긋난다.

SVD가 유일하다는 오해

특이값은 유일하다. 그러나 UUVV 는 아니다. ui\vv{u}_ivi\vv{v}_i 의 부호를 함께 뒤집어도 되고, 같은 σ\sigma 가 겹치면 그 안에서 회전할 자유가 있다. σ=0\sigma = 0 인 자리는 아예 아무것이나 채워도 된다.

소프트웨어가 VV 를 준다고 믿는 실수

가장 흔한 실전 버그이다. numpy.linalg.svdVV 가 아니라 VTV^{\mathsf T} 를 돌려준다. 받아서 그대로 VV 라고 쓰면 조용히 틀린 답이 나온다. 정사각이라 크기 검사도 통과한다.

랭크 kk 근사가 "앞 kk 개 열을 남기는 것"이라는 오해

열이 아니라 특이값 성분을 남기는 것이다. AA 의 앞 kk 열만 떼어 낸 것은 (23)AkA_k 와 전혀 다르고, 최적도 아니다.

작은 특이값을 무조건 잡음으로 보는 오해

문제에 따라 작은 성분이 결정적일 수 있다. 조건수를 재는 것이 정확히 그 경우이다. σn\sigma_n 이 작다는 사실 자체가 중요한 정보이다.


마치며...

이번 강의에서 다룬 것을 정리하면 다음과 같다.

대상내용
소망Avi=σiuiA\vv{v}_i = \sigma_i\vv{u}_i — 기저를 두 벌 쓴다
형태A=UΣVTA = U\Sigma V^{\mathsf T}
존재ATA=VΣTΣVTA^{\mathsf T}A = V\Sigma^{\mathsf T}\Sigma V^{\mathsf T}UU 가 소거된다
왜 무조건인가ATAA^{\mathsf T}A 는 언제나 대칭이고 준정부호
UUui=Avi/σi\vv{u}_i = A\vv{v}_i/\sigma_i. 정규직교가 두 줄에 따라온다
네 부분공간v\vv{v} 앞뒤가 행공간·영공간, u\vv{u} 앞뒤가 열공간·좌영공간
기하회전, 늘이기, 회전. 단위원은 언제나 타원
σ1\sigma_1최대 증폭률 =A2= \lVert A\rVert_2
σi\prod\sigma_idetA\lvert\det A\rvert — 회전은 부피를 안 바꾼다
랭크 1 합A=σiuiviTA = \sum\sigma_i\vv{u}_i\vv{v}_i^{\mathsf T} — 중요한 순서대로
에카르트-영kk 개가 최적. 오차가 정확히 σk+1\sigma_{k+1}
압축되는 이유자연의 데이터는 무작위가 아니다

유도가 짧았다는 것이 이 강의의 핵심이다. 들어가는 쪽과 나오는 쪽에 각각 다른 직교기저를 쓰겠다고 마음먹은 순간, 그리고 ATAA^{\mathsf T}A 가 언제나 대칭이라는 사실을 떠올린 순간, 나머지는 저절로 따라 나왔다.

조건이 없는 이유도 분명해졌다. AA 가 어떻게 생겼든 ATAA^{\mathsf T}A 는 대칭이고 양의 준정부호이다. 대칭행렬에는 직교 고유벡터가 있고, 준정부호이므로 고윳값이 음이 아니어서 제곱근을 취할 수 있다. 네 강의 전에 배운 스펙트럼 정리가 여기서 모든 것을 지탱하고 있다.

그리고 우리는 L10에서 그렸던 네 부분공간 그림을 마침내 완성하였다. 그때는 비어 있던 네 칸에 이제 가장 좋은 기저가 채워졌다. 아홉 강의 전 L20에서 그린 부피 그림도 σi=detA\prod\sigma_i = |\det A| 로 되돌아왔고, 두 강의 전 L27의 타원도 대칭이라는 조건 없이 다시 나타났다.

여기까지가 이 교재의 정점이다. 우리는 조건 없는 분해를 손에 넣었다.

그런데 한 가지 물음이 남는다. SVD는 들어가는 쪽과 나오는 쪽에서 각각 좋은 기저를 골랐다. 그렇다면 애초에 기저를 고른다는 것이 무슨 뜻인가. 행렬이란 도대체 무엇인가. 다음 강의에서는 지금까지의 전부를 한 층 위에서 다시 본다.


이번 강의의 내용을 파이썬으로 확인해 보려면 L29 실습 노트북으로 넘어가면 된다. 정의대로 SVD를 직접 만들어 numpy.linalg.svd 와 대조하고, UU 를 따로 구하면 왜 어긋나는지 확인하며, 이미지를 랭크별로 압축해 에카르트-영 정리가 정말 최선인지 무작위 행렬 수천 개와 겨뤄 볼 수 있다.