본문 바로가기

자연어 처리 과정

Orthogonal projection을 위한 점을 찾는 수식

개요

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