2017-12-19 12:54:52

매번 느끼는 것이지만 포스팅하지 않고 대충 공부하며 넘어간 부분은 내 머리 속에 잘 정립되어 있지 않은 것 같다. 오늘은 투영과 최소자승법에 대해서 확실하게 이해해보자. 투영은 머신러닝과 딥러닝에서 타겟값과 예측값 사이의 차이를 구하는데 흔히 사용되는 최소자승법과 밀접한 관련이 있다는 정도만 일단 이야기하고 시작하겠다. 



▶ 투영(projection)이란?


우선 투영의 의미를 국어사전에서 찾아보면 '물체의 그림자를 어떤 물체 위에 비추는 일 또는 그 비친 그림자', '도형이나 입체를 다른 평면에 옮기는 일'이라고 나와있다[1]. 그림1과 같이 주황색 막대 바로 위에 태양이 있을 때 바닥에 그림자를 생기게 하는 것을 투영이라고 생각하면 된다. 만약 태양의 위치에서 주황색 막대를 본다면 그림자와 같은 길이로 보일 것이다. 


그림1. 투영의 의미


이것을 벡터와 관련지어서 생각해보자. 아래와 같은 서로 다른 두 벡터 a, b가 있다(그림2).  


그림2. 벡터b를 벡터a에 투영시킨 결과.


벡터b를 벡터a로 투영시키면 투영벡터p가 생긴다. 벡터p는 벡터b를 벡터a를 이용해서 나타낼 수 있는 최선의 결과라고 볼 수 있다. 왜냐하면 벡터a 하나만으로는 완벽하게 벡터b를 설명해낼 수 없기 때문이다. 벡터a에 어떠한 수x를 곱하더라도 ax = b 는 불가능하다. 벡터a의 크기만 달라질 뿐 방향이 달라지지는 않기 때문이다. 반면 투영벡터p는 벡터a에 어떤 계수를 곱하는 것으로 표현할 수 있다:


...(공식1: 투영벡터)


그러면 를 어떻게 계산할 수 있을까? 에러벡터e와 벡터a가 서로 수직관계에 있다는 것을 이용한다. 우선 에러벡터e는 그림2를 보면


...(공식2: 에러벡터)


임을 알 수 있다. 벡터a와 벡터e가 수직이므로 


 

이 성립해야 한다. 이것을 계산하면



이 된다. 즉 계수 는 벡터a와 벡터b를 이용해서 나타낼 수 있다는 것을 알게 되었다. 그러면 투영벡터에 관한 공식1은 이렇게 다시 쓸 수 있다: 


...(공식1-1: 투영벡터)



예제1>>


간단한 예제를 하나 풀어보자. 벡터a = (1, 1, 1)이고 벡터b = (1, 2, 3)일 때 벡터b를 벡터a에 투영시켰을 때 생겨나는 투영벡터p를 구해보자. 두 벡터 모두 3차원 공간 내에서 1차원인 선(line)이다. 공식1-1을 활용하면 투영벡터p를 간단히 구할 수 있다. 



방금은 계수 를 찾은 후에 벡터a에 곱해서 벡터b를 벡터a에 투영시켜서 생긴 투영벡터p를 찾는 방법을 알아봤다. 벡터b에 어떠한 행렬P를 곱해줘서 투영벡터p를 구할 수 있는 방법은 없을까? 공식1-1을 한번 아래와 같이 전개해보자. 


...(공식1-2: 투영벡터)


우리가 기대한 대로 벡터b에 행렬을 곱해주는 형태로 정리가 되었다. 여기서 투영행렬(projection matrix) P는 


...(공식3: 투영행렬)


이다. 


예제 1>> 


위의 예제1을 투영행렬을 이용하는 공식1-2를 이용해서 풀어보자. 



역시 동일한 결과가 나옴을 확인할 수 있다. 여기서 집고 넘어가야 할 것은 투영행렬은 항상 대칭행렬이라는 것이다()



그리고 투영렬을 제곱했을 때는 항상 그 자신이 된다().



▶ 최소자승법(least square method)이란?


이제 투영이라는 개념과 최소자승법과 어떻게 연관되어 있는지 알아볼 시간이다. 아래와 같이 미지수는 하나 뿐인데 여러 개의 방정식이 있는 경우를 생각해보자.



첫번째 방정식을 풀면 x=2가 되는데 이것을 두번째, 세번째 식들에 대입하면 성립이 되지가 않는다. 두번째 방정식을 풀면 x = 5/3이 되는데 이것을 첫번째, 세번째 식들에 대입하면 역시 성립되지 않는다. 세번째 방정식의 해도 마찬가지다. 결국 이 방정식들은 풀 수 없다. 그런데 실생활에는 이러한 경우가 상당히 많다. 이럴 때는 완벽한 답을 구할 수 없어도 최선의 답을 구하기 위해 노력해야한다. 모든 사람을 만족시킬 수는 없지만 최대한 많은 사람들을 만족시키기 위해서 타협하는 것과 같은 이치다. 그 최선의 해를 라고 표기한다. 그러면 를 어떻게 구할까? 우선 각 방정식에서의 에러의 제곱을 다 더한다: 


.


그 다음에 이것이 최소가 되게 하는 x값을 구한다. 그것이 바로 최적해 이 되는 것이다. 만약 모든 방정식이 완벽하게 풀리는 해가 있다면 은 0이 될 것이다. 하지만 아까도 말했지만 실생활에서 그런 경우는 극히 드물다. 가 최소가 되게 하는 x 값, 즉 최적해를 구해보자. 간단히 x에 대해 미분한 후 0이 되게하는 x값을 찾으면 된다.


 


즉, x가 2.0345라면 정확하지는 않지만 세 개의 방정식을 최선으로 풀어낸다는 것이다. 한번 확인해보자. 



4, 5, 9와는 차이가 있긴 하지만 그래도 엄청 큰 차이가 나지는 않는다. 이것이 바로 최소자승법이다. 

벡터를 이용해서 다시 최소자승법을 설명하겠다. 아래와 같이 미지수가 하나인데 방정식이 세개인 경우가 있다. 


이것을 벡터를 이용해서 표현하면, 



가 된다. 그리고 최소자승법을 활용하면, 


...(공식4: 최적해, 미지수가 하나일 때)


의 형태로 의 값이 결정된다. 그런데 왠일인지 낯설지가 않다. 바로 위에서 설명한 투영벡터 구하는 공식 에 있는 와 동일하기 때문이다. 아까 투영에 대해 설명할 때 벡터b를 벡터a를 가지고 최선으로 설명한 결과가 투영벡터p라고 했었다. 그러니까 최소자승법을 통해서 찾아낸 해 는 사실상 투영벡터p를 계산하기 위해 벡터a에 곱해주는 계수를 찾아내는 것과 동일한 것이다. 


지금까지는 변수가 하나인 케이스만 생각해봤는데, 이번에는 좀 더 확장시켜서 변수가 여러 개인 케이스를 생각해보자. 그 중에서도 변수의 갯수보다 방정식의 갯수가 더 많은 상황(m > n), 즉 풀 수 없는 상황을 고려해보자. 



이때는 행렬 A의 열 벡터들의 선형 조합으로 벡터 b가 안 만들어진다:



즉, 그림3과 같이 벡터 b가 행렬 A의 column space 위에 존재하지 않는다는 것이다. 


그림3. 벡터 b가 행렬 A의 column space, C(A) 위에 존재하지 않기 때문에 해를 구할 수 없다. 따라서 벡터b를 C(A)에 투영시켜서 최선의 해를 구한다.


따라서 우리는 벡터 b를 행렬 A의 column space로 투영시켜서 최선의 해, 즉 최적해 를 구해야 한다. 방법은 에러벡터e와 행렬 A의 열벡터들이 모두 수직관계에 있다는 것을 이용하는 것이다. 에러벡터e는 로 나타낼 수 있으므로, 


 

이다. 이것은 아래와 같이 쓸 수 있다. 



이다. 이것을 정리하면, 


...(공식5: 정규방정식, normal equation)


이 된다. 만약 행렬 A의 열벡터들이 선형 독립이라면 는 역행렬을 가지기 때문에, 


 ...(공식6: 최적해, 미지수가 여러 개일 때)


와 같이 정리될 수 있다. 그리고 최적해을 행렬 A에 곱하면 벡터b를 행렬 A의 column space에 투영한 결과 얻은 투영벡터 p를 구할 수 있다. 


...(공식7: 투영벡터, 미지수가 여러 개일 때)


또한 공식7을 다음과 같이 정리하면, 투영행렬을 알 수 있다. 


...(공식8: 투영행렬)


투영행렬은 두가지 특성을 가지고 있다. 제곱했을 때 그 자신이 되고(), 전치했을 때도 그 자신이 된다(). 이 특성들은 아래와 같이 간단히 증명된다.  




예제2>>


예제를 하나 풀어보자. 



일 때, Ax = b는 해가 없다. m > n이기 때문이다. 따라서 최적해 를 구해보자. 공식6을 이용하면 간단히 구할 수 있다. 




▶ 정리


Ax = b를 지금까지는 풀 수 있는 경우들만 살펴봤다면, 오늘은 풀 수 없는 경우를 살펴보았다. 풀 수 없을 때는 최적해를 찾는 것이 목표가 된다. 풀 수 없는 상황은 벡터 b가 행렬 A의 column space 위에 존재하지 않는 경우들이다. 이때는 벡터 b를 행렬 A의 column space에 투영시켜서 벡터 b와 가장 차이가 적게 나는 투영벡터 p를 찾아낸다(그림3 참고). 이때 최소자승법이 활용된다. 투영벡터p는 행렬 A의 column space 위에 존재한다. 한마디로 투영은 답이 없는 상황에서 그나마 가장 합리적인 해답을 내놓는 것이다. 그것이 바로 최적해 이다. 

 



<참고자료>

[1] http://krdic.naver.com/detail.nhn?docid=39794400, 네이버 국어사전, 투영의 사전적의미

[2Gilbert Strang, Linear algebra and its applications, 4판, p. 152-165.