7.2. Bases and Matrices in the SVD

선형대수학 글 목록

연결 강의: MIT 18.06 Linear Algebra - Lecture 29: Singular Value Decomposition

1. 이번 글의 위치

앞 글에서는 SVD의 기본 형태와 full-rank 2×22\times 2 예시를 봤다.

SVD의 핵심 형태는 다음이었다.

A=UΣVTA=U\Sigma V^T

그리고 핵심 관계는 다음이었다.

Avi=σiuiAv_i=\sigma_i u_i

이번 글에서는 강의의 다음 순서에 맞춰 rank가 부족한 행렬을 본다.

rank-deficient matrix에서는 null space가 등장하고, SVD는 네 기본 부분공간의 orthonormal basis를 한 번에 정리해 준다.


2. Rank-One Matrix 예시

다음 행렬을 보자.

A=[4386]A= \begin{bmatrix} 4 & 3 \\ 8 & 6 \end{bmatrix}

두 번째 행은 첫 번째 행의 2배이다.

[86]=2[43]\begin{bmatrix} 8 & 6 \end{bmatrix} = 2 \begin{bmatrix} 4 & 3 \end{bmatrix}

따라서 이 행렬의 rank는 1이다.

rank(A)=1\operatorname{rank}(A)=1

rank가 1이므로 row space와 column space는 각각 1차원이다.

null space와 left null space도 각각 1차원이다.


3. Row Space와 Null Space

row space는 행벡터들의 span이다.

이 행렬의 row space는 다음 벡터의 배수들로 이루어진다.

[43]\begin{bmatrix} 4 \\ 3 \end{bmatrix}

즉 row space는 R2\mathbb{R}^2 안의 하나의 직선이다.

SVD에서는 row space의 unit vector가 필요하다.

벡터 (4,3)(4,3)의 길이는 5이다.

42+32=5\sqrt{4^2+3^2}=5

따라서 row space의 unit vector는 다음이다.

v1=[4535]v_1= \begin{bmatrix} \frac{4}{5} \\ \frac{3}{5} \end{bmatrix}

null space는 row space에 수직인 방향이다.

(4,3)(4,3)에 수직인 unit vector는 다음처럼 잡을 수 있다.

v2=[3545]v_2= \begin{bmatrix} \frac{3}{5} \\ -\frac{4}{5} \end{bmatrix}

실제로,

[43][34]=1212=0\begin{bmatrix} 4 & 3 \end{bmatrix} \begin{bmatrix} 3 \\ -4 \end{bmatrix} = 12-12=0

이다.

따라서 v2v_2는 null space 방향이다.

이제 VV는 다음과 같다.

V=[45353545]V= \begin{bmatrix} \frac{4}{5} & \frac{3}{5} \\ \frac{3}{5} & -\frac{4}{5} \end{bmatrix}

이 행렬은 orthogonal matrix이다.


4. Column Space와 Left Null Space

column space는 열벡터들의 span이다.

이 행렬의 열벡터들은 모두 다음 방향의 배수이다.

[12]\begin{bmatrix} 1 \\ 2 \end{bmatrix}

예를 들어,

[48]=4[12]\begin{bmatrix} 4 \\ 8 \end{bmatrix} = 4 \begin{bmatrix} 1 \\ 2 \end{bmatrix}

이고,

[36]=3[12]\begin{bmatrix} 3 \\ 6 \end{bmatrix} = 3 \begin{bmatrix} 1 \\ 2 \end{bmatrix}

이다.

따라서 column space의 unit vector는 다음이다.

u1=15[12]u_1= \frac{1}{\sqrt{5}} \begin{bmatrix} 1 \\ 2 \end{bmatrix}

left null space는 column space에 수직인 방향이다.

(1,2)(1,2)에 수직인 unit vector는 다음처럼 잡을 수 있다.

u2=15[21]u_2= \frac{1}{\sqrt{5}} \begin{bmatrix} 2 \\ -1 \end{bmatrix}

따라서,

U=15[1221]U= \frac{1}{\sqrt{5}} \begin{bmatrix} 1 & 2 \\ 2 & -1 \end{bmatrix}

이다.


5. Singular Value 계산

singular value는 ATAA^TA의 eigenvalue에서 나온다.

먼저 ATAA^TA를 계산하자.

AT=[4836]A^T= \begin{bmatrix} 4 & 8 \\ 3 & 6 \end{bmatrix}

따라서,

ATA=[4836][4386]A^TA = \begin{bmatrix} 4 & 8 \\ 3 & 6 \end{bmatrix} \begin{bmatrix} 4 & 3 \\ 8 & 6 \end{bmatrix}

계산하면,

ATA=[80606045]A^TA= \begin{bmatrix} 80 & 60 \\ 60 & 45 \end{bmatrix}

이 행렬도 rank가 1이다.

따라서 eigenvalue 중 하나는 0이다.

trace는 다음이다.

80+45=12580+45=125

고유값의 합은 trace와 같으므로, 다른 eigenvalue는 125이다.

λ1=125,λ2=0\lambda_1=125, \qquad \lambda_2=0

singular values는 eigenvalue의 양의 제곱근이다.

σ1=125\sigma_1=\sqrt{125} σ2=0\sigma_2=0

따라서,

Σ=[125000]\Sigma= \begin{bmatrix} \sqrt{125} & 0 \\ 0 & 0 \end{bmatrix}

이다.


6. Rank-One Matrix의 SVD 조립

이제 세 조각을 모으면 다음이다.

A=UΣVTA=U\Sigma V^T

여기서,

U=15[1221]U= \frac{1}{\sqrt{5}} \begin{bmatrix} 1 & 2 \\ 2 & -1 \end{bmatrix} Σ=[125000]\Sigma= \begin{bmatrix} \sqrt{125} & 0 \\ 0 & 0 \end{bmatrix}

이고,

VT=[45353545]V^T= \begin{bmatrix} \frac{4}{5} & \frac{3}{5} \\ \frac{3}{5} & -\frac{4}{5} \end{bmatrix}

이다.

곱을 확인해 보자.

먼저 UΣU\Sigma를 계산하면,

UΣ=15[1221][125000]U\Sigma = \frac{1}{\sqrt{5}} \begin{bmatrix} 1 & 2 \\ 2 & -1 \end{bmatrix} \begin{bmatrix} \sqrt{125} & 0 \\ 0 & 0 \end{bmatrix}

125=55\sqrt{125}=5\sqrt{5}이므로,

UΣ=[50100]U\Sigma = \begin{bmatrix} 5 & 0 \\ 10 & 0 \end{bmatrix}

이제 VTV^T를 곱하면,

UΣVT=[50100][45353545]U\Sigma V^T = \begin{bmatrix} 5 & 0 \\ 10 & 0 \end{bmatrix} \begin{bmatrix} \frac{4}{5} & \frac{3}{5} \\ \frac{3}{5} & -\frac{4}{5} \end{bmatrix}

계산 결과는 다음이다.

UΣVT=[4386]U\Sigma V^T = \begin{bmatrix} 4 & 3 \\ 8 & 6 \end{bmatrix}

즉 원래 행렬 AA가 복원된다.


7. Rank-One SVD의 의미

이 예시에서는 singular value가 하나만 양수이다.

σ1=125,σ2=0\sigma_1=\sqrt{125}, \qquad \sigma_2=0

따라서 AA의 핵심 작용은 하나의 방향에서만 일어난다.

입력공간의 row space 방향 v1v_1은 column space 방향 u1u_1으로 간다.

Av1=σ1u1Av_1=\sigma_1u_1

반면 null space 방향 v2v_2는 0으로 간다.

Av2=0Av_2=0

그래서 Σ\Sigma의 두 번째 diagonal entry가 0이다.

이것이 rank-deficient matrix에서 SVD가 null space를 처리하는 방식이다.


8. 네 기본 부분공간과 SVD

SVD는 네 기본 부분공간의 올바른 basis를 한 번에 제공한다.

AAm×nm\times n 행렬이고 rank가 rr이라고 하자.

그러면 VV의 열벡터들은 Rn\mathbb{R}^n의 orthonormal basis를 이룬다.

앞쪽 rr개는 row space의 basis이다.

v1,,vrv_1,\dots,v_r

뒤쪽 nrn-r개는 null space의 basis이다.

vr+1,,vnv_{r+1},\dots,v_n

마찬가지로 UU의 열벡터들은 Rm\mathbb{R}^m의 orthonormal basis를 이룬다.

앞쪽 rr개는 column space의 basis이다.

u1,,uru_1,\dots,u_r

뒤쪽 mrm-r개는 left null space, 즉 N(AT)N(A^T)의 basis이다.

ur+1,,umu_{r+1},\dots,u_m

따라서 SVD는 다음 네 공간을 모두 정리한다.

  1. row space
  2. null space
  3. column space
  4. left null space

9. Dimension 정리

네 기본 부분공간의 차원은 다음과 같다.

공간위치차원SVD에서의 basis
row spaceRn\mathbb{R}^nrrv1,,vrv_1,\dots,v_r
null spaceRn\mathbb{R}^nnrn-rvr+1,,vnv_{r+1},\dots,v_n
column spaceRm\mathbb{R}^mrru1,,uru_1,\dots,u_r
left null spaceRm\mathbb{R}^mmrm-rur+1,,umu_{r+1},\dots,u_m

이 basis들이 좋은 이유는 모두 orthonormal하기 때문이다.

하지만 orthonormal인 것만으로는 충분하지 않다. Gram-Schmidt를 쓰면 어떤 subspace에서도 orthonormal basis를 만들 수 있다.

SVD의 특별한 점은 이 basis들이 행렬 AA를 diagonal하게 만든다는 것이다.

즉,

Avi=σiui(i=1,,r)Av_i=\sigma_i u_i \qquad (i=1,\dots,r)

이고,

Avi=0(i=r+1,,n)Av_i=0 \qquad (i=r+1,\dots,n)

이다.

viv_i는 대응되는 uiu_i 방향으로만 간다. 서로 다른 방향끼리 섞이지 않는다.


10. Reduced SVD와 Full SVD

rank가 rr인 행렬에서는 핵심 정보만 모아 reduced SVD로 쓸 수 있다.

A=UrΣrVrTA=U_r\Sigma_r V_r^T

여기서,

Ur=[u1u2ur]U_r= \begin{bmatrix} | & | & & | \\ u_1 & u_2 & \cdots & u_r \\ | & | & & | \end{bmatrix} Vr=[v1v2vr]V_r= \begin{bmatrix} | & | & & | \\ v_1 & v_2 & \cdots & v_r \\ | & | & & | \end{bmatrix}

이고,

Σr=[σ1000σ2000σr]\Sigma_r= \begin{bmatrix} \sigma_1 & 0 & \cdots & 0 \\ 0 & \sigma_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \sigma_r \end{bmatrix}

이다.

full SVD는 여기에 null space와 left null space의 basis까지 붙인 것이다.

A=UΣVTA=U\Sigma V^T

계산이나 데이터 압축에서는 reduced SVD가 더 자주 쓰인다. 하지만 네 기본 부분공간을 모두 보려면 full SVD가 구조를 더 잘 보여준다.


11. Rank-One Terms로 보는 SVD

SVD는 다음처럼 rank-one matrix들의 합으로도 쓸 수 있다.

A=σ1u1v1T+σ2u2v2T++σrurvrTA= \sigma_1u_1v_1^T +\sigma_2u_2v_2^T +\cdots +\sigma_ru_rv_r^T

rank-one 예시에서는 r=1r=1이므로 다음 한 항만 남는다.

A=σ1u1v1TA=\sigma_1u_1v_1^T

실제로,

σ1=125=55\sigma_1=\sqrt{125}=5\sqrt{5} u1=15[12]u_1= \frac{1}{\sqrt{5}} \begin{bmatrix} 1 \\ 2 \end{bmatrix} v1=[4535]v_1= \begin{bmatrix} \frac{4}{5} \\ \frac{3}{5} \end{bmatrix}

이므로,

σ1u1v1T=5515[12][4535]\sigma_1u_1v_1^T = 5\sqrt{5} \cdot \frac{1}{\sqrt{5}} \begin{bmatrix} 1 \\ 2 \end{bmatrix} \begin{bmatrix} \frac{4}{5} & \frac{3}{5} \end{bmatrix}

정리하면,

=5[12][4535]=[4386]= 5 \begin{bmatrix} 1 \\ 2 \end{bmatrix} \begin{bmatrix} \frac{4}{5} & \frac{3}{5} \end{bmatrix} = \begin{bmatrix} 4 & 3 \\ 8 & 6 \end{bmatrix}

이다.

이 관점은 image compression과도 연결된다. 이미지를 행렬로 보면, 큰 singular value에 해당하는 rank-one term 몇 개만 남겨도 원래 이미지의 큰 구조를 보존할 수 있다.


12. 핵심 정리

SVD는 단순히 행렬을 세 조각으로 분해하는 공식이 아니다.

A=UΣVTA=U\Sigma V^T

SVD는 네 기본 부분공간에 가장 좋은 orthonormal basis를 골라 주는 방법이다.

입력공간 쪽에서는 VV가 다음을 제공한다.

  1. row space의 basis
  2. null space의 basis

출력공간 쪽에서는 UU가 다음을 제공한다.

  1. column space의 basis
  2. left null space의 basis

그리고 AA는 이 basis들 사이에서 아주 단순하게 작동한다.

Avi=σiuiAv_i=\sigma_i u_i

row space 방향은 column space 방향으로 stretching되고, null space 방향은 0으로 간다.

이것이 SVD가 네 기본 부분공간, 고유값, 직교기저, 데이터 압축을 한 번에 연결하는 이유이다.