Logical Scribbles
[선형대수학] 특이값 분해(SVD) 본문
지난 시간에는 고유값 분해에 대해 알아보았다.
짧게 복습을 하자면, 고유값 분해는 정방행렬 A에 대해 적용될 수 있으며 행렬을 인수분해하는 과정이고, 선형변환 A를 구성하는 선형변환들을 뜯어서 볼 수 있었다.(돌리고, 늘리고, 돌리고) 또한, 정방행렬 A가 대칭행렬일 때 고유값 분해가 더 파워풀함을 알 수 있었다. (직교 돌리기, 늘리기, 직교 돌리기) 마지막으로, 모든 정방행렬이 고유값 분해가 되는 것은 아니지만 모든 대칭행렬은 고유값 분해 (대각화)가 가능하다. ( p*p 정방행렬 A가 고윳값분해가 가능하려면 행렬 A가 p개의 일차독립인 고유벡터를 가져야 한다. )
이번 포스팅에서는 고유값 분해의 일반화 버전인 특이값 분해에 대해 알아보자. 특이값 분해는 차원 축소, pesudo inverse, PCA 등등을 이해하는 발판이 되니 선형대수학에서는 너무너무 중요한 토픽이다.
먼저 다음의 질문에 대한 답을 생각해보자.
"직교하는 벡터집합에 대해 선형변환 된 벡터가 여전히 직교할 수 있을까? 가능하다면 여전히 직교하고 있는 그 벡터집합은 무엇인가?"
이 질문은 이 글에서 천천히 해결 될 것이다.
우선 특이값 분해는 고유값 분해와 달리 정방행렬이 아닌 일반적인 mxn 행렬 A에 대해서도 적용될 수 있는 분해이다. 따라서 고유값 분해의 더 일반적인 버전이라고 볼 수 있다.
결론부터 말하면 행렬 A의 특이값 분해 결과는 다음과 같다.
이때, 각각의 기호는 다음과 같이 정의된다.
참고로 rectangular matrix는 직사각행렬, orthogonal matrix는 직교행렬, diagonal matrix는 대각행렬을 의미한다.
대칭행렬의 고유값 분해에서도 설명했듯이 직교행렬 U는 다음과 같은 성질을 갖는다.
아래의 식에서 양변에 V의 inverse를 취해주자.
V는 직교행렬이기 때문에, V^T의 역행렬은 V일 것이다. 따라서 다음과 같은 식을 얻을 수 있다.
이제 위의 질문에 답을 할 준비가 거의 다 되었다. 지금까지의 식들로 위 질문에 답을 해보면,
직교행렬 V에 선형변환 A를 취해주면 직교행렬 U와 대각행렬 ∑의 곱이 된다. 따라서 행렬 V의 선형변환 이후 여전히 직교하는 행렬은 행렬 U의 스칼라 배만큼의 행렬이 될 것이다.
여기서 특이값 분해를 끝낼 수는 없다. 직교행렬 U,V와 대각행렬 ∑를 어떻게 찾는지 모르기 때문이다.
직교행렬 U와 V를 찾는 법은 간단하다. 먼저 U를 찾는 법을 알아보자.
행렬 AA^T에 대해 생각해보자. 분명하게 행렬 AA^T는 대칭행렬이다. 그런데 이전 고유값 분해에서 공부했던 내용을 상기해보면, 대칭행렬은 무조건 고유값 분해(대각화)가 가능하고, 심지어 분해된 고유벡터들은 직교행렬을 이루고 있었다.
마찬가지로 행렬 A^TA도 분명하게 대칭행렬이고, 고유값 분해가 가능하며, 고유벡터들은 직교행렬을 이룬다.
또한 다음의 두 식을 보자.
여기서 행렬 AA^T와 A^TA의 0이 아닌 고유값이 같다는 것을 알 수 있다. 또한, 그들 의 고유값들은 모두 0 이상을 갖는다.
다시 돌아와서 mxn 행렬 A를 특이값 분해하면 m개의 열을 갖는 행렬 U와 n개의 열을 갖는 행렬 V로 분해되는데, 이 갯수는 각각 A의 행과 A의 열에 관련이 되어있다.
이제 행렬 AA^T를 고유값 분해 하면 분명히 A의 행의 특성을 갖는 직교행렬이 나올 것인데, 이를 U라고 할 것이다.
또한 A^TA를 고유값 분해하면 분명히 A의 열의 특성을 갖는 직교행렬이 나올 것인데, 이를 V라고 할 것이다.
마지막으로 AA^T의 고유값 = A^TA의 고유값에 루트를 씌워 실수 값을 구하여 고유값 분해에서 고유값들로 이루어진 대각행렬을 만들었던 방식으로 대각행렬을 만들고, 이를 ∑라고 하면 되는 것이다.
따라서 우리는 행렬 A가 주어졌을 때 특이값 분해를 할 수 있게 되었다!
이때 U를 left singular vector이라고 하고, V를 right singular vector이라고 한다. 또한 ∑를 이루는 성분들을 특이값이라고 한다.
다음 포스팅에서는 이 특이값 분해를 활용한 차원 축소와 pseudo inverse에 대해 다뤄보겠다.
끝!
'기초 수학 > 선형대수학' 카테고리의 다른 글
[선형대수학] PCA(주성분 분석)을 이용한 얼굴 인식 (Python) (0) | 2023.11.22 |
---|---|
[선형대수학] 특이값 분해(SVD)의 응용 (0) | 2023.11.21 |
[선형대수학] 고유값 분해 (0) | 2023.11.19 |
[선형대수학] 고유값(Eigenvalue)과 고유벡터(Eigenvector) (0) | 2023.11.18 |
[선형대수학] 역행렬의 의미 (Feat. 행렬식) (1) | 2023.11.18 |