본 글은 스스로 정리 겸, 머신러닝을 처음 배우는 사람들도 쉽게 머신러닝을 배울 수 있도록 쓴 글입니다.

수학적 지식이 부족하더라도, 머신러닝이 어떻게 돌아가는지 최대한 쉽게 이해할 수 있도록 적는 것을 목표로 하고 있습니다.

sung kim 님의 '모두를 위한 딥러닝'의 자료를 사용하여 설명합니다.

Lecture 2

안녕하세요. 이번 포스팅에서는 Linear regression 기술에 대해서 알아 볼 것입니다.

 

시험 성적 예측하기!

위의 표에 나온 것이 바로, Supervised learning에서 사용되는 Training data (Training set) 라는 것입니다.

어떤 값 x와, 그 특정한 x값에 대한 정답인 y값들이 나열되어 있는 것이죠.

위의 시험 성적 예측의 예시같은 경우, x값을 공부한 시간으로 주어주고, y값을 그 공부 시간에 따른 시험 성적으로 주어진 것입니다.

 

그렇다면, 우리는 위의 데이터를 보고 이런 생각을 할 수 있습니다. "공부 시간이 많을수록 점수가 높아지는구나!" 

 

그런데, 만약 우리가 8시간을 공부한다면, 몇 점을 맞을 수 있을까요? 아마 9시간을 공부해서 나온 성적인 80점보다는 조금 낮은 점수가 나올테고, 3시간을 공부했을 때 나온 성적인 50점보단 높은 성적일 겁니다.

 

이렇게, 이미 갖고 있는 데이터(공부 시간당 성적)를 기반으로 특정 x값(공부할 시간)에 대한 정답인 y값(나올 성적)을 예측하는 데 사용되는 기술을 "regression" (회귀) 이라고 합니다. 그리고, 갖고 있는 데이터들은 labeling 된, 즉 이미 입력값과 그에 따른 정답이 존재하는 데이터이므로, 이것은 Supervised learning의 한 종류라고 할 수 있겠지요.

간단한 데이터 ㅎㅎ

그렇다면, 이제부터 linear regression이 무엇인지 정확히 알아가봅시다.

설명을 간단히 하기 위해서, 데이터를 굉장히 단순한 형태로 놓겠습니다.

그리고 이것을 그래프에 그리면, 위의 오른쪽 그래프와 같은 형태가 될 것입니다.

X=1일때 Y=1, X=2일때 Y=2, X=3일때 Y=3 인 표와 그래프이죠.

선형 가설??

그리고, 우리들이 알고 싶은 것은 X값이 4일때의 Y값, X값이 1.5일떄의 Y값과 같은 특정 X값에 따른 Y값입니다.

이것을 알기 위해서, 우리는 대략적인 "가설" 을 세울 필요가 있습니다. "대충 선 하나를 그으면 이 데이터를 잘 표현하는 선이 될거야!" 와 같이 말이죠.

 

Linear Hypothesis라 함은, 이렇게 어떤 선을 그었을 때 (일차함수를 그렸을 때) 그 선은 데이터를 잘 표현할 것이다! 하는 가설입니다.

일반적으로, 이렇게 Linear한 선으로 표현할 때 어느 정도 데이터를 잘 표현하는 경우가 많습니다. 가령, 내가 운동한 시간이 늘어나면 살도 그만큼 빠질 것이고, 공부를 한 만큼 성적도 그만큼 오르는 것도 Linear하게 표현할 수 있을 것입니다.(정확히 데이터에 들어맞는다는 것이 아니라, 어느 정도 잘 나타낼 수 있을 것이라는 겁니다.) 그렇기 때문에, 이 Linear hypothesis를 사용하는 것입니다.

그리고, 어떻게 그은 선이 가장 데이터에 적합한지를 알아가는 과정을 Linear regression의 학습과정이라고 합니다.

선 세개인 그래프는 뭐라고 할까? 삼선그래프! 엌ㅋㅋㅋ

그렇다면 이제 선을 한번 그어봅시다! 일반적으로, 그래프 위의 선은 일차함수로 나타낼 수 있겠죠?

가령, 위의 파란 선은 y=x라는 일차함수 그래프로 표현할 수 있습니다.

 

이처럼, Linear한 선을 나타낼 때 사용하는 함수를 H(x)라 합니다.

그리고 H(x)는 일차함수이기에, H(x) = Wx + b 라고 둘 수 있을 것입니다. (y=ax+b와 같은 의미입니다!)

가령, 파란 선은 H(x) = 1x + 0 이라고 할 수 있고, 이떄 W값은 1, b값은 0이라고 할 수 있겠습니다.

 

파란 선이 노란 선과 빨간 선보다 더 좋은 가설입니다.

그렇다면, 위의 세 개의 선 중 어떤 것이 가장 데이터를 잘 표현하고 있나요? 당연히 파란 색의 선이 이 데이터를 잘 표현하는 선이겠죠? 아무래도 세 개의 선 중 데이터에 가장 가까운 것이 파란색 선이니까요.

 

이렇게 가장 좋은 선을 알아내는 것을 조금 더 정확히 말하자면,

"H(x) = Wx + b에서, W값과 b값에 어떤 값을 대입해야 우리의 데이터에 가장 가까운 가설 H(x)가 만들어질까?"

라고 할 수 있습니다.

 

가령, 위의 노란색 선의 H(x)는 대략 H(x) = x/2 + 2 이므로, W=1/2, b=2 이고

파란색 선의 H(x)는 대략 H(x) = x 이므로, W=1, b=0입니다.

그리고 노란색 선의 H(x)인 W=1/2, b=2보다 파란색 선의 W=1, b=0이 더욱 우리의 데이터에 가까운 W값과 b값이 되는 것이죠.

바로 이러한 W값과 b값을 찾아내는 과정을 Linear regression의 학습이라고 합니다.

 

그런데, 여기엔 문제가 있습니다. 가장 적절한 W값과 b값을 찾아내기 위해서는, W값과 b값이 얼마나 좋은 값인지를 알아내야 합니다.

위에서는 직접 그림을 그려서 더 데이터에 가까워 보이는 선을 택했지만, 일일히 그렇게 직선을 그려볼 수도 없는 노릇입니다.

또, 가령 위의 노란색 선과 빨간색 선 중 어떤 선이 얼마나 더 적절한지 물어본다면, 어떻게 대답해야 할까요?

뭔가 저거 비틀린 시소처럼 생기지 않았음??

여기서 우리는 이런 아이디어를 생각해 낼 수 있습니다. "직선이 각각의 데이터를 나타내는 점들과의 거리가 작으면 작을수록, 데이터에 더 적합한 직선일거야!" 라구요.

결국, 직선을 최대한 데이터에 가깝게 놓는 것(적합하게 하는 것)이 가장 적절한 직선을 찾는 것이 우리의 목적이니까요.

 

Cost function, 직역하면 비용 함수

그리고, "직선과 데이터가 떨어져 있는 거리"와 같이, 얼마나 우리의 직선이 데이터를 잘 맞추는지를 나타내는 것을 바로 Cost function(비용 함수) 라고 합니다. 그리고, Cost function을 통해 도출된 값은 error 또는 cost (오차값)라고 합니다.

 

직선과 데이터의 거리가 작으면 작을수록 좋으므로, cost는 낮으면 낮을수록 더 좋은 것이겠지요. (직선이 더 데이터에 잘 맞는다는 뜻 ㅎ)

 

그럼 Cost function은 어떻게 만들면 될까요?

 

우리의 가설 함수(직선) H(x) 에서 정답 데이터의 값 y를 빼면 되지 않을까요?

즉, Cost function : H(x) - y 라고 하면 되지 않을까요??

 

하지만...(그치만...) 그렇게 Cost function을 설정해버리면, 한 가지 문제가 생깁니다. 바로, 거리가 음수가 될 수도 있다는 것이죠. 위의 예시의 경우, Cost function을 H(x) - y 라고 설정해 버리면, x=1일때는 음수, x=3일때는 양수가 나와버려서 정확히 우리가 원하는, 직선과 데이터의 적합성 을 찾을 수 없게 됩니다.

 

그래서 고안한 식이 바로 위의 식입니다.

저 식이 의미하는 것이 무엇인고 하니, 모든 각각의 x값과 y값에 대한

$$(H(x) - y)^2$$ 을 모두 더한 후,

데이터의 개수인 m만큼 나눠줍니다. (각각의 데이터에 대한 오차의 평균값을 구하기 위함입니다.)

 

부연 설명을 첨가하자면...

 

(H(x) - y)를 제곱한 것에는 두 가지 이유가 있습니다.

 

첫째는, H(x) - y의 값이 음수가 아니게 하기 위해서 입니다.

위에서도 언급했듯이, 직선과 데이터의 거리가 음수이면 안되니까요.

 

둘째는, 너무 멀리 있는 데이터에 대해 추가적인 패널티를 주기 위해서 입니다.

Linear regression의 최종적인 목표는, 결국 데이터를 가장 잘 나타내는 직선을 찾는 것입니다.

그런데, 만약 엄청 멀리 있는 데이터에 대한 오차값과 가까이 있는 데이터에 대한 오차값의 차이가 크지 않다면,

직선이 일부 데이터에만 정확히 맞춰지고, 어떤 데이터들에 대해서는 전혀 맞춰지지 않는 경우가 발생합니다.

즉, 10만큼 멀리있으면 10만큼의 오차값을 추가하는 것이 아니라, 100만큼의 오차값을 줌으로써 최대한 직선을 많은 데이터에 맞출 수 있게 돕는 역할을 해 주는 것입니다.

 

 

 

최종 식

결국, 최종적인 식은 다음과 같은 형태가 됩니다.

이 때, 특정 H(x)에 대한 Cost function을 위와 같이, Cost(W,b) 라고 씁니다.

 

자, 그럼 이제 우리의 다음 목표는, cost값을 최소화 시키는 방법을 찾는 것입니다.

결국, cost값이 낮아야 직선과 데이터의 거리가 최소화 되는 것이고,

결국 데이터와 가장 잘 맞는 직선이 나타날테니까요.

 

다음 포스팅에서는, cost값을 최소화시키는 방법에 대해서 알아보도록 하겠습니다.

 

 

 

 

 

확인문제 1. Cost function을 H(x) - y 로 설정하지 않는 이유는?

 

확인문제 2. Cost function에서, H(x) - y 의 값을 제곱하는 이유는?

 

확인문제 3. 위에서 설명한 Cost function을 사용하고,

데이터 (x,y) = { (1, 5), (2, 4), (3,2) }, 가설함수 H(x) = 2x - 1 라고 할 때 Cost값은?

 

 

답이 아리송한게 있다면, 댓글 남겨주세요!

+ Recent posts