개요
Gram-schmidt process의 부분이라고 할 수 있는 orthogonal projection을 하기 위해서 사영을 할 점을 얻어낼 수 있는
수식에 대해 알아보자.
Orthogonal projection을 위한 수식
사영을 위한 수식은 2가지가 있다.
그 2가지의 식은 이렇게 나뉜다.
1. 벡터가 unit 벡터일 때
2. 벡터가 unit 벡터가 아닐 때
unit 벡터일 때는, 수식 표현이 간단하다.
지금까지의 유도 과정
시작해보자.
least square를 이용하여 b - Ax를 가장 작은 값으로 만들어주는 x hat을 찾는 게 우리의 시작이었다.
그 x hat을 넣어 A에 통과시켰을 때 얻을 수 있는 값이 바로 b hat이었다.
설명을 쉽게 하기 위해서 그림을 보자.
일단 Col A부터 짚고 넘어가자면 이 공간은 어디에서부터 span된 공간일까?
그건 바로 A의 column vector들이 span한 공간이다.
자 다시 말하자면, 최적의 해인 x hat을 A에 통과시켜 linear transformation해서 얻을 수 있는 벡터는 b hat이다.
그럼 b hat = Ax hat이고 그림 상에서 보면 b의 바로 아래에 있다.
저 위치가 바로 우리가 찾는 최적의 솔루션이었다.
그리고 저 벡터 b hat을 얻기 위해서는 어떤 조건을 증명해야 했냐?
그것은 바로 저 점 b hat을 지나는 평면 위의 모든 벡터들은 b가 내린 수선의 발과 무조건 수직이어야 했다.
수선의 발은 b - Ax니까 linear combination된 모든 x1a1...들과 수직이어야 했다.
그런 조건을 충족시켜서 정리한 식이 바로 A^T(b - Ax) = 0이다.
그리고 한번 더 분배법칙을 이용하여 정리해주면, A^TAx = A^Tb가 됐다.
이때 A^TA가 역행렬을 갖게 되는, 그러니까 det이 0이 아니라면, A^TA가 linearly independent하다면 아래와 같이 간단하게 나타낼 수 있었다.
x = (A^TA)^-1A^Tb
이 식을 구하면 바로 b hat= Ax hat에서 쓰이는 x hat을 구할 수 있는 거다!
이제 이 식을 가지고 orthogonal projection을 위한 y hat을 얻어내는 식을 유도할 수 있다.
y hat은 무엇을 말하는 건가 하면 그림으로 보자.
벡터 y가 수선의 발을 내린 y hat을 말하는 것이다.
저기를 구하면 b가 수선의 발을 내렸던 위치인 b hat의 위치를 바로 알 수 있는 것이다.
y hat은 y가 orthogonal projection을 했을 때 mapping 할 수 있는 점이다.
결국 이 점인 y hat을 알아야 최적의 솔루션을 구할 수가 있는 것이다. 더불어 gram-schmidt를 가능하게 만든다.
수선의 발을 내렸던 위치인 b hat = Ax hat으로 구할 수가 있다.
즉, b = Ax인데 Ax를 b에 대한 함수라고 생각해보자. 그리고 함수에 orthogonal projection의 기능이 있다고 생각하자.
그럼 b = f(b) = Ax이다.
자, x가 뭐였지?
-> x = (A^TA)^-1A^Tb로 구할 수가 있었다.
이 x를 위에 대입하자.
그럼, b = f(b) = A(A^TA)^-1A^Tb를 얻게 된다.
식이 매우 긴 관계로 b 앞의 식들을 C라고 하겠다.
그럼, b = f(b) = Cb가 나온다.
이제 b = Ax랑 비슷한 꼴로 변했다.
matrix와 입력 벡터의 꼴로 변했고 linear transformation의 형태로 변했다.
여기서 중요한 과정이 있다.
우리는 컴퓨터로 역행렬을 계산하는 게 쉽지 않다. 역행렬은 나누기 연산인데 컴퓨터는 나누기 연산에 약하기 때문이다.
다시 말하면, 나누기 연산을 하면 할수록 계산 결과가 부정확해지는 현상을 발견할 수가 있다. (소수점 처리 때문이다!)
그래서 우리는 역행렬 계산을 할 필요가 없게 만들기 위해서 모든 벡터를 orthogonal or orthonormal한 벡터로 만들어 줄 필요가 있다.
그런 이유로 거치는 과정이 바로 Gram-schmidt process이다. 말은 어렵지만 기능은 결국, linearly independent 하기만 한 벡터들을 orthonormal or orthogonal하게 만들어준다.
하지만, 우리가 벡터를 orthogonalize or orthonormalize시키려면 y hat을 알아야 한다.
unit 벡터가 아닐 때
unit 벡터가 아니라면 어떻게 해줘야 할까?
orthonormal한 u가 없는데 어떻게 구할까?
사잇각 값과 함께 계산하면 y hat을 구할 수 있다.
||y|| * cosΘ를 해주면 y hat의 길이가 어느 정도인지 알 수가 있다.
이제 여기에서 우리는 y hat만 필요하니까 줄이는 과정을 해줄 것이다.
||u||으로 ||y|| * cosΘ값을 나눠준다.
그리고 여기에 벡터 u를 곱해주자.
그럼 y hat을 구할 수가 있다.
아래 사진이 바로 식이다.
여기에서 더 정리를 할 수도 있다.
cosΘ를 다르게 표현하면 y와 u의 내적이다.
y와 u의 내적은 무엇과 동치냐
||y|| * ||u|| * cosΘ과 동치다.
||y|| * ||u|| * cosΘ = y^Tu이므로
cosΘ = y^Tu / ||y|| * ||u||이다.
이 cosΘ를 식에 넣어주면
위와 같이 정리된다.
unit 벡터일 때
현재 u는 unit벡터가 아니다. u를 normalize해주어 unit 벡터로 만들어준다면, u의 norm의 제곱은 결국 1이므로 남는 것은
(y^Tu)u
따라서, y hat = (y^Tu)u이다.
이제 우리는 오른쪽 동그라미 친 수식으로 바로 최적의 해를 찾기 위한 점 b hat의 위치와, Gram-schdimt process를 위한 점 y hat의 위치를 찾을 수 있게 됐다.
'자연어 처리 과정' 카테고리의 다른 글
SVD의 이해 (0) | 2022.11.24 |
---|---|
Change of basis의 이해 (0) | 2022.11.23 |
Eigendecomposition의 기하학적 이해 (0) | 2022.11.23 |
Gram-schmidt process를 알아보자. (0) | 2022.11.19 |
onto와 one-to-one (0) | 2022.11.18 |