ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 특이값 분해 (SVD)
    수학/선형대수 2024. 6. 14. 00:19

    개요

    특이값 분해의 응용에 대한 자료는 다른 곳에서 쉽게 찾을 수 있기 때문에 이 글에서는 실수 행렬의 특이값 분해 방법에 초점을 맞춘다.

    정의

    \( m \times n \) 행렬 \( A \)는 항상 다음과 같이 세 행렬의 곱으로 표현할 수 있고 이런 분해를 특이값 분해(Singular Value Decomposition)라고 부른다.

    $$ A = U S V^T $$

    여기서 \( U \)는 \( m \times m \) 직교 행렬, \( S \)는 \( m \times n \) 대각 행렬, \( V \)는 \( n \times n \) 직교 행렬이다.

    \( S \)는 특이 행렬(singular matrix)이라고 부르는데, 특이값이라고 부르는 특이 행렬의 대각 성분들은 양수(또는 0)이고 보통은 특이값들을 왼쪽 상단부터 대각선 방향으로 줄어드는 순서로 위치시킨다.

    기본적인 성질

    주관적인 표현이긴 하지만 특이값 분해를 한 결과 중에서 가장 중요한 내용을 담고있는 부분은 특이 행렬 \( S \)이다.

    대각 행렬이라고 하면 정방(square) 행렬만을 생각하는 경우가 있는데 \( A \)가 정방 행렬임을 가정하지 않았기 때문에 일반적으로 특이 행렬도 정방 행렬이 아니고 예를 들어 다음과 같이 생겼을 수도 있다.

    $$ \begin{bmatrix} 3 & 0 & 0 \\\ 0 & 2 & 0 \\\ 0 & 0 & 1 \\\ 0 & 0 & 0 \end{bmatrix} $$

     

    (1) 계수

    위의 예시 행렬의 계수(rank)는 3인데, 대각 행렬의 경우 대각 성분 중 \( 0 \)이 아닌 값들의 개수가 계수이기 때문이다.

    \( U \)와 \( V \)가 직교 행렬(따라서 정칙(nonsingular) 행렬)이기 때문에 \( U S V^T \)의 계수는 \( S \)와 같고 결국 \( A \)의 계수는 대각 행렬 \( S \)의 대각 성분 중 \( 0 \)이 아닌 값들의 개수가 된다.

     

    (2) 역행렬

    만약 \( A \)가 정방 행렬이고 역행렬이 존재한다면 (그래서 특이값 분해를 했을 때 대각 행렬 \( S \)의 모든 대각 성분이 0이 아닌 수라면) \( V S^{-1} U^T \)은 \( A \)의 역행렬 된다. 여기에서 \( S \)의 역행렬 \( S^{-1} \)는 \( S \)의 각각의 대각 성분들의 역수로 만들어지는 새로운 대각 행렬이다. \( U S V^T \)와 \( V S^{-1} U^T \)를 곱해보면 왜 \( V S^{-1} U^T \)이 \( A \)의 역행렬이 되는지 알 수 있다.

    특이값 분해하기

    이제 특이값 분해하는 방법에 대해 기술하려는데 특이값 분해 가능성의 증명이라고도 할 수 있겠다. 위에서 언급했듯이 여기에서는 임의의 실수 행렬 \( A \)가 주어졌다고 가정하는데, 특이값은 다음 두 가지 착안점에 기반하여 두 단계에 걸쳐 찾는다.

    1. \( A^T A \)는 대칭 행렬이고 대칭 행렬은 고윳값 분해가 가능하다.
    2. 만약 어떤 행렬 \( X \)가 있어서 \( X^T X \)가 대각 행렬 \( D \)라면 \( X \)를 약간 변형시켜서 부분적으로 직교인 \( U \)를 만들 수 있다. 여기서 "부분적으로 직교"의 의미는 \( U \)의 열벡터가 0 벡터이거나, 그게 아니라면 길이가 1이면서 서로 직교한다는 것인데, 이렇게 찾은 \( U \)에 (\( D \)와 모종의 관계가 있는) 적당한 대각 행렬을 곱하면 다시 \( X \)가 된다.

    <단계 1>

    \( A^T A \)가 대칭 행렬임은 다음과 같이 간단히 보일 수 있다.

    $$ (A^T A)^T = A^T (A^T)^T = A^T A $$

    대칭행렬은 항상 고윳값 분해를 통해 직교 대각화가 가능하기 때문에 \( A^T A = V D V^T \)와 같이 쓰자. 여기서 \( V \)는 고윳값 분해할 때 얻게되는 직교 행렬이다.  (고윳값 분해와 직교 대각화 참고)

     

    <단계 2>

    단계 1까지만 보면 이런 접근이 특이값 분해에 어떤 도움이 되는지 이해가 가지 않을 수 있다.

    우리는 \( A^T A \)가 아니라 \( A \)가 어떻게 표현될 수 있는지에 관심이 있고, 실수나 복소수같은 수와 달리 행렬들의 곱(여기에서는 \( A^T A \) )이 뭐가 되는지 안다고 해서 곱하기 전의 행렬( \( A \) )이 뭔지 바로 알 수 있는 것은 아니기 때문이다. (*)

    하지만 위에서 구한 \( A^T A = V D V^T \)를 \( V^T A^T A V = D \)로 다시 써보자.

    이렇게 쓰고 보면 갑자기 문제가 훨씬 쉬워졌음을 직감할지도 모르겠다. 오른편이 대각 행렬이기 때문인데, 위에서 한 행렬들의 곱에 관한 언급(*)에도 불구하고 행렬들을 다룰 때 대각 행렬이 포함되면 일이 쉬워지는 경우가 많다. 더 설명하기보다 위의 식을 다르게 표현해보면,

    $$ V^T A^T A V = (A V)^T (A V) = D $$

    즉, 행렬 \( A V \)와 그 전치 행렬을 곱하면 대각 행렬이기 때문에 \( A V \)의 열벡터들은 서로 직교이고 각각의 열벡터의 길이의 제곱이 \( D \)의 대각 성분에 나타나는 상황이다.

    표기를 간단히 하기 위해 \( X = A V \)라고 하자. \( X \)의 열벡터 각각을 자신의 길이로 나누어 단위 벡터를 만들면 위에서 설명한 \( A V \)의 성질 때문에 서로 직교하는 단위 벡터들을 얻게 되는데, 이런 단위 벡터들로 만든 행렬은 (거의) 직교 행렬이 된다는 뜻이다. 여기서 "거의"라고 한 이유는 \( D \)의 대각 성분들 중에 \( 0 \)이 있을 수 있기 때문인데 대각 성분이 \( 0 \)인 경우는 그에 대응하는 \( X \)의 열벡터도 길이가 \( 0 \)이 됨을 알 수 있다. (그리고 이런 경우는 단위 벡터로 만들 수 없다.)

    정리하면 적당한 직교 행렬 \( U \)가 존재해서 \( A V = X = U D' \)로 나타낼 수 있다는 결론을 얻는다.

    여기서 \( D' \)는 \( D \)의 대각 성분의 양의 제곱근을 대각 성분으로 하는 새로운 대각 행렬인데, 이게 가능한 이유는 \( V^T A^T A V = D \)의 대각 성분들이 음이 아니기 때문이다. 또한 \( D' \)을 정할 때 대각 성분이 음이 아니도록 했는데, 특이 행렬을 구할 때 특이값이 음이 아니려면 그렇게 정해야한다. (이 글을 끝까지 읽어보자.)

     

    잠깐 이해를 돕기 위해

    $$ U = \begin{bmatrix} u_{11} & \ldots & u_{1n} \\\ \vdots & \ddots & \vdots \\\ u_{n1} & \ldots & u_{nn} \end{bmatrix} $$

    라고 가정하면,
    $$ U D' = \begin{bmatrix} \sqrt{d_1} u_{11} & \ldots & \sqrt{d_n} u_{1n} \\\ \vdots & \ddots & \vdots \\\ \sqrt{d_1} u_{n1} & \ldots & \sqrt{d_n} u_{nn} \end{bmatrix} $$
    이 되어 \( U D' \)의 열벡터들의 길이의 제곱이 \( D \)의 대각 성분이 됨을 확인할 수 있다.

     

    어쩌면 직교 행렬 \( U \)를 구체적으로 어떻게 구하는지 궁금해할지도 모르겠다.

    위에서 \( d_i \)가 \( 0 \)이 아닌 경우에는 그에 대응되는 \( X \)의 \( i \) 번째 열벡터를 자신의 길이 \( \sqrt{d_i} \)로 나누어 단위 벡터를 만들었는데 이렇게 얻은 단위 벡터가 \( U \)의 \( i \) 번째 열벡터가 된다. 헷갈릴 수 있는 경우는 \( d_j \)가 \( 0 \)인 경우인데 그에 대응되는  \( X \)의 \( j \) 번째 열벡터는 자연히 영벡터라서 \( U \) \( j \) 번째 열벡터를 구할 때 전혀 도움이 되지 않는다. 그렇다고 \( U \) \( j \) 번째 열벡터가 무엇이든 상관없다는 뜻은 아니고 \( U \)가 직교 행렬이 되기를 원하는 상황이기 때문에 \( U \)의 다른 열벡터들과 직교하는 단위벡터를 적당히 정하기만 하면된다.

     

    끝으로, 직교행렬 \( V \)의 역행렬이 \( V^T \)라는 사실과 \( A V = U D' \)으로부터 특이값 분해 \( A = U D' V^T \)를 얻는다.

     

    '수학 > 선형대수' 카테고리의 다른 글

    행렬곱의 의미에 대해  (0) 2024.11.23
    고윳값 분해와 직교 대각화  (0) 2024.05.11
Designed by Tistory.