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
'[Mathmatics]' 카테고리의 다른 글
[Statistics] 이산형 확률분포 (0) | 2021.04.27 |
---|---|
[Statistics] 상관관계와 공분산 (0) | 2021.04.27 |
[Statistics] 평균, 분산, 표준편차 (0) | 2021.04.27 |
[Linear algebra] SVD (0) | 2021.04.27 |
[Linear algebra] 주요 개념 및 성질(1) (0) | 2021.04.27 |