본문 바로가기
matrix analysis

SVD - 특이값 분해 (Singular Value Decomposition)

 

 

지난 게시물에서 다루었던 고유값 분해에 이어서

이번에는 특이값 분해에 대해 포스팅해보려 한다.

 

 

특이값 분해 또한 행렬 분해 방식 중 하나이며,

nxn정사각 대칭행렬에서만 성립하는 고유값 분해와는 달리 임의의 mxn행렬에서도 성립되므로

좀 더 일반화된 버전이라고 볼 수 있다.

 


1. 특이값 분해를 하는 이유, 간단한 배경지식

 

특이값 분해는 주로 차원 축소를 위해서 쓰인다.

n차원 보다 작은 p차원 부분 공간에서 m개의 점을 표현하는 방법을 찾는 과정으로서,

데이터와 부분공간으로부터의 수직거리를 최소화하여 찾는다.(제곱합의 최소화)

그렇기 때문에, A자체보다 계산과정에서 $AA^{T}, A^{T}A$ 를 주로 사용하게 된다.

 

 

이후 공식에서 한번 더 말하게 되지만,

특이값 분해는, 직교하는 벡터집합에 대해 선형변환을 취하면

벡터의 크기는 변하면서 직교 성질은 유지할 수 있는 해당 직교벡터 집합,

변형 후 결과를 구해보는 것이라고 요약할 수 있다.

 

 

특이값 개념을 알고 있어야 하는데 특이값은 고윳값에 루트를 씌운 형태이며

이 또한 아래 내용을 읽고 알 수 있다.

 

 

또한 이 특이값 분해를 위해 알고 있어야 하는 개념은 orthonormal(직교)과 orthogonal(정규직교)이다.

많이 헷갈렸었는데, 한마디로 정리하자면

orthonomal한 vector들을 column vector에 삽입하면 orthogonal matrix가 된다고 할 수 있다.

즉, 이 orthonomal vector들이 orthogonal matrix의 orthonomal basis가 되는 것이다.

 

 

행렬 U가 orthogonal이면 $U^{T}U = I$ 성질을 가지고,

orthogonal이면서 정방행렬일 경우에는 $U^{T} = U^{-1}$ 의 성질도 가진다.

(처음에 고윳값분해(EVD) 공식을 접했을 때, 기본공식이 어디서는 T가 있고 어디서는 역행렬로 되어 있어서 의문이었는데

EVD개념에서는 정방행렬을 가정하기 때문에 그렇다는 것을 깨달았었다..!)

 

 

또한 벡터 q가 orthonormal이면

i와 j 가 다른 값이면 $qi^{T}qj = 0$

같은 값이면 1이라는 성질도 나중에 중요하게 쓰인다!

(아마도 SVD 말고 다른데서 나왔던 것 같은데 나중에 다른 게시물에서 나올 것 같다)

 

 

또 추가 참고 개념으로 행렬 Σ가 diagonal이면

$Σ^{T}$ = Σ 이다.

 

 

 

 

 

 

 

2. 특이값 분해 공식

 

여기서 U는 A$A^{T}$ 의 고유벡터를 열로 구성하는 mxm직교행렬(orthogonal matrix)이며 Left Singular Vector라고도 하고

Σ는 각 대각원소를 A의 특이값으로 가지는 대각행렬(diagonal matrix),

V는 $A^{T}A$의 고유벡터를 열로 구성하는 nxn 직교행렬(orthogonal matrix)이며 Right Singular Vector 라고도 한다.

 

공식을 시각화하면 아래와 같다.

 

 

Σ는 A의 특이값을 대각원소로 가지기 때문에, A에 의해서 결정된다고 볼 수 있다.

 

 

공돌이의 수학노트를 참고하며, 이 개념을 이해하는데에 큰 도움이 되었는데

특이값 분해의 의미를 이 공식과 결합하여 생각하면, 아래 내용과 같다.

 

 

"직교하는 벡터집합(V)에 대하여, 선형변환(m차원 -> n차원) 후에

그 크기는 변하지만(Σ만큼),

여전히 직교할 수 있게 만드는 그 직교벡터 집합은 무엇이고

변형 후의 결과(U)는 무엇인가?"

 

 

 

 

3. 특이값 분해 증명(Proof of SVD)

 

꽤나 복잡하다..

 

 

 

 

 

 

 

 

 

4. 특이값 분해 풀이 예시

 

 

아래의 A행렬에 대해 특이값 분해를 해보자.

 

1) U구하기 - $AA^{T}$ 이용.

 

위에서 구한 $AA^{T}$ 의 고유값, 고유벡터를 구하기 위해 행렬식을 사용한다.

 

 

따라서 $AA^{T}$ 의 고유벡터는 아래가 된다.

 

이 고유벡터에 대해 orthonomalization을 하면

 

 

따라서 U는

 

2) V구하기 - $A^{T}A$ 이용.

 

$A^{T}A$를 구하면

 

 

 

이는 3x3 행렬이기 때문에 고유값, 고유벡터를 구하는 방법이 U때와는 조금 복잡했다.

 

 

 

위 식의 행렬식을 계산하기 위해

(10-λ)(10-λ)(2-λ)-16+2*2(10-λ)를 풀면

λ(λ-10)(λ-12)=0 이된다.

 

따라서 λ=0, 10, 12이고 이에 따른 고유벡터는

 

이 고유벡터에 대해 마찬가지로 orthonomalization을 하면

 

 

V와 $V^{T}$를 구할 수 있다.

 

 

 

3) Σ 구하기

 

마지막으로 Σ는 아까 설명했듯이 σ값으로 구성되며

σ값은 λ값에 루트를 취한 형태가 된다.

따라서 0을 제외한 λ값이 10, 12였으므로

 

 

 

최종적으로 나오는 A = $UΣV^{T}$ 식은 1), 2), 3)에서 구한 값들을 바탕으로 계산하여 구할 수 있으므로 생략하였다!

 

 

 

5. 특이값 분해의 활용

 

특이값 분해는 Image Comprossion과 같은 분야에서 활용이 많이 되는데

예를 들어 

위의 식과 같은 데이터를 가지는 A가 있다고 했을 때, $σ_{21}$부터는

값의 의미가 작아질 정도로 가정하면 그래프는 대략 아래처럼 될 것이다.

이런 경우에, 위 식을 다시 써보면

이런식으로 축약할 수 있다.

 

즉, 적은 용량으로 비슷한 데이터를 저장할 수 있고, 복원할 수 도 있다는 것이다.

 

 

 


 

 

다음 포스트에서는

특이값 분해를 활용하여 유사역행렬(= 의사역행렬)을 구하는 Minimum Length Solution에 대해서 정리해보려고 한다.