딥러닝을 위한 수학, Eigen vector, decomposition

Decomposition

수학을 공부하다 보면 어떠한 것을 쪼개서 봐야 이해가 되는 때가 많다. 고등학생 때까지는 아마 다항식을 쪼개면서 함수를 이해해왔을 것이다. 당시 배우던 식을 쪼개지 않으면 이해하기 어렵고 그것이 무엇을 나타내는 지 이해하기도 어렵다. 또 12와 같은 정수를 223과 같이 쪼개면서 수의 성질을 보기도 하였다. 물론 행렬도 쪼갤 수 있다. 행렬 역시 쪼개면 보이지 않던 특성들이 보이고 위의 예보다 더 많은 특성을 발견할 수 있다. 행렬을 쪼개는 것을 decomposition 이라고 한다.

가장 많이 쓰이는 행렬의 decomposition은 eigen decomposition이다. Eigen decomposition은 행렬을 eigen vector와 eigen value로 나누는 방법이다.

Eigen vector, Eigen value

한 행렬 $\mathbb{A}$의 eigen vector는 다음 식을 만족하는 $\mathbb{v}$ 이다.

$Av = \lambda v$

여기서 $\lambda$는 scalar로 이것이 바로 eigen value다. 각각의 eigen vector는 자신의 eigen value를 가진다. v가 A의 eigen vector라면 s*v ($s \in \mathbb{R} , ~ s \neq 0$) 또한 eigen vector이고 같은 eigen value를 가진다. 이렇듯 eigen vector는 여러 개이기 때문에 보통은 unit eigen vector만을 본다.

행렬A가 n개의 Linearly independent eigen vector {$v^{(1)},…,v^{(n)}$}와 그에 상응하는 eigenvalue {$\lambda_{1},…,\lambda{n} $}를 가졌다고 하자. 그러면 Eigen vector를 이용해서 행렬 $\mathbb{V} = [ \mathbb{v}^{(1)},…,\mathbb{v}^{(n)} ]$를 만들 수 있다. 같은 방법으로 eigen vector를 이용해서 행렬 $\mathbb{\lambda} = [\lambda _ {1},…,\lambda _ {n}] ^ {T}$을 만들 수 있다. 이 둘을 이용해서 A의 eigen decomposition을 구한다.

$\mathbb{A} = \mathbb{V} diag( \mathbb{ \lambda}) \mathbb{V} ^ {-1}$

Eigen value와 eigen vector를 이용해서 행렬을 재구성하므로 공간을 원하는 방향으로 늘릴 수 있다. 아직은 우리는 행렬은 eigen vector와 eigen value로 decomposing을 보자. Decomposing을 하면 행렬의 어떤 특징을 볼 수 있다. 단지 정수를 decompose해서 이해하는 것보다 훨씬 더 많이 말이다.

Notice

하지만 모든 행렬이 깔끔하게 eigen vector와 eigen value로 나뉘는 것은 아니다. 어떤 행렬에선 decomposition이 존재하지만 복소수를 갖고 있기도 하다. 다행히도 딥러닝에서는 대부분 간단한 decomposition이 존재하는 것들을 본다. 모든 real symmetric matrix는 실수의 eigen vector와 eigen value로 이루어진 행렬로 decomposing 할 수 있다.

$\mathbb{A} = \mathbb{Q} \mathbb{ \Lambda} \mathbb{Q} ^{T}$

여기서 Q는 A의 eigenvector로 이루어진 orthogonal matrix이고 $\mathbb{ \Lambda }$는 eigen value로 이루어진 diagonal matrix이다. Q가 orthogonal matrix인 것을 보면, A가 v 방향으로 eigen value 만큼 스케일링 되었다고 볼 수 있다.

위 사진은 eigen vector와 eigen value의 효과를 보여준다. 행렬 A가 서로 직교하고 unit circle의 $v^{1}, v^{2}$ 벡터와 그것의 eigen vector, value를 가진다. 각각의 벡터에 그것의 eigen value를 곱하면 오른쪽과 같이 공간을 늘릴 수 있다.

모든 real symmetrix matrix가 eigen decomposition을 가지는 것은 증명되었지만, 그것은 한개가 아닐 수도 있다. 만일 eigen value가 unique하다면 eigen decomposition 또한 유일하다.

Eigen decomposition

Eigen decomposition은 본래의 행렬에 대해 유용한 사실들을 많이 알려준다.

  • eigen value가 0이라면 그 행렬은 singular하다.
  • eigen decomposition은 이차식을 최적화하는 데도 쓰인다.
  • etc.

Some matrices

  • Eigen value가 모두 양수인 행렬은 positive definite.
  • Eigen value가 모두 0이상인 행렬은 positive semidefinite.
  • Eigen value가 모두 음수인 행렬은 negative definite.
  • Eigen value가 모두 0이하인 행렬은 negative semidefinite.

여기서 가장 많이 볼 수 있는 건 positive semidefinite로 이 경우 $\forall \mathbb{x}, ~ \mathbb{x} ^ {T} \mathbb{A} \mathbb{x} \geq 0$가 성립한다. Positive definite인 경우 다음도 같이 성립한다. $\mathbb{x} ^ {T} \mathbb{A} \mathbb{x} = 0 \rightarrow \mathbb{x} = \mathbb{0}$

Singular Value Decomposition

Singular value decomposition(SVD)는 또 다른 방식의 decomposition이다. SVD는 행렬을 singular vectors, singular values로 나누는데 얻을 수 있는 정보는 eigen decomposition과 거의 같다. 하지만 실제로는 SVD가 더 많이 쓰인다. 왜냐면 eigen decomposition과는 다르게 모든 행렬은 SVD를 할 수 있기 때문이다. 즉, 사용할 수 있는 범위가 더 크다.

예를 들면, square matrix가 아닌 행렬은 eigen decomposition을 할 수 없지만 SVD는 할 수 있다.

SVD는 생긴 것도 eigen decomposition과 비슷한데 SVD에서는 A를 세개의 행렬의 곱으로 나타낸다는 것만 다르다.

$\mathbb{A} = \mathbb{U} \mathbb{D} \mathbb{V} ^ {T}$

A가 mn행렬이라고 하면, U는 mm, D는 mn, V는 nn행렬이 된다. 이 각각의 세 행렬은 자신만의 구조를 가진다. U, V는 orthogonal 행렬이고 D는 diagonal 행렬이다. 여기서 D가 diagonal 행렬일 필요는 없다. D, U, V는 각각 singular values, left-singular vectors, right-singular vectors라고 불린다.

SVD의 가장 유용한 점은 square matrix가 아닌 것에도 쓸 수 있다는 것이다.

Eigen vector, value 유투브 비디오 보기

SVD 위키 보기