일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 다익스트라
- rust 스터디
- 구문트리
- Rust
- 컴파일러
- unity
- 스레드전용저장소
- 벡터
- linear algebra
- 정처기 공부법
- 대상파일
- 백준
- 코드포스
- 정보처리기사 실기 벼락치기
- 행렬
- CS정리
- eigenvalue
- c++
- 알고리즘
- 정처기 실기 공부법
- 정처기 실기 벼락치기
- 선형대수학
- 다이나믹 프로그래밍
- column space
- 정보처리기사 2025 1회 실기 벼락치기
- 링커
- matrix
- vector
- 컴퓨터밑바닥의비밀
- 재배치
- Today
- Total
개발_기록용
[선형대수학 정리] 18. 고윳값 분해 (eigen decomposition) 본문
1. 배경
그래픽스 공부에 들어가기 전, 근본 중에서도 근본인 선형대수학을 먼저 파야겠다고 생각했다!
Chris Ohk 님의 Game Developer Roadmap 2022를 보고 내가 부족한 부분을 채워나가기로 결심했기 때문이다.
https://github.com/utilForever/game-developer-roadmap
GitHub - utilForever/game-developer-roadmap: Roadmap to becoming a game developer in 2022
Roadmap to becoming a game developer in 2022. Contribute to utilForever/game-developer-roadmap development by creating an account on GitHub.
github.com
.
2. 정리
고윳값 분해 (eigen decomposition)
2x2 짜리 행렬 A에 대해 고윳값과 고유벡터가 2개라 가정하자.
그럼 Av1= λv1, Av2= λv2 로 나타낼 수 있고
합치면 v를 column으로 하는
A[v1, v2] 으로 표기할 수 있다. 이를 행렬 V라 하자.
$$A[v_{1},v_{2}]=[\lambda_{1}v_{1},\lambda_{2}v_{2}]=[v_{1},v_{2}]
\begin{vmatrix}
\lambda_{1} & 0 \\
0 & \lambda_{2} \\
\end{vmatrix}$$
이렇게 주어진 식을 행렬 V를 끄집어 내어
λ가 포함된 행렬을 하나 더 만들 수 있다. 이를 행렬 Λ라 하자.
$$AV=\Lambda V$$
그러면 V는 고유벡터들로 이루어진 행렬이므로 각각 independent 하니
rank(V) = 2이고, full column rank이므로 invertable하다.
그래서 양쪽에 V의 역행렬을 곱하면
$$A=V\Lambda V^{-1}$$
이와 같은 형태로 A에 관해 식을 정리하는 것을 고윳값 분해라 한다.
위의 식에서 Λ만 남도록 하면 양변에 V^{-1}V를 곱해서
$$\Lambda=V^{-1}AV$$
로 정리할 수 있고, Λ는 n x n 대각행렬이라
이를 diagonalize (대각화) 라 하며
Λ를 위와 같이 정리할 수 있을 때
A는 diagonalizable 하다고 한다.
A가 고윳값분해가 가능하다는 것은
A가 diagonalizable 하다는 것
그리고 A는 independent한 eigen vector를 n개 갖는다는 것과 동치이다.
고윳값 분해의 장점
고윳값 분해를 했을 때의 장점을 알아보자.
① A의 k제곱의 계산이 매우 쉽다.
$$A^{k}=V\Lambda V^{-1}\cdot V\Lambda V^{-1}\cdot V\Lambda V^{-1}\cdot ... = V \Lambda^{k}V^{-1}$$
② A의 역행렬의 계산이 매우 쉽다.
$$A^{-1}=((V \Lambda V^{-1}))^{-1} = V \Lambda^{-1}V^{1}$$
③ determinant의 계산이 매우 쉽다.
det를 취하면 행렬의 곱을 분해할 수 있고
역행렬의 determinant는 역수이기 때문이다.
$$det(A)=det(V\Lambda V^{-1})=det(V)det(\Lambda)det(V^{-1})=det(\Lambda)=\lambda_{1} \lambda_{2}...\lambda_{n}$$
④ trace의 계산도 간단하다.
cyclic property를 사용하면
$$tr(A)=tr(V\Lambda V^{-1})=tr(\Lambda V^{-1}V)=tr(\Lambda)=\lambda_{1}+\lambda_{2}+...+ \lambda_{n}$$
⑤ rank - deficient 하면 det(A) = 0인데,
이는 영벡터인 고유벡터가 하나 이상 존재한다 와 동치이다.
고윳값 분해의 나머지 특징
① A의 고윳값은 A의 전치행렬의 고윳값과 같다.
$$det(A-\lambda I)=det((A-\lambda I)^{T})=det(A^{T}-\lambda I)$$
② A가 직교행렬이면, 고윳값은 1과 -1이다.
Qv = λv 일 때, 크기를 구하고자 스스로 내적하면
$$(QV)^{T}QV=V^{T}Q^{T}QV=\left\|V\right\|^{2}_{2}=\lambda^{2} \left\|V\right\|^{2}_{2}$$
③ A가 P.S.D라는 것은 모든 고윳값이 0 이상인 것과 동치이다.
④ Diaogonalizable한 A의 non-zero인 고윳값의 수는 rank와 같다.
고윳값분해한 A에 대해 rank를 구해보면
V와 V^{-1}은 independent한 v벡터들로 이루어지니 무조건 full rank이다.
한편, rank는 곱해진 행렬들의 rank 중에서
제일 작은 것을 취하므로
$$rank(A)=rank(V\Lambda V^{-1}) = rank(\Lambda)$$
그러면 행렬 Λ 에 대해 대각성분의 값들 중 0이 아닌 것의 수가
곧 rank(A)이다.
추가 내용
행렬 A가 Symmetric하면 무조건 diagonalizable 하고, V는 직교행렬이다.
A가 Symmetric하면
A의 전치 행렬과 A가 동일하고, 이는 행렬 Λ도 동일하다.
$$A^{T} = V^{-T}\Lambda^{T}V^{T} = V^{T}\Lambda V=A=V^{T}\Lambda V^{-1}$$
$$\therefore V^{-T}\Lambda V^{T}=V\Lambda V^{-1}$$
여기서 V의 역행렬과 V의 전치행렬이 동일하므로
V는 직교행렬 이라는 것도 유도할 수 있다.
그러면 V를 직교행렬 Q로 치환할 수 있고
Symmetric 행렬 A는
$$A=Q\Lambda Q^{-1}$$
이라고 쓸 수 있다.
그러면 이를 쭉 전개했을 때
$$A=\lambda_{1}q_{1}q^{T}_{1}+\lambda_{2}q_{2}q^{T}_{2}+\lambda_{3}q_{3}q^{T}_{3}$$
과 같이 A를 rank-1 행렬들의 합으로 나타낼 수 있다.
Symmetric 행렬 A는 rank-1 행렬들의 합으로 나타낼 수 있다.
그러면 행렬 A에서 λ의 값이 작은 부분을 제거하여
데이터를 압축하는 원리로도 적용할 수 있다.
'선형대수학' 카테고리의 다른 글
[선형대수학 정리] 20. 특이값 분해 (SVD, Singular value Decomposition) (1) | 2024.07.29 |
---|---|
[선형대수학 정리] 19. 주성분 분석 (PCA : Pricipal Component Analysis) (8) | 2024.07.24 |
[선형대수학 정리] 17. 고윳값과 고유벡터(eigen value & eigen vector) (3) | 2024.07.24 |
[선형대수학 정리] 16. 최소자승법 (6) | 2024.07.22 |
[선형대수학 정리] 15. trace (3) | 2024.07.22 |