본문 바로가기
Machine Learning

Cost Function (비용 함수) (1)

by ahfmrjttb 2020. 6. 12.

저번 포스팅에서 간단하게 Cost Function에 대해 알아보았다. 이번 포스팅에서는 Cost Function에 대해 좀 더 자세하게 알아보자. 저번 포스팅에서 Cost Function을 식으로 나타내면

이렇게 나타낼 수 있고 아래 수식은

Cost Function을 최소화하는 W, b를 구하겠다는 뜻인데 Cost Function을 최소화하는 이유가 Cost Function이 작다는 뜻은 각 차이값의 제곱들의 평균이 작다는 뜻이므로 실제값과 예측값의 차이가 적다는 뜻이기 때문이다.

즉, "Cost Function을 최소화 = 실제 데이터와 비슷하게 예측"이라는 의미이다. 이제부터 본격적으로 Cost Function에 대해 알아볼 건데 아래 설명할 내용들은 모두 선형 회귀에 대한 Cost Function이라는 점을 기억하기 바란다.

 

지금부터 아래에 쓰여질 내용들은 Coursera 강의를 참고해서 쓰는 것이므로 W와 b가 아닌 θ1, θ0로 표현하겠다(W = θ1, b = θ0). 따라서, H(x)도 h(x) = θ1*X + θ0로 표현한다. 이를 정리해보면

 

 

왼쪽 부분이 필자가 계속 얘기한 부분이다(h(x), Cost Function, Cost Function 최소화). 왼쪽은 θ0가 있지만 먼저 간단한 느낌 정도를 잡기 위해서 이번 포스팅에서는 오른쪽처럼 θ0 = 0인 경우를 먼저 알아볼 것이다.

 

그런데, Cost Function을 보면 2가 나누어져 있는 것을 볼 수 있다 (1/m => 1/2m). 이는 미분 시 계산을 편리하게끔 해주기 위한 것인데 Cost Function이 2차 함수이기 때문에 x에 관해 미분하면 (x-y)^2 => 2(x-y)이 되므로 이 곱해진 2를 나누어 계산을 편리하게끔 하기 위한 것이다.

 

그런데, 2를 정말 나눠도 괜찮은 걸까? 이렇게 2를 나눔으로써 Cost Function의 최소값을 구하는데 지장이 있거나 그러지 않을까? 결론부터 말하면 전혀 지장이 없다.

 

우리의 목표는 Cost Function인 J(θ0, θ1)을 최소화하는 θ0, θ1을 구하는 것이다. 즉, θ0, θ1에 의해 가설 h(x)가 정의되고 가설 h(x)와 실제값의 차이에 의해 Cost Function의 최소값이 결정된다. 즉, Cost Function에 2를 나누던, 3을 나누던 또는 10을 곱하던 100을 곱하던 어차피 Cost Function이 최소일 때 가설 h(x)는 똑같다는 것이다. 이렇게 말하면 좀 어려울 수 있으니 간단한 예시를 하나 들겠다.

 

가설 h(x)를 2x 로 가정하고, h(x) = 2x 일 때

이 식에 의해 Cost Function이 최소값 4가 된다고 가정하자. 여기에서 1/m => 1/2m으로 바꾼다고 하면 Cost Function의 최소값은 2가 될 것이다. 최소값은 분명 바뀌었다. 하지만, 핵심은 최소값 자체가 아니라 h(x) = 2x 일 때 Cost Function이 최소라는 사실이 똑같다는 점이다.

이러한 이유로 Cost Function에 2를 나누어도 전혀 상관이 없다는 결론을 도출할 수 있다.

 

그럼 미분을 왜 하는걸까? 그 이유는 2차 함수를 잘 생각해보면 된다. 2차 함수의 모양을 잘 생각해보자.

 

2차 함수의 모형은 이러하다. 그런데, 우리는 2차 함수인 Cost Function이 최소값일 때를 구하고 싶다. 즉, 2차함수가 최소일 때는 해당 점에서의 접선의 기울기가 0일때이다. 좀 더 정확히는 극값일 때라고 표현하는데, 극값이란 x=a를 경계로 증가에서 감소로(극대값), 감소에서 증가로(극소값) 바뀌는 지점을 말한다. 그런데, 함수 f(x)가 x=a에서 미분가능하고, x=a에서 극값을 가지면 f'(a)=0이기 때문에 결국 같은 말이다. 왜냐하면 여기서 다루는 함수들은 모두 미분 가능한 함수들이기 때문이다.

 

함수의 접선의 기울기는 해당 함수를 그 지점에서 미분한 값으로 구할 수 있다. 이렇게 접선의 기울기를 줄여나가면서 Cost Function을 최소화하는 방법을 경사 하강법(Gradient Descent)이라고 한다. 이러한 과정에서 미분이 사용되는 것이다. 경사하강법에 대해서는 다시 포스팅할 예정이다.

 

 

 

다시 돌아와서 Cost Function이 어떻게 그려지는지 보자(위 그림에서는 Cost Function을 J(θ1)로 표현). 왼쪽 그래프에서 θ1 = 1이고 그래프가 (0,0)을 지나므로 θ0 = 0이다. (물론, 아까 처음에 θ0 = 0인 경우를 포스팅하겠다고는 했지만...)

이를 Cost Function 식에 대입하고 점이 3개이므로 m = 3, (x,y)는 (1,1), (2,2), (3,3)을 대입해서 계산하면 (1/(2*3)) * (0^2 + 0^2 + 0^2) = 0이 된다. 그래서, J(1) = 0에 점이 찍히는 것이다. 그것이 오른쪽 그림이다.

 

 

 

그 다음은 θ1 = 0.5, 그래프가 또 (0,0)을 지나므로 θ0 = 0이다. 똑같은 방식으로 해보면 J(0.5) = (1/(2*3)) * ((0.5\*1 - 1)^2 + (0.5\*2 - 2)^2 + (0.5\*3 - 3)^2) = (1/(2*3)) * (3.5) = 약 0.58이 된다. 그래서, 오른쪽 그림처럼 점이 찍히는 것이다.

 

 

 

그 다음은 θ1 = 0, θ0 = 0인 즉, x축 그래프이다. 똑같은 방식으로 해보면 J(0) = (1/(2*3)) * ((0\*1 - 1)^2 + (0\*2 - 2)^2 + (0\*3 - 3)^2) = (1/(2*3)) * (14) = 약 2.3이 된다. 그래서, 오른쪽 그림처럼 점이 찍히는 것이다.

이런식으로 쭉 그리게 되면

 

 

 

이렇게 나오게 된다. 이 Cost Function을 아래 그림처럼 볼 수 있어야 한다.

 

 

 

왜냐하면 우리는 Cost Function이 최소가 되는 점을 찾고 왼쪽처럼 그에 맞는 그래프를 그려야 하기 때문이다. 좀 더 정확히는 Cost Function의 최소값을 갖는 θ0, θ1을 구해 가설 h(x) (= 모델) 를 찾는 것이 최종 목표이기 때문이다.

 

Cost Function이 극값인 경우가 그래프에 모든 점이 포함되어 있는 경우인데 사실 그런 경우는 거의 나오지 않는다. 따라서, 해당 데이터들에 맞는 최소값을 구한 후 그에 맞는 그래프를 그리면 된다. (= 모델 h(x)을 찾으면 된다.)

 

지금까지의 경우는 θ0 = 0일때의 경우만 그린 것인데, 다음 포스팅에서는 θ0가 0이 아닌 경우 어떻게 Cost Function이 그려지는지에 대해 알아보겠다.

 

 

 

참고 사이트 :

댓글