본문 바로가기
선형대수

특이값 분해(SVD)의 증명

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

어떤 \( m \times n \) 실수 행렬(real matrix) \( A \)와 그 전치 행렬 \( A^T \)의 행렬곱 \( AA^T \)와 \( A^T A \)는 대칭행렬이며 준정정 행렬(positive semi-definite matrix)이다. 먼저 대칭행렬인지 확인해 보자. 행렬곱을 전치한 다음에 원래 행렬과 같은 지 확인하면 된다.

 

\[ (AA^T )^T=AA^T, \ \ \ (A^T A)^T=A^T A \]

 

그렇다면 \( AA^T \)이 준정정 행렬인지 확인해 보자. 어떤 벡터 \( \mathbf{x} \)에 대해서 다음 부등식을 만족하는지 확인하면 된다.

 

\[ \begin{align} \mathbf{x} ^T (AA^T ) \mathbf{x} &= (A^T \mathbf{x} )^T (A^T \mathbf{x} ) \\ \\ &\ge 0 \end{align} \]

 

이번에는 \( A^T A \)이 준정정 행렬인지 확인해 보자. 어떤 벡터 \( \mathbf{y} \)에 대해서 다음 부등식을 만족하는지 확인하면 된다.

 

\[ \begin{align} \mathbf{y} ^T (A^T A ) \mathbf{y} &= (A \mathbf{y} )^T (A \mathbf{y} ) \\ \\ &\ge 0 \end{align} \]

 

따라서 \( AA^T \)와 \( A^T A \)는 대칭행렬이며 준정정 행렬이다.

실수 대칭행렬의 고유값과 고유벡터는 모두 실수값이이며 고유벡터는 서로 직각이다. 따라서 \( AA^T \)와 \( A^T A \)의 고유값과 고유벡터는 모두 실수값이이며 고유벡터는 서로 직각이다.

 

2020/07/18 - [선형대수] - 실수 대칭행렬의 고유값과 고유벡터


정정(positive-definite) 행렬의 고유값은 모두 0보다 크다. 그렇다면 준정정(semi-positive definite) 행렬의 고유값은 어떨까. 정정과 준정정 행렬의 경계는 0을 포함하느냐 포함하지 않느냐에 있다. 준정정 행렬의 고유값은 0을 포함한다. 그렇다면 준정정 행렬에는 몇 개의 0인 고유값이 있을까.

\( p \times p \) 인 준정정 행렬 \( M \)이 있다고 하자. 고유값 0에 대응하는 고유벡터가 \( \mathbf{v} \)라고 할 때 다음 식이 성립한다.

 

\[ M \mathbf{v} = 0 \mathbf{v} = 0 \]

 

따라서 고유값 0에 대응하는 고유벡터는 행렬 \( M \)의 영공간(null space)에 있는 벡터다. 영공간의 차원은 \( p \)와 행렬 \( M \)의 랭크(rank)의 차이이므로 고유값 0에 대응하는 서로 독립인 고유벡터는 \( (p-rank(M)) \)개다. 또한 0이 아닌 고유값에 대응하는 고유벡터의 개수는 \( rank(M) \)이다.

준정정 행렬의 고유값은 모두 0보다 크거나 같다. 따라서 \( AA^T \)와 \( A^T A \)의 고유값은 모두 0보다 크거나 같다. 그리고 0이 아닌 고유값에 대응하는 고유벡터 개수는 \( rank(A) \)다.

그러면 \( m \times n \) 실수 행렬(real matrix) \( A \)의 랭크가 \( r \)일 때, 행렬곱 \( A^T A \)의 0이 아닌 고유값과 고유벡터는 다음과 같이 쓸 수 있다.

 

\[ A^T A \mathbf{v}_i = \sigma_i^2 \mathbf{v}_i, \ \ \ i=1, \cdots , r \tag{1} \]

 

여기서 \( \sigma _i ^2 \)은 0이 아닌 고유값이며(따라서 0보다 큰 실수값), \( \mathbf{v}_i \)는 그에 대응하는 고유벡터다. 고유벡터는 크기가 1이며 서로 직각인 단위 직각 벡터다.

 

\[ \mathbf{v}_i^T \mathbf{v}_j = \begin{cases} 1, & i=j \\ 0, & i \ne j \end{cases} \]

 

따라서 식 (1)의 양변에 \( \mathbf{v}_i^T \)를 곱하면,

 

\[ \begin{align} \mathbf{v}_i^T A^T A \mathbf{v}_i &= \sigma _i^2 \mathbf{v}_i^T \mathbf{v}_i \\ \\ \to (A \mathbf{v}_i )^T A \mathbf{v}_i &= \sigma _i^2 \end{align} \]

 

가 되어서 벡터 \( A \mathbf{v}_i \)의 크기는 \( \sigma _i \)가 된다.

이제 새로운 단위 벡터 \( \mathbf{u}_i \)를 다음과 같이 정의한다.

 

\[ \mathbf{u}_i = \frac{ A \mathbf{v}_i}{ \sigma _i} \tag{2} \]

 

그리고 식 (1)의 양변에 \( A \)를 곱하면,

 

\[ \begin{align} AA^T A \mathbf{v}_i &= \sigma _i^2 A \mathbf{v}_i \\ \\ \to AA^T \mathbf{u}_i &= \sigma _i^2 \mathbf{u}_i \tag{3} \end{align} \]

 

가 된다. 식 (3)에 의하면 단위 벡터 \( \mathbf{u}_i \)는 행렬 \( AA^T \)의 고유값 \( \sigma _i^2 \)에 대응하는 고유벡터가 되는 것을 알 수 있다.

그럼 벡터 \( \mathbf{u}_i \)는 서로 직각일까. 계산해 보자.

 

\[ \begin{align} \mathbf{u}_i^T \mathbf{u}_j &= \frac{ \mathbf{v}_i^T A^T A\mathbf{v}_j}{ \sigma _i \sigma _j } \\ \\ &= \frac{\mathbf{v}_i^T \sigma _j^2 \mathbf{v}_j}{ \sigma _i \sigma _j } \\ \\ &= \begin{cases} 1, & i=j \\ 0, & i \ne j \end{cases} \end{align} \]

 

따라서 고유벡터 \( \mathbf{u}_i \)는 단위 직각 벡터다.

식 (2)를 \( r \)개의 벡터에 대해서 쓰면 다음과 같다.

 

\[ A V_r=U_r \Sigma _r \tag{4} \]

 

여기서

 

\[ \begin{align} V_r &= \begin{bmatrix} \mathbf{v}_1 & \mathbf{v}_2 & \cdots & \mathbf{v}_r \end{bmatrix} \\ \\ U_r &= \begin{bmatrix} \mathbf{u}_1 & \mathbf{u}_2 & \cdots & \mathbf{u}_r \end{bmatrix} \\ \\ \Sigma _r &= \begin{bmatrix} \sigma _1 & & & \\ & \sigma _2 & & \\ & & \ddots & \\ & & & \sigma _r \end{bmatrix} \end{align} \tag{5} \]

 

이다. \( V_r \)은 \( n \times r \) 행렬이고 \( U_r \)은 \( m \times r \) 행렬이며 \( \Sigma _r \)은 대각 성분이 행렬 \( A \)의 특이값인 \( r \times r \) 대각 행렬이다. 특이값은 큰 수에서 작은 수의 순서로 정렬되어 있다.

 

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

 

이제 행렬 \( V_r \)에 고유벡터 \( \mathbf{v}_i \)뿐 만 아니라 서로 간에도 직각인 \( n \times 1 \) 단위 벡터 \( (n-r) \)개를 행렬 \( A \)의 영공간에서 선정하여 추가한다.

 

\[ V= \begin{bmatrix} V_r \ \ V_{n-r} \end{bmatrix} \tag{6} \]

 

여기서 \( V_{n-r} = \begin{bmatrix} \mathbf{v}_{r+1} & \mathbf{v}_{r+2} & \cdots & \mathbf{v}_n \end{bmatrix} \)인 행렬이며 \( V \) 는 \( n \times n \) 인 단위 직교행렬이다. 즉, \( V^{ -1} = V^T \)이다.

행렬 \( U_r \)에도 같은 과정을 거쳐서 \( m \times m \) 인 단위 직교행렬 U를 만든다.

 

\[ U= \begin{bmatrix} U_r \ \ U_{m-r} \end{bmatrix} \tag{7} \]

 

여기서 \( U_{m-r} = \begin{bmatrix} \mathbf{u}_{r+1} & \mathbf{u}_{r+2} & \cdots & \mathbf{u}_m \end{bmatrix} \)이며 \( U^{ -1} = U^T \)이다.

행렬 \( \Sigma _r \)에도 0 행렬을 추가하여 \( m \times n \) 행렬 \( \Sigma \)를 만든다.

 

\[ \Sigma = \begin{bmatrix} \Sigma _r & 0 \\ 0 & 0 \end{bmatrix} \tag{8} \]

 

그러면 식 (4)를 다음과 같이 쓸 수 있다.

 

\[ AV = U \Sigma \tag{9} \]

또는

\[ A=U \Sigma V^T \tag{10} \]

 

식 (10)은 어떤 \( m \times n \) 실수 행렬 \( A \)를 3개의 행렬의 곱으로 분해한 것으로 특이값 분해(svd)라고 한다.

 

특이값 분해

 

특이값의 특징을 정리하면 다음과 같다.
\( \sigma _1^2, \ \sigma _2^2, \ \cdots , \ \sigma _r^2 \)은 행렬 \( AA^T \)와 \( A^T A \)의 0이 아닌 고유값이다.
행렬 \( U_r \)과 \( V_r \)을 구성하는 열벡터는 행렬 \( AA^T \)와 \( A^T A \)의 고유값에 대응하는 고유벡터다.

 

 

댓글0