Processing math: 100%

선형대수

[선형대수] 4.5.2 Construction of the SVD

syveany 2025. 3. 16. 13:35

공부하는 단계에서 정리한 내용입니다.

잘못된 내용이 있다면 말씀해주시면 감사하겠습니다.

https://mml-book.github.io/book/mml-book.pdf

 

4.5.2 Construction of the SVD

이번 section에서는 왜 SVD가 항상 존재하는지, 그리고 SVD를 어떻게 계산하는지에 대해서 알아볼 것이다.

 

SVD는 정사각행렬의 eigendecomposition과 비슷한 면이 있다.

 

Remark.

SPD(symmetric positive definite) 행렬 S

eigendecompositionS=S=PDP이고

SVDS=UΣV 이다.

만약 U=P=V이고 D=Σ 일 때 eigendecomposition과 SVD가 같아진다.

 

 

이제 본격적으로 SVD를 어떻게 계산하는지 알아볼 것이다.

m×n 행렬 A를 계산하는 것은 두 orthonormal bases U=(u1,,um)V=(v1,,vn)을 구하는 것과 같다. 이렇게 계산된 bases들로 행렬 UV를 만들 것이다.

 

총 4단계로 구성된다.

 

1. 먼저 right-singular vector의 orthonormal set v1,,vn 부터 만든다.

  -> Rm의 벡터들을 새로운 basis로 정렬해야 하는데, 이 중에서 가장 깔끔한 축을 찾아야 하기 때문

 

Spectral theorem에서 대칭행렬의 eigenvector들은 ONB, 즉 diagonalize 할 수 있음을 알 수 있다.

그리고 Theorem 4.14에서 m×n 행렬 A에 대해서 항상 symmetric, positive semidefinite한 n×n 행렬 AA를 만들 수 있음을 알 수 있다. 

그러므로 AA를 항상 diagonalize 시킬 수 있고, AA=PDP=P[λ100λn]P 가 된다.

여기서 λi0A의 eigenvalue 들이다.

 

A의 SVD가 존재한다고 가정하고, AAA=UΣV 을 넣어보자. 그러면 아래와 같이 전개된다.

AA=(UΣV)(UΣV)=VΣUUΣV=VΣΣV=V[λ12000000λn2]V

 

위의 두 식을 비교해보면 V=P이고 σ2i=λi임을 알 수 있다.

  - 행렬 P(AA의 eigenvector들)가 A의 right-singular vector임

  - AA의 eigenvalue들은 Σ의 singular value들의 제곱임

 

2. 그다음에 left-singular vector의 orthonormal set u1,,um 을 만든다.

  -> VΣ를 거치면서 크기가 조정되었고, 마지막으로 Rn에 맞춰서 새로운 방향으로 정렬해야 함

 

Left-singular vector U를 구할 때도 비슷한 과정을 거친다.

먼저 AA의 SVD를 구한다.

AA=(UΣV)(UΣV)=UΣVVΣU=U[σ21000000σ2m]U

 

AA은 대칭행렬이므로 spectral theorem에 의해서 diagonalize 할 수 있으므로 AA=SDS이다.

이때 얻어지는 eigenvector S가 SVD의 left-singular vector가 된다.

 

이제 Σ만 구하면 된다. AAAA가 동일한 nonzero eigenvalue를 가지므로, SVD에서의 nonzero entry들도 동일해야 한다.

 

3. 이렇게 구한 두 집합을 연결해서 A가 적용되었을 때 vi들의 orthogonality가 유지되도록 한다.

 

두 집합 UV를 연결하기 위해서 A에 의해서 변환된 vi들도 orthogonal 해야 한다는 사실을 이용할 것이다.

Section 3.4에서 ij 일 때, AviAvj의 내적이 0이 되어야 한다. 즉, A가 변환한 벡터들이 서로 직교해야 함을 배웠다.

즉, 서로 다른 vivj가 orthogonal eigenvector라면 아래 식이 성립한다.

(Avi)(Avj)=viAAvj=vi(λivj)=λivivj=0

 

mr 일 때, Av1,,AvrRmr차원 부분공간의 baiss가 된다.

 

4. 그리고 이렇게 변환된 벡터들을 스칼라 인자들로 정규화해서 singular vector(U하고 V에 속해있는 벡터)를 구한다.

 

SVD를 완성하기 위해서 우리는 orthonormal한 left-singular vector(ui)들이 필요하다.

아래와 같이 right-singular vector의 Avi들을 정규화하면 ui들을 얻을 수 있다.

ui:=AviAvi=1λiAvi=1σiAvi

(+ 중간에 왜 Avi=λi인지 전개해봤다.)

 

 

따라서 viuiΣ를 통해서 연결된다.

 

위에서 온 ui=1σiAvi를 아래와 같이 다시 쓸 수 있다.

Avi=σiui(i=1,,r(=rank))

 

보면 eigenvalue 방정식하고 비슷하지만, 좌변과 우변의 벡터가 다르다.

즉, SVD에서는 변환 후에 벡터의 방향이 바뀜을 알 수 있다!

 

nm 일 때, 모든 in에 대해서 성립하지만 i>nui이 존재하긴 한다. 그냥 남아있는 basis 라고 생각하면 된다.

mn일 때도 마찬가지이다.

즉, SVD가 A의 null space(Ax=0)도 찾을 수 있다는 뜻이다!

 

Avi=σiui에서 vi를 모아서 행렬 V로, ui를 모아서 행렬 U로 만들면 아래와 같아진다.

AV=UΣ

여기서 양변에 V을 곱하면 아래와 같이 A의 SVD가 나온다.

A=UΣV

 

 

 

Ex 4.13 (Computing the SVD)

행렬 A=[101210]의 SVD를 구해보자.

그러려면 right-singular vectorvi, singular valueσk, left-singular vectorui를 구해야 한다.

아래와 같이 3단계에 걸쳐서 구하면 된다.

 

보통 singular value는 σ1σ2σr0 순으로 정렬된다.

(앞 포스팅에서 포스팅했던 Theorem 4.22 아래쪽에 나와있음..)

 

 

(틀린 풀이)

이거 까먹고 처음에 그냥 아래처럼 오름차순으로 계산했는데 어딘가 이상했음. 검산을 했는데 A가 [101210]가 안 나옴

 

 

(수정해서 맞은 풀이)

Sigular value가 σ1σ2σr0 순으로 정렬되어야 하기 때문에 eigenvalue부터 내림차순으로 정렬해줬다.

 

 

끝!!!

이것도 오래 걸렸다.

점점 감을 잡아가는 것 같기도 하다.

근데 이게 어디에 쓰이는지는 아직 잘 모르겠다.