본문 바로가기
ML & DL/Study

[선형대수] 특잇값 분해와 유사역행렬

by 별준 2022. 5. 14.

References

Contents

  • 특잇값 분해 (singular value decomposition, SVD)
  • 유사역행렬 (pseudoinverse)

특잇값 분해

[선형대수] 고윳값 분해

이전 포스팅에서 행렬을 고유벡터와 고윳값들로 분해하는 방법을 살펴봤습니다.

이와 다른 방식의 행렬 분해인 특잇값 분해(singular value decomposition, SVD)는 행렬을 특이벡터(singular vector)들과 특잇값(singular value)들로 분해합니다. 따라서 얻을 수 있는 정보는 고윳값 분해와 동일하지만, SVD는 좀 더 일반적인 행렬들에 적용이 가능하다는 장점이 있습니다.

모든 실수 행렬에는 특잇값 분해가 존재하지만, 항상 고윳값 분해가 존재하는 것은 아닙니다. 예를 들어, 정방행렬이 아니면 고윳값 분해가 정의되지 않습니다. 따라서, 정방행렬이 아닌 경우에는 반드시 특잇값 분해를 사용해야 합니다.

 

고윳값 분해는 행렬 \(\boldsymbol{A}\)를 분석해서, 아래의 등식을 만족하는 고유벡터들로 이루어진 행렬 \(\boldsymbol{V}\)와 고윳값들로 이루어진 벡터 \(\boldsymbol{\lambda}\)를 얻는 것입니다.

\[\boldsymbol{A} = \boldsymbol{V}\text{diag}(\boldsymbol{\lambda})\boldsymbol{V}^{-1}\]

 

특잇값 분해도 이와 비슷하지만, \(\boldsymbol{A}\)가 다음처럼 세 행렬의 곱으로 표현됩니다.

\[\boldsymbol{A} = \boldsymbol{UDV}^\top\]

\(\boldsymbol{A}\)가 m x n 행렬이라고 가정해봅시다. 그러면 \(\boldsymbol{U}\)는 m x m 행렬이고, \(\boldsymbol{D}\)는 m x n 행렬, 그리고 \(\boldsymbol{V}\)는 n x n 행렬입니다.

 

이 행렬들은 각자 특별한 구조를 가집니다. 행렬 \(\boldsymbol{U}\)와 \(\boldsymbol{V}\)는 둘 다 직교행렬로 정의되며, 행렬 \(\boldsymbol{D}\)는 대각행렬로 정의됩니다. 이때, \(\boldsymbol{D}\)가 반드시 정방행렬인 것은 아닙니다.

 

\(\boldsymbol{D}\)의 주대각 성분을 행렬 \(\boldsymbol{A}\)의 특잇값(singular value)이라고 부릅니다. 그리고 \(\boldsymbol{U}\)의 열을 좌특이벡터(left-singular vector)라고 부르고, \(\boldsymbol{V}\)의 열을 우특이벡터(right-singular vector)라고 부릅니다.

 

\(\boldsymbol{A}\)의 특잇값 분해를 \(\boldsymbol{A}\)의 함수의 고윳값 분해로 표현할 수 있습니다. \(\boldsymbol{A}\)의 좌특이벡터는 \(\boldsymbol{AA}^\top\)의 고유벡터입니다. \(\boldsymbol{A}\)의 우특이벡터는 \(\boldsymbol{A}^\top \boldsymbol{A}\)의 고유벡터입니다. \(\boldsymbol{A}\)의 0이 아닌 특잇값은 \(\boldsymbol{A}^\top \boldsymbol{A}\)의 고윳값의 제곱근입니다. 이러한 관계들은 \(\boldsymbol{AA}^\top\)에도 성립합니다.

 

SVD의 가장 유용한 특징은 SVD를 이용하면 역행렬의 정의를 비정방행렬에도 부분적으로 일반화할 수 있다는 것입니다.

 


유사역행렬

일반적으로 정방행렬이 아닌 행렬에는 역행렬이 정의되지 않습니다. 아래의 연립방정식을 푼다고 가정해봅시다.

\[\boldsymbol{Ax = y}\]

행렬 \(\boldsymbol{A}\)의 왼쪽 역행렬 \(\boldsymbol{B}\)를 곱하면 다음과 같이 됩니다.

\[\boldsymbol{x = By}\]

하지만 문제의 구조에 따라서는 \(\boldsymbol{A}\)에서 \(\boldsymbol{B}\)로의 매핑이 유일하지 않을 수 있습니다. 예를 들어, \(\boldsymbol{A}\)가 세로로 긴 비정방행렬이라면 이 방정식에는 해가 없을 수 있습니다. 또는 \(\boldsymbol{A}\)가 가로로 긴 행렬이라면 해가 여러 개일 수 있습니다.

 

이런 상황에서는 무어-펜로즈 유사역행렬(Moore-Penrose pseudoinverse)가 도움이 될 수 있습니다. \(\boldsymbol{A}\)의 유사역행렬은 다음과 같이 정의됩니다.

\[\boldsymbol{A}^+ = \lim_{\alpha \searrow 0}(\boldsymbol{A}^\top \boldsymbol{A} + \alpha \boldsymbol{I})^{-1} \boldsymbol{A}\top\]

 

하지만, 유사역행렬을 구하는 데 실제로 사용되는 알고리즘은 위 정의가 아닌 아래와 같은 정의에 기초합니다.

\[\boldsymbol{A}^+ = \boldsymbol{AD}^+ \boldsymbol{U}^\top \]

여기서 \(\boldsymbol{U, D, V}\)는 \(\boldsymbol{A}\)의 특잇값 분해입니다. 그리고 대각행렬 \(\boldsymbol{D}\)의 유사역행렬 \(\boldsymbol{D}^+\)는 \(\boldsymbol{D}\)의 0이 아닌 성분의 역수를 취하고, 그 결과를 전치해서 간단하게 구할 수 있습니다.

 

\(\boldsymbol{A}\)가 행보다 열이 많은 행렬(세로로 긴 행렬)일 때, 이러한 유사역행렬로 연립방정식을 풀면 여러 가능한 해 중 하나가 나옵니다. 구체적으로는 모든 가능한 해 중 유클리드 노름 \(\left \| x \right \|_2\)가 최소인 해 \(\boldsymbol{x = A}^+ \boldsymbol{y}\)를 얻게 됩니다.

 

\(\boldsymbol{A}\)가 열보다 행이 많은 행렬일 때는 해가 없을 수 있습니다. 이런 경우 유사역행렬을 적용하면 유클리드 노름 \(\left \| \boldsymbol{Ax - y} \right \|_2\)를 측정 기준으로 해서 \(\boldsymbol{y}\)와 최대한 가까운 \(\boldsymbol{Ax}\)에 해당하는 \(boldsymbol{x}\)를 얻게 됩니다.

댓글