02. Linear Regression의 Hypothesis와 cost 설명 (lec 02)

김성훈 교수님 동영상에서 lec 02에 해당하는 부분. 먼저 몇 가지 용어에 대한 정리가 필요하다.

1. 회귀분석 (http://math7.tistory.com/118 에서 발췌)

점들이 퍼져있는 형태에서 패턴을 찾아내고, 이 패턴을 활용해서 무언가를 예측하는 분석. 새로운 표본을 뽑았을 때 평균으로 돌아가려는 특징이 있기 때문에 붙은 이름. 회귀(回歸 돌 회, 돌아갈 귀)라는 용어는 일반적으로 '돌아간다'는 정도로만 사용하기 때문에 회귀로부터 '예측'이라는 단어를 떠올리기는 쉽지 않다.

2. Linear Regression

2차원 좌표에 분포된 데이터를 1차원 직선 방정식을 통해 표현되지 않은 데이터를 예측하기 위한 분석 모델. 머신러닝 입문에서는 기본적으로 2차원이나 3차원까지만 정리하면 된다. 여기서는 편의상 1차원 직선으로 정리하고 있다. xy축 좌표계에서 직선을 그렸다고 생각하면 된다.

3. Hypothesis

Linear Regression에서 사용하는 1차원 방정식을 가리키는 용어로, 우리말로는 가설이라고 한다. 수식에서는 h(x) 또는 H(x)로 표현한다.

H(x) = Wx + b에서 Wx + b는 x에 대한 1차 방적식으로 직선을 표현한다는 것은 모두 알 것이고, 기울기에 해당하는 W(Weight)와 절편에 해당하는 b(bias)가 반복되는 과정에서 계속 바뀌고, 마지막 루프에서 바뀐 최종 값을 사용해서 데이터 예측(prediction)에 사용하게 된다. 최종 결과로 나온 가설을 모델(model)이라고 부르고, "학습되었다"라고 한다. 학습된 모델은 배포되어서 새로운 학습을 통해 수정되기 전까지 지속적으로 활용된다.

4. Cost (비용)

앞에서 설명한 Hypothesis 방정식에 대한 비용(cost)으로 방정식의 결과가 크게 나오면 좋지 않다고 얘기하고, 루프를 돌 때마다 W와 b를 비용이 적게 발생하는 방향으로 수정하게 된다.

놀랍게도 미분이라는 수학 공식을 통해 스스로 최저 비용을 찾아가는 마술같은 경험을 하게 될 것이다. 프로그래밍을 하는 사람의 입장에서 어떻게 이런 일이 생길 수 있을까.. 라고 생각할 정도로 놀라운 경험이었다. 그런데, 여전히 신기하다!

5. Cost 함수

Hypothesis 방정식을 포함하는 계산식으로, 현재의 기울기(W)와 절편(b)에 대해 비용을 계산해 주는 함수다. 매번 호출할 때마다 반환값으로 표현되는 비용이 줄어들도록 코딩되어야 한다. 여기서는 Linear Regression에서 최소 비용을 검색하기 위한 역할을 담당한다.


# ----------------------------------------------------------- #


첨부한 이미지는 lec_02 동영상과 함께 배포되는 pdf 파일에서 가져왔다. 먼저 그림을 통해 hypothesis가 무엇인지 알아보자.

왼쪽 그림을 보면, 노랑, 파랑, 빨강의 직선이 3개 그려져 있다. xy 좌표에서 데이터는 (1,1), (2,2), (3,3)에 3개가 있는 상태이고, 가장 좋은 직선을 찾으라고 한다면 당연히 파랑색 직선이다.

그런데, 눈으로 보면 파랑색이 가장 좋다는 것을 알지만, 어떤 데이터가 있는지도 모르는 상태에서 어떻게 파랑색이라고 단정지을 수 있겠는가? 이 때, 오른쪽 그림이 사용된다. 다만 왼쪽 그림과 달리 직선의 기울기와 절편이 조금 달라졌다. 그러니 여기서의 파랑색 직선은 왼쪽 그림에서 노랑이거나 빨강일 수도 있고, 실제로는 모든 직선이라고 보면 된다.

우리가 찾으려는 직선은 모든 데이터를 관통하면 최상이겠지만, 들쭉날쭉한 데이터에 대해 그런 상황은 거의 불가능하다. 그래서, 데이터에 가장 가깝게 그려지는 직선을 찾는 것이 목표가 되고, 직선으로부터 각각의 데이터(좌표)까지의 거리 합계를 계산한 것을 cost라고 부르고, 이 값이 가장 작은 직선을 찾으면 목표 달성이다.

위의 그림 2장이 어떻게 직선으로부터 데이터가 위치한 좌표까지의 거리가 가까운지 판단하는 방법을 보여준다. 결국은 직선으로 표현하고 있지만, 이것은 x축에 대한 y값을 갖는 3개의 좌표라고 보는 것이 좋다. 특정 데이터까지의 거리를 계산할 때 삐딱하게 재는 것은 이상하지 않겠는가? 수직선을 내리거나 올려서 직선에 닿는 y 좌표를 계산하면 공정한 거리를 얻을 수 있다.

왼쪽 그림에서, y를 빼는 행위에는 H(x)에 포함된 모든 x만큼의 계산이 포함되어 있다. 즉, 뺄셈 1회가 아니라 3회를 하게 된다. 오른쪽 그림을 보면, 상당히 복잡한 형태로 빼는 것에 대해 나열하고 있다. H(x(1)) - y(1) 이라고 하는 표현식은 x의 1번째 데이터를 입력했을 때의 방정식(hypothesis) 결과에서 y의 1번째 데이터를 뺐다는 뜻이다. 위의 그림만으로 판단한다면 x의 1번째는 1이고, y의 1번째도 1이다. 그러나, W와 b가 모호하기 때문에 정확한 결과값을 볼 수는 없다.

그렇다면, 왜 hypothesis의 결과에서 y를 뺀 다음에 제곱을 하는 것일까? 이 부분은 통계에서 표준편차와 분산이라고 하는 것을 스치듯이 읽기만 해도 알 수 있다. 나는 머신러닝 공부하려고 스치듯이 동영상을 시청했다.

1. 뺄셈을 하게 되면 직선 위치에 따라 음수와 양수가 섞여서 나오게 된다. 계산이 피곤해진다.
2. 절대값을 취하는 것이 가장 쉽지만, 제곱을 하는 것도 방법이다. (음수x음수)와 (양수x양수)에 대해 항상 양수가 나오니까
3. 제곱을 하면 가까운 데이터는 작은 값이 나오고, 멀리 있는 데이터는 큰 값이 나오기 때문에 멀리 있는 데이터에 벌점(penalty)을 부과할 수 있다.

최종적으로는 좌표가 3개 있으니까, 3으로 나눈다. 왜 나누냐고 할 수도 있지만, 나누지 않으면 데이터가 100개만 되도 값이 엄청나게 커지게 되고 이후 계산이 복잡해진다. 평균을 내기 위해 합계를 구한 다음에 갯수로 나누는 것과 같다고 보면 된다.

공식 중에 마징가제트처럼 생긴 ∑(시그마, sigma)가 있는데, 이건 오른쪽에 있는 식에 대해 1부터 m번째 까지를 적용한 합계를 뜻한다. 이게 없으면 위쪽에 표현된 복잡한 계산식을 다 써야 하고, 데이터가 100개쯤 되면 쓸 방법도 없게 되니까, 무조건 익숙해져야 한다. 당연한 얘기로 데이터 개수는 m개 이므로  ∑(시그마)에서도 1에서 m개라고 얘기하고, 전체 갯수로 나누기 위해 1/m에서도 사용된다. 즉, m이 2회 나온다.

앞에서 거리의 제곱을 취한다고 얘기했는데, 이 방법을 LSM(Least Square Method)이라고 부른다. 통계학 관련서적에 보면, 절대값을 이용한 처리보다 튼튼(robust)하다고 알려져 있다. 이 부분에 대해서는 통계에 대한 지식이 약해 설명을 생략하지만, 최소 제곱을 사용한 방법이 더 좋은 결과를 낸다고만 이해하고 있다. 그리고, 표준편차를 이용한 방법도 가능할수 있는데, LSM에 비해 미분하기가 어렵다는 단점이 있다고 한다.

왼쪽 그림을 보자. 앞에서 설명했던 공식을 다시 정리하고 있다. 데이터까지의 합계를 m으로 나눈 결과는 해당 hypothesis에 대한 비용(cost)이다. 이 비용을 최소로 만드는 W와 b를 찾는 것이 목적이다. 오른쪽 그림이 말하려고 하는 것이다. 다만 cost(W,b)라고 표현할 때, 나한테는 W와 b를 찾는 것처럼 보였다.

목표는 cost를 최소로 만드는 W(기울기)와 b(절편)를 찾는 것이다. 

말장난처럼 들릴 수도 있지만, 이 개념을 이해하지 못해서 뒷 과정을 공부하는데 엄청나게 고생했다는 것만 알아주기 바란다. cost(W,b)로 시작하는 공식을 보면, 실제로는 W와 b가 보이지 않는다. H(x) 안에 숨어있기 때문이다.

f(x) = 3x+2라는 식에서 f(x) 안에 포함된 x가 무엇이냐에 따라 오른쪽 식의 결과가 달라지는 것처럼 cost(W,b)를 이해할 때 W와 b가 바뀔 때마다 오른쪽 식의 결과가 달라진다고 생각해도 좋다.  즉, W와 b를 공식에 적용하는 과정에서 cost가 줄어들도록 W와  b를 변경하는 것이 진짜 중요하다. 이 부분은 뒤에서 자세히 설명한다.