Deep Learning study

Eigen value 와 Eigen vector, Eigen decomposition( 고유 값과 고유 벡터, 고유값 분해 ) 본문

AI/Deep learning 을 위한 지식

Eigen value 와 Eigen vector, Eigen decomposition( 고유 값과 고유 벡터, 고유값 분해 )

HwaniL.choi 2019. 8. 25. 15:17
반응형

선형대수학에서 가장 중요한 부분중에 하나인 고유값과 고유벡터 입니다.

 

딥러닝을 공부하면 항상거의 빠지지 않고 나오는게 선형대수학이죠. 중요하지만 딱 필요한 만큼만 정리하고 가겠습니다. 뒤에 할 것들이 많기때문에.... (본과는 수학과지만.. 컴퓨터를 복수전공해서 수학을 놓은지도 벌써... 4년.. )

 

이 고유값과 고유벡터가 어디에 쓰인다.. 라기보다는 사실 다음에 할 내용인 SVD(singular vector decompositon)가 이 내용을 기본으로 하기때문에 짚고넘어가려고 합니다.

 

Eigen value, Eigen vector

 

먼저 Α(n x n 정방행렬)를 선형변환이라고 합시다. 그러면 고유벡터는 선형변환 후에도 변하지않는 영벡터가 아닌 벡터입니다. 예를들면 xy평면에서 선형변환 A가 회전을 시킬 수 있는데, 이 회전 방향이 y축을 축으로 회전시키는 회전변환이라하면 고유벡터는 y축방향을 가리키는 벡터가 되는 것입니다. 왜냐하면 y축이 축이되어 회전하므로 y축의 방향은 변함이 없기때문입니다.

y축 방향의 벡터는 모두 알고있겠지만 편의상 x라고 쓰겠습니다.

이제는 하나의 식을 만들어 낼 수가 있는데 , Ax = λx 로 표현되어집니다. 직관상 이 의미는 x를 선형변환 한 벡터와 x를 상수배 한 벡터와 같다는 것이죠. 즉 양변의 벡터는 서로 평행하고 성형변환 된 x는 x의 상수배로 나타내어질 수 있습니다.

 

그렇다면 고유값은 무엇일까요. 선형변환을 했을때 고유벡터의 길이가 바뀌는 배수(λ)를 고유값이라고 합니다. 이 값이 바로 위의 Ax = λx 에서의 λ입니다.

 

정확히는, 선형변환 A의 λ는 A의 고유값, 고유벡터는 λ에대한 벡터 라고 말할수 있습니다.

 

eigen decomposition

 

위에서 구한 λ와 x, 고유값과 고유벡터로 정방행렬에 대해서 대각화를 할 수 있습니다.

 

먼저 eigen decompositon을 하기위해서는 linearly independent 해야합니다. linearly independent 하다는 말은 벡터공간 V의 부분집합인 S = {v1,v2,...,vn}가 있을때,

c1v1 + c2v2 + ... + cnvn = 0을 만족하는 (ci는 상수, i = 1,2,3,...,n) 계수 ci 들(c1,c2,...,cn)은 0 밖에 없다는 것 입니다. 조금 직관적으로 말하면 "어떤 벡터도 다른 벡터들의 선형결합, 즉 상수배의 합 으로 표현 될 수 없다" 라는 말이 됩니다. (이는 저 위의 식에서 c1v1 = -(c2v2 + ... + cnvn) 을 생각해보면 쉽죠)

 

자 그러면 이제 고유값과 고유벡터를 어떻게 계산할수 있는지 알아보도록 합시다.

 

위의 식 Ax = λx 를 조금 변형시켜보도록 합시다

 

Ax - λx = (여기서 0 은 영벡터를 의미합니다.)

(A - λI)x = 0 (I 는 n x n identity matrix) --- (1)

 

(1) 식으로부터 얻어지는 λ와 x가 각각 고유값과 고유벡터가 됩니다. 그런데 여기서 조심해야할 것이 있습니다.

 

만약 (A - λI) 가 역행렬이 존재한다면 ( 즉, det(A - λI) ≠ 0 ),

 

x = (A - λI)-10 이 되어버립니다. 따라서 x = 0 이 되는것이죠. 그런데 위의 고유벡터 정의에서 영벡터가 아닌 벡터라고 했습니다. 따라서 (A - λI)가 역행렬이 존재하면 안됩니다. 즉, det(A - λI) = 0 이 돼야하는 겁니다.

 

위의 식 det(A - λI) = 0이 A의 특성방정식 (characteristic equation) 이라고 하고 이 방정식으로 λ값(고유값)을 찾을 수 있습니다.

 

간단하게 A를 아래와 같이 두겠습니다.

 

그렇다면 A - λI

가 될것입니다. 이제 행렬식을 구해보면

 

(a - λ)(d - λ) - bc 가 됩니다. 그럼 이 식을 0 으로 만드는 λ를 찾게 되면 고유값 2개가 나오게 됩니다.(2 x 2 정방행렬이기 때문에.., n x n 이라면 n개가 나옵니다. )

 

즉 (a - λ)(d - λ) - bc = 0 의 방정식을 풀어주면 고유값을 찾을수 있는것입니다.

그렇게해서 나온 λ의 값들을 λ1, λ2라고 하겠습니다.  그리고 x = (x1, x2)라고 합시다.

 

λ1에 대해서만 해 보면,

처럼 나오게됩니다. 이 식을 풀어서

위 처럼 나온 연립방정식을 x1x2에 대한 식으로 풀어주기만 하면 됩니다. 그러면 λ1에 대한 고유벡터가 나오게 되고, 똑같이 λ2에대해서도 해주면 λ2에대한 고유벡터를 구할 수 있습니다. 이 두개의 고유벡터는 v1, v2라고 하겠습니다.

 

예시를 풀어보고 싶으시다면 위키피디아나 아래 인용글을 참고해 주세요.

 

A = PΛP-1

 

자 그러면 이렇게 해서 나온 고유값과 고유벡터들로 위의 식 처럼 행렬의 대각화를 할 수 있게됩니다.

여기서 P는 고유벡터 v1v2를 열벡터로 가지는 2 x 2 정방행렬이고 Λ는 λ1 과 λ2를 대각성분으로 가지는 대각행렬입니다.

 

이렇게해서 고유값 분해가 끝나게 됩니다.

 

이거 다 쓰고 바로 SVD도 정리한거 올리려구했는데 .. 생각보다 길어져서 힘드네요.. 다음에 올려야지.. 그럼이만 !!

 

Reference

[1] https://en.wikipedia.org/wiki/Eigendecomposition_of_a_matrix

[2] 다크프로그래머님의 블로그

[3] https://twlab.tistory.com/46

 

반응형
Comments