지적 대화를 위한 넓고 얕은 지식, 일명 "지대넓얕"의 두 번째 편 (철학, 과학, 예술 종교, 신비)편을 읽었다.



책의 전반적인 흐름은 우선 진리를 추구하고 찾으려는 인간에 대한 역사와 통찰을 바탕으로 세 가지 철학적 접근법을 제시하였다. 절대주의, 상대주의, 회의주의가 그것이고, 이 세 가지 철학 정신을 중심으로 철학, 과학, 예술, 종교, 신비에 대한 주제들을 이야기했다. 



얼핏 보면 이 다섯 가지 주제가 따로 떨어져 있는 것 처럼 보이지만 저자는 위에서 언급했던 세 가지 철학적 접근법을 이용해 이들을 연결지어 설명하였다. 구체적인 것을 이야기 하자면 한도 끝도 없고.. 그냥 느낀점을 이야기 하자면 저자는 최대한 객관성을 유지하려고 노력한 듯 보인다. 저자 자신의 생각을 나열하는 것은 최대한 자제하면서 객관적인 사실을 토대로 판단은 독자들에게 남기려고 애쓴 흔적이 보인다. 저자의 생각을 너무 나열하여 자칫 편향된 사고로 빠질 수 있는 위험성을 최대한 줄이고 독자 스스로 생각할 수 있도록 한 점이 개인적으로는 마음에 든다. 



지난 번 (역사, 경제, 정치, 사회, 윤리)편과 이번 (철학, 과학, 예술 종교, 신비)편을 읽으면서 느꼈던 점을 하나의 키워드로 말하자면 바로 링크(Link)이다. 연관이 거의 없을 것 같은 다양한 분야의 지식 사이에 연결고리를 만들어서 마치 하나의 거대한 유기체적 지식이 형성된 느낌이다. 이렇게 지식들 사이에 연결 고리, 즉 링크를 많이 만들 수록 우리의 사고는 좀 더 창의적으로 발전할 수 있을 거라 생각한다. 




이번 편에서 가장 감명깊게 읽었던 부분을 마지막으로 짧은 서평을 마무리할까 한다. 


신비 편의 의식 파트가 있다. 이 부분에서 칸트의 세계를 현상과 물자체로 나누는 관념론을 바탕으로 세상을 이해하는 우리의 의식에 대해 이야기한다. 즉 우리가 바라보고 이해하고 있는 세계는 현상, 즉 우리 개개인의 지극히 주관적인 감각과 관념을 통해 만들어낸 세계라는 것이다. 탁자위의 컵, 밤하늘의 별, 비틀즈의 Let it be, 달콤한 사과, 빨간색 펜 등은 우리의 감각기관인 시각, 청각, 미각, 촉각, 후각과 기존의 기억과 관념들로 부터 형성된 각자만의 해석으로 만들어진 주관적인 세계이다. 우리가 느끼는 세상은 실제가 아니라는 것이다. 실제 세상은 원자와 분자들의 결합구조와 수많은 전자에너지들이 휘몰아치는 그런 세계일 것이다. 


또한 똑같은 빨간색을 보더라도, 똑같은 사과를 먹더라도 사람들마다 느끼는 정도는 사실 엄청나게 다를 것이다. "빨갛다", "달콤하다"와 같은 우리 감각에 대한 특정 기준에 따른 표현을 공통적으로 하지만, 그 기준이라는 것이 실제로는 사람마다 다를 것이다. 이는 책에서 언급한 색맹 실험에 관한 이야기에서 나타난다. 우리는 굉장히 한정된 감각기관과 한정된 관념을 통해 각자만의 세상을 가지고 있고, 결국 사람들은 자신들만의 거대한 우주를 가지고 있는 것이다. 



의식 파트를 읽으며 들었던 한 가지 생각은 남을 이해한다는 것은 또다른 하나의 커다란 우주를 이해하는 것이다. 이 얼마나 어려운 일인가? 그토록 어려운 일이기에 연인과의 다툼, 가족, 친구들과의 갈등, 나아가 사회, 국가간의 갈등이 끊임 없이 발생하는 것 같다. 


그러나 또 다른 한편으로는 이런 생각도 든다. 이토록 재밌는일이 또 있을까? 다른 우주를 이해한다는 것 말이다

그래서인지, 저자는 아래의 문장으로 책을 마무리 했는지도 모르겠다. 




"인생의 의미와 깊이는 타인과의 대화 속에서 비로소 빛을 낸다."


우리는 지난시간에 투영(Projection)에 대해 공부하였다. 이는 해가 존재하지 않는 Overdetermined case의 선형방정식에 대한 근사해(approximate solution)를 구하는 것이 목적이며 x hat을 근사해로써 구했다. 이제 해야 할 일은 이 투영을 어떻게 응용할 수 있는지를 알아보는 것이다. 우리는 이 투영에 대한 응용으로써 최소자승법(Least square method)을 공부해볼 것이다. 먼저 지난 강의 Lecture 15에서 배운 내용 중 투영행렬(Projection matrix)에 대해 간략히 살펴보도록 하자. 

 

 

1. 투영(Projection)

 

- Two extreme cases

 

벡터의 투영에 대해 두 가지 극단적인 경우를 살펴보자. 

지난 강의에서 배운 것과 같이 투영 행렬의 식은 다음과 같다. 

 

 

투영 행렬(Projection matrix)은 말 그대로 어떤 벡터를 다른 어떤 공간으로 투영시키는 것을 의미한다. 즉 곱해지는 벡터 b를 column space에 존재하는 벡터 중 가장 가까운 점, 가장 가까운 벡터로 바꿔주는 역할을 한다. 그렇다면 이러한 경우엔 어떨까? 벡터 b가 이미 column space에 존재한다면? 혹은 벡터 b가 column space와 수직(perpendicular)이라면? 이러한 두 가지 극단적인 경우의 벡터에 대해 투영 행렬을 곱해주면 어떤 결과가 발생할까? 

 

먼저 이미 벡터 b가 column space에 존재하는 경우를 살펴보자. 이때는 투영 행렬 P에 b를 곱하면 그대로 b를 얻는다. 즉

 

 

b는 column space상에 존재하는 벡터라고 했다. 그렇다면 일반적으로 column space상에 존재하는 벡터는 어떻게 나타내는가? 바로 column vector들의 선형 조합(Linear combination)으로 표현한다. 이것을 표현한 것이 바로 Ax다. x의 각 원소들이 A의 column vector에 계수로 곱해져서 선형 조합이 되는 것이다. 식 (1)에다 b, 즉 Ax를 곱하면 식의 가운데 부분이 캔슬되어 결국 그대로 b만 남는다. 결과적으로 투영행렬이 이미 column space에 존재하는 벡터 b를 그대로 유지시킨 것이다.

 

 

다음으로 벡터 b가 column space와 수직(perpendicular)인 경우는 투영 행렬 P에 b를 곱하면 그 결과는 0이 된다. 

 

 

식 (3)의 경우엔 왜 이러한 결과가 나올까? 이는 부분 공간(subspace)과 연관이 있다. Pb=0이 된다는 것은 b가 column space가 아닌 다른 공간에 존재한다는 것이다. 그렇다면 그 다른 공간은 어떤 공간인가? 바로 Left null space이다. 우리는 Lecture 14에서 Left null space는 column space와 수직임을 배웠다. 따라서 column space에 수직인 b는 곧 Left null space에 존재하는 것이다. 

또한 투영 행렬 P와 벡터 b를 곱한다는 것은 P의 row vector들과 b의 column vector와의 내적(dot product)을 의미한다. 이때 P는 여러 개의 row vector가 될 것이므로 결국 P의 row space와 직교한 것이고 그 결과는 0이 된다. 직교할 때 column space에서 b와 가장 가까운 벡터는 영벡터(zero vector)뿐이다. 결과적으로 투영 행렬이 벡터 b를 없애버린 셈이다. 

 

위의 내용을 그림을 이용해 이해해보자. 

 

 

Fig. 1 Column space와 Left null space사이에서 벡터 b의 관계

 

 

Fig. 1에서 파란색 벡터 b가 바로 column space에 존재 하지 않는 b이다. 이 벡터 b를 column space에 투영한 벡터가 바로 빨간색 벡터 p가 되고, 투영 행렬 P에 벡터 b를 곱하여 p=Pb를 통해 투영시킨다. 

반대로 Left null space에 투영 시킨 벡터가 보라색 벡터인 e가 되며, e는 단위행렬에서 투영행렬을 뺀 (I-P)행렬에 b를 곱하여 투영시킨다. (I-P)는 P행렬로 투영시키는 공간과 직교하는 공간으로 투영시키는 역할을 한다. 이미 배운 것과 같이 P는 대칭(symmetric)이며 $P^2=P$이다. $(I-P)$역시 대칭이며, ${(I-P)}^2=(I-P)$를 만족한다. 

 

벡터 p와 e를 더하면 b가 된다. 즉 b=p+e이고 각 벡터를 투영 행렬과의 곱으로 표현하면 아래와 같다. 

 

 

요약하자면 p는 column space에, e는 column space와 직교(perpendicular)인 Left null space에 각각 존재하며, 벡터 b는 이들 두 공간에 존재하거나 혹은 그 사이에 존재할 수 있다. b는 투영행렬 P와의 곱인 p=Pb를 통해 p가 되고, e=(I-P)b를 통해 e가 된다. 

 

 

 

2. 최소자승법(Least Square Method)

 

- Basics of Least Square

 

우리가 배웠던 투영(Projection)은 미지수(unknown)보다 방정식(equation)이 더 많아서 이를 만족시키는 해가 존재하지 않을 때, 주어진 모든 방정식을 최대한 만족시키는 일반화된 해를 찾는 것이 그 목적이다. 그렇다면 어떠한 경우에 우리는 방정식이 미지수보다 많을 수 있을까? 바로 센서 들과 같은 장치로부터 많은 수의 데이터를 수집한 경우이다. 이때 얻은 많은 데이터들은 방정식의 계수로써 표현할 수 있고, 각 데이터들의 차원이 바로 미지수가 된다. 즉 수집한 데이터들을 기반으로 해당 시스템의 일반화된 표현식을 구하는 것이다. 

최소자승법(Least Square Method)은 수집한 데이터를 기반으로 이들 모두를 최대한 만족시키는 하나의 Line에 대한 식을 찾는 방법이다. 이렇게 찾은 Line을 통해 우리는 데이터에 대한 예측 뿐만 아니라 시스템의 특성까지 파악할 수 있다. 최소자승(Least square)이라는 말의 의미를 이해한다면 훨씬 느낌이 와 닿을 것이다. 이에 대해서는 잠시 후에 설명하기로 하고 먼저 아래와 같이 3개의 데이터를 얻었다고 가정해보자. 

 

 

 

Fig. 2 주어진 3개의 데이터 (1,1) (2,2) (3,2)

 

 

주어진 3개의 데이터는 (1,1) (2,2) (3,2)이다. 가로 축을 시간 t라고 하고 시간에 따라 얻은 데이터라고 생각해보자. 세로축은 b, 혹은 y이고 해당 시간에 얻은 실제 데이터 값으로 생각하자. (1,1)은 1초에 얻은 데이터의 값이 1이고, (3,2)는 3초때에 얻은 데이터의 값이 2라는 의미다. 여기서 우리가 하고자 하는 것은 저 데이터들을 잘 표현할 수 있는 하나의 직선(Line)을 찾는 것이다. 본격적으로 방법을 알아보기 전에 이 질문에 대해 한 번 생각해보자. 

 

왜 이러한 직선을 찾으려고 할까? 바로 시스템의 특성에 대한 분석미래 예측이 목적이다. 주어진 데이터가 주가의 시간에 따른 변화라고 가정해보자. 이때 최소자승법을 이용하여 데이터 집합을 잘 나타내는 Line을 찾으면 그 Line의 기울기 등을 통해 현재 상태를 파악할 수 있다. 또한 아직 획득하지 못한 미래의 데이터를 예측할 수도 있다. 물론 실제 문제는 이보다 훨씬 복잡하고 Line이 아닌 n차 방정식의 curve fitting을 활용해야 할 것이다. 어쨋든 최소자승법의 기본적인 목적은 분석예측이다. 

 

다시 우리 문제로 돌아와서, 위의 데이터의 경향을 가장 잘 나타내는 Line을 찾으려면 중학교때 배웠던 y=ax+b의 직선의 방정식의 파라미터인 a와 b를 찾으면 된다. 그러나 문자 표기가 좀 헷갈릴 수 있으니 우리 문제와 맞추기 위해 표기를 아래와 같이 조금 바꿔보도록 하자. 

 

 

y->b,  a->c,  x->t,  b->d로 각각 바뀌었다. 우리가 현재 알고 있는 값은 변수에 해당하는 t와 b이다. t와 b값들의 집합을 가지고 직선을 표현하는 파라미터인 c와 d를 찾아내야 한다. 이를 위해선 먼저 위 식을 Ax=b의 꼴로 나타내고 투영 행렬의 해를 구했을 때 처럼 x에 대해서 풀어주면 된다. 참고로 Ax=b에서의 x는 x=[c d]T를 나타낸다. 결과적으로 주어진 데이터를 기반으로 Ax=b의 식으로 표현하면 된다. 우리의 최종 목표는 직선을 나타내는 파라미터인 x를 알아내는 것이고, 이를 위해 행렬 A만 알아내면 거의 끝난 것이나 다름 없다. 

 

주어진 데이터(Fig. 2)와 식 (5)를 통해 우리는 3개의 방정식을 만들어낼 수 있다. 식 (5)의 t와 b에 Fig. 2의 주어진 데이터를 넣으면 다음과 같이 3개의 방정식을 만들 수 있다. 

 

 

이제 식 (6)의 3개의 방정식을 Ax=b의 꼴로 만들면 아래와 같다. 

 

 

식 (7)의 곱셈을 실제 수행하여 풀어써보면 다시 식 (6)과 같이 되는 것을 볼 수 있다. 

자 이제 행렬 A를 구했으니 거의 다 된 셈이다. 다시 한 번 말하지만 식 (7)은 미지수(unknown)보다 방정식(equation)이 많은 overdetermined case이다. 행렬 A의 column1과 column2는 독립(independent)이며 또한 column space의 기저(basis)이다. 그러나 우변의 벡터 b는 column space에 존재하지 않는다. 따라서 이 식을 완벽하게 만족시키는 해 x=[c d]T는 존재하지 않는다. 다만 가장 근사한 해, best solution을 구할 뿐이다. 실제 해를 구하는 방법은 Ax=b의 양변에 A transpose를 각각 곱해주면 된다. 즉

 

 

이 식 (8)을 이용하는 것이다. 지난 강의에서 많이 봤던 식일 것이다. 위의 식이 잘 이해가 가지 않는 사람은 반드시 Lecture 15를 공부하고 오길 바란다

 

어쨋든 완벽한 해가 존재하지 않는 다는 것은 Fig. 2를 기준으로 설명하자면 각 데이터 포인트들을 모두 완벽하게 관통하는 직선은 존재하지 않는 다는 것이다. 다만 각각의 데이터와의 에러를 최소화 하는 직선은 찾을 수 있다. 결국 각 데이터와 직선 사이의 에러의 총합이 최소가 되게끔 하는 선을 찾는 것이 우리가 찾고자 하는 것이다. 이것이 선을 결정 짓는 조건이다. 

 

 

그렇다면 구체적으로 여기서 말하는 에러(error)가 무엇일까? 식 (6)을 보면 우리는 주어진 3개의 데이터를 이용하여 3개의 방정식을 만들어냈다. 이때 c와 d에 대한 파라미터 값을 추정했다고 가정했을 때, 각각의 식에 대입하여 계산하면 좌변의 값이 나올 것이다. 이 좌변의 값과 우변의 b값 사이의 차이를 계산한 것이 여기서 말하는 에러(error)이다. 이때 중요한 것은 이 에러 값은 제곱을 해줘야 한다. 왜냐하면 에러 값으로 음수가 나올 경우도 있는데, 이 경우 값이 상쇄되어 에러 값이 0이 나올 경우도 있기 때문이다. 실제로는 에러가 엄청 큰데도 말이다. 따라서 음수 값이 나오지 않도록 항상 에러 값을 제곱해준다. 

이렇게 3개의 모든 방정식의 에러 값을 더했을 때 최종 에러값의 크기를 가장 작게 만드는 c와 d를 찾는 것이다. 이를 식으로 표현하면 아래와 같다. 

 

 

식 (9)를 식 (6)의 방정식을 이용해 기술하면 

와 같을 것이다. 이렇게 세운 식을 미적분학(calculus)을 적용하여 해를 구할 수도 있다. 즉 자승(square)은 2차식이고, 이를 두 변수인 c와 d로 각각 편미분(partial derivative)하여 식을 =0의 꼴로 정리하면 c와 d에 대한 식을 구할 수 있다(2차식의 기울기가 0인 부분이 최소값을 갖는 성질을 이용). 이 부분은 인터넷에 자료가 많이 있으며 나중에 기회가 되면 다루도록 하겠다. 

우리는 이미 식(6)을 식 (7)과 같이 Ax=b의 꼴로 만들었다. 에러를 최소화 시키는 (9)를 (7)에 대해서 정리하면 식은 아래와 같이 될 것이다. 식 (7)의 우변의 b를 좌변으로 이항하고, 이에 대한 길이를 구하고(norm-2) 이를 제곱해주면 된다.

 

 

Ax-b의 결과는 error 벡터가 나올 것이고, 이 벡터에 대한 길이는 에러의 총 크기를 나타낼 것이다. 이 에러 벡터에 대한 길이는 식 (9)에서  j=1 ~ m 각 방정식의 에러의 값들의 총 합과 같은데, (9)에서는 음수가 나오지 않도록 제곱을 해줬다. (10)에서도 같은 이유로 제곱을 해주는데, 사실 벡터의 길이를 2-norm으로 계산하면 루트(square root)가 씌워져서 나온다. 이 루트를 제거해주기 위한 이유로 제곱을 해주는 것도 있다. 

 

여기서 우리는 최소자승법(Least square method)의 의미를 파악할 수 있다. 최소(Least)라는 말은 Ax와 b사이의 에러를 최소화 해주기 위함을 의미하고, 자승(square)은 식 (10)에서 제곱함을 의미한다. 정의하자면...

 



 최소자승법(Least Square Method)


  "주어진 모든 데이터에 대해서, 예측된 값(predicted value)실제 측정된 값(measured value) 사이의 에러(error)의 제곱의 합(squared sum)최소화(minimize) 해주는 파라미터(parameter)를 찾는 방법"

 

정도로 정의할 수 있겠다. 

 

그렇다면 이 에러 벡터가 실제 그림에선 어떤 부분을 의미할까? 아래 그림을 살펴보자. 

 

Fig. 3 최소자승법을 통한 Line fitting

 

 

Fig. 3 은 Fig. 2의 데이터를 이용해 Line의 파라미터를 추정하고 이를 통해 Line을 표현한 모습이다. 붉은색 점은 원래 측정된 점들을 의미하고, 파란색 점은 Line fitting을 통해 예측된 점, 즉 측정된 점들과 이 점들이 Line에 수직(vertical)방향으로 대응되는 점들이다. 녹색 선은 측정값 b와 예측값 p사이의 에러(error)를 나타낸다. e=[e1 e2 e3]T에서 e1, e2, e3는 스칼라(scalar)값이며 총 에러는 각 에러의 자승(square)의 합으로 표현할 수 있다. 

 

 

식 (11)에 나타난 에러의 총 합이 우리가 최소화 하고자 하는 에러값이다. 

 

우리는 주어진 데이터를 이용하여 데이터들의 추세를 파악하고 예측한다. 이것은 통계학(statistics)의 한 부분으로도 볼 수 있으며 통계학 용어로는 회귀(regression)라고 부른다. 즉 이미 주어진, 혹은 측정한 데이터를 기반으로 데이터의 경향을 파악하고 미래를 예측하고자 하는 것이며 같은 목적성을 지니고 있다. 최소자승법은 결국 주어진 데이터를 이용해 회귀(regression)를 한 것이다. 여기서는 Line을 이용하여 fitting을 했기 때문에 선형 회귀(Linear regression)를 한 것이다. 

 

 

- Outliers in Least square

 

Fig. 3과 같이 데이터가 분포해 있을 경우엔 최소자승법이 대체적으로 데이터의 추세를 잘 반영하는 듯 보인다. 그러나 어떤 통계학자들은 최소자승법에 우려를 표했는데, 그것은 바로 어떤 한 점이 다른 대부분의 점들과 동떨어져 있을때이다. 이렇게 어떤 데이터가 동떨어져서 측정되는 경우는 그것이 실제 제대로된 측정값일 수도 있으나 대체적으로 쓸모없는 값, 즉 노이즈 데이터일 경우가 많다. 이렇게 다른 대부분의 데이터들의 분포에서 큰 거리를 두고 측정되는 소수의 데이터들을 우리는 아웃라이어(Outlier)라고 한다. 이러한 아웃라이어들은 대부분 잡음(noise)일 경우가 많다. 

 

Fig. 3의 데이터에 (0, 3)의 아웃라이어가 추가되면 보라색 라인은 어떻게 될까? 최소자승법은 모든 데이터에 대한 에러를 최소화 하는 방향으로 파라미터가 결정된다. 이때 당연히 아웃라이어와의 에러도 최소화 해야 하므로 Fig. 3과는 상당히 다른 양상을 보일 것이다. 아래 그림과 같이 말이다. 

Fig. 4 아웃라이어가 존재할 경우 최소자승법

 

Fig. 4는 (0, 3)의 아웃라이어가 존재할 경우 최소자승법을 보여주고 있다. 아웃라이어와의 에러까지 고려하다보니 Fig. 3와는 라인의 위치가 상당히 차이가 난다. 아웃라이어때문에 결국 전체적인 데이터의 경향을 잘 반영하지 못하게 되었다. 이를 overcompensate이라 한다. 이러한 아웃라이어에 따른 overcompensate문제를 해결하기 위한 RANSAC(Random Sample Consensus)등의 방법이 존재한다. 그러나 우리는 이러한 아웃라이어가 있다는 것 정도만 알고 이번 포스팅에서는 더 이상 다루지 않겠다. 

 

 

- Solution of Least square

 

Fig. 3은 식 (7)의 해를 구하여 라인을 표시한 것이다. 식 (7)을 다시 꺼내보자. 

 

 

행렬 A의 column vector는 독립(independent)이며 column space의 기저(basis)이다. 그러나 b벡터는 이 column space에 존재하지 않기 때문에 Ax=b의 해는 존재하지 않는다. 정확한 해는 존재하지 않지만 해를 구하기 위해선 b를 column space로 투영시키면 된다. b를 column space로 투영시킨 벡터를 p라고 하면 Fig. 3에 존재하는 빨간 점들 p1, p2, p3는 바로 벡터 p=[p1 p2 p3]가 된다. 즉 원래의 측정된 벡터 b=[b1 b2 b3]를 column space로 투영 시킨 벡터가 p=[p1 p2 p3]이다. 이때 p는 Fig. 3에서 직선 위에 존재하는 점들이다. 즉 b와 p를 Fig. 3에서는 점(p1, p2, p3)으로 보고 Fig. 1에서는 벡터 b와 p로 이해하면 된다.  

 

벡터 p는 A의 column space로 투영시킨 것이기 때문에 해가 존재한다. b를 p로 투영시켰기 때문에 식(7)은 아래와 같이 바뀐다. 

 

 

정확한 해가 아니라 최적해(best solution)이기 때문에 x에 hat을 붙여준다. 다시 한 번 말하자면 x hat은 해를 정확하게 만족시키는 직선이 아니다. 원래 다른 공간에 존재하던 b를 column space의 가장 근접한 위치로 끌고온 뒤 구한 해, 즉 추정된 해, 가장 근사한 해(estimated solution)를 의미한다. 

 

이제 식 (7)에 대한 x hat을 구해보도록 하자. Ax=b의 양변에 A transpose를 곱해주자. 

 

 

 

위의 식을 일반적인 방정식으로 만들면 다음과 같다. 

 

 

이제 남은 것은 위의 방정식을 가우스 소거법을 활용하여 실제 해를 구하는 것이다. 계산하기에 식이 약간 귀찮게 되었지만 일단 해보자. pivot은 14이고 pivot아래의 원소를 없애야 하므로 6c를 소거해야한다. 첫 번째 방정식에 6/14를 곱하여 두 번째 방정식에서 빼주면 d=2/3을 얻고, 후방대입법(back substitution)을 통해 c=1/2라는 것을 알아낼 수 있다.

 

 

이렇게 하여 $\hat{x}={[\hat{c} \; \hat{d} ]}^T$를 구하였다. 따라서 최적의 라인(Line)에 대한 방정식은 다음과 같다. 

 

 

이제 Fig. 3의 p의 실제 값들을 구해보자. t=1, 2, 3을 각각 대입해주면 p1=7/6, p2=5/3, p3=13/6을 얻는다. 

다음으로 에러를 구해보자. 에러는 e=b-p이므로 b=1, 2, 2에서 p1, p2, p3를 각각 빼주면된다. 이를 정리하면 아래와 같다. 

 

 

 

위에서 계산한 p와 e를 Fig. 3에 표현해보자. 

Fig. 4 최소 자승법의 p와 e의 값

 

이렇게 하여 주어진 데이터들을 이용하여 방정식을 세우고 최소자승법을 이용하여 이 데이터들을 가장 잘 근사하는 라인을 찾아내었다. 

 

 

- Error vector

 

앞서 우리는 최소자승법을 이용하여 데이터의 경향을 최대한 잘 반영하는 직선(Line)을 찾았다. 여기서 좀 더 깊은 이해를 위해 에러(error) 벡터에 대해 알아보자. 

 

식 (4)와 같이 원래의 데이터 값인 b벡터는 에러 벡터 e와 투영 벡터 p의 합으로 이루어져 있다. 즉 b=e+p이다. Fig. 4를 기준으로 보면 당연하다. 투영된 값인 p에 에러 e를 다시 더하면 원래의 b가 된다. 이것을 개개의 데이터가 아닌 벡터의 기준으로 생각해보자. Fig. 1에서 p와 e는 직교(perpendicular)이다. 그렇다면 실제 값은 어떻게 될까? 식 (17)에서 구한 실제 p와 e의 값을 가지고 검증해보자. 

 

 

p2는 계산의 편의를 위해 5/3 -> 10/6 으로 바꿨다. 우선 e+p의 결과가 b가 되는 것은 쉽게 덧셈을 해보면 알 수 있다. 

e와 p가 실제로 직교하는지 알아보려면 어떻게 하면 될까? 바로 내적(dot product)을 통해 알 수 있다. 내적을 해보면...

-7/36 + 20/36 - 13/6 = 0 이 된다. 따라서 e와 p가 직교임을 확인하였다. 

 

여기서 한 가지 중요한 사실은 e가 직교한 것은 p뿐만이 아니라는 것이다. 바로 p가 존재하는 column space전체와 직교한다. 다른 column 벡터와 내적을 통해 확인해보자. 다른 column vector의 예로는 A의 column space의 기저(basis)인 A의 column vector들과의 연산을 해보면 될 것이다. 실제로 계산을 수행해보면 0이 되어 직교하는 것을 확인할 수 있다. 

 

 

에러 벡터 e가 기저 벡터들과 수직이기 때문에 결과적으로 column space와 수직이다. 

 

 

 

3. MATLAB 구현

 

식 (7)을 최소자승법을 통해 해를 구하는 프로그램을 MATLAB으로 작성하였다. 아래 그림은 plot 결과이다. 

 

 

Fig. 5 식 (7)의 최소자승법의 MATLAB 구현 결과

 

 

아래는 코드이다. 참고로 추가적인 데이터를 넣어서 돌려보고 싶다면 다음과 같이 하면 된다. 예를 들어 [2, -1]의 데이터를 새로 넣고 싶다면 A의 column 1의 마지막에 2를, column 2의 마지막은 1로, b의 마지막 부분에 -1을 추가해주면 된다. 

 

 

 

 

4. 마치며

 

이번 강의에서는 투영(Projection)에 대해 리뷰를 하고 이를 응용한 최소자승법(Least square)에 대해 공부하였다. 최소자승법을 적용하는 데에 있어 이를 두 가지 관점에서 바라볼 수 있다. 

첫 번째는 벡터의 관점, 두 번째는 데이터의 관점이다. 벡터의 관점에서 보자면 이는 투영과 깊은 관련이 있고 Fig. 1에서 원래의 벡터 b가 column space로 투영된 벡터 p가 된다는 것이다. 이것을 이용해서 최소자승법의 해를 구한다. 두 번째는 데이터의 관점이며 Fig. 4에서 처럼 직선의 방정식의 파라미터로써 나타난다. 그러나 실제로 해 자체를 구하는 것은 투영의 관점으로부터 출발하는 것이다. 즉 해가 존재하지 않는 상황에서 최적해(best solution)를 구하기 위해 투영의 개념을 이용하여 b를 column space로 투영시켜 p를 만들고 해를 구한 다음 이 해를 직선의 방정식의 파라미터로 이용하는 것이다. 

 

Fig. 1과 Fig. 4는 같은 식으로 표현되는 두 가지 다른 형태의 그림이다. Fig. 1에서는 x(hat)=[c d]가 column vector의 선형 조합(Linear combination)으로 p를 표현하였고, Fig. 4에서는 x(hat)=[c d]가 직선을 표현하는 파라미터로써 이용되었다. 이 두 가지 관점을 잘 구분하여 이해하도록 하자. 중요한것은 투영의 개념으로부터 온 것이며, 표현된 방식이 다를 뿐 결국 같은 것을 나타낸다는 것이다. 

 

결국 최소자승법은 다음의 핵심 방정식을 이해함으로써 해를 구할 수 있다. 

 

 

식 (20.1)에서 x hat으로 식을 정리하기 위해선 $A^T A$가 역행렬이 존재(invertible)해야 한다. 역행렬이 존재하려면 아주 중요한 조건이 있는데 바로 A의 column vector들이 독립(independent)해야 한다는 것이다. column vector가 독립이 아니라면 역행렬이 존재하지 않고 결국 해를 구할 수 없다. 

이러한 최소자승법은 통계학의 관점에서는 회귀(regression)의 한 방법으로 볼 수 있으며 선형 회귀(Linear regression)와 같다. 

 

최소자승법은 해가 존재하지 않을 경우 가장 근접하는 최적해(best solution)를 구하고자 하는 것과,

수많은 데이터가 주어진 상황에서 데이터의 경향을 분석하고 예측하기 위한 도구로써의 목적성을 가진다. 

이것들을 잘 기억하도록 하자. 

 

이번 시간에 배울 내용은 바로 투영 행렬(Projection matrix)에 관한 내용이다. 이번 강의는 매우 중요하므로 잘 공부해 두도록 하자. 투영 행렬에 관한 내용을 공부하기에 앞서 2차원 벡터의 투영을 먼저 공부해보도록 하자. 

 

 

1. 2D-Vector Projection(2차원 벡터 투영)

 

벡터 투영(vector projection)은 두 개의 벡터 중 하나의 벡터를 다른 하나의 벡터에 투영(projection)시키는 것을 말한다. 그렇다면 여기서 투영이라는 것은 무엇을 의미하는 것일까? 벡터의 관점에서 보면 하나의 벡터를 다른 벡터로 옮겨서 표현하는 것을 말한다. 

조금더 쉽게 비유하자면 그림자로 설명할 수 있다. 햇살 좋은 날에 야외에 서 있었을 때 햇빛에 의해 우리 몸의 그림자가 땅에 비춰진 것을 본 적이 있을 것이다. 이때 우리 몸이 벡터 a, 땅이 벡터 b라고 하면 그림자는 땅(b)에 투영된 우리 몸(a)이라고 할 수 있다. 이때 태양은 항상 땅과 수직(perpendicular)하게 떠 있다. 이 장면을 상상해보며 아래 그림을 보도록 하자. 

 

Fig. 1 두 벡터 a와 b. 벡터 b를 벡터 a에 투영하면 어떻게 될까? 

 

 

Fig. 1은 두 벡터 a와 b를 나타내고 있다. 벡터 a는 1차원 공간인 line이며, 우리가 찾고자하는 것은 벡터 b를 a에 투영시켰을 때 그 점이 벡터 a의 어느 지점에 위치할 것인가를 찾는 것이다. 이것은 다시말하면 벡터 a라는 1차원 공간의 어느 점이 벡터 b가 가리키는, 즉 벡터 b의 화살표 끝점과 가장 가까운지를 찾는 것이다. 

그렇다면 어느 점이 가장 가까울까? 당연히 벡터 b의 끝점에서 벡터 a의 수직(perpendicular) 방향으로 선을 그렸을 때 만나는 점일 것이다. 아래 그림을 보자. 

 

 

 

Fig. 2 벡터 a에 벡터 b를 투영(projection)한 모습. 

 

 

Fig. 2 를 보면 벡터 b의 끝점에서 벡터 a의 수직 방향으로 보라색 선을 그었다. 이때 a와 만나는 점이 바로 p이고, 이는 초록색 벡터로 나타내었다. 이 초록색 벡터가 바로 벡터 b를 벡터 a에 투영시킨 벡터이다. 보라색 선은 벡터 b와 p의 차이를 나타내는데, 원래의 벡터 b와 투영시켰을 때의 벡터 p사이의 오차(error)를 의미한다. 즉 투영시키기 전과 투영시킨 후가 거리상으로 얼마나 차이가 나는지를 나타내는 것이다. 이 보라색 벡터는 투영의 대상이 되는 벡터인 a와 직교(orthogonal)하며, 식으로는 b에서 p를 뺀 e=b-p로 나타낸다. 이 식을 이항하여 p=의 꼴로 다시 써보면 p=b-e가 된다. 벡터 b에서 오차 e만큼 빼면 바로 투영 벡터 p가 되는 것이다. 

 

Fig. 2를 잘 보면 벡터 b, e, p사이에 직각삼각형(right triangle)이 그려져 있는 것을 볼 수 있다. 그렇다면 벡터 b와 벡터 p사이의 각도인 theta를 통해 투영 벡터 p에 대한 식을 삼각법(trigonometry)을 활용한 sin과 cos에 관한 식으로 표현할 수 있겠구나! 라고 생각할 수 있다. 물론 그렇게 나타낼 수도 있겠지만 식이 조금 지저분해 진다. 우리는 지금 선형대수(Linear algebra)를 공부하고 있으며, 이 선형대수를 통해 p에 대한 식을 훨씬 깔끔하게 표현할 수 있다. 잘 보면 벡터 p는 벡터 a에 어떤 스케일 상수 x를 곱한 것과 같다. 즉 p=xa이며, 여기서 우리가 찾고자 하는 것은 바로 스케일 상수 x이다. 이제 이 x를 어떻게 찾을지 알아보도록 하자. 

 

먼저 가장 중요한 사실 한 가지는 벡터 a와 e가 수직(perpendicular)이라는 것이다. 이를 수식으로 나타내면 아래와 같다. 

 

 

일반적으로 bold체로 나타낸 벡터들은 column vector를 나타낸다. a의 transpose는 row 벡터이고 b-xa는 Fig.2의 보라색 벡터 e를 나타낸 것이다(p=xa 임을 기억하자). 따라서 식 (1)은 벡터 a와 벡터 e의 내적(dot product)을 표현한 것이고, 수직이기 때문에 내적의 결과는 0인 것이다. 

 

이제 식 (1)을 전개하고 우변으로 이항하여 정리해보자. 아래와 같이 정리할 수 있다. 

 

 

$\boldsymbol{a}^T\boldsymbol{b}$와 $\boldsymbol{a}^T\boldsymbol{a}$는 전부 내적이며 결과 값은 상수이다. 따라서 앞서 언급했듯이 x는 벡터 a에 곱해지는 스케일 상수가 된다. 그런데 이렇게 풀어놓으니 분명 수학적으로 정리되는 것 같긴 한데 뭔가 직관적으로 와닿지는 않는 느낌이다. 이해를 돕기 위해 삼각법(trigonometry)의 관점, 즉 $\theta$에 관해서도 정리를 해보자. 

Fig. 2의 직각삼각형에서 녹색 벡터인 p는 $\theta$에 대해서 정리하면 아래 식과 같이 나타낼 수 있다. 

 

 

 

우선 벡터 b의 크기에 b와 a사이의 cos각을 곱하면 벡터 p의 크기인 $|| p ||$가 된다. 여기에 벡터 a의 방향성분벡터인 $\hat{\boldsymbol{a}}$를 곱해주면 최종적으로 벡터 p가 된다. 여기에 $\boldsymbol{a}^T \boldsymbol{b}=||\boldsymbol{a}||  \; ||\boldsymbol{b}|| \text{cos}(\theta)$ 식을 이용하여 cos을 치환해주면 식 (3.2)와 같이 된다. 여기서 $||\boldsymbol{b}||$는 소거된다. a의 방향성분벡터인 $\hat{\boldsymbol{a}}$는 벡터 a를 a의 크기로 나눠준 것과 같다. 즉 $\hat{\boldsymbol{a}}=\boldsymbol{a}/||\boldsymbol{a}||$이고, 이것을 정규화된 벡터(Normalized vector)라 하며 크기가 1이며 오직 방향성분만을 나타내는 벡터이다. 이를 정리한 것이 식 (3.3)~(3.4)이다. ${||\boldsymbol{a}||}^2$는 벡터의 크기 계산에 있어서 루트가 벗겨지는 것과 같기 때문에 자기 자신과의 내적(dot product)과 같게 된다. 이를 정리한 것이 식 (3.5)이고 괄호안의 분수식은 결국 x와 같다. 마지막으로 식을 정리하면 (3.6)과 같이 된다. 이 식은 Fig. 2의 p=xa와 같다. 

결국 투영 벡터의 식을 선형 대수적으로 표현한 것과 삼각법으로 표현한 것이 일치함을 증명하였다. 

 

 

 

 

 

- Projection matrix of n-dimensional vectors

 

우리는 위에서 벡터의 투영에 대한 식을 벡터에 대한 식으로 정리하였다. 이제 이것을 행렬에 대한 식, 즉 투영 행렬(projection matrix)로 표현해보자. 우선 식 (3.6)을 보면 p=xa로 벡터 p에 대한 식을 표현하였다. 여기서 x는 스칼라(scalar) 값이고 x를 먼저 곱하던, a를 먼저 곱하던 같은 값이 나온다. 즉 p=xap=ax나 똑같다는 말이다. 두 번째 방법으로 다시 정리해보면 아래와 같다. 

 

 

 

여기서 한 가지 생각해보자. 만약 Fig. 2에서 벡터 b의 길이가 두 배가 되면 어떻게 될까? 당연히 투영된 벡터 p의 길이도 두 배가 될 것이다. 식 (4.2)의 b에 2를 곱하면 당연히 벡터 p도 2배가 늘어날 것이다. 

이번엔 벡터 a의 길이가 두 배가 된다고 생각해보자. 각 a의 앞에 2씩을 곱해주면 분자의 두 개의 a에도 각각 2, 분모의 두 개의 a에도 각각 2가 곱해질 것이다. 2는 결국 소거되어 식은 원래와 같게 된다. 즉 a는 아무리 늘어나거나 줄어들어도 p에는 영향을 미치지 않는다. 

 

결국 벡터 b가 어떤 투영시키는 매개체에 의해서 벡터 a로 투영되는 것이다. 여기서 투영시키는 매개체가 바로 투영 행렬(projection)이다. 그리고 투영행렬은 이미 식 (4.2)에 나타나있다. 벡터 b의 a로의 투영을 식으로 나타내면 아래와 같다. 

 

 

 

(※bold체의 소문자 p는 투영된 벡터이고 대문자 P가 투영 행렬이다. 헷갈리지 않게 주의하자.

식 (4.2)에서 분수식 앞의 a를 분자로 끌어올리고 b를 따로 떼어서 생각하면 식 (5)와 같이 정리할 수 있다. 우리는 지난 강의에서 column vector x row vector 순으로 곱하면 행렬이 됨을 배웠다. $\boldsymbol{a}$는 column vector, $\boldsymbol{a}^T$는 row vector이고, $\boldsymbol{a}^T \boldsymbol{a}$는 상수가 된다. 따라서 식 (5)의 P는 행렬이 되는 것이다. 이것이 b를 a로 투영시키는 투영행렬(projection matrix)이다. 지금의 예는 2D벡터에 대한 것이지만, 식 (5)와 같이 투영 행렬을 만드는 것은 n차원의 벡터에 대해서도 성립한다. 즉 a와 b가 3차원, 4차원 벡터이더라도 식 (5)를 이용하여 똑같이 투영행렬을 만들 수 있다는 의미이다. 

 

 

- Properties of projection matrix

 

이제 투영 행렬을 구했으니 이것이 어떤 특징을 가지고 있는지 간단히 살펴보도록 하자. 

그 전에 어떤 행렬의 column space에 대해서 한 번 생각해보자. 어떤 임의의 행렬 A가 있다고 했을 때 A의 column vector들의 선형조합(Linear combination)을 통해 만들 수 있는 공간을 우리는 행렬 A의 column space라고 한다. 그렇다면 이 행렬 A에 어떤 임의의 벡터 x를 곱하면 어떻게 될까? 이것이 의미하는 것이 무엇일까? 바로 A에 곱해진 그 벡터 x가 A의 column space에 안착(landing)하는 것이다. 아래의 예를 보고 확실히 이해해 보도록 하자. 

 

 

 

식 (6)의 A에 벡터 x를 곱하는 것은 A의 각 column vector에 x의 각 원소들을 곱하여 더하는, 즉 column vector들의 선형조합 연산에서  x의 원소들은 각 벡터에 곱해지는 상수가 된다. 결국 column vector의 선형조합으로 표현되기 때문에 x는 당연히 column space안으로 들어가는 것이다. 이것은 굉장히 중요한 개념이니 잘 기억해두도록 하자. 

 

그렇다면 식 (5)의 투영행렬 P의 column space는 무엇일까? 바로 벡터 a를 지나가는 Line이다. 

 

다음으로 투영 행렬의 rank는 어떻게 될까? 우리는 지난 강의(Lecture 11-(2))에서 어떤 두 벡터를 column vector x row vector의 순서로 곱하면 반드시 rank 1 행렬이 만들어진다고 배웠다. 따라서 식 (5)에 나온 것 처럼 column x row($\boldsymbol{a} \boldsymbol{a}^T$)의 곱으로 만들어졌기 때문에 투영 행렬은 rank가 1이며 벡터 a가 행렬 P의 column space의 기저(basis)가 된다. 

 

투영 행렬 P는 대칭(symmetric)인가? 당연히 그렇다. 똑같은 벡터 a의 column x row순으로 곱하여 만들어진 행렬이기 때문에 대칭 행렬(symmetric matrix)이다. 따라서 아래 식과 같이 나타낼 수 있다. 

 

 

마지막으로 중요한 질문이다. 만약 벡터 b를 투영 행렬 P에 두 번 투영시킨다면 어떻게 될까? 즉 P의 제곱에 b를 곱하는 경우를 말하는데, 결과는 변하지 않는다. Fig. 2에서 벡터 b를 P에 투영시켜 벡터 p로 만든 다음, 다시 p를 투영행렬 P에 곱하여 투영하는 것이다. 결과는 변함없이 p이다. 따라서 아래 식과 같이 나타낼 수 있다. 

 

 

이렇게 하여 투영 행렬(projection matrix)의 두 가지 중요한 특성을 알아보았다. 먼저 투영 행렬의 rank는 1이며 식 (7), (8)과 같이 대칭 행렬(symmetric matrix)이고 P의 제곱은 P와 같다. 이와 같은 투영 행렬의 특성을 바탕으로 Fig. 2의 벡터 b는 투영 행렬 P의 column space인 a를 지나 가는 Line(rank=1)에 위치하게 되는 것이다. 

 

 

 

 

 

 

2. N-Dimensional Vector Projection (N차원 벡터 투영)

 

우리는 위에서 2차원 벡터 투영에 대한 내용을 배웠다. 이번엔 2차원을 넘어 더 높은 차원의 벡터에 대한 투영을 공부해보도록 하자. 그 전에 우리가 왜 투영(projection)에 대해 공부하고 있는 지를 한 번 생각해보고 넘어가자. 

 

 

- Why projection?

 

왜 우리는 투영(projection)을 공부하고, 이것이 왜 중요할까? 우리는 바로 지난 강의에서 해가 존재하지 않는 선형연립방정식 Ax=b에 대하여 공부하였다. 해가 존재하지 않는 경우는 미지수보다 방정식이 더 많은 경우이고 이를 overdetermined case라고 배웠다. 이를 해결하기 위해서 우리는 비록 정확한 해는 없지만 그래도 가장 근접한 해인 x hat($\hat{\boldsymbol{x}}$)을 구하여 이 문제를 해결하였다. 그렇다면 무엇이 가장 근접한 해(closest solution)인가? 

 

Overdetermined case인 경우 Ax=b에서 Ax의 결과 벡터는 항상 A의 column space에 존재한다. 그러나 b는 column space에 존재하지 않는다. 식은 =로써 정의했지만, 사실은 양변의 불일치가 발생하는 것이다. A는 이미 정해진 시스템이라 바꿀 수 없고 x는 앞으로 구해야 할 해다. 따라서 b를 바꿔야 한다. 이를 어떻게 바꿀 것인가? 바로 A의 column space에서 가장 근접한 벡터로 바꾸는 것이다. 즉 A의 column space에 존재하는 수 많은 벡터중에서 현재의 b와 가장 흡사한 벡터를 골라서 b대신 놓는 것이다. 이때 b와 가장 흡사한 벡터가 바로 A의 column space로 투영한 벡터 p다. 우변에 p가 위치한 경우 x는 x hat($\hat{\boldsymbol{x}}$)이 된다. 즉 원래의 b를 만족시키는 정확한 해는 아니지만, 최대한 근접한 해를 의미한다. 이를 정리하면 아래와 같다. 

 

 

 

 

이제 우리의 다음 목표는 우변의 벡터 b를 어떻게 column space로 투영(projection)시키는가 이다. 이해를 돕기 위해 3차원 공간에서의 그림을 가지고 설명해보겠다. 

 

Fig. 3 3차원 공간에서의 투영(projection)

 

 

Fig. 3은 3차원 공간에서 3차원 벡터와 행렬을 이용하여 투영을 하는 모습을 나타낸 것이다. 베이지색 평면은 행렬 A의 column space를 의미한다. 또한 이들의 기저(basis)는 그림에서 각각 a1과 a2이며 평면 위에 존재하는 column space의 임의의 벡터들이다. 따라서 행렬 A는 아래 식과 같이 이 기저들로 이루어진 형태가 될 것이고 크기는 3x2가 될 것이다. 물론 이는 Fig. 3을 기준으로 한 크기이며 차원은 임의의 n차원이 될 수 있다. 

 

 

 

파란색 화살표로 나타낸 벡터 b는 column space의 평면 위에 존재하지 않는다. 이 벡터 b가 바로 식 (9.1)에 있는 Ax=b의 b이다. 이러한 overdetermined case에서 x는 a1과 a2의 선형 결합의 상수로써 그 결과가 b가 되도록 해야 한다. 그러나 보다시피 b는 column space 평면 위에 존재하지 않기 때문에 이를 만족시키는 x는 애초에 존재하지 않는다. 그래서 최대한 만족시키는 해를 찾기 위해 b를 치환하는 것이다. 바로 A의 column space에 존재하는 무수히 많은 벡터들 중에 b와 가장 근접한 벡터로 말이다. 벡터의 화살표 끝점을 기준으로 봤을 때 가장 가까운 벡터는 당연히 평면에 수직(perpendicular)으로 내린 벡터가 될 것이다. 이것이 바로 벡터 p가 된다. (b가 애초에 평면 위에 존재한다면 문제는 훨씬 쉬워짐) 벡터 b에서 p의 방향으로 수직으로 연결한 선이 바로 두 벡터 사이의 오차(error)이며 보라색으로 표기되어 있다. 

 

결국 우리가 최종적으로 구하고자 하는 것은 x hat($\hat{\boldsymbol{x}}$)이며, 이를 위해서는 먼저 p를 구해야한다. p는 Fig. 3에 표현된 것과 같이 x hat과 a1, a2와의 선형 조합(Linear combination)으로 나타낸 것이며 이를 다시 행렬로 표현 하면 $\boldsymbol{p}=A \hat{\boldsymbol{x}}$와 같이 나타낼 수 있다. 

 

 

 

 

다시 한 번 우리의 문제를 정리해보면 overdetermined case의 Ax=b는 미지수가 방정식보다 작기 때문에 해가 존재하지 않는다. 따라서 가장 근접한 해를 구하기 위해 우변의 b를 A의 column space에서 가장 근접한 벡터로 치환해준 뒤 최종적으로 x hat을 구하는 것이 우리가 하고자하는 것이다. 여기서 x hat($\hat{\boldsymbol{x}}$)을 구하기 위한 핵심 포인트는 바로 보라색 선인 오차(e)이다. 이 오차가 column space에 수직(perpendicular)하다는 것이 핵심이다. 오차는 e=b-p로 표현되었는데, p를 $\boldsymbol{p}=A \hat{\boldsymbol{x}}$로 치환하여 다시 정리하면 아래와 같다. 

 

식 (11)을 놓고 보면 우리는 a1과 a2 두 개의 방정식(equation)에 대해 정리할 수 있다. A는 a1과 a2의 두 개의 column vector로 이루어져 있고 x hat역시 x1과 x2로 이루어져 있기 때문이다. 이 말은 즉 오차에 대한 라인 e가 a1에도 수직이고 a2에도 역시 수직이라는 의미다. a1, a2가 plane의 기저(basis)이므로 이 두 벡터하고 수직이면 모든 plane과 수직이다. 따라서 우리는 식(11)을 a1과 a2로 나누어 식을 정리할 수 있다. 

 

 

식 (12)는 오차 벡터 e와 a1, a2와의 내적(dot product)에 관한 식으로 정리한 것이다. 내적했을 때 0이라는 것은 수직인 것을 다들 이미 알고 있을 것이다. 그러나 우리는 선형 대수를 배우고 있기 때문에 식 (12)를 행렬의 형태로 다시 정리해보자. 

 

 

앞의 a1과 a2로 이루어진 행렬은 원래 A의 전치(transpose)행렬이다. 따라서 행렬로 표현하면 식 (13.2)처럼 나타낼 수 있다. 이를 다시 전개하여 정리하면 우리가 지난 강의(Lecture 15-(1))에서 봤던 식이 나온다. 즉 x hat을 구하는 식 말이다. 

 

여기서 식 (13.2)를 우리가 지난 강의(Lecture 14)에서 배웠던 직교벡터와 부분 공간과 연결지어 생각해보자. 식 (13.2)가 지난 번에 배웠던 네 개의 부분 공간 중 어떤 것과 유사해 보이지 않는가? 바로 Left null space의 형태인 것을 알 수 있다. 따라서 오차 벡터($e=(\boldsymbol{b}-A \hat{\boldsymbol{x}})$)는 행렬 A에 대한 Left null space에 존재한다. 또한 Left null space는 행렬 A의 column space와 직교(orthogonal)인 것을 배웠다. Fig. 3과 연결시켜 설명해보자면 행렬 A의 column space는 베이지색 plane이고, 이와 직교인 오차 벡터 e는 Left null space에 있음을 증명했는데, 그림상에서도 plane과 수직(perpendicular)인 것을 알 수 있다. 이렇게 하여 행렬의 부분 공간(subspaces)과도 연결지어 이해할 수 있었다. 이를 간단히 정리하면 다음과 같다. 

 

 

 

결과적으로 우리의 문제를 해결하기 위해 핵심이 되는 식은 (13.3)이다. 

 

 

- Solution of the x hat and projection matrix

 

이제 식 (13.3)으로부터 해(solution)를 구해보자. 해가 존재하지 않는 overdetermined case에서 우변의 b를 column space의 가장 유사한 벡터로 치환했으니 이제 유사한 해가 존재한다. 식 (13.3)을 x hat에 대하여 정리하면 아래와 같다. 

 

 

우리가 구하고자 하는 x hat은 식 (14.1)과 같다. 이를 통해 우리는 x hat의 값을 구할 수 있다. 그 다음엔 원래의 식에 이 x hat을 곱해서 b에서 A의 column space로 투영된 행렬 P를 구할 수 있다. x hat을 A에 곱하면 A의 column space로 들어가게 되는데, 이것이 원래의 벡터 b를 A의 column space로 투영한 p 벡터가 된다. 이 식을 나타낸 것이 식 (14.2)의 왼쪽이다. 

 

그런데 사실 우리가 최종적으로 구하고 싶은 것은 x hat이 아니다. 바로 같은 차원의 공간에 있는 어떠한 벡터이든지 행렬 A의 column space로 투영시킬 수 있는 투영 행렬(Projection matrix)을 구하고 싶은 것이다. 이를 위해 x hat을 먼저 구하고, x hat과 A를 정리하여 투영 행렬 P를 구하는 것이다. 식 (14.2)로부터 이 투영 행렬을 구할 수 있다. (14.2)의 x hat을 (14.1)로 치환해서 정리하면 (14.2)의 오른쪽과 같이 된다. 여기서 밑줄 친 부분이 바로 투영 행렬 P에 대한 식이다. 우리는 이미 section 1에서 1차원 벡터에 대한 투영 행렬 P를 식 (5)와 같이 구했다. 그러나 이는 1차원에 해당하는 방법이다. 식 (14.x)는 바로 n차원에 대한 투영 행렬을 구하는 방법을 나타낸다

 

 

그런데 어떤 사람은 식 (14.3)을 보고 이렇게 생각할 수 있다. 저거 전개 해서 없앨 수 있을 것 같은데.. 일단 전개해보자. 

 

 

전개해보니 식 (14.3)이 결국 단위 행렬(Identity matrix)가 되었다. 그러나 이것이 과연 맞을까? 정확히 말하자면 특정 조건일 때만 맞는 이야기이다. 바로 행렬 A가 정방행렬(square matrix)이고 역행렬이 존재할 때(invertible) 식 (15)가 성립하는 것이다. 우리가 기본적으로 가정하는 것은 overdetermined case, 즉 직사각 행렬(Rectangular matrix)이며 방정식이 미지수보다 많은 경우이다. 이 경우엔 당연히 역행렬이 존재하지 않는다. 따라서 식 (15)는 직사각 행렬의 경우엔 성립하지 않는다

 

그렇다면 행렬 A가 역행렬을 가지는 경우(invertible)엔 이것을 어떻게 생각해야 할까? 다시 말하면 투영 행렬 P가 n x n의 정방행렬이며 역행렬이 존재하는 경우 말이다. 이것은 결국 n차원 공간에서 n차원 공간으로의 투영, 즉 3차원 공간에서 3차원 공간으로 투영시키는 것이고 결국 단위 행렬(Identity matrix)을 의미한다. 투영 시켜도 아무 일도 일어나지 않는 다는 말이다. 

 

 

 

 

 

우리는 section 1의 1차원 예시에서 식 (7), (8)과 같이 투영 행렬이 대칭(symmetric)이며, 제곱해도 같음을 증명하였다. N차원의 경우에도 이것이 성립하는지 알아보자. 식 (14.3)을 전치 시키면 아래와 같다. 

 

 

식 (16)을 통해 전치를 해도 식이 같음을 증명하였다. 이번엔 P의 제곱에 대해 증명해보자. 

 

 

P를 제곱했더니 밑줄 친 부분이 단위 행렬이 되어 삭제된다. 따라서 P의 제곱이 원래의 P와 같음을 증명하였다. 

 

이렇게 하여 투영 행렬(Projection Matrix)에 대한 모든 식을 정리하였다. 

 

 

 

3. MATLAB 구현

 

아래 그림은 Fig. 3과 같은 투영(projection)에 관한 문제를 MATLAB으로 구현한 것이다. 각 벡터의 색깔을 Fig. 3과 맞추었으니 비교해보기 바란다. 구현한 식은 다음과 같다. 

 

 

 

 

Fig. 4 MATLAB을 이용해 식 (18)을 투영 행렬로 해를 구하고 시각화 한 모습

           굵은 녹색 벡터가 p를, 가는 녹색 벡터는 standard basis의 y축을 의미함

 

 

아래는 구현 코드이다. Overdetermined case인 식 (18)을 어떻게 풀고 어떻게 구현하고 시각화 했는지를 잘 살펴보기 바란다. 실제로 A와 b의 값을 바꿔가며 감을 잡아보도록 하자. 

 

 

 

 

 

 

4. 마치며

 

이번 강의에서 정말 중요한 개념인 투영(Projection)을 배우고 이를 행렬의 부분 공간(subspaces)과 연결지어 생각해 보았다. 투영을 배우는 이유는 해가 존재하지 않는 경우인 Overdetermined case의 문제에 대한 해를 찾으려는 시도에서부터 출발한다. 이 경우 Ax=b 식을 만족시키는 해가 애초에 존재하지 않지만, 가장 근접한 해를 구하기 위해 우변의 b를 행렬 A의 column space 공간의 가장 유사한 벡터로 만든 다음 이에 대한 근사해(approximate solution) x hat을 계산한다. 이때 b를 A의 column space로 투영시키는 역할을 하는 것이 바로 투영 행렬(projection matrix) P이며, x hat을 구하고 이를 행렬 A와 함께 정리하여 구할 수 있다. 

 

다음 강의에서 배울 내용이지만, 이 투영의 개념은 우리가 실제 문제에서 유용하게 사용할 수 있는 수학적 방법론인 최소자승법(Least square method)의 배경이 되는 아주 중요한 개념이다. 잘 숙지하도록 하자. 

 

+ Recent posts