Singular value decomposition (SVD)

Rainy Night for Sapientia·2023년 7월 2일

Singular value decomposition

Intuition

정방형(square) 매트릭스는 eigenvector 및 eigenvalues를 통해 다음과 같이 대각행렬로 분해가 가능합니다. 이를 eigen decomposition이라고 합니다.

A=PΛP1A = P\Lambda P^{-1}

이는 지난 포스트 링크를 참고 부탁드립니다.

https://velog.io/@kimgeonhee317/Eigenvectors-and-Eigenvalues

그렇다면 SVD는 무엇일까요?
이는 정방형 벡터가 아닌 어떠한 형태의 m * n형태의 매트릭스라도 유연하게 분해하기 위해서 고안되었습니다.

수식은 굉장히 비슷합니다.
m * n 의 매트릭스 AA가 있다고 가정하면 다음과 같은 수식이 나옵니다.

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

차례대로 살펴봅시다.

  1. UU는 m * m 직교행렬(Orthogonal Matrix) 입니다.
    이는 UU를 이루는 각각의 컬럼벡터 {u1,u2,...,um}\{u_1, u_2, ..., u_m\} 가 전부 상호 직교, 즉 내적이 0이 되는 것을 의미합니다.
    참고로 직교행렬은 트랜스포즈한 행렬과 곱해지면 항등행렬 II가 됩니다.
    그리고 트랜스포즈와 인버스의 결과가 같습니다.

    UUT=IUT=U1UU^T = I\\ U^T = U^{-1}
  2. Σ\Sigma 는 m * n 대각행렬(Diagonal Matrix)입니다.
    각 대각행렬의 대각성분들은 {σ1,σ2,...}\{\sigma_1, \sigma_2, ...\}로 표시됩니다.
    이를 성분들을 singler values라고 합니다.
    m과 n의 크기 대소에 따라 가능한 만큼 singler values를 채우는 형태입니다.

  3. VV역시 n * n 직교행렬(Orthogonal Matrix) 입니다.
    대신 transpose를 취했으므로 위에서 부터 {v1,v2,...,vn}\{v_1, v_2, ..., v_n\} 이 쌓여있는 형태라고 보면 됩니다.

각 행렬의 느낌을 살펴보면, UU는 회전(rotation) Λ\Lambda은 확장(stretching) VTV^T은 다시 회전(rotation)입니다.

이제 수식의 직관적 의미를 파악해봅시다.
SVD가 말하고자 하는 바는 이렇습니다.

직교하는 여러 벡터들의 집합을 선형변환하여도 여전히 직교하는가?

먼저 VV는 선형변환 전의 직교하는 여러 열벡터들의 집합으로 이해해 봅시다.
각 성분(열벡터)들({v1,v2,...,vn}\{v_1, v_2, ..., v_n\})들은 동 매트릭스가 orthogonal하기 때문에 자명하게 서로 직교합니다.

이 열벡터들을 특정 매트릭스 AA를 통해 선형변환 시켰다고 가정해봅시다.

AVAV

이럴 경우, 스케일은 달라질지언정 그대로 서로 직교하는 열벡터들의 집합으로 남을 수 있을까요? 이런 경우는 반드시 unique하게 존재할 수 밖에 없습니다.
이런 새로운 직교 열벡터들의 매트릭스를 UU라 합시다. {u1,u2,...,um}\{u_1, u_2, ..., u_m\}의 형태라고 가정하겠습니다.
그리고 변환된 스케일만큼 각 {u1,u2,...,um}\{u_1, u_2, ..., u_m\}에 곱해줄 즉 각 singular values {σ1,σ2,...}\{\sigma_1, \sigma_2, ...\}은 대각행렬 Σ\Sigma로 표기됩니다.
이를 수식으로 나타내면 다음과 같죠.

AV=UΣAV = U\Sigma

그리고 다음과 같이 바꿔줄 수 있습니다. (V1=VTV^{-1} = V^T)

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

Illustration

위 수식을 바탕으로 AATAA^T를 계산해봅시다.
다음과 같이 표현될 수 있을 겁니다.

AAT=UΣVTVΣTUTAA^T = U\Sigma V^T V\Sigma^T U^T

VTV=IV^T V = I 이므로 다음과 같이 계산됩니다.

AAT=U(ΣΣT)UTAA^T = U(\Sigma \Sigma^T) U^T

계산된 AATAA^T는 m * m 정방형이므로 이렇게 바꾸고 보니 eigen decomposition(diagonalization)과 모양이 유사하네요?
그러면 UUUTU^TAATAA^T의 eigen vector로 이루어진 매트릭스라고 할 수 있고 ΣΣT\Sigma \Sigma^T는 그 사이의 eigen values로 이루어진 대각행렬이 될겁니다. 대각행렬은 transpose 해도 같은 값이므로 ΣΣT\Sigma \Sigma^TΣ2\Sigma^2로 표현할 수 있습니다. 그리고 UU는 orthogonal하므로 트랜스포즈한 결과와 인버스의 결과가 같습니다.
다음과 같이 살짝 바꿔 표현할 수 있겠네요

AAT=U(Σ2)U1AA^T = U(\Sigma^2) U^{-1}

즉 이제 평범한 eigen decomposition 모든 값을 찾아낼 수 있습니다.
UUAATAA^T의 eigenvector들의 집합이 될 것이고, eigenvalues들은 Σ2\Sigma^2에 매칭될 겁니다.

반대도 가능합니다.

ATA=V(Σ2)V1A^TA = V(\Sigma^2) V^{-1}

계산하는 방식은 같죠.

Representation

표현 방법에 대해 조금 더 살펴봅시다.
먼저 알아야할 점은 SVD으로 분해된 매트릭스가 어떤 식으로 계산되는 지입니다.

매트릭스의 형태를 보면 AAmnm * n, UUmmm * m, Σ\Sigma는 다시 mnm * n, VTV^Tnnn * n입니다.
근데 생각을 해보면, 대각행렬은 mnm * n이기 때문에 mmnn의 크기의 차이로 Σ\Sigma에서 어쩔수 없이 0으로 패딩되는 부분이 생기죠. 이 부분에 해당되는 UUVTV^T는 있으나 마나합니다. 즉 mmnn중 작은 수만 고려해서 계산해도 됩니다.

p=min(m,n)p = min(m, n) 을 가정해봅시다. 그리고 매트릭스를 풀어보면 다음과 같습니다.

A=u1σ1v1T+u2σ2v2T,...,upσpvpTA = u_1\sigma_1v_1^T + u_2\sigma_2v_2^T, ..., u_p\sigma_pv_p^T
A=[...u1u2...up...][σ10...00σ2...000...σp][v1v2...vp]A = \begin{bmatrix} | & | &... &|\\ u_1 & u_2 & ... & u_p\\ | & | & ... & | \end{bmatrix} \begin{bmatrix} \sigma_1 & 0 &... &0\\ 0 & \sigma_2 & ... & 0\\ 0 & 0 & ... & \sigma_p \end{bmatrix} \begin{bmatrix} -v_1-\\ -v_2-\\ ...\\ -v_p-\\ \end{bmatrix}

보시면 식의 하나하나의 단위는 UUnn번째 column, Σ\Sigmann번째 row(col), VTV^T의 n번째 row가 됩니다.

PCA

마지막으로 SVD가 어떻게 쓰이는지 알아봅시다. 가장 대표적으로 PCA(Principal Component Analysis)에 쓰입니다.

우선 표현 방법에 약간의 정교함을 더해봅시다.
통상 대각성분(singler values)들은 큰 수부터 내림차순으로 쓰곤 합니다. 그럼 그와 매칭되는 짝꿍들인 uiu_iviv_i의 순서들도 전부 바뀌겠죠? 그래서 대각성분의 순서는 중요하지 않습니다.

그리고 매트릭스 UUVTV^T는 orthogonal한데 각 크기 scale로 나누어 orthonomal 매트릭스로 보통 변환해놓습니다.

이렇게 해놓고 식을 다시 봅시다.

A=u1σ1v1T+u2σ2v2T,...,upσpvpTA = u_1\sigma_1v_1^T + u_2\sigma_2v_2^T, ..., u_p\sigma_pv_p^T

하나의 유닛 즉 성분은 다음과 같겠죠

unσnvnTu_n\sigma_nv_n^T

이렇게 AA는 여러 pp개의 성분으로 나누어졌는데 singler value σ\sigma의 크기는 각 성분의 분산과 같게 됩니다. 근데 분산이 가장 큰 성분들을 추려내는 것이 PCA의 기본원리기 때문에 앞에서부터 주성분이 되게 됩니다.

Reference

[1] 공돌이의 수학정리노트, https://angeloyeo.github.io/2019/08/01/SVD.html
[2] MIT OpenCourseWare, https://www.youtube.com/watch?v=mBcLRGuAFUk

profile
Artificial Intelligence study note

0개의 댓글