선형회귀란?

가장 간단 + 딥러닝의 기초가 되는 머신러닝 알고리즘으로,
데이터들을 가장 잘 표현하는 1차 함수식을 만드는 것이다. 

(이번 포스팅에서는 기초적인 내용의 이해를 위해 "특성이 1개"인 모델에 대해 이야기 한다.)

일반적으로 우리가 아는 1차 함수식은 
y = a*x + b의 형태

이것을 머신러닝에서 쓰는 방식으로 바꾸면
y_hat = W*x + b이다.
(선형함수식이라고 표현을 한다.)

x: 입력값
y: 타겟값
W: 가중치
b: 절편

1차 함수식을 y와 x에 대한 식으로 이해를 하듯이
위 식을 W와 y_hat에 대한 식으로 이해를 하면 된다.  

왜 y가 아니라 y_hat?

y와 y_hat의 차이점을 설명하자면,  
y는 이미 우리가 가지고 있는 정답이라고 볼 수 있고, 
 y_hat은 y를 예측하기 위해 입력값 x에 가중치를 곱하고 절편을 더하여 계산한 값(W*x + b)
이라고 볼 수 있다.

 

※선형회귀의 목표

y_hat이 y에 가장 가까워질 수 있는 가중치(W)와 절편(b)을 찾는것

 

선형회귀 구현

절편(b)과 기울기(W)를 찾기 위해서는 어떤 방법을 사용해야할까?

경사하강법(Gradient Descent)을 통해서!!

경사하강법이란,
모델이 데이터를 잘 표현할 수 있도록 "기울기(변화율)"를 사용하여 모델을 조금씩 조정하는 것

<주의!!>
하지만, 회귀문제(알맞은 기울기와 절편을 찾는 것)를 풀기 위해서
'경사하강법'이 유일한 것은 아니다!

다른 방법으로는  
정규방정식(Normal Equation), 결정트리(Decision Tree), 서포트 벡터 머신(Support Vector Machine)
등이 있다.


※ 가중치(W)와 절편(b)을 찾는 방법

1. 무작위 W, b 생성 
2. x에서 샘플 1개를 꺼내 y_hat계산 
3. y와 y_hat 비교 
4. y와 y_hat이 가까워지도록 W, b 조정 
5. 2~4 반복(이때, 2~4의 과정을 한바퀴 도는 것을 에포크(epoch)라고 부른다.) 


직관적으로 이해가 잘 가기는 하지만,
y와 y_hat을 어떻게 가까워지도록 할 것인지
에 대해서는 의문이 남는다.  

이것을 해결하기 위한 방법이 '경사하강법'이라는 것이고, 
경사하강법은 '기울기(변화율)'를 통해서 이 문제를 해결하는 것이라고 보면 된다. 

그렇다면, 기울기(변화율)를 어떻게 이용을 하는 것일까? 


일단, W와 b의 변화율을 구하기 위해
위의 선형 함수에서  W, b의 변화율은 식을 W, b로 미분을 한 값
→ w_rate = x 
    b_rate = 1  

하지만, 여기에서 바로 끝나지 않고
y와 y_hat의 차이, 즉, 오차율(y - y_hat)을 변화율에 곱하여 가중치와 절편을 업데이트해준다.

이 값을 각각 W와 b에 더해주면, (W, b 업데이트)
W = W + w_rate * (y - y_hat)
b = b + b_rate * (y - y_hat)

y - y_hat(오차율)을 변화율에 곱해주는 이유:

1. W와 b의 수정폭을 오차 값에 따라 더 알맞게 조정할 수 있다.
2. y_hat의 값에 상관없이 W, b는 항상 오차가 작아지는 방향으로 이동하게 된다. 

이렇게,
W와 b에 각각의 변화율과 오차율을 곱한 값을 더해 업데이트를 하는 것을
'오차 역전파(backpropagation)'이라고 한다.

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기