본문 바로가기
선형대수

특이값 분해(singular value decomposition)

by 세인트워터멜론 2020. 7. 23.

행렬을 다른 여러 개의 행렬의 곱으로 쪼개는 것을 분해(decomposition)라고 한다.

행렬의 분해로는 고유값 분해(eigen decomposition), 촐레스키 분해(Cholesky decomposition), LU 분해(lower-upper decomposition), 특이값 분해(singular value decomposition) 등 여러가지가 있지만 그 중에서도 가장 중요한 것이 SVD라고 불리는 특이값 분해가 아닐까 싶다.

 

 

특이값 분해는 이미지 압축, 모델의 차원 축소, 근사해 계산, 웹서치, 제어분야에서 액추에이터와 센서의 최적 위치를 선정하는 문제, 제어력 할당 문제 등 매우 폭넓게 응용되고 있기 때문이다.

고유값이 행과 열의 갯수가 같은 정방 행렬(square matrix)에서만 정의됐다면 특이값은 일반적인 직사각형 행렬에서도 정의된다.

행렬의 특이값 분해는 다음과 같이 어떤 \( m \times n \) 실수 행렬(real matrix) \( A \)를 3개의 특수한 구조를 갖는 행렬의 곱으로 분해한 것이다.

 

\[ A = U \Sigma V^T \]

 

여기서 \( U \)는 \( m \times m \) 직각 행렬(orthogonal matrix)이고 \( V \)는 \( n \times n \) 직각 행렬이며 \( \Sigma \)는 \( m \times n \) 인 '대각' 행렬이다. \( U \)와 \( V \)가 각각 직각 행렬이므로 다음 식을 만족한다.

 

\[ U^{-1} = U^T, \ \ \ V^{-1}=V^T \]

 

대각 행렬은 정방 행렬에서만 정의되는데, 여기서 말하는 '대각' 행렬은 행과 열의 번호가 같은 성분만 0이 아닌 어떤 값을 갖는다는 의미다.

행렬 \( \Sigma \)의 대각 성분에 있는 0이 아닌 값을 행렬의 특이값이라고 한다. 특이값의 갯수는 행렬 \( A \)의 랭크(rank)와 같다. 행렬 \( \Sigma \)에서 특이값은 큰 수에서 작은 수의 순서로 정렬시킨다.

 

\[ \sigma _1 \ge \sigma _2 \ge \cdots \ge \sigma _r > 0 \]

 

여기서 \( \sigma _i \)는 특이값이며 아래 첨자 \( r \)은 랭크다.

 

 

만약 행렬 \( A \)의 성분에 복소수가 있다면 행렬의 전치(transpose) 대신에 켤레복소수 전치(conjugate transpose)를 사용하면 된다.

이론적인 사항을 더 전개하기 전에 몇가지 행렬의 특이값 분해를 통해서 감을 잡아보자. 다음과 같은 행렬 \( A \)의

 

\[ A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \]

 

특이값 분해는 다음과 같다.

 

\[ \begin{align} U &= \begin{bmatrix} -0.3863 & -0.9224 \\ -0.9224 & 0.3863 \end{bmatrix} \\ \\ \Sigma &= \begin{bmatrix} 9.5080 & 0 & 0 \\ 0 & 0.7729 & 0 \end{bmatrix} \\ \\ V &= \begin{bmatrix} -0.4287 & 0.8060 & 0.4082 \\ -0.5663 & 0.1124 & -0.8165 \\ -0.7039 & -0.5812 & 0.4082 \end{bmatrix} \end{align} \]

 

행렬 \( \Sigma \)를 보면 여기서 말하는 '대각' 행렬의 의미를 알 수 있을 것이다. 행렬 \( A \)의 특이값은 두 개다. 행렬 \( A \)의 랭크가 2이기 때문이다.

이번에는 다음과 같은 행렬 \( A \)를

 

\[ A = \begin{bmatrix} 2 & 2 \\ -1 & 1 \end{bmatrix} \]

 

특이값 분해해 보자.

 

\[ \begin{align} U &= \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} \\ \\ \Sigma &= \begin{bmatrix} 2.8284 & 0 \\ 0 & 1.4142 \end{bmatrix} \\ \\ V &= \begin{bmatrix} -0.7071 & -0.7071 \\ -0.7071 & 0.7071 \end{bmatrix} \end{align} \]

 

이번에도 행렬 \( A \)의 특이값은 두 개다. 행렬 \( A \)의 랭크가 2이기 때문이다.

이번에는 다음과 같은 행렬 \( A \)를

 

\[ A = \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix} \]

 

특이값 분해해 보자.

 

\[ \begin{align} U &= \begin{bmatrix} -0.7071 & -0.7071 \\ -0.7071 & 0.70711 \end{bmatrix} \\ \\ \Sigma &= \begin{bmatrix} 2 & 0 \\ 0 & 0 \end{bmatrix} \\ \\ V &= \begin{bmatrix} -0.7071 & -0.7071 \\ 0.7071 & -0.7071 \end{bmatrix} \end{align} \]

 

이번에는 행렬 \( A \)의 특이값이 2로서 한 개다. 행렬 \( A \)의 랭크가 1이기 때문이다.

 

 

댓글0