반응형

Intro


지난글에서는 벡터와 행렬의 성질과 연산에 대해서 정리했습니다. 이번 글에서는 머신 러닝에서 가장 자주 쓰이는 개념인 교유값과 고유벡터에 대해서 정리하겠습니다.

선형변환


행렬은 입력으로 들어온 벡터를 다른 형태의 벡터로 변환할 수 있는 선형함수로 사용될 수 있습니다. 이렇게 선형함수에 의한 변환을 선형변환이라고 합니다.

예를들어 $\vec{x}$는 행렬 $A$에 의해서 $\vec{y}$로 변형될 수 있습니다.

$\vec{x}=(1,2) , A=\begin{pmatrix} 2&4\\3&5\\0&1\end{pmatrix}$

$A\vec{x}^\top=\vec{y}=(10,13,2)^\top$

이처럼 벡터는 행렬에 의해서 차원이 바뀌기도 하고, 회전하거나 확대, 축소되기도 합니다.

고윳값과 고유벡터


그런데 여기 특별한 경우가 있습니다. 행렬로 변환이 된 이후에도 본인의 방향을 그대로 유지하는 벡터가 있습니다.

$n\times n$ 정방행렬 $A$와 길이 $n$벡터 $\vec{x}$로 수식을 표현하면 아래와 같습니다.

$A\vec{x}=\lambda \vec{x}$

이를 만족하는 $\vec{x}$를 고유벡터, 그리고 이 벡터가 변환 후 확장된 배수 $\lambda$를 고윳값이라고 합니다.

즉 어떤 행렬에 의해 선형변환이 되어도 그 방향이 바뀌지 않고 크기만 바뀌는 벡터와 그 크기의 값이 쌍으로 있는겁니다.

우리가 알아야 할 점은, 고유벡터는 여러 개 존재할 수 있지만, 고윳값은 항상 $n$개 존재한다는 겂니다. (0이거나 중복될 수 있지만)

이는 위의 식을 행렬식 $det(A-\lambda E)=0$ 로 풀면 알 수 있는데요, 행렬식이 $\lambda$의 $n$차 방정식으로 나오기 때문에 $n$개의 고윳값이 있을 수 있는 겂니다.

고유벡터는 서로 방향만 같으면 같은 고윳값을 갖기 때문에 여러개 존재할 수 있는 거고요.

또한, 실수로만 이뤄진 행렬의 경우, 0이 아닌 고윳값의 개수는 해당 행렬의 rank와 같습니다.

닮음변환


고윳값과 고유벡터는 numpy.linalg라이브러리를 통해 쉽게 구할 수 있습니다.

그렇다면 이렇게 구한 고윳값과 고유벡터를 갖고 무엇을 할 수 있을까요?

이를 알기 전에 먼저 알아야 하는 개념이 닮음변환입니다.

우리는 두 행렬이 같다는 것은 각 위치에 대응하는 성분의 값이 모두 일치하는 것임을 압니다.

그렇다면 두 행렬이 _닮았다_는 것은 무엇일까요? 아마 같지는 않지만 많은 공통된 성질을 갖고 있을 겁니다.

선형대에서는 아래의 관계를 갖는 행렬 $A, B$가 서로 닮음 관계라고 합니다.

invertible matrix $P$가 있을 때,

$P^{-1}AP = B$

이때 $P$가 역행렬이 있다는 말은 $A, B, P$가 모두 정방행렬이라는 뜻이기도 합니다.

사실상 $B$는 $P$가 무엇이냐에 따라 정해지는 거고, $P$가 역행렬만 있으면 $A$와 $B$는 아래의 성질을 갖는 닮음 관계가 되는겁니다.

$A = PBP^{-1}$

$B^n = P^{-1}A^nP$

$det(A) = det(B)$

$tr(A)=tr(B)$

$tr$은 trace의 약자로, 주 대각성분의 합을 의미합니다. trace 역시 몇가지 재밌는 성질이 있습니다.

$tr(AB) = tr(BA) \ne tr(A)tr(B)$

$tr(ABC)=tr(BCA)=tr(CAB)\ne tr(ACB)=tr(CBA)=tr(BAC)$

직교대각화


앞에서 닮음관계인 두 행렬은 $P^{-1}AP = B$의 관계를 만족한다고 했습니다. 두 행렬의 닮음 역시 $P, B$가 어떤 형태이냐에 따라서 특별한 경우가 있습니다.

1. $P$의 형/열별 벡터들이 서로 수직인 직교행렬일 때, $B$는 $A$에 직교닮음(orthogonal similar)이라고 합니다.

2. $B$가 대각행렬일 때, $A$를 $B$로 변환하는 것을 대각화(diagonalization)라고 합니다.

신기하게도, $P$를 $A$의 고유벡터들로 이루어진 벡터를 사용했을 때, 그 결과는 주대각성분을 $A$의 고윳값으로 갖는 대각행렬이 됩니다.

대각행렬의 각 대각 성분은 고윳값이므로, 대각행렬의 행렬식은 고윳값의 곱이고, trace는 고윳값의 합입니다.

따라서 우리는 변환된 대각행렬을 이용해서 손쉽게 $A$의 행렬식, trace 등을 계산할 수 있게 됩니다. 다만 $P$의 역행렬을 계산해야 하죠

3. $P$가 직교행렬이고, $B$가 대각행렬일 때, $A$를 $B$로 변환하는 것을 직교 대각화(orthogonal diagonalization)라고하고, $A$를 직교대각화 가능(orthogonally diagonalizable)라고 합니다.

직교대각화가 가능한 경우는 언제일까요? 이 질문에 대한 대답은 아래 정리로 대신하겠습니다.

Spectral Theorem: 실수로 이루어진 $n \times n$ 행렬 $A$가 대칭행렬이면, 직교 대각화 가능 이고, 이는 반대로도 성립한다.

또한, 직교대각화가 가능한 행렬 (실수인 대칭행렬)은 항상 $n$개의 실수인 고윳값을 갖고(중복 가능), 고유벡터들은 서로 orthogonal 합니다.

고윳값 분해


제가 앞서 설명드리지 않은 대칭행렬의 특징이 하나 더 있습니다. 그것은 대칭행렬의 고유벡터들은 서로 수직이다.입니다.

제가 이를 말씀드리는 이유는, 대칭형렬 $A$를 직교 대각화 하기위한 직교행렬 $P$를 $A$의 고유벡터의 집합으로 사용했을 때,

직교 대각화의 결과는 주대각 성분의 값으로 자신의 고윳값을 갖는 대각행렬이 됩니다!

따라서 $A$는 아래 식과 같이 고유벡터로 이루어진 직교행렬과 고윳값을 대각성분으로 갖는 대각행렬의 조합으로 분해가 가능해집니다.

$P^{-1}AP = B \rightarrow A=PBP^{-1}=PBP^T$

이를 고윳값 분해(eigenvalue decomposition)라고 합니다. $P$는 직교행렬이므로 $P^{-1}=P^T$이기 때문에 역행렬 계산없이 수행할 수 있습니다.

고윳값 분해는 이후 대표적인 차원 축소 기법인 PCA(Principal Component Analysis)을 이해하기 위한 핵심개념입니다.

마무리


이 글에서는 선형대 수학의 고유벡터, 고유 값 그리고 고윳값 분해까지 정리했습니다.

다음에는 고윳값분해의 일반화된 형태인 SVD에 대해서 정리하겠습니다.

읽어주셔서 감사합니다!

References

선형대수와 통계학으로 배우는 머신러닝 with 파이썬

다크 프로그래머님 블로그

삶은 달걀님 블로그

반응형

+ Recent posts