주니어 개발자의 대나무숲
[머신러닝/개념] linear regression(선형 회귀) 본문
linear regression은 가장 기본적인 머신러닝의 기법 중 하나로, 데이터를 선형 상관 관계로 모델링해 우리가 알고자 하는 값을 예측해내는 방식입니다. 간단한 예시를 통해 linear regression이 무엇인지 알아보도록 하겠습니다.
<일 평균 공부 시간에 따른 학점 분포>
(출처 : https://medium.com/simple-ai/linear-regression-intro-to-machine-learning-6-6e320dbdaf06)
1. Data (데이터)
위 그래프의 가로축을 x, 세로축을 y라고 했을 때 data(빨간 점) 은 다음과 같은 의미를 갖습니다.
우리가 linear regression을 이용해서 풀고자 하는 문제는 'x의 값을 알 때, y의 값은 어떻게 될 것인가?' 입니다. 즉, 내가 하루 평균 이만큼 공부했을 때, 내 학점이 어 정도가 될지를 예측해보고자 하는 것입니다.
2. Hypothesis (가설)
위의 그래프에서 알 수 있듯이 (또한 상식적으로 생각했을 때 그럴 것이라고 예측되듯이), y의 값은 x에 비례하는 것으로 보입니다. 하지만, y의 값이 x에 완벽히 비례하는 것이 아니라 위로 약간 치우쳐진 것을 그래프에서 확인할 수 있습니다. 따라서, 우리는 x와 y의 관계가 아래와 같을 것이라고 가설을 세울 수 있습니다.
y가 x에 어느 정도 비례하는 것으로 볼 수 있기 때문에 W(weight) 라는 비례 상수를 x에 곱해줍니다. 하지만, 완벽한 비례 관계가 아니라 약간 치우쳐 있기 때문에 b(bias)를 더해준 값이 y가 될 것이라고 예측해볼 수 있습니다. 이제 우리는 data와의 오차가 가장 적어질 수 있는 W와 b를 구함으로서, 일 평균 공부 시간을 이용해 학점을 예측할 수 있게 될 것입니다.
3. Cost function (Loss function, 비용 함수)
우리가 기대하는 바는 2의 가설이 예측한 값과 실제 값의 오차가 가장 작아지는 W와 b를 구하는 것입니다. 우리가 예측한 값 Wx+b과 실제 값 y 의 오차는 (Wx+b) - y로 나타낼 수 있는데, 이렇게만 나타내면 음수의 오차(예측한 값이 실제 값보다 작은 경우)가 양수의 오차(예측한 값이 실제 값보다 큰 경우)를 상쇄시킬 수 있습니다. 따라서, 실제 값에 대한 예측 값의 오차를 제곱한 값을 줄이는 방향으로 W와 b를 구하게 됩니다. 이 때, 우리가 줄이고자 하는 값. 즉, (실제 값에 대한 예측 값의 오차를 제곱한 값) 의 합을 우리의 Cost function (아래의 식)이라고 할 수 있습니다. linear regression 뿐만 아니라 다른 regression들에서도 이와 같이 cost 를 최소로 만드는 W와 b를 구해서 데이터를 모델링하고, 이를 통해 우리가 궁금해하는 어떤 값을 예측하게 됩니다.
4. Optimization (최적화)
(출처 : https://machinelearning-blog.com/2018/02/28/gradient-descent/)
3의 cost function은 위의 그래프와 같은 모양을 갖습니다. 따라서, 우리가 구하고자 하는 모델의 W와 b값을 알기 위해서는 cost가 최소가 되는 빨간 점에서의 W와 b를 구해야 할 것입니다. 이 W와 b값을 구하기 위해, Gradient Descent Method(경사하강법) 이라는 방법을 이용할 수 있습니다. Gradient Descent Method를 이해하기 위해서는 gradient가 무엇인지를 이해할 필요가 있습니다.
어떤 다변수 함수 의 gradient는 아래와 같이 각 변수에 대해 편미분한 값들의 벡터로 정의됩니다.
이 때, 이 벡터는 어떤 방향을 가리키게 될까요? 이 벡터는 f의 값이 가장 급하게 증가하는 방향을 가리키게 됩니다. 그렇다면, gradient에 -를 붙인 벡터(반대 방향을 가리키는 벡터)는 어떤 의미를 갖게 될까요? 당연히, 가장 급하게 감소하는 방향을 가리키게 되겠죠? 이를 이용하면, 위의 빨간 점을 향해 갈 수 있습니다.
예를 들어, 장님이 산을 가장 빨리 내려가는 방법을 찾고 있다고 합시다. 장님은 손에 쥔 막대기를 사방으로 뻗으면서 주변의 지형을 파악하려고 하겠죠? 산에서 가장 빨리 내려가려면 어디로 가야할까요? 경사가 가장 급하게 내려가는, 즉 산의 높이가 가장 급하게 감소하는 방향으로 가야하겠죠? Gradient Descent Method는 이렇게 gradient를 이용해 가장 경사가 급하게 하강하는 방향을 향해 나아가게 됩니다. 이를 수식으로 나타내면 다음과 같습니다.
라고 할 때,
입니다. 위의 수식에 따라 를 update하는 iteration을 하다가 stopping criteria에 따라 iteration을 멈추게 됩니다. (stopping criteria는 여러가지 구현 방식이 있으므로 gradient descent stopping criteria라고 검색하면 많은 답변을 확인하실 수 있습니다!) 근데, 위의 수식에서 는 무엇을 의미하는 것일까요? 는 learning rate라는 것으로 의 수렴 속도를 조절하는 상수값입니다. 위의 장님이 산을 내려가는 예시에 빗대어 설명하자면, 장님의 보폭 이라고 할 수 있습니다. 한 마디로, 지팡이를 이용해 경사가 가장 급한 방향으로 가도록 하는 것이 gradient이고, 이 방향으로 어느 정도의 보폭으로 갈 지 정해주는 것이 learning rate가 되는 것입니다.
5. Prediction (예측)
4의 최적화 과정을 통해 W와 b를 구하고 나면 우리는 일 평균 공부시간을 통해 학점을 예측해주는 모델을 구하게 된 것입니다. 만약, 4의 과정을 통해 구한 W가 2.5이고 b가 0.2라면 우리가 구한 모델은
가 될 것입니다. 이 때, 우리의 일평균 공부시간이 0.8시간이라면 학점은 몇 점이 되는 것일까요? 이를 구하기 위해서는 위 식의 x자리에 0.8을 대입해, y를 계산해주면 됩니다. (계산하면 2.2가 되겠죠?)
<참고>
1. 다크 프로그래머 블로그 (http://darkpgmr.tistory.com/133)
2. 위키피디아 (https://ko.wikipedia.org/wiki/%EC%84%A0%ED%98%95_%ED%9A%8C%EA%B7%80)
3. 조대협의 블로그 (http://bcho.tistory.com/1208?category=555440)
'머신러닝' 카테고리의 다른 글
[머신러닝/실습] Tensorflow 기본 (0) | 2017.07.30 |
---|---|
[머신러닝/개념] 머신러닝 기본 개념 및 용어 (2) | 2017.07.29 |