어떤 \( 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 \)의 고유값에 대응하는 고유벡터다.
'AI 수학 > 선형대수' 카테고리의 다른 글
유사 역행렬 (Pseudo Inverse Matrix) (0) | 2020.10.19 |
---|---|
특이값 분해(SVD)의 응용: 이미지 압축 (0) | 2020.07.25 |
특이값 분해(singular value decomposition) (0) | 2020.07.23 |
정정(positive-definite) 행렬의 고유값 (0) | 2020.07.21 |
정정(positive-definite) 행렬이란 (0) | 2020.07.20 |
댓글